mirror of
https://github.com/geometer/FBReaderJ.git
synced 2025-10-04 18:29:23 +02:00
library code uniformization
This commit is contained in:
parent
3433318dc8
commit
8ed1bcaf30
8 changed files with 131 additions and 68 deletions
|
@ -175,7 +175,7 @@ abstract class BaseActivity extends ListActivity implements View.OnCreateContext
|
||||||
if (info != null && info.Action != null) {
|
if (info != null && info.Action != null) {
|
||||||
info.Action.run();
|
info.Action.run();
|
||||||
} else {
|
} else {
|
||||||
new OpenTreeRunnable(tree).run();
|
new OpenTreeRunnable(tree, LibraryTreeActivity.class).run();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -333,21 +333,21 @@ abstract class BaseActivity extends ListActivity implements View.OnCreateContext
|
||||||
}
|
}
|
||||||
|
|
||||||
protected class OpenTreeRunnable implements Runnable {
|
protected class OpenTreeRunnable implements Runnable {
|
||||||
private final FBTree myTree;
|
private final LibraryTree myTree;
|
||||||
|
private final Class<?> myActivityClass;
|
||||||
|
|
||||||
public OpenTreeRunnable(FBTree tree) {
|
public OpenTreeRunnable(FBTree tree, Class<?> activityClass) {
|
||||||
myTree = tree;
|
myTree = (LibraryTree)tree;
|
||||||
|
myActivityClass = activityClass;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void run() {
|
public void run() {
|
||||||
if (LibraryInstance.hasState(Library.STATE_FULLY_INITIALIZED)) {
|
if (myTree.getOpeningStatus() == LibraryTree.Status.WAIT_FOR_OPEN) {
|
||||||
openTree();
|
|
||||||
} else {
|
|
||||||
UIUtil.runWithMessage(
|
UIUtil.runWithMessage(
|
||||||
BaseActivity.this, "loadingBookList",
|
BaseActivity.this, myTree.getOpeningStatusMessage(),
|
||||||
new Runnable() {
|
new Runnable() {
|
||||||
public void run() {
|
public void run() {
|
||||||
LibraryInstance.waitForState(Library.STATE_FULLY_INITIALIZED);
|
myTree.waitForOpening();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
new Runnable() {
|
new Runnable() {
|
||||||
|
@ -356,16 +356,25 @@ abstract class BaseActivity extends ListActivity implements View.OnCreateContext
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
} else {
|
||||||
|
openTree();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void openTree() {
|
protected void openTree() {
|
||||||
startActivityForResult(
|
switch (myTree.getOpeningStatus()) {
|
||||||
new Intent(BaseActivity.this, LibraryTreeActivity.class)
|
case READY_TO_OPEN:
|
||||||
.putExtra(SELECTED_BOOK_PATH_KEY, mySelectedBookPath)
|
startActivityForResult(
|
||||||
.putExtra(TREE_KEY_KEY, myTree.getUniqueKey()),
|
new Intent(BaseActivity.this, myActivityClass)
|
||||||
CHILD_LIST_REQUEST
|
.putExtra(SELECTED_BOOK_PATH_KEY, mySelectedBookPath)
|
||||||
);
|
.putExtra(TREE_KEY_KEY, myTree.getUniqueKey()),
|
||||||
|
CHILD_LIST_REQUEST
|
||||||
|
);
|
||||||
|
break;
|
||||||
|
case CANNOT_OPEN:
|
||||||
|
UIUtil.showErrorMessage(BaseActivity.this, myTree.getOpeningStatusMessage());
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,46 +42,19 @@ public class LibraryTopLevelActivity extends LibraryBaseActivity {
|
||||||
|
|
||||||
final ListAdapter adapter = new ListAdapter(this, new LinkedList<FBTree>());
|
final ListAdapter adapter = new ListAdapter(this, new LinkedList<FBTree>());
|
||||||
|
|
||||||
final RootTree rootFavorites = LibraryInstance.getRootTree(Library.ROOT_FAVORITES);
|
addTopLevelTree(Library.ROOT_FAVORITES, R.drawable.ic_list_library_favorites, LibraryTreeActivity.class);
|
||||||
addFBTreeWithInfo(
|
addTopLevelTree(Library.ROOT_RECENT, R.drawable.ic_list_library_recent, LibraryTreeActivity.class);
|
||||||
rootFavorites,
|
addTopLevelTree(Library.ROOT_BY_AUTHOR, R.drawable.ic_list_library_authors, LibraryTreeActivity.class);
|
||||||
R.drawable.ic_list_library_favorites,
|
addTopLevelTree(Library.ROOT_BY_TITLE, R.drawable.ic_list_library_books, LibraryTreeActivity.class);
|
||||||
new OpenTreeRunnable(rootFavorites) {
|
addTopLevelTree(Library.ROOT_BY_TAG, R.drawable.ic_list_library_tags, LibraryTreeActivity.class);
|
||||||
@Override
|
addTopLevelTree(Library.ROOT_FILE_TREE, R.drawable.ic_list_library_folder, FileManager.class);
|
||||||
protected void openTree() {
|
|
||||||
if (LibraryInstance.favorites().hasChildren()) {
|
|
||||||
super.openTree();
|
|
||||||
} else {
|
|
||||||
UIUtil.showErrorMessage(LibraryTopLevelActivity.this, "noFavorites");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
addTopLevelTree(Library.ROOT_RECENT, R.drawable.ic_list_library_recent);
|
|
||||||
addTopLevelTree(Library.ROOT_BY_AUTHOR, R.drawable.ic_list_library_authors);
|
|
||||||
addTopLevelTree(Library.ROOT_BY_TITLE, R.drawable.ic_list_library_books);
|
|
||||||
addTopLevelTree(Library.ROOT_BY_TAG, R.drawable.ic_list_library_tags);
|
|
||||||
final RootTree fileTreeRoot = LibraryInstance.getRootTree(Library.ROOT_FILE_TREE);
|
|
||||||
addFBTreeWithInfo(
|
|
||||||
fileTreeRoot,
|
|
||||||
R.drawable.ic_list_library_folder,
|
|
||||||
new Runnable() {
|
|
||||||
public void run() {
|
|
||||||
startActivity(
|
|
||||||
new Intent(LibraryTopLevelActivity.this, FileManager.class)
|
|
||||||
.putExtra(TREE_KEY_KEY, fileTreeRoot.getUniqueKey())
|
|
||||||
.putExtra(SELECTED_BOOK_PATH_KEY, mySelectedBookPath)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
onNewIntent(getIntent());
|
onNewIntent(getIntent());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addTopLevelTree(String key, int imageId) {
|
private void addTopLevelTree(String key, int imageId, Class<?> activityClass) {
|
||||||
final RootTree root = LibraryInstance.getRootTree(key);
|
final RootTree root = LibraryInstance.getRootTree(key);
|
||||||
addFBTreeWithInfo(root, imageId, new OpenTreeRunnable(root));
|
addFBTreeWithInfo(root, imageId, new OpenTreeRunnable(root, activityClass));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -97,7 +70,7 @@ public class LibraryTopLevelActivity extends LibraryBaseActivity {
|
||||||
adapter.add(0, mySearchResultsItem);
|
adapter.add(0, mySearchResultsItem);
|
||||||
getListView().invalidateViews();
|
getListView().invalidateViews();
|
||||||
adapter.notifyDataSetChanged();
|
adapter.notifyDataSetChanged();
|
||||||
new OpenTreeRunnable(mySearchResultsItem).run();
|
new OpenTreeRunnable(mySearchResultsItem, LibraryTreeActivity.class).run();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onNewIntent(Intent intent) {
|
public void onNewIntent(Intent intent) {
|
||||||
|
|
43
src/org/geometerplus/fbreader/library/FavoritesTree.java
Normal file
43
src/org/geometerplus/fbreader/library/FavoritesTree.java
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2009-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.fbreader.library;
|
||||||
|
|
||||||
|
import org.geometerplus.zlibrary.core.resources.ZLResource;
|
||||||
|
|
||||||
|
public class FavoritesTree extends RootTree {
|
||||||
|
FavoritesTree(Library library, String id) {
|
||||||
|
super(library, id);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Status getOpeningStatus() {
|
||||||
|
final Status status = super.getOpeningStatus();
|
||||||
|
if (status == Status.READY_TO_OPEN && !hasChildren()) {
|
||||||
|
return Status.CANNOT_OPEN;
|
||||||
|
}
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getOpeningStatusMessage() {
|
||||||
|
return getOpeningStatus() == Status.CANNOT_OPEN
|
||||||
|
? "noFavorites" : super.getOpeningStatusMessage();
|
||||||
|
}
|
||||||
|
}
|
|
@ -25,8 +25,8 @@ import org.geometerplus.zlibrary.core.filesystem.ZLFile;
|
||||||
import org.geometerplus.fbreader.Paths;
|
import org.geometerplus.fbreader.Paths;
|
||||||
|
|
||||||
public class FileRootTree extends RootTree {
|
public class FileRootTree extends RootTree {
|
||||||
FileRootTree(String id) {
|
FileRootTree(Library library, String id) {
|
||||||
super(id);
|
super(library, id);
|
||||||
addChild(Paths.BooksDirectoryOption().getValue(), "fileTreeLibrary");
|
addChild(Paths.BooksDirectoryOption().getValue(), "fileTreeLibrary");
|
||||||
addChild("/", "fileTreeRoot");
|
addChild("/", "fileTreeRoot");
|
||||||
addChild(Paths.cardDirectory(), "fileTreeCard");
|
addChild(Paths.cardDirectory(), "fileTreeCard");
|
||||||
|
@ -46,4 +46,9 @@ public class FileRootTree extends RootTree {
|
||||||
public String getTreeTitle() {
|
public String getTreeTitle() {
|
||||||
return getName();
|
return getName();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Status getOpeningStatus() {
|
||||||
|
return Status.READY_TO_OPEN;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,8 +33,8 @@ import org.geometerplus.fbreader.formats.PluginCollection;
|
||||||
import org.geometerplus.fbreader.Paths;
|
import org.geometerplus.fbreader.Paths;
|
||||||
|
|
||||||
public final class Library {
|
public final class Library {
|
||||||
public static final int STATE_NOT_INITIALIZED = 0;
|
static final int STATE_NOT_INITIALIZED = 0;
|
||||||
public static final int STATE_FULLY_INITIALIZED = 1;
|
static final int STATE_FULLY_INITIALIZED = 1;
|
||||||
|
|
||||||
public static final String ROOT_FAVORITES = "favorites";
|
public static final String ROOT_FAVORITES = "favorites";
|
||||||
public static final String ROOT_SEARCH_RESULTS = "searchResults";
|
public static final String ROOT_SEARCH_RESULTS = "searchResults";
|
||||||
|
@ -56,13 +56,14 @@ public final class Library {
|
||||||
private volatile boolean myInterrupted = false;
|
private volatile boolean myInterrupted = false;
|
||||||
|
|
||||||
public Library() {
|
public Library() {
|
||||||
myRootTrees.put(ROOT_FILE_TREE, new FileRootTree(ROOT_FILE_TREE));
|
myRootTrees.put(ROOT_FAVORITES, new FavoritesTree(this, ROOT_FAVORITES));
|
||||||
|
myRootTrees.put(ROOT_FILE_TREE, new FileRootTree(this, ROOT_FILE_TREE));
|
||||||
}
|
}
|
||||||
|
|
||||||
public RootTree getRootTree(String id) {
|
public RootTree getRootTree(String id) {
|
||||||
RootTree root = myRootTrees.get(id);
|
RootTree root = myRootTrees.get(id);
|
||||||
if (root == null) {
|
if (root == null) {
|
||||||
root = new RootTree(id);
|
root = new RootTree(this, id);
|
||||||
myRootTrees.put(id, root);
|
myRootTrees.put(id, root);
|
||||||
}
|
}
|
||||||
return root;
|
return root;
|
||||||
|
@ -79,11 +80,11 @@ public final class Library {
|
||||||
return parentTree != null ? (LibraryTree)parentTree.getSubTree(key.Id) : null;
|
return parentTree != null ? (LibraryTree)parentTree.getSubTree(key.Id) : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasState(int state) {
|
boolean hasState(int state) {
|
||||||
return myState >= state || myInterrupted;
|
return myState >= state || myInterrupted;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void waitForState(int state) {
|
void waitForState(int state) {
|
||||||
while (myState < state && !myInterrupted) {
|
while (myState < state && !myInterrupted) {
|
||||||
synchronized(this) {
|
synchronized(this) {
|
||||||
if (myState < state && !myInterrupted) {
|
if (myState < state && !myInterrupted) {
|
||||||
|
@ -400,18 +401,13 @@ public final class Library {
|
||||||
return (recentIds.size() > 1) ? Book.getById(recentIds.get(1)) : null;
|
return (recentIds.size() > 1) ? Book.getById(recentIds.get(1)) : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public LibraryTree favorites() {
|
|
||||||
waitForState(STATE_FULLY_INITIALIZED);
|
|
||||||
return getRootTree(ROOT_FAVORITES);
|
|
||||||
}
|
|
||||||
|
|
||||||
public LibraryTree searchResults() {
|
public LibraryTree searchResults() {
|
||||||
return getRootTree(ROOT_SEARCH_RESULTS);
|
return getRootTree(ROOT_SEARCH_RESULTS);
|
||||||
}
|
}
|
||||||
|
|
||||||
public LibraryTree searchBooks(String pattern) {
|
public LibraryTree searchBooks(String pattern) {
|
||||||
waitForState(STATE_FULLY_INITIALIZED);
|
waitForState(STATE_FULLY_INITIALIZED);
|
||||||
final RootTree newSearchResults = new SearchResultsTree(ROOT_SEARCH_RESULTS, pattern);
|
final RootTree newSearchResults = new SearchResultsTree(this, ROOT_SEARCH_RESULTS, pattern);
|
||||||
if (pattern != null) {
|
if (pattern != null) {
|
||||||
pattern = pattern.toLowerCase();
|
pattern = pattern.toLowerCase();
|
||||||
for (Book book : myBooks) {
|
for (Book book : myBooks) {
|
||||||
|
|
|
@ -24,6 +24,12 @@ import java.util.*;
|
||||||
import org.geometerplus.fbreader.tree.FBTree;
|
import org.geometerplus.fbreader.tree.FBTree;
|
||||||
|
|
||||||
public abstract class LibraryTree extends FBTree {
|
public abstract class LibraryTree extends FBTree {
|
||||||
|
public static enum Status {
|
||||||
|
READY_TO_OPEN,
|
||||||
|
WAIT_FOR_OPEN,
|
||||||
|
CANNOT_OPEN
|
||||||
|
};
|
||||||
|
|
||||||
protected LibraryTree() {
|
protected LibraryTree() {
|
||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
@ -36,6 +42,17 @@ public abstract class LibraryTree extends FBTree {
|
||||||
return getName();
|
return getName();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Status getOpeningStatus() {
|
||||||
|
return Status.READY_TO_OPEN;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getOpeningStatusMessage() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void waitForOpening() {
|
||||||
|
}
|
||||||
|
|
||||||
public Book getBook() {
|
public Book getBook() {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,10 +22,12 @@ package org.geometerplus.fbreader.library;
|
||||||
import org.geometerplus.zlibrary.core.resources.ZLResource;
|
import org.geometerplus.zlibrary.core.resources.ZLResource;
|
||||||
|
|
||||||
public class RootTree extends LibraryTree {
|
public class RootTree extends LibraryTree {
|
||||||
|
private final Library myLibrary;
|
||||||
private final String myId;
|
private final String myId;
|
||||||
private final ZLResource myResource;
|
private final ZLResource myResource;
|
||||||
|
|
||||||
RootTree(String id) {
|
RootTree(Library library, String id) {
|
||||||
|
myLibrary = library;
|
||||||
myId = id;
|
myId = id;
|
||||||
myResource = Library.resource().getResource(myId);
|
myResource = Library.resource().getResource(myId);
|
||||||
}
|
}
|
||||||
|
@ -49,4 +51,22 @@ public class RootTree extends LibraryTree {
|
||||||
protected String getStringId() {
|
protected String getStringId() {
|
||||||
return myId;
|
return myId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Status getOpeningStatus() {
|
||||||
|
return
|
||||||
|
myLibrary.hasState(Library.STATE_FULLY_INITIALIZED)
|
||||||
|
? Status.READY_TO_OPEN
|
||||||
|
: Status.WAIT_FOR_OPEN;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getOpeningStatusMessage() {
|
||||||
|
return "loadingBookList";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void waitForOpening() {
|
||||||
|
myLibrary.waitForState(Library.STATE_FULLY_INITIALIZED);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,8 +22,8 @@ package org.geometerplus.fbreader.library;
|
||||||
class SearchResultsTree extends RootTree {
|
class SearchResultsTree extends RootTree {
|
||||||
private final String myPattern;
|
private final String myPattern;
|
||||||
|
|
||||||
SearchResultsTree(String id, String pattern) {
|
SearchResultsTree(Library library, String id, String pattern) {
|
||||||
super(id);
|
super(library, id);
|
||||||
myPattern = pattern != null ? pattern : "";
|
myPattern = pattern != null ? pattern : "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue