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

common base activity/adapter for library and network library

This commit is contained in:
Nikolay Pultsin 2011-07-15 23:38:56 +01:00
parent 2ab9bcf491
commit 7967269bcc
5 changed files with 53 additions and 99 deletions

View file

@ -19,6 +19,8 @@
package org.geometerplus.android.fbreader.network;
import java.util.List;
import android.app.*;
import android.os.Bundle;
import android.view.*;
@ -41,27 +43,32 @@ import org.geometerplus.fbreader.network.tree.NetworkBookTree;
import org.geometerplus.fbreader.network.tree.AddCustomCatalogItemTree;
import org.geometerplus.fbreader.network.tree.SearchItemTree;
abstract class NetworkBaseActivity extends ListActivity implements NetworkView.EventListener {
import org.geometerplus.android.fbreader.tree.BaseActivity;
import org.geometerplus.android.fbreader.tree.ListAdapter;
abstract class NetworkBaseActivity extends BaseActivity implements NetworkView.EventListener {
protected static class NetworkLibraryAdapter extends ListAdapter {
NetworkLibraryAdapter(NetworkBaseActivity activity, List<FBTree> items) {
super(activity, items);
}
public View getView(int position, View convertView, final ViewGroup parent) {
final NetworkTree tree = (NetworkTree)getItem(position);
return ((NetworkBaseActivity)getActivity()).setupNetworkTreeItemView(convertView, parent, tree);
}
}
protected static final int BASIC_AUTHENTICATION_CODE = 1;
protected static final int CUSTOM_AUTHENTICATION_CODE = 2;
protected static final int SIGNUP_CODE = 3;
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);
Thread.setDefaultUncaughtExceptionHandler(new org.geometerplus.zlibrary.ui.android.library.UncaughtExceptionHandler(this));
OLD_STYLE_FLAG = true;
SQLiteCookieDatabase.init(this);

View file

@ -21,7 +21,6 @@ package org.geometerplus.android.fbreader.network;
import android.os.Bundle;
import android.view.*;
import android.widget.BaseAdapter;
import android.content.Intent;
import org.geometerplus.zlibrary.core.network.ZLNetworkManager;
@ -60,8 +59,8 @@ public class NetworkCatalogActivity extends NetworkBaseActivity implements UserR
setForTree((NetworkTree)getCurrentTree(), this);
setListAdapter(new CatalogAdapter());
getListView().invalidateViews();
setListAdapter(new NetworkLibraryAdapter(this, getCurrentTree().subTrees()));
setupTitle();
}
@ -131,37 +130,6 @@ public class NetworkCatalogActivity extends NetworkBaseActivity implements UserR
ZLNetworkManager.Instance().setCredentialsCreator(myCredentialsCreator);
}
private final class CatalogAdapter extends BaseAdapter {
public final int getCount() {
return getCurrentTree().subTrees().size();
}
public final NetworkTree getItem(int position) {
if (position < 0 || position >= getCurrentTree().subTrees().size()) {
return null;
}
return (NetworkTree)getCurrentTree().subTrees().get(position);
}
public final long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, final ViewGroup parent) {
final NetworkTree tree = getItem(position);
return setupNetworkTreeItemView(convertView, parent, tree);
}
void onModelChanged() {
notifyDataSetChanged();
for (FBTree child : getCurrentTree().subTrees()) {
if (child instanceof TopUpTree) {
child.invalidateChildren();
}
}
}
}
private static NetworkTree getLoadableNetworkTree(NetworkTree tree) {
while (tree instanceof NetworkAuthorTree || tree instanceof NetworkSeriesTree) {
if (tree.Parent instanceof NetworkTree) {
@ -189,7 +157,12 @@ public class NetworkCatalogActivity extends NetworkBaseActivity implements UserR
* addEventListener() is called). Therefore CatalogAdapter will be set as
* adapter in onCreate() method before any calls to onModelChanged().
*/
((CatalogAdapter)getListAdapter()).onModelChanged();
((NetworkLibraryAdapter)getListAdapter()).replaceAll(getCurrentTree().subTrees());
for (FBTree child : getCurrentTree().subTrees()) {
if (child instanceof TopUpTree) {
child.invalidateChildren();
}
}
setupTitle();
}

View file

@ -101,7 +101,7 @@ class NetworkInitializer extends Handler {
if (myActivity instanceof NetworkLibraryActivity) {
final NetworkLibraryActivity a = (NetworkLibraryActivity)myActivity;
a.startService(new Intent(a.getApplicationContext(), LibraryInitializationService.class));
a.prepareView(); // initialization is complete successfully
a.onModelChanged(); // initialization is complete successfully
}
} else {
showTryAgainDialog(myActivity, (String)message.obj); // handle initialization error

View file

@ -29,7 +29,6 @@ import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.*;
import android.widget.BaseAdapter;
import org.geometerplus.zlibrary.core.resources.ZLResource;
import org.geometerplus.zlibrary.core.network.ZLNetworkException;
@ -54,6 +53,24 @@ public class NetworkLibraryActivity extends NetworkBaseActivity {
setDefaultKeyMode(DEFAULT_KEYS_SEARCH_LOCAL);
myIntent = getIntent();
setCurrentTree(NetworkLibrary.Instance().getRootTree());
setListAdapter(new NetworkLibraryAdapter(this, getCurrentTree().subTrees()));
if (!NetworkView.Instance().isInitialized()) {
if (NetworkInitializer.Instance == null) {
new NetworkInitializer(this);
NetworkInitializer.Instance.start();
} else {
NetworkInitializer.Instance.setActivity(this);
}
} else {
onModelChanged();
if (myIntent != null) {
processIntent(myIntent);
myIntent = null;
}
}
}
@Override
@ -87,33 +104,6 @@ public class NetworkLibraryActivity extends NetworkBaseActivity {
}
}
void prepareView() {
if (getCurrentTree() == null) {
setCurrentTree(NetworkLibrary.Instance().getRootTree());
setListAdapter(new LibraryAdapter());
getListView().invalidateViews();
}
}
@Override
public void onResume() {
super.onResume();
if (!NetworkView.Instance().isInitialized()) {
if (NetworkInitializer.Instance == null) {
new NetworkInitializer(this);
NetworkInitializer.Instance.start();
} else {
NetworkInitializer.Instance.setActivity(this);
}
} else {
prepareView();
if (myIntent != null) {
processIntent(myIntent);
myIntent = null;
}
}
}
@Override
public void onDestroy() {
if (!NetworkView.Instance().isInitialized() && NetworkInitializer.Instance != null) {
@ -122,29 +112,6 @@ public class NetworkLibraryActivity extends NetworkBaseActivity {
super.onDestroy();
}
private final class LibraryAdapter extends BaseAdapter {
public final int getCount() {
if (!NetworkView.Instance().isInitialized()) {
return 0;
}
return getCurrentTree().subTrees().size();
}
public final NetworkTree getItem(int position) {
return (NetworkTree)getCurrentTree().subTrees().get(position);
}
public final long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, final ViewGroup parent) {
final NetworkTree tree = getItem(position);
return setupNetworkTreeItemView(convertView, parent, tree);
}
}
protected MenuItem addMenuItem(Menu menu, int index, String resourceKey, int iconId) {
final String label = NetworkLibrary.resource().getResource("menu").getResource(resourceKey).getValue();
return menu.add(0, index, Menu.NONE, label).setIcon(iconId);
@ -253,6 +220,7 @@ public class NetworkLibraryActivity extends NetworkBaseActivity {
@Override
public void onModelChanged() {
getListView().invalidateViews();
((NetworkLibraryAdapter)getListAdapter()).replaceAll(getCurrentTree().subTrees());
}
private void refreshCatalogsList() {

View file

@ -53,8 +53,14 @@ public abstract class BaseActivity extends ListActivity {
public abstract boolean isTreeSelected(FBTree tree);
protected boolean OLD_STYLE_FLAG = false;
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (OLD_STYLE_FLAG) {
return super.onKeyDown(keyCode, event);
}
if (keyCode == KeyEvent.KEYCODE_BACK && myCurrentTree.Parent != null) {
final FBTree oldTree = myCurrentTree;
openTree(myCurrentTree.Parent);