1
0
Fork 0
mirror of https://github.com/geometer/FBReaderJ.git synced 2025-10-05 10:49:24 +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; package org.geometerplus.android.fbreader.network;
import java.util.List;
import android.app.*; import android.app.*;
import android.os.Bundle; import android.os.Bundle;
import android.view.*; 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.AddCustomCatalogItemTree;
import org.geometerplus.fbreader.network.tree.SearchItemTree; 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 BASIC_AUTHENTICATION_CODE = 1;
protected static final int CUSTOM_AUTHENTICATION_CODE = 2; protected static final int CUSTOM_AUTHENTICATION_CODE = 2;
protected static final int SIGNUP_CODE = 3; protected static final int SIGNUP_CODE = 3;
public BookDownloaderServiceConnection Connection; public BookDownloaderServiceConnection Connection;
private FBTree myCurrentTree;
protected FBTree getCurrentTree() {
return myCurrentTree;
}
protected void setCurrentTree(FBTree tree) {
myCurrentTree = tree;
}
@Override @Override
public void onCreate(Bundle icicle) { public void onCreate(Bundle icicle) {
super.onCreate(icicle); super.onCreate(icicle);
Thread.setDefaultUncaughtExceptionHandler(new org.geometerplus.zlibrary.ui.android.library.UncaughtExceptionHandler(this));
OLD_STYLE_FLAG = true;
SQLiteCookieDatabase.init(this); SQLiteCookieDatabase.init(this);

View file

@ -21,7 +21,6 @@ package org.geometerplus.android.fbreader.network;
import android.os.Bundle; import android.os.Bundle;
import android.view.*; import android.view.*;
import android.widget.BaseAdapter;
import android.content.Intent; import android.content.Intent;
import org.geometerplus.zlibrary.core.network.ZLNetworkManager; import org.geometerplus.zlibrary.core.network.ZLNetworkManager;
@ -60,8 +59,8 @@ public class NetworkCatalogActivity extends NetworkBaseActivity implements UserR
setForTree((NetworkTree)getCurrentTree(), this); setForTree((NetworkTree)getCurrentTree(), this);
setListAdapter(new CatalogAdapter()); setListAdapter(new NetworkLibraryAdapter(this, getCurrentTree().subTrees()));
getListView().invalidateViews();
setupTitle(); setupTitle();
} }
@ -131,37 +130,6 @@ public class NetworkCatalogActivity extends NetworkBaseActivity implements UserR
ZLNetworkManager.Instance().setCredentialsCreator(myCredentialsCreator); 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) { private static NetworkTree getLoadableNetworkTree(NetworkTree tree) {
while (tree instanceof NetworkAuthorTree || tree instanceof NetworkSeriesTree) { while (tree instanceof NetworkAuthorTree || tree instanceof NetworkSeriesTree) {
if (tree.Parent instanceof NetworkTree) { 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 * addEventListener() is called). Therefore CatalogAdapter will be set as
* adapter in onCreate() method before any calls to onModelChanged(). * 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(); setupTitle();
} }

View file

@ -101,7 +101,7 @@ class NetworkInitializer extends Handler {
if (myActivity instanceof NetworkLibraryActivity) { if (myActivity instanceof NetworkLibraryActivity) {
final NetworkLibraryActivity a = (NetworkLibraryActivity)myActivity; final NetworkLibraryActivity a = (NetworkLibraryActivity)myActivity;
a.startService(new Intent(a.getApplicationContext(), LibraryInitializationService.class)); a.startService(new Intent(a.getApplicationContext(), LibraryInitializationService.class));
a.prepareView(); // initialization is complete successfully a.onModelChanged(); // initialization is complete successfully
} }
} else { } else {
showTryAgainDialog(myActivity, (String)message.obj); // handle initialization error 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.Handler;
import android.os.Message; import android.os.Message;
import android.view.*; import android.view.*;
import android.widget.BaseAdapter;
import org.geometerplus.zlibrary.core.resources.ZLResource; import org.geometerplus.zlibrary.core.resources.ZLResource;
import org.geometerplus.zlibrary.core.network.ZLNetworkException; import org.geometerplus.zlibrary.core.network.ZLNetworkException;
@ -54,6 +53,24 @@ public class NetworkLibraryActivity extends NetworkBaseActivity {
setDefaultKeyMode(DEFAULT_KEYS_SEARCH_LOCAL); setDefaultKeyMode(DEFAULT_KEYS_SEARCH_LOCAL);
myIntent = getIntent(); 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 @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 @Override
public void onDestroy() { public void onDestroy() {
if (!NetworkView.Instance().isInitialized() && NetworkInitializer.Instance != null) { if (!NetworkView.Instance().isInitialized() && NetworkInitializer.Instance != null) {
@ -122,29 +112,6 @@ public class NetworkLibraryActivity extends NetworkBaseActivity {
super.onDestroy(); 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) { protected MenuItem addMenuItem(Menu menu, int index, String resourceKey, int iconId) {
final String label = NetworkLibrary.resource().getResource("menu").getResource(resourceKey).getValue(); final String label = NetworkLibrary.resource().getResource("menu").getResource(resourceKey).getValue();
return menu.add(0, index, Menu.NONE, label).setIcon(iconId); return menu.add(0, index, Menu.NONE, label).setIcon(iconId);
@ -253,6 +220,7 @@ public class NetworkLibraryActivity extends NetworkBaseActivity {
@Override @Override
public void onModelChanged() { public void onModelChanged() {
getListView().invalidateViews(); getListView().invalidateViews();
((NetworkLibraryAdapter)getListAdapter()).replaceAll(getCurrentTree().subTrees());
} }
private void refreshCatalogsList() { private void refreshCatalogsList() {

View file

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