1
0
Fork 0
mirror of https://github.com/geometer/FBReaderJ.git synced 2025-10-05 19:42:17 +02:00

code simplification

This commit is contained in:
Nikolay Pultsin 2011-07-15 14:54:54 +01:00
parent 792b2a2258
commit e3debc9956
13 changed files with 100 additions and 143 deletions

View file

@ -46,7 +46,7 @@ import org.geometerplus.android.fbreader.BookInfoActivity;
import org.geometerplus.android.fbreader.tree.BaseActivity;
import org.geometerplus.android.fbreader.tree.ListAdapter;
public class LibraryActivity extends BaseActivity implements MenuItem.OnMenuItemClickListener {
public class LibraryActivity extends BaseActivity implements MenuItem.OnMenuItemClickListener, View.OnCreateContextMenuListener {
public static final String TREE_KEY_KEY = "TreeKey";
public static final String SELECTED_BOOK_PATH_KEY = "SelectedBookPath";
@ -89,6 +89,8 @@ public class LibraryActivity extends BaseActivity implements MenuItem.OnMenuItem
final ListAdapter adapter = new LibraryListAdapter(this, getCurrentTree().subTrees());
setSelection(adapter.getFirstSelectedItemIndex());
getListView().setTextFilterEnabled(true);
getListView().setOnCreateContextMenuListener(this);
}
@Override
@ -279,46 +281,6 @@ public class LibraryActivity extends BaseActivity implements MenuItem.OnMenuItem
}
}
//
// Item icons
//
@Override
public int getCoverResourceId(FBTree tree) {
if (((LibraryTree)tree).getBook() != null) {
return R.drawable.ic_list_library_book;
} else if (tree instanceof FirstLevelTree) {
final String id = tree.getUniqueKey().Id;
if (Library.ROOT_FAVORITES.equals(id)) {
return R.drawable.ic_list_library_favorites;
} else if (Library.ROOT_RECENT.equals(id)) {
return R.drawable.ic_list_library_recent;
} else if (Library.ROOT_BY_AUTHOR.equals(id)) {
return R.drawable.ic_list_library_authors;
} else if (Library.ROOT_BY_TITLE.equals(id)) {
return R.drawable.ic_list_library_books;
} else if (Library.ROOT_BY_TAG.equals(id)) {
return R.drawable.ic_list_library_tags;
} else if (Library.ROOT_FILE_TREE.equals(id)) {
return R.drawable.ic_list_library_folder;
}
} else if (tree instanceof FileTree) {
final ZLFile file = ((FileTree)tree).getFile();
if (file.isArchive()) {
return R.drawable.ic_list_library_zip;
} else if (file.isDirectory() && file.isReadable()) {
return R.drawable.ic_list_library_folder;
} else {
return R.drawable.ic_list_library_permission_denied;
}
} else if (tree instanceof AuthorTree) {
return R.drawable.ic_list_library_author;
} else if (tree instanceof TagTree) {
return R.drawable.ic_list_library_tag;
}
return R.drawable.ic_list_library_books;
}
//
// Book deletion
//

View file

@ -27,12 +27,14 @@ import android.widget.*;
import org.geometerplus.zlibrary.core.image.ZLImage;
import org.geometerplus.zlibrary.core.image.ZLLoadableImage;
import org.geometerplus.zlibrary.core.filesystem.ZLFile;
import org.geometerplus.zlibrary.ui.android.image.ZLAndroidImageData;
import org.geometerplus.zlibrary.ui.android.image.ZLAndroidImageManager;
import org.geometerplus.zlibrary.ui.android.R;
import org.geometerplus.fbreader.tree.FBTree;
import org.geometerplus.fbreader.library.*;
import org.geometerplus.android.fbreader.tree.BaseActivity;
import org.geometerplus.android.fbreader.tree.ListAdapter;
@ -110,9 +112,45 @@ class LibraryListAdapter extends ListAdapter {
if (coverBitmap != null) {
coverView.setImageBitmap(coverBitmap);
} else {
coverView.setImageResource(getActivity().getCoverResourceId(tree));
coverView.setImageResource(getCoverResourceId(tree));
}
return view;
}
private int getCoverResourceId(FBTree tree) {
if (((LibraryTree)tree).getBook() != null) {
return R.drawable.ic_list_library_book;
} else if (tree instanceof FirstLevelTree) {
final String id = tree.getUniqueKey().Id;
if (Library.ROOT_FAVORITES.equals(id)) {
return R.drawable.ic_list_library_favorites;
} else if (Library.ROOT_RECENT.equals(id)) {
return R.drawable.ic_list_library_recent;
} else if (Library.ROOT_BY_AUTHOR.equals(id)) {
return R.drawable.ic_list_library_authors;
} else if (Library.ROOT_BY_TITLE.equals(id)) {
return R.drawable.ic_list_library_books;
} else if (Library.ROOT_BY_TAG.equals(id)) {
return R.drawable.ic_list_library_tags;
} else if (Library.ROOT_FILE_TREE.equals(id)) {
return R.drawable.ic_list_library_folder;
}
} else if (tree instanceof FileTree) {
final ZLFile file = ((FileTree)tree).getFile();
if (file.isArchive()) {
return R.drawable.ic_list_library_zip;
} else if (file.isDirectory() && file.isReadable()) {
return R.drawable.ic_list_library_folder;
} else {
return R.drawable.ic_list_library_permission_denied;
}
} else if (tree instanceof AuthorTree) {
return R.drawable.ic_list_library_author;
} else if (tree instanceof TagTree) {
return R.drawable.ic_list_library_tag;
}
return R.drawable.ic_list_library_books;
}
}

