/* * Copyright (C) 2010-2014 Geometer Plus <contact@geometerplus.com> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA. */ package org.geometerplus.android.fbreader.network; import java.util.*; import android.app.ListActivity; import android.content.Intent; import android.os.Bundle; import android.view.*; import android.widget.*; import com.mobeta.android.dslv.DragSortListView; import net.sourceforge.arabicReader.R; import org.geometerplus.fbreader.network.*; import org.geometerplus.android.fbreader.FBReader; import org.geometerplus.android.fbreader.covers.CoverManager; import org.geometerplus.android.util.ViewUtil; public class CatalogManagerActivity extends ListActivity { private final List<Item> myAllItems = new ArrayList<Item>(); private final List<Item> mySelectedItems = new ArrayList<Item>(); @Override protected void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.catalog_manager_view); } @Override protected void onStart() { super.onStart(); myAllItems.clear(); final Intent intent = getIntent(); myAllItems.add(new SectionItem("enabled")); final List<String> enabledIds = intent.getStringArrayListExtra(NetworkLibraryActivity.ENABLED_CATALOG_IDS_KEY); if (enabledIds.size() > 0) { final List<CatalogItem> cItems = new ArrayList<CatalogItem>(); for (String id : enabledIds) { final NetworkTree tree = NetworkLibrary.Instance().getCatalogTreeByUrlAll(id); if (tree != null && tree.getLink() != null) { cItems.add(new CatalogItem(id, true, tree)); } } myAllItems.addAll(cItems); mySelectedItems.addAll(cItems); } myAllItems.add(new SectionItem("disabled")); final List<String> disabledIds = intent.getStringArrayListExtra(NetworkLibraryActivity.DISABLED_CATALOG_IDS_KEY); if (disabledIds.size() > 0) { final TreeSet<CatalogItem> cItems = new TreeSet<CatalogItem>(); for (String id : disabledIds) { final NetworkTree tree = NetworkLibrary.Instance().getCatalogTreeByUrlAll(id); if (tree != null && tree.getLink() != null) { cItems.add(new CatalogItem(id, false, tree)); } } myAllItems.addAll(cItems); } setListAdapter(new CatalogsListAdapter()); } @Override public DragSortListView getListView() { return (DragSortListView)super.getListView(); } private static interface Item { } private static class SectionItem implements Item { private final String Title; public SectionItem(String key) { Title = NetworkLibrary.resource().getResource("manageCatalogs").getResource(key).getValue(); } } private static class CatalogItem implements Item, Comparable<CatalogItem> { private final String Id; private final NetworkTree Tree; private boolean IsChecked; public CatalogItem(String id, boolean checked, NetworkTree tree) { Id = id; IsChecked = checked; Tree = tree; } public String getTitle() { return Tree.getLink().getTitle(); } private String getTitleLower() { return getTitle().toLowerCase(Locale.getDefault()); } @Override public int compareTo(CatalogItem another) { return getTitleLower().compareTo(another.getTitleLower()); } } private class CatalogsListAdapter extends ArrayAdapter<Item> implements DragSortListView.DropListener, DragSortListView.RemoveListener { private CoverManager myCoverManager; public CatalogsListAdapter() { super(CatalogManagerActivity.this, R.layout.catalog_manager_item, myAllItems); } private int indexOfDisabledSectionItem() { for (int i = 1; i < getCount(); i++) { if (getItem(i) instanceof SectionItem) { return i; } } // should be impossible return 0; } private void setResultIds() { final ArrayList<String> ids = new ArrayList<String>(); for (int i = 1; i < getCount(); ++i) { final Item item = getItem(i); if (item instanceof SectionItem) { continue; } final CatalogItem catalogItem = (CatalogItem)item; if (catalogItem.IsChecked) { ids.add(catalogItem.Id); } } setResult(RESULT_OK, new Intent().putStringArrayListExtra(NetworkLibraryActivity.ENABLED_CATALOG_IDS_KEY, ids)); } @Override public View getView(int position, View convertView, final ViewGroup parent) { final Item item = getItem(position); final View view; if (convertView != null && item.getClass().equals(convertView.getTag())) { view = convertView; } else { view = getLayoutInflater().inflate( item instanceof SectionItem ? R.layout.catalog_manager_section_head : R.layout.catalog_manager_item, null ); view.setTag(item.getClass()); } if (item instanceof SectionItem) { ViewUtil.setSubviewText( view, R.id.catalog_manager_section_head_title, ((SectionItem)item).Title ); } else /* if (item instanceof CatalogItem) */ { final CatalogItem catalogItem = (CatalogItem)item; if (myCoverManager == null) { view.measure(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); final int coverHeight = view.getMeasuredHeight(); myCoverManager = new CoverManager(CatalogManagerActivity.this, coverHeight * 15 / 22, coverHeight); view.requestLayout(); } final INetworkLink link = catalogItem.Tree.getLink(); ViewUtil.setSubviewText(view, R.id.catalog_manager_item_title, link.getTitle()); ViewUtil.setSubviewText(view, R.id.catalog_manager_item_subtitle, link.getSummary()); final ImageView coverView = ViewUtil.findImageView(view, R.id.catalog_manager_item_icon); if (!myCoverManager.trySetCoverImage(coverView, catalogItem.Tree)) { coverView.setImageResource(R.drawable.ic_list_library_books); } final CheckBox checkBox = (CheckBox)ViewUtil.findView(view, R.id.catalog_manager_item_checkbox); checkBox.setChecked(catalogItem.IsChecked); checkBox.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { catalogItem.IsChecked = checkBox.isChecked(); setResultIds(); } }); } return view; } // method from DragSortListView.DropListener public void drop(int from, int to) { to = Math.max(to, 1); if (from == to) { return; } final Item item = getItem(from); if (item instanceof CatalogItem) { remove(item); insert(item, to); ((CatalogItem)item).IsChecked = to < indexOfDisabledSectionItem(); getListView().moveCheckState(from, to); setResultIds(); } } // method from DragSortListView.RemoveListener public void remove(int which) { final Item item = getItem(which); if (item instanceof CatalogItem) { remove(item); getListView().removeCheckState(which); } } } }