diff options
Diffstat (limited to 'main/src/cgeo/geocaching/CacheDetailActivity.java')
| -rw-r--r-- | main/src/cgeo/geocaching/CacheDetailActivity.java | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/main/src/cgeo/geocaching/CacheDetailActivity.java b/main/src/cgeo/geocaching/CacheDetailActivity.java index f32bee1..6ec034d 100644 --- a/main/src/cgeo/geocaching/CacheDetailActivity.java +++ b/main/src/cgeo/geocaching/CacheDetailActivity.java @@ -1733,6 +1733,18 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc } } }); + final Button personalNoteUpload = (Button) view.findViewById(R.id.upload_personalnote); + if (cache.isOffline() && ConnectorFactory.getConnector(cache).supportsPersonalNote()) { + personalNoteUpload.setVisibility(View.VISIBLE); + personalNoteUpload.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + uploadPersonalNote(); + } + }); + } else { + personalNoteUpload.setVisibility(View.GONE); + } // cache hint and spoiler images final View hintBoxView = view.findViewById(R.id.hint_box); @@ -1803,6 +1815,21 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc } } + Thread currentThread; + + private void uploadPersonalNote() { + final SimpleHandler myHandler = new SimpleHandler(); + + Message cancelMessage = myHandler.cancelMessage(res.getString(R.string.cache_personal_note_upload_cancelled)); + progress.show(CacheDetailActivity.this, res.getString(R.string.cache_personal_note_uploading), res.getString(R.string.cache_personal_note_uploading), true, cancelMessage); + + if (currentThread != null) { + currentThread.interrupt(); + } + currentThread = new UploadPersonalNoteThread(cache, myHandler); + currentThread.start(); + } + private void setPersonalNote() { final String personalNote = cache.getPersonalNote(); personalNoteView.setText(personalNote, TextView.BufferType.SPANNABLE); @@ -2297,6 +2324,48 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc } } + public class SimpleHandler extends CancellableHandler { + public static final String SUCCESS_TEXT = "success_message"; + + @Override + public void handleRegularMessage(final Message msg) { + if (msg.getData() != null && msg.getData().getString(SUCCESS_TEXT) != null) { + showToast(msg.getData().getString(SUCCESS_TEXT)); + } + progress.dismiss(); + return; + } + + @Override + public void handleCancel(final Object extra) { + showToast((String) extra); + progress.dismiss(); + } + } + + private class UploadPersonalNoteThread extends Thread { + private Geocache cache = null; + private CancellableHandler handler = null; + + public UploadPersonalNoteThread(Geocache cache, CancellableHandler handler) { + this.cache = cache; + this.handler = handler; + } + + @Override + public void run() { + IConnector con = ConnectorFactory.getConnector(cache); + if (con.supportsPersonalNote()) { + con.uploadPersonalNote(cache); + } + Message msg = Message.obtain(); + Bundle bundle = new Bundle(); + bundle.putString(SimpleHandler.SUCCESS_TEXT, res.getString(R.string.cache_personal_note_upload_done)); + msg.setData(bundle); + handler.sendMessage(msg); + } + } + @Override protected String getTitle(Page page) { // show number of waypoints directly in waypoint title |
