package org.softeg.slartus.forpdaplus.listfragments.users;/* * Created by slinkin on 10.04.2014. */ import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.view.ContextMenu; import android.view.View; import android.widget.ExpandableListView; import com.afollestad.materialdialogs.MaterialDialog; import org.softeg.slartus.forpdaapi.Forum; import org.softeg.slartus.forpdaapi.IListItem; import org.softeg.slartus.forpdaapi.users.LeadUser; import org.softeg.slartus.forpdaapi.users.User; import org.softeg.slartus.forpdaapi.users.UsersApi; import org.softeg.slartus.forpdaplus.App; import org.softeg.slartus.forpdaplus.Client; import org.softeg.slartus.forpdaplus.MainActivity; import org.softeg.slartus.forpdaplus.R; import org.softeg.slartus.forpdaplus.classes.ForumUser; import org.softeg.slartus.forpdaplus.classes.MenuListDialog; import org.softeg.slartus.forpdaplus.classes.common.ExtUrl; import org.softeg.slartus.forpdaplus.db.CacheDbHelper; import org.softeg.slartus.forpdaplus.fragments.profile.ProfileFragment; import org.softeg.slartus.forpdaplus.listfragments.BaseExpandableListFragment; import org.softeg.slartus.forpdaplus.listfragments.ForumTopicsListFragment; import org.softeg.slartus.forpdaplus.listtemplates.ForumBrickInfo; import org.softeg.sqliteannotations.BaseDao; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; public class LeadersListFragment extends BaseExpandableListFragment { @Override public void onResume() { super.onResume(); removeArrow(); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); removeArrow(); } @Override protected boolean inBackground(boolean isRefresh) throws Throwable { mLoadResultList = new ArrayList<>(); ArrayList<LeadUser> users = UsersApi.getLeaders(Client.getInstance()); HashMap<String, ExpandableGroup> groups = new HashMap<>(); for (LeadUser user : users) { if (!groups.containsKey(user.getGroup())) { groups.put(user.getGroup(), new ExpandableGroup(user.getGroup(), user.getGroup())); mLoadResultList.add(groups.get(user.getGroup())); } groups.get(user.getGroup()).getChildren().add(user); } return true; } @Override protected void deliveryResult(boolean isRefresh) { mData.clear(); for (ExpandableGroup group : mLoadResultList) { mData.add(group); } } @Override public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { Object o = getAdapter().getChild(groupPosition, childPosition); if (o == null) return false; ProfileFragment.showProfile(((User) o).getId().toString(), ((User) o).getId().toString()); return true; } @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); ExpandableListView.ExpandableListContextMenuInfo info = (ExpandableListView.ExpandableListContextMenuInfo) menuInfo; int type = ExpandableListView.getPackedPositionType(info.packedPosition); int groupPosition = ExpandableListView.getPackedPositionGroup(info.packedPosition); int childPosition = ExpandableListView.getPackedPositionChild(info.packedPosition); // Show context menu for groups if (type == ExpandableListView.PACKED_POSITION_TYPE_GROUP) { // menu.setHeaderTitle("Group"); // menu.add(0, 0, 1, "Delete"); // Show context menu for children } else if (type == ExpandableListView.PACKED_POSITION_TYPE_CHILD) { Object o = getAdapter().getChild(groupPosition, childPosition); if (o == null) return; final LeadUser leadUser = ((LeadUser) o); final List<MenuListDialog> list = new ArrayList<>(); list.add(new MenuListDialog(getContext().getString(R.string.list_forums), new Runnable() { @Override public void run() { if (leadUser.isAllForumsOwner()) { MainActivity.showListFragment(new ForumBrickInfo().getName(), null); } else { CharSequence[] forumTitles = new CharSequence[leadUser.getForums().size()]; int i = 0; for (Forum f : leadUser.getForums()) { forumTitles[i++] = f.getTitle(); } new MaterialDialog.Builder(getContext()) .title(R.string.forums) .items(forumTitles) .itemsCallbackSingleChoice(-1, new MaterialDialog.ListCallbackSingleChoice() { @Override public boolean onSelection(MaterialDialog dialog, View view, int i, CharSequence forumTitles) { ForumTopicsListFragment.showForumTopicsList(getActivity(), leadUser.getForums().get(i).getId(), leadUser.getForums().get(i).getTitle()); return true; // allow selection } }) .show(); } } })); ForumUser.onCreateContextMenu(getContext(), list, leadUser.getId().toString(), leadUser.getNick().toString()); ExtUrl.showContextDialog(getContext(), null, list); } } @Override public void saveCache() throws Exception { CacheDbHelper cacheDbHelper = new CacheDbHelper(App.getContext()); SQLiteDatabase db = null; try { db = cacheDbHelper.getWritableDatabase(); BaseDao<LeadUser> baseDao = new BaseDao<>(App.getContext(), db, getListName(), LeadUser.class); baseDao.createTable(db); for (ExpandableGroup group : mData) { for (IListItem item : group.getChildren()) { ((LeadUser) item).fillCacheFields(); baseDao.insert((LeadUser) item); } } } finally { if (db != null) db.close(); } } @Override public void loadCache() throws IOException, IllegalAccessException, NoSuchFieldException, java.lang.InstantiationException { mCacheList.clear(); CacheDbHelper cacheDbHelper = new CacheDbHelper(App.getContext()); SQLiteDatabase db = null; try { db = cacheDbHelper.getReadableDatabase(); BaseDao<LeadUser> baseDao = new BaseDao<>(App.getContext(), db, getListName(), LeadUser.class); if (baseDao.isTableExists()) { HashMap<String, ExpandableGroup> groups = new HashMap<>(); for (LeadUser leadUser : baseDao.getAll()) { leadUser.fillFromCache(); if (!groups.containsKey(leadUser.getGroup())) { groups.put(leadUser.getGroup(), new ExpandableGroup(leadUser.getGroup(), leadUser.getGroup())); mCacheList.add(groups.get(leadUser.getGroup())); } } } } finally { if (db != null) db.close(); } } }