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

code simplification; custom catalog editing

This commit is contained in:
Nikolay Pultsin 2011-02-28 07:32:06 +03:00
parent 2ebb665c94
commit 85dcdbd163
7 changed files with 66 additions and 72 deletions

View file

@ -42,6 +42,7 @@ import org.geometerplus.android.util.UIUtil;
public class AddCustomCatalogActivity extends Activity {
private ZLResource myResource;
private Integer myCatalogId;
private String myIcon;
@Override
public void onCreate(Bundle icicle) {
@ -77,13 +78,16 @@ public class AddCustomCatalogActivity extends Activity {
final Intent intent = getIntent();
final Uri uri = intent.getData();
myCatalogId = null;
myCatalogId = ICustomNetworkLink.INVALID_ID;
if (uri != null) {
if (intent.hasExtra(NetworkLibraryActivity.EDIT_CATALOG_ID_KEY)) {
myCatalogId = intent.getIntExtra(NetworkLibraryActivity.EDIT_CATALOG_ID_KEY, 0);
myCatalogId = intent.getIntExtra(
NetworkLibraryActivity.ADD_CATALOG_ID_KEY, myCatalogId
);
if (myCatalogId != ICustomNetworkLink.INVALID_ID) {
setTextById(R.id.add_custom_catalog_url, uri.toString());
setTextById(R.id.add_custom_catalog_title, intent.getStringExtra(NetworkLibraryActivity.ADD_CATALOG_TITLE_KEY));
setTextById(R.id.add_custom_catalog_summary, intent.getStringExtra(NetworkLibraryActivity.ADD_CATALOG_SUMMARY_KEY));
myIcon = intent.getStringExtra(NetworkLibraryActivity.ADD_CATALOG_ICON_KEY);
} else {
loadInfoByUri(uri);
}
@ -121,20 +125,19 @@ public class AddCustomCatalogActivity extends Activity {
} else if (isEmptyString(title)) {
setErrorByKey("titleIsEmpty");
} else {
final String action = myCatalogId == null ?
NetworkLibraryActivity.ADD_CATALOG : NetworkLibraryActivity.EDIT_CATALOG;
final Intent intent = new Intent(
action, uri,
AddCustomCatalogActivity.this,
NetworkLibraryActivity.class
)
.putExtra(NetworkLibraryActivity.ADD_CATALOG_TITLE_KEY, title)
.putExtra(NetworkLibraryActivity.ADD_CATALOG_SUMMARY_KEY, summary)
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
if (myCatalogId != null) {
intent.putExtra(NetworkLibraryActivity.EDIT_CATALOG_ID_KEY, (int)myCatalogId);
}
startActivity(intent);
startActivity(
new Intent(
NetworkLibraryActivity.ADD_CATALOG,
uri,
AddCustomCatalogActivity.this,
NetworkLibraryActivity.class
)
.putExtra(NetworkLibraryActivity.ADD_CATALOG_TITLE_KEY, title)
.putExtra(NetworkLibraryActivity.ADD_CATALOG_SUMMARY_KEY, summary)
.putExtra(NetworkLibraryActivity.ADD_CATALOG_ICON_KEY, myIcon)
.putExtra(NetworkLibraryActivity.ADD_CATALOG_ID_KEY, myCatalogId)
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP)
);
finish();
}
}
@ -245,7 +248,7 @@ public class AddCustomCatalogActivity extends Activity {
siteName = siteName.substring(4);
}
final ICustomNetworkLink link =
OPDSLinkReader.createCustomLink(siteName, null, null, textUrl);
OPDSLinkReader.createCustomLink(siteName, null, null, null, textUrl);
final Runnable loadInfoRunnable = new Runnable() {
private String myError;
@ -262,9 +265,11 @@ public class AddCustomCatalogActivity extends Activity {
if (myError == null) {
setTextById(R.id.add_custom_catalog_title, link.getTitle());
setTextById(R.id.add_custom_catalog_summary, link.getSummary());
myIcon = link.getIcon();
setExtraFieldsVisibility(true);
} else {
runErrorDialog(myError);
myIcon = null;
}
}
});

View file

@ -258,7 +258,8 @@ class NetworkCatalogActions extends NetworkTreeActions {
.setData(Uri.parse(textUrl))
.putExtra(NetworkLibraryActivity.ADD_CATALOG_TITLE_KEY, link.getTitle())
.putExtra(NetworkLibraryActivity.ADD_CATALOG_SUMMARY_KEY, link.getSummary())
.putExtra(NetworkLibraryActivity.EDIT_CATALOG_ID_KEY, link.getId())
.putExtra(NetworkLibraryActivity.ADD_CATALOG_ICON_KEY, link.getIcon())
.putExtra(NetworkLibraryActivity.ADD_CATALOG_ID_KEY, link.getId())
);
}
return true;

View file

@ -46,11 +46,11 @@ import org.geometerplus.fbreader.network.opds.OPDSLinkReader;
public class NetworkLibraryActivity extends NetworkBaseActivity {
final static String ADD_CATALOG = "android.fbreader.action.ADD_CATALOG";
final static String EDIT_CATALOG = "android.fbreader.action.EDIT_CATALOG";
final static String ADD_CATALOG_TITLE_KEY = "title";
final static String ADD_CATALOG_SUMMARY_KEY = "summary";
final static String EDIT_CATALOG_ID_KEY = "id";
final static String ADD_CATALOG_ICON_KEY = "icon";
final static String ADD_CATALOG_ID_KEY = "id";
private NetworkTree myTree;
private volatile Intent myIntent;
@ -78,24 +78,26 @@ public class NetworkLibraryActivity extends NetworkBaseActivity {
final Uri uri = intent.getData();
final String title = intent.getStringExtra(ADD_CATALOG_TITLE_KEY);
final String summary = intent.getStringExtra(ADD_CATALOG_SUMMARY_KEY);
if (uri != null && title != null) {
final ICustomNetworkLink link = OPDSLinkReader.createCustomLink(
uri.getHost(), title, summary, uri.toString()
);
if (link != null) {
runOnUiThread(new Runnable() {
public void run() {
final NetworkLibrary library = NetworkLibrary.Instance();
library.addCustomLink(link);
library.updateChildren();
library.synchronize();
NetworkView.Instance().fireModelChangedAsync();
getListView().invalidateViews();
}
});
}
final String icon = intent.getStringExtra(ADD_CATALOG_ICON_KEY);
final int id = intent.getIntExtra(ADD_CATALOG_ID_KEY, ICustomNetworkLink.INVALID_ID);
if (uri == null || title == null) {
return;
}
final ICustomNetworkLink link = OPDSLinkReader.createCustomLink(
id, uri.getHost(), title, summary, icon, uri.toString()
);
if (link != null) {
runOnUiThread(new Runnable() {
public void run() {
final NetworkLibrary library = NetworkLibrary.Instance();
library.addCustomLink(link);
library.updateChildren();
library.synchronize();
NetworkView.Instance().fireModelChangedAsync();
getListView().invalidateViews();
}
});
}
} else if (EDIT_CATALOG.equals(action)) {
}
}

View file

@ -22,19 +22,11 @@ package org.geometerplus.fbreader.network;
import org.geometerplus.zlibrary.core.network.ZLNetworkException;
public interface ICustomNetworkLink extends INetworkLink {
public static final int INVALID_ID = -1;
int getId();
void setId(int id);
interface SaveLinkListener {
void onSaveLink(ICustomNetworkLink link);
}
void setSaveLinkListener(SaveLinkListener listener);
void saveLink();
void setSiteName(String name);
void setTitle(String title);
void setSummary(String summary);

View file

@ -182,7 +182,6 @@ public class NetworkLibrary {
final ICustomNetworkLink link = OPDSLinkReader.createCustomLink(id, siteName, title, summary, icon, links);
if (link != null) {
addLinkInternal(link);
link.setSaveLinkListener(myChangesListener);
}
}
}
@ -463,12 +462,6 @@ public class NetworkLibrary {
}
}
private ICustomNetworkLink.SaveLinkListener myChangesListener = new ICustomNetworkLink.SaveLinkListener() {
public void onSaveLink(ICustomNetworkLink link) {
NetworkDatabase.Instance().saveCustomLink(link);
}
};
private <T extends INetworkLink> void addLinkInternal(T link) {
synchronized (myLinks) {
myLinks.add(link);
@ -476,9 +469,20 @@ public class NetworkLibrary {
}
public void addCustomLink(ICustomNetworkLink link) {
addLinkInternal(link);
link.setSaveLinkListener(myChangesListener);
link.saveLink();
final int id = link.getId();
if (id == ICustomNetworkLink.INVALID_ID) {
addLinkInternal(link);
} else {
for (int i = myLinks.size() - 1; i >= 0; --i) {
final INetworkLink l = myLinks.get(i);
if (l instanceof ICustomNetworkLink &&
((ICustomNetworkLink)l).getId() == id) {
myLinks.set(i, link);
break;
}
}
}
NetworkDatabase.Instance().saveCustomLink(link);
}
public void removeCustomLink(ICustomNetworkLink link) {
@ -486,7 +490,6 @@ public class NetworkLibrary {
myLinks.remove(link);
}
NetworkDatabase.Instance().deleteCustomLink(link);
link.setSaveLinkListener(null);
}
public boolean hasCustomLinkTitle(String title, INetworkLink exceptFor) {

View file

@ -35,7 +35,6 @@ import org.geometerplus.fbreader.network.NetworkException;
class OPDSCustomLink extends OPDSNetworkLink implements ICustomNetworkLink {
private int myId;
private SaveLinkListener myListener;
private boolean myHasChanges;
@ -52,18 +51,6 @@ class OPDSCustomLink extends OPDSNetworkLink implements ICustomNetworkLink {
myId = id;
}
public void setSaveLinkListener(SaveLinkListener listener) {
myListener = listener;
}
public void saveLink() {
if (myListener != null) {
myListener.onSaveLink(this);
} else {
throw new RuntimeException("Unable to save link: SaveLinkListener hasn't been set");
}
}
public boolean hasChanges() {
return myHasChanges;
}

View file

@ -46,10 +46,14 @@ public class OPDSLinkReader {
return new OPDSCustomLink(id, siteName, title, summary, icon, links);
}
public static ICustomNetworkLink createCustomLink(String siteName, String title, String summary, String url) {
public static ICustomNetworkLink createCustomLink(int id, String siteName, String title, String summary, String icon, String url) {
final HashMap<String, String> links = new HashMap<String, String>();
links.put(INetworkLink.URL_MAIN, url);
return new OPDSCustomLink(ICustomNetworkLink.INVALID_ID, siteName, title, summary, null, links);
return new OPDSCustomLink(id, siteName, title, summary, icon, links);
}
public static ICustomNetworkLink createCustomLink(String siteName, String title, String summary, String icon, String url) {
return createCustomLink(ICustomNetworkLink.INVALID_ID, siteName, title, summary, icon, url);
}
public static final int CACHE_LOAD = 0;