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

View file

@ -258,7 +258,8 @@ class NetworkCatalogActions extends NetworkTreeActions {
.setData(Uri.parse(textUrl)) .setData(Uri.parse(textUrl))
.putExtra(NetworkLibraryActivity.ADD_CATALOG_TITLE_KEY, link.getTitle()) .putExtra(NetworkLibraryActivity.ADD_CATALOG_TITLE_KEY, link.getTitle())
.putExtra(NetworkLibraryActivity.ADD_CATALOG_SUMMARY_KEY, link.getSummary()) .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; return true;

View file

@ -46,11 +46,11 @@ import org.geometerplus.fbreader.network.opds.OPDSLinkReader;
public class NetworkLibraryActivity extends NetworkBaseActivity { public class NetworkLibraryActivity extends NetworkBaseActivity {
final static String ADD_CATALOG = "android.fbreader.action.ADD_CATALOG"; 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_TITLE_KEY = "title";
final static String ADD_CATALOG_SUMMARY_KEY = "summary"; 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 NetworkTree myTree;
private volatile Intent myIntent; private volatile Intent myIntent;
@ -78,24 +78,26 @@ public class NetworkLibraryActivity extends NetworkBaseActivity {
final Uri uri = intent.getData(); final Uri uri = intent.getData();
final String title = intent.getStringExtra(ADD_CATALOG_TITLE_KEY); final String title = intent.getStringExtra(ADD_CATALOG_TITLE_KEY);
final String summary = intent.getStringExtra(ADD_CATALOG_SUMMARY_KEY); final String summary = intent.getStringExtra(ADD_CATALOG_SUMMARY_KEY);
if (uri != null && title != null) { final String icon = intent.getStringExtra(ADD_CATALOG_ICON_KEY);
final ICustomNetworkLink link = OPDSLinkReader.createCustomLink( final int id = intent.getIntExtra(ADD_CATALOG_ID_KEY, ICustomNetworkLink.INVALID_ID);
uri.getHost(), title, summary, uri.toString() if (uri == null || title == null) {
); return;
if (link != null) { }
runOnUiThread(new Runnable() { final ICustomNetworkLink link = OPDSLinkReader.createCustomLink(
public void run() { id, uri.getHost(), title, summary, icon, uri.toString()
final NetworkLibrary library = NetworkLibrary.Instance(); );
library.addCustomLink(link); if (link != null) {
library.updateChildren(); runOnUiThread(new Runnable() {
library.synchronize(); public void run() {
NetworkView.Instance().fireModelChangedAsync(); final NetworkLibrary library = NetworkLibrary.Instance();
getListView().invalidateViews(); 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; import org.geometerplus.zlibrary.core.network.ZLNetworkException;
public interface ICustomNetworkLink extends INetworkLink { public interface ICustomNetworkLink extends INetworkLink {
public static final int INVALID_ID = -1; public static final int INVALID_ID = -1;
int getId(); int getId();
void setId(int id); void setId(int id);
interface SaveLinkListener {
void onSaveLink(ICustomNetworkLink link);
}
void setSaveLinkListener(SaveLinkListener listener);
void saveLink();
void setSiteName(String name); void setSiteName(String name);
void setTitle(String title); void setTitle(String title);
void setSummary(String summary); void setSummary(String summary);

View file

@ -182,7 +182,6 @@ public class NetworkLibrary {
final ICustomNetworkLink link = OPDSLinkReader.createCustomLink(id, siteName, title, summary, icon, links); final ICustomNetworkLink link = OPDSLinkReader.createCustomLink(id, siteName, title, summary, icon, links);
if (link != null) { if (link != null) {
addLinkInternal(link); 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) { private <T extends INetworkLink> void addLinkInternal(T link) {
synchronized (myLinks) { synchronized (myLinks) {
myLinks.add(link); myLinks.add(link);
@ -476,9 +469,20 @@ public class NetworkLibrary {
} }
public void addCustomLink(ICustomNetworkLink link) { public void addCustomLink(ICustomNetworkLink link) {
addLinkInternal(link); final int id = link.getId();
link.setSaveLinkListener(myChangesListener); if (id == ICustomNetworkLink.INVALID_ID) {
link.saveLink(); 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) { public void removeCustomLink(ICustomNetworkLink link) {
@ -486,7 +490,6 @@ public class NetworkLibrary {
myLinks.remove(link); myLinks.remove(link);
} }
NetworkDatabase.Instance().deleteCustomLink(link); NetworkDatabase.Instance().deleteCustomLink(link);
link.setSaveLinkListener(null);
} }
public boolean hasCustomLinkTitle(String title, INetworkLink exceptFor) { 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 { class OPDSCustomLink extends OPDSNetworkLink implements ICustomNetworkLink {
private int myId; private int myId;
private SaveLinkListener myListener;
private boolean myHasChanges; private boolean myHasChanges;
@ -52,18 +51,6 @@ class OPDSCustomLink extends OPDSNetworkLink implements ICustomNetworkLink {
myId = id; 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() { public boolean hasChanges() {
return myHasChanges; return myHasChanges;
} }

View file

@ -46,10 +46,14 @@ public class OPDSLinkReader {
return new OPDSCustomLink(id, siteName, title, summary, icon, links); 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>(); final HashMap<String, String> links = new HashMap<String, String>();
links.put(INetworkLink.URL_MAIN, url); 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; public static final int CACHE_LOAD = 0;