From fbc75936daaa3ea5e2596c0aa71593cbe9f33614 Mon Sep 17 00:00:00 2001 From: Marco Jacob Date: Sat, 15 Jun 2013 16:23:55 +0200 Subject: make personalNote multiline again, upload button, merge on refresh --- main/src/cgeo/geocaching/CacheDetailActivity.java | 69 +++++++++++++ main/src/cgeo/geocaching/Geocache.java | 8 +- main/src/cgeo/geocaching/PersonalNote.java | 112 +++++++++++++++++++++ .../geocaching/connector/AbstractConnector.java | 24 ++--- main/src/cgeo/geocaching/connector/IConnector.java | 13 ++- .../cgeo/geocaching/connector/gc/GCConnector.java | 5 + main/src/cgeo/geocaching/ui/EditNoteDialog.java | 57 +++++------ 7 files changed, 238 insertions(+), 50 deletions(-) create mode 100644 main/src/cgeo/geocaching/PersonalNote.java (limited to 'main/src/cgeo/geocaching') diff --git a/main/src/cgeo/geocaching/CacheDetailActivity.java b/main/src/cgeo/geocaching/CacheDetailActivity.java index b4c7b33..7acb4ae 100644 --- a/main/src/cgeo/geocaching/CacheDetailActivity.java +++ b/main/src/cgeo/geocaching/CacheDetailActivity.java @@ -1815,6 +1815,18 @@ public class CacheDetailActivity extends AbstractViewPagerActivity 0) { + notes[0] = StringUtils.removeStart(notes[0], MERGED_PREFIX); + notes[0] = StringUtils.removeEnd(notes[0], "\n"); + } + if (notes.length > 1) { + this.cgeoNote = notes[0]; + this.providerNote = notes[1]; + } else { + this.providerNote = notes[0]; + } + this.isOffline = cache.isOffline(); + } + + public PersonalNote mergeWith(final PersonalNote other) { + if (StringUtils.isEmpty(cgeoNote) && StringUtils.isEmpty(other.cgeoNote)) { + return mergeOnlyProviderNotes(other); + } + final PersonalNote result = new PersonalNote(); + if (cgeoNote != null && other.cgeoNote != null) { + if (other.isOffline) { + result.cgeoNote = other.cgeoNote; + } else { + result.cgeoNote = cgeoNote; + } + } + if (other.cgeoNote != null) { + result.cgeoNote = other.cgeoNote; + } else { + result.cgeoNote = cgeoNote; + } + if (providerNote != null && other.providerNote != null) { + if (isOffline) { + result.providerNote = providerNote; + } else { + result.providerNote = other.providerNote; + } + } + if (providerNote != null) { + result.providerNote = providerNote; + } else { + result.providerNote = other.providerNote; + } + return result; + } + + /** + * Merge different provider notes from c:geo and provider. + * + * @param other + * The note to merge + * @return PersonalNote The merged note + */ + private PersonalNote mergeOnlyProviderNotes(final PersonalNote other) { + final PersonalNote result = new PersonalNote(); + if (StringUtils.isNotEmpty(other.providerNote) && StringUtils.isNotEmpty(providerNote)) { + if (providerNote.equals(other.providerNote)) { + result.providerNote = providerNote; + return result; + } + if (other.isOffline) { + result.cgeoNote = other.providerNote; + result.providerNote = providerNote; + } else { + result.cgeoNote = providerNote; + result.providerNote = other.providerNote; + } + } + return result; + } + + @Override + public String toString() { + final StringBuffer buffer = new StringBuffer(); + if (cgeoNote != null) { + buffer.append(MERGED_PREFIX).append(cgeoNote).append("\n").append(SEPARATOR); + } + buffer.append(providerNote); + return buffer.toString(); + } + + public String getCgeoNote() { + return cgeoNote; + } + + public String getProviderNote() { + return providerNote; + } + +} diff --git a/main/src/cgeo/geocaching/connector/AbstractConnector.java b/main/src/cgeo/geocaching/connector/AbstractConnector.java index 83c1b6f..c034f49 100644 --- a/main/src/cgeo/geocaching/connector/AbstractConnector.java +++ b/main/src/cgeo/geocaching/connector/AbstractConnector.java @@ -31,30 +31,22 @@ public abstract class AbstractConnector implements IConnector { } @Override - public boolean supportsOwnCoordinates() { + public boolean supportsPersonalNote() { return false; } - /** - * Uploading modified coordinates to website - * - * @param cache - * @param wpt - * @return success - */ @Override - public boolean uploadModifiedCoordinates(Geocache cache, Geopoint wpt) { + public boolean uploadPersonalNote(Geocache cache) { throw new UnsupportedOperationException(); } - /** - * Uploading personal note to website - * - * @param cache - * @return success - */ @Override - public boolean uploadPersonalNote(Geocache cache) { + public boolean supportsOwnCoordinates() { + return false; + } + + @Override + public boolean uploadModifiedCoordinates(Geocache cache, Geopoint wpt) { throw new UnsupportedOperationException(); } diff --git a/main/src/cgeo/geocaching/connector/IConnector.java b/main/src/cgeo/geocaching/connector/IConnector.java index c44b946..f629a28 100644 --- a/main/src/cgeo/geocaching/connector/IConnector.java +++ b/main/src/cgeo/geocaching/connector/IConnector.java @@ -144,11 +144,11 @@ public interface IConnector { public String getGeocodeFromUrl(final String url); /** - * enable/disable uploading modified coordinates to website + * enable/disable uploading personal note * * @return true, when uploading is possible */ - public boolean supportsOwnCoordinates(); + public boolean supportsPersonalNote(); /** * Uploading personal note to website @@ -159,7 +159,14 @@ public interface IConnector { public boolean uploadPersonalNote(Geocache cache); /** - * Reseting of modified coordinates on website to details + * enable/disable uploading modified coordinates to website + * + * @return true, when uploading is possible + */ + public boolean supportsOwnCoordinates(); + + /** + * Resetting of modified coordinates on website to details * * @param cache * @return success diff --git a/main/src/cgeo/geocaching/connector/gc/GCConnector.java b/main/src/cgeo/geocaching/connector/gc/GCConnector.java index d7fbbab..9b2a84a 100644 --- a/main/src/cgeo/geocaching/connector/gc/GCConnector.java +++ b/main/src/cgeo/geocaching/connector/gc/GCConnector.java @@ -69,6 +69,11 @@ public class GCConnector extends AbstractConnector implements ISearchByGeocode, } @Override + public boolean supportsPersonalNote() { + return true; + } + + @Override public boolean supportsOwnCoordinates() { return true; } diff --git a/main/src/cgeo/geocaching/ui/EditNoteDialog.java b/main/src/cgeo/geocaching/ui/EditNoteDialog.java index bbf0618..d121433 100644 --- a/main/src/cgeo/geocaching/ui/EditNoteDialog.java +++ b/main/src/cgeo/geocaching/ui/EditNoteDialog.java @@ -1,21 +1,17 @@ package cgeo.geocaching.ui; import cgeo.geocaching.R; -import cgeo.geocaching.R.string; +import android.app.AlertDialog; +import android.app.Dialog; +import android.content.DialogInterface; import android.os.Bundle; import android.support.v4.app.DialogFragment; -import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; -import android.view.ViewGroup; -import android.view.WindowManager.LayoutParams; -import android.view.inputmethod.EditorInfo; import android.widget.EditText; -import android.widget.TextView; -import android.widget.TextView.OnEditorActionListener; -public class EditNoteDialog extends DialogFragment implements OnEditorActionListener { +public class EditNoteDialog extends DialogFragment { public interface EditNoteDialogListener { void onFinishEditNoteDialog(final String inputText); @@ -37,34 +33,35 @@ public class EditNoteDialog extends DialogFragment implements OnEditorActionList } @Override - public View onCreateView(final LayoutInflater inflater, final ViewGroup container, - final Bundle savedInstanceState) { - View view = inflater.inflate(R.layout.fragment_edit_note, container); + public Dialog onCreateDialog(Bundle savedInstanceState) { + LayoutInflater inflater = getActivity().getLayoutInflater(); + View view = inflater.inflate(R.layout.fragment_edit_note, null); mEditText = (EditText) view.findViewById(R.id.note); initialNote = getArguments().getString(ARGUMENT_INITIAL_NOTE); if (initialNote != null) { mEditText.setText(initialNote); initialNote = null; } - getDialog().setTitle(string.cache_personal_note); - mEditText.requestFocus(); - getDialog().getWindow().setSoftInputMode( - LayoutParams.SOFT_INPUT_STATE_VISIBLE); - mEditText.setOnEditorActionListener(this); - return view; + AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); + builder.setTitle(R.string.cache_personal_note); + builder.setView(view); + builder.setPositiveButton(android.R.string.ok, + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int whichButton) { + final EditNoteDialogListener activity = (EditNoteDialogListener) getActivity(); + activity.onFinishEditNoteDialog(mEditText.getText().toString()); + dialog.dismiss(); + } + }); + builder.setNegativeButton(android.R.string.cancel, + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int whichButton) { + dialog.dismiss(); + } + }); + return builder.create(); } - - @Override - public boolean onEditorAction(final TextView v, final int actionId, final KeyEvent event) { - if (EditorInfo.IME_ACTION_DONE == actionId) { - final EditNoteDialogListener activity = (EditNoteDialogListener) getActivity(); - activity.onFinishEditNoteDialog(mEditText.getText().toString()); - dismiss(); - return true; - } - return false; - } - - } -- cgit v1.1