View file

@ -37,13 +37,12 @@ import org.geometerplus.zlibrary.ui.android.image.ZLAndroidImageManager;
import org.geometerplus.zlibrary.ui.android.image.ZLAndroidImageData;
import org.geometerplus.zlibrary.ui.android.network.SQLiteCookieDatabase;
import org.geometerplus.fbreader.tree.FBTree;
import org.geometerplus.fbreader.network.NetworkTree;
import org.geometerplus.fbreader.network.tree.NetworkBookTree;
import org.geometerplus.fbreader.network.tree.AddCustomCatalogItemTree;
import org.geometerplus.fbreader.network.tree.SearchItemTree;
import org.geometerplus.android.fbreader.tree.ZLAndroidTree;
abstract class NetworkBaseActivity extends ListActivity implements NetworkView.EventListener {
protected static final int BASIC_AUTHENTICATION_CODE = 1;
protected static final int CUSTOM_AUTHENTICATION_CODE = 2;
@ -53,6 +52,16 @@ abstract class NetworkBaseActivity extends ListActivity implements NetworkView.E
public BookDownloaderServiceConnection Connection;
private FBTree myCurrentTree;
protected FBTree getCurrentTree() {
return myCurrentTree;
}
protected void setCurrentTree(FBTree tree) {
myCurrentTree = tree;
}
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
@ -112,19 +121,6 @@ abstract class NetworkBaseActivity extends ListActivity implements NetworkView.E
};
private void setupCover(final ImageView coverView, NetworkTree tree, int width, int height) {
if (tree instanceof AddCustomCatalogItemTree) {
coverView.setImageResource(R.drawable.ic_list_plus);
return;
}
if (tree instanceof SearchItemTree) {
coverView.setImageResource(R.drawable.ic_list_searchresult);
return;
}
if (tree instanceof ZLAndroidTree) {
coverView.setImageResource(((ZLAndroidTree)tree).getCoverResourceId());
return;
}
Bitmap coverBitmap = null;
ZLImage cover = tree.getCover();
if (cover != null) {
@ -148,6 +144,10 @@ abstract class NetworkBaseActivity extends ListActivity implements NetworkView.E
coverView.setImageBitmap(coverBitmap);
} else if (tree instanceof NetworkBookTree) {
coverView.setImageResource(R.drawable.ic_list_library_book);
} else if (tree instanceof AddCustomCatalogItemTree) {
coverView.setImageResource(R.drawable.ic_list_plus);
} else if (tree instanceof SearchItemTree) {
coverView.setImageResource(R.drawable.ic_list_searchresult);
} else {
coverView.setImageResource(R.drawable.ic_list_library_books);
}

View file

@ -60,14 +60,6 @@ class NetworkCatalogActions extends NetworkTreeActions {
return tree instanceof NetworkCatalogTree;
}
@Override
public String getTreeTitle(NetworkTree tree) {
if (tree instanceof NetworkCatalogRootTree) {
return tree.getName();
}
return tree.getName() + " - " + ((NetworkCatalogTree)tree).Item.Link.getSiteName();
}
@Override
public void buildContextMenu(Activity activity, ContextMenu menu, NetworkTree tree) {
final NetworkCatalogItem item = ((NetworkCatalogTree)tree).Item;

View file

@ -48,7 +48,6 @@ public class NetworkCatalogActivity extends NetworkBaseActivity implements UserR
return (NetworkCatalogActivity)tree.getUserData(ACTIVITY_BY_TREE_KEY);
}
private NetworkTree myTree;
private volatile boolean myInProgress;
@Override
@ -57,14 +56,14 @@ public class NetworkCatalogActivity extends NetworkBaseActivity implements UserR
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
myTree = Util.getTreeFromIntent(getIntent());
setCurrentTree(Util.getTreeFromIntent(getIntent()));
if (myTree == null) {
if (getCurrentTree() == null) {
finish();
return;
}
setForTree(myTree, this);
setForTree((NetworkTree)getCurrentTree(), this);
setListAdapter(new CatalogAdapter());
getListView().invalidateViews();
@ -73,8 +72,8 @@ public class NetworkCatalogActivity extends NetworkBaseActivity implements UserR
@Override
public void onCreateContextMenu(ContextMenu menu, View view, ContextMenu.ContextMenuInfo menuInfo) {
if (menuInfo == null && myTree instanceof NetworkCatalogTree) {
final INetworkLink link = ((NetworkCatalogTree)myTree).Item.Link;
if (menuInfo == null && getCurrentTree() instanceof NetworkCatalogTree) {
final INetworkLink link = ((NetworkCatalogTree)getCurrentTree()).Item.Link;
if (Util.isTopupSupported(this, link)) {
final TopupActions actions = NetworkView.Instance().getTopupActions();
if (actions != null) {
@ -88,8 +87,8 @@ public class NetworkCatalogActivity extends NetworkBaseActivity implements UserR
@Override
public boolean onContextItemSelected(MenuItem item) {
if ((item == null || item.getMenuInfo() == null) && myTree instanceof NetworkCatalogTree) {
final INetworkLink link = ((NetworkCatalogTree)myTree).Item.Link;
if ((item == null || item.getMenuInfo() == null) && getCurrentTree() instanceof NetworkCatalogTree) {
final INetworkLink link = ((NetworkCatalogTree)getCurrentTree()).Item.Link;
if (Util.isTopupSupported(this, link)) {
final TopupActions actions = NetworkView.Instance().getTopupActions();
if (actions != null && TopupActions.runAction(this, link, item.getItemId())) {
@ -155,34 +154,23 @@ public class NetworkCatalogActivity extends NetworkBaseActivity implements UserR
break;
case CUSTOM_AUTHENTICATION_CODE:
Util.processCustomAuthentication(
this, ((NetworkCatalogTree)myTree).Item.Link, resultCode, data
this, ((NetworkCatalogTree)getCurrentTree()).Item.Link, resultCode, data
);
break;
case SIGNUP_CODE:
Util.processSignup(((NetworkCatalogTree)myTree).Item.Link, resultCode, data);
Util.processSignup(((NetworkCatalogTree)getCurrentTree()).Item.Link, resultCode, data);
break;
}
}
private final void setupTitle() {
String title = null;
final NetworkView networkView = NetworkView.Instance();
if (networkView.isInitialized()) {
final NetworkTreeActions actions = networkView.getActions(myTree);
if (actions != null) {
title = actions.getTreeTitle(myTree);
}
}
if (title == null) {
title = myTree.getName();
}
setTitle(title);
setTitle(getCurrentTree().getTreeTitle());
setProgressBarIndeterminateVisibility(myInProgress);
}
@Override
public void onDestroy() {
setForTree(myTree, null);
setForTree((NetworkTree)getCurrentTree(), null);
super.onDestroy();
}
@ -194,14 +182,14 @@ public class NetworkCatalogActivity extends NetworkBaseActivity implements UserR
private final class CatalogAdapter extends BaseAdapter {
public final int getCount() {
return myTree.subTrees().size();
return getCurrentTree().subTrees().size();
}
public final NetworkTree getItem(int position) {
if (position < 0 || position >= myTree.subTrees().size()) {
if (position < 0 || position >= getCurrentTree().subTrees().size()) {
return null;
}
return (NetworkTree)myTree.subTrees().get(position);
return (NetworkTree)getCurrentTree().subTrees().get(position);
}
public final long getItemId(int position) {
@ -215,7 +203,7 @@ public class NetworkCatalogActivity extends NetworkBaseActivity implements UserR
void onModelChanged() {
notifyDataSetChanged();
for (FBTree child : myTree.subTrees()) {
for (FBTree child : getCurrentTree().subTrees()) {
if (child instanceof TopUpTree) {
child.invalidateChildren();
}
@ -238,7 +226,7 @@ public class NetworkCatalogActivity extends NetworkBaseActivity implements UserR
public void onModelChanged() {
runOnUiThread(new Runnable() {
public void run() {
final NetworkTree tree = getLoadableNetworkTree(myTree);
final NetworkTree tree = getLoadableNetworkTree((NetworkTree)getCurrentTree());
myInProgress =
tree != null &&
ItemsLoadingService.getRunnable(tree) != null;
@ -266,7 +254,7 @@ public class NetworkCatalogActivity extends NetworkBaseActivity implements UserR
}
private void doStopLoading() {
final ItemsLoader runnable = ItemsLoadingService.getRunnable(myTree);
final ItemsLoader runnable = ItemsLoadingService.getRunnable((NetworkTree)getCurrentTree());
if (runnable != null) {
runnable.interruptLoading();
}
@ -275,18 +263,18 @@ public class NetworkCatalogActivity extends NetworkBaseActivity implements UserR
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
return NetworkView.Instance().createOptionsMenu(menu, myTree);
return NetworkView.Instance().createOptionsMenu(menu, (NetworkTree)getCurrentTree());
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
return NetworkView.Instance().prepareOptionsMenu(this, menu, myTree);
return NetworkView.Instance().prepareOptionsMenu(this, menu, (NetworkTree)getCurrentTree());
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (NetworkView.Instance().runOptionsMenu(this, item, myTree)) {
if (NetworkView.Instance().runOptionsMenu(this, item, (NetworkTree)getCurrentTree())) {
return true;
}
return super.onOptionsItemSelected(item);

View file

@ -77,7 +77,6 @@ public class NetworkLibraryActivity extends NetworkBaseActivity {
);
}
private NetworkTree myTree;
private volatile Intent myIntent;
@Override
@ -122,8 +121,8 @@ public class NetworkLibraryActivity extends NetworkBaseActivity {
}
void prepareView() {
if (myTree == null) {
myTree = NetworkLibrary.Instance().getRootTree();
if (getCurrentTree() == null) {
setCurrentTree(NetworkLibrary.Instance().getRootTree());
setListAdapter(new LibraryAdapter());
getListView().invalidateViews();
}
@ -161,11 +160,11 @@ public class NetworkLibraryActivity extends NetworkBaseActivity {
if (!NetworkView.Instance().isInitialized()) {
return 0;
}
return myTree.subTrees().size();
return getCurrentTree().subTrees().size();
}
public final NetworkTree getItem(int position) {
return (NetworkTree)myTree.subTrees().get(position);
return (NetworkTree)getCurrentTree().subTrees().get(position);
}
public final long getItemId(int position) {

View file

@ -97,10 +97,6 @@ abstract class NetworkTreeActions {
public abstract boolean canHandleTree(NetworkTree tree);
public String getTreeTitle(NetworkTree tree) {
return tree.getName();
}
public abstract void buildContextMenu(Activity activity, ContextMenu menu, NetworkTree tree);
public abstract int getDefaultActionCode(NetworkBaseActivity activity, NetworkTree tree);

View file

@ -37,15 +37,6 @@ class SearchItemActions extends NetworkTreeActions {
return tree instanceof SearchItemTree;
}
@Override
public String getTreeTitle(NetworkTree tree) {
final SearchResult result = ((SearchItemTree)tree).getSearchResult();
if (result != null) {
return result.Summary;
}
return tree.getName();
}
@Override
public void buildContextMenu(Activity activity, ContextMenu menu, NetworkTree tree) {
menu.setHeaderTitle(tree.getName());

View file

@ -29,15 +29,13 @@ import org.geometerplus.android.util.UIUtil;
import org.geometerplus.fbreader.tree.FBTree;
public abstract class BaseActivity extends ListActivity implements View.OnCreateContextMenuListener {
public abstract class BaseActivity extends ListActivity {
private FBTree myCurrentTree;
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
Thread.setDefaultUncaughtExceptionHandler(new org.geometerplus.zlibrary.ui.android.library.UncaughtExceptionHandler(this));
getListView().setOnCreateContextMenuListener(this);
}
@Override
@ -53,7 +51,6 @@ public abstract class BaseActivity extends ListActivity implements View.OnCreate
myCurrentTree = tree;
}
public abstract int getCoverResourceId(FBTree tree);
public abstract boolean isTreeSelected(FBTree tree);
@Override

View file

@ -1,24 +0,0 @@
/*
* Copyright (C) 2010-2011 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.tree;
public interface ZLAndroidTree {
int getCoverResourceId();
}

View file

@ -25,4 +25,9 @@ public class NetworkCatalogRootTree extends NetworkCatalogTree {
public NetworkCatalogRootTree(RootTree parent, INetworkLink link, int position) {
super(parent, (NetworkCatalogItem)link.libraryItem(), position);
}
@Override
public String getTreeTitle() {
return getName();
}
}

View file

@ -53,6 +53,11 @@ public class NetworkCatalogTree extends NetworkTree {
return summary != null ? summary.toString() : "";
}
@Override
public String getTreeTitle() {
return getName() + " - " + Item.Link.getSiteName();
}
@Override
protected ZLImage createCover() {
return createCover(Item);

View file

@ -46,6 +46,14 @@ public class SearchItemTree extends NetworkTree {
return ZLResource.resource("networkView").getResource("searchSummary").getValue();
}
@Override
public String getTreeTitle() {
if (myResult != null) {
return myResult.Summary;
}
return getName();
}
public void setSearchResult(SearchResult result) {
myResult = result;
clear();