diff --git a/src/org/geometerplus/android/fbreader/network/AddCustomCatalogActivity.java b/src/org/geometerplus/android/fbreader/network/AddCustomCatalogActivity.java index eea05074c..f622671d2 100644 --- a/src/org/geometerplus/android/fbreader/network/AddCustomCatalogActivity.java +++ b/src/org/geometerplus/android/fbreader/network/AddCustomCatalogActivity.java @@ -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; } } }); diff --git a/src/org/geometerplus/android/fbreader/network/NetworkCatalogActions.java b/src/org/geometerplus/android/fbreader/network/NetworkCatalogActions.java index 4c93f754b..56ae2547b 100644 --- a/src/org/geometerplus/android/fbreader/network/NetworkCatalogActions.java +++ b/src/org/geometerplus/android/fbreader/network/NetworkCatalogActions.java @@ -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; diff --git a/src/org/geometerplus/android/fbreader/network/NetworkLibraryActivity.java b/src/org/geometerplus/android/fbreader/network/NetworkLibraryActivity.java index cb693eaaa..446c98194 100644 --- a/src/org/geometerplus/android/fbreader/network/NetworkLibraryActivity.java +++ b/src/org/geometerplus/android/fbreader/network/NetworkLibraryActivity.java @@ -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)) { } } diff --git a/src/org/geometerplus/fbreader/network/ICustomNetworkLink.java b/src/org/geometerplus/fbreader/network/ICustomNetworkLink.java index 5b6981116..7bd1e623e 100644 --- a/src/org/geometerplus/fbreader/network/ICustomNetworkLink.java +++ b/src/org/geometerplus/fbreader/network/ICustomNetworkLink.java @@ -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); diff --git a/src/org/geometerplus/fbreader/network/NetworkLibrary.java b/src/org/geometerplus/fbreader/network/NetworkLibrary.java index 20610314c..8d97231e7 100644 --- a/src/org/geometerplus/fbreader/network/NetworkLibrary.java +++ b/src/org/geometerplus/fbreader/network/NetworkLibrary.java @@ -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 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) { diff --git a/src/org/geometerplus/fbreader/network/opds/OPDSCustomLink.java b/src/org/geometerplus/fbreader/network/opds/OPDSCustomLink.java index 1af974740..3fbe25a3b 100644 --- a/src/org/geometerplus/fbreader/network/opds/OPDSCustomLink.java +++ b/src/org/geometerplus/fbreader/network/opds/OPDSCustomLink.java @@ -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; } diff --git a/src/org/geometerplus/fbreader/network/opds/OPDSLinkReader.java b/src/org/geometerplus/fbreader/network/opds/OPDSLinkReader.java index 4c1a31325..3c9a786ec 100644 --- a/src/org/geometerplus/fbreader/network/opds/OPDSLinkReader.java +++ b/src/org/geometerplus/fbreader/network/opds/OPDSLinkReader.java @@ -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 links = new HashMap(); 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;