diff --git a/app/src/main/java/it/niedermann/owncloud/notes/android/activity/EditNoteActivity.java b/app/src/main/java/it/niedermann/owncloud/notes/android/activity/EditNoteActivity.java
index d592a792c..8287822ab 100644
--- a/app/src/main/java/it/niedermann/owncloud/notes/android/activity/EditNoteActivity.java
+++ b/app/src/main/java/it/niedermann/owncloud/notes/android/activity/EditNoteActivity.java
@@ -1,5 +1,7 @@
package it.niedermann.owncloud.notes.android.activity;
+import android.app.Fragment;
+import android.app.FragmentManager;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBar;
@@ -22,13 +24,14 @@
import java.util.concurrent.TimeUnit;
import it.niedermann.owncloud.notes.R;
+import it.niedermann.owncloud.notes.android.fragment.CategoryDialogFragment;
import it.niedermann.owncloud.notes.model.DBNote;
import it.niedermann.owncloud.notes.persistence.NoteSQLiteOpenHelper;
import it.niedermann.owncloud.notes.util.ICallback;
import it.niedermann.owncloud.notes.util.MarkDownUtil;
import rx.Subscriber;
-public class EditNoteActivity extends AppCompatActivity {
+public class EditNoteActivity extends AppCompatActivity implements CategoryDialogFragment.CategoryDialogListener {
public static final String PARAM_NOTE = "note";
public static final String PARAM_ORIGINAL_NOTE = "original_note";
@@ -185,6 +188,9 @@ public boolean onOptionsItemSelected(MenuItem item) {
db.toggleFavorite(note, null);
invalidateOptionsMenu();
return true;
+ case R.id.menu_category:
+ showCategorySelector();
+ return true;
case R.id.menu_preview:
saveData(null);
Intent previewIntent = new Intent(getApplicationContext(), NoteActivity.class);
@@ -211,6 +217,29 @@ public boolean onOptionsItemSelected(MenuItem item) {
}
}
+ /**
+ * Opens a dialog in order to chose a category
+ */
+ private void showCategorySelector() {
+ final String fragmentId = "fragment_category";
+ FragmentManager manager = getFragmentManager();
+ Fragment frag = manager.findFragmentByTag(fragmentId);
+ if(frag!=null) {
+ manager.beginTransaction().remove(frag).commit();
+ }
+ Bundle arguments = new Bundle();
+ arguments.putString(CategoryDialogFragment.PARAM_CATEGORY, note.getCategory());
+ CategoryDialogFragment categoryFragment = new CategoryDialogFragment();
+ categoryFragment.setArguments(arguments);
+ categoryFragment.show(manager, fragmentId);
+ }
+
+ @Override
+ public void onCategoryChosen(String category) {
+ note.setCategory(category);
+ autoSave();
+ }
+
/**
* Saves all changes and closes the Activity
*/
@@ -295,14 +324,6 @@ public void run() {
});
}
}, DELAY_AFTER_SYNC);
-
- /* TODO Notify widgets
-
- int widgetIDs[] = AppWidgetManager.getInstance(getApplication()).getAppWidgetIds(new ComponentName(getApplication(), SingleNoteWidget.class));
-
- for (int id : widgetIDs) {
- AppWidgetManager.getInstance(getApplication()).notifyAppWidgetViewDataChanged(id, R.layout.widget_single_note);
- }*/
}
});
}
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/android/fragment/CategoryDialogFragment.java b/app/src/main/java/it/niedermann/owncloud/notes/android/fragment/CategoryDialogFragment.java
new file mode 100644
index 000000000..e79539d55
--- /dev/null
+++ b/app/src/main/java/it/niedermann/owncloud/notes/android/fragment/CategoryDialogFragment.java
@@ -0,0 +1,61 @@
+package it.niedermann.owncloud.notes.android.fragment;
+
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.app.DialogFragment;
+import android.content.DialogInterface;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.EditText;
+
+import it.niedermann.owncloud.notes.R;
+
+/**
+ * This {@link DialogFragment} allows for the selection of a category.
+ * The calling Activity must implement the interface {@link CategoryDialogListener}.
+ */
+public class CategoryDialogFragment extends DialogFragment {
+
+ /**
+ * Interface that must be implemented by the calling Activity.
+ */
+ public interface CategoryDialogListener {
+ /**
+ * This method is called after the user has chosen a category.
+ * @param category Name of the category which was chosen by the user.
+ */
+ void onCategoryChosen(String category);
+ }
+
+ public static final String PARAM_CATEGORY = "category";
+
+ private EditText textCategory;
+
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ View dialogView = getActivity().getLayoutInflater().inflate(R.layout.dialog_change_category, null);
+ textCategory = (EditText) dialogView.findViewById(R.id.editCategory);
+ if(savedInstanceState==null) {
+ textCategory.setText(getArguments().getString(PARAM_CATEGORY));
+ }
+ return new AlertDialog.Builder(getActivity())
+ .setTitle(R.string.change_category_title)
+ .setView(dialogView)
+ .setMessage(R.string.change_category_message)
+ .setCancelable(true)
+ .setPositiveButton(R.string.action_edit_save, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ CategoryDialogListener listener = (CategoryDialogListener) getActivity();
+ listener.onCategoryChosen(textCategory.getText().toString());
+ }
+ })
+ .setNegativeButton(R.string.action_edit_cancel, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ // do nothing
+ }
+ })
+ .create();
+ }
+}
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/android/fragment/about/AboutFragmentCreditsTab.java b/app/src/main/java/it/niedermann/owncloud/notes/android/fragment/about/AboutFragmentCreditsTab.java
index cff969616..670df3f1f 100644
--- a/app/src/main/java/it/niedermann/owncloud/notes/android/fragment/about/AboutFragmentCreditsTab.java
+++ b/app/src/main/java/it/niedermann/owncloud/notes/android/fragment/about/AboutFragmentCreditsTab.java
@@ -1,6 +1,5 @@
package it.niedermann.owncloud.notes.android.fragment.about;
-import android.content.pm.PackageManager;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
@@ -8,6 +7,7 @@
import android.view.ViewGroup;
import android.widget.TextView;
+import it.niedermann.owncloud.notes.BuildConfig;
import it.niedermann.owncloud.notes.R;
import it.niedermann.owncloud.notes.util.SupportUtil;
@@ -15,13 +15,7 @@ public class AboutFragmentCreditsTab extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_about_credits_tab, container, false);
- String versionName;
- try {
- versionName = "v"+getActivity().getPackageManager().getPackageInfo(getActivity().getPackageName(), 0).versionName;
- } catch (PackageManager.NameNotFoundException e) {
- versionName = "(error)";
- }
- SupportUtil.setHtml((TextView) v.findViewById(R.id.about_version), R.string.about_version, versionName);
+ SupportUtil.setHtml((TextView) v.findViewById(R.id.about_version), R.string.about_version, "v"+BuildConfig.VERSION_NAME);
SupportUtil.setHtml((TextView) v.findViewById(R.id.about_maintainer), R.string.about_maintainer);
SupportUtil.setHtml((TextView) v.findViewById(R.id.about_translators), R.string.about_translators_transifex, getString(R.string.url_translations));
return v;
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/persistence/NoteSQLiteOpenHelper.java b/app/src/main/java/it/niedermann/owncloud/notes/persistence/NoteSQLiteOpenHelper.java
index fc307497f..54068b817 100644
--- a/app/src/main/java/it/niedermann/owncloud/notes/persistence/NoteSQLiteOpenHelper.java
+++ b/app/src/main/java/it/niedermann/owncloud/notes/persistence/NoteSQLiteOpenHelper.java
@@ -333,7 +333,7 @@ public void toggleFavorite(DBNote note, ICallback callback) {
* @return changed note if differs from database, otherwise the old note.
*/
public DBNote updateNoteAndSync(DBNote oldNote, String newContent, ICallback callback) {
- debugPrintFullDB();
+ //debugPrintFullDB();
DBNote newNote;
if(newContent==null) {
newNote = new DBNote(oldNote.getId(), oldNote.getRemoteId(), oldNote.getModified(), oldNote.getTitle(), oldNote.getContent(), oldNote.isFavorite(), oldNote.getCategory(), oldNote.getEtag(), DBStatus.LOCAL_EDITED);
@@ -344,9 +344,10 @@ public DBNote updateNoteAndSync(DBNote oldNote, String newContent, ICallback cal
ContentValues values = new ContentValues();
values.put(key_status, newNote.getStatus().getTitle());
values.put(key_title, newNote.getTitle());
+ values.put(key_category, newNote.getCategory());
values.put(key_modified, newNote.getModified(DATE_FORMAT));
values.put(key_content, newNote.getContent());
- int rows = db.update(table_notes, values, key_id + " = ? AND " + key_content + " != ?", new String[]{String.valueOf(newNote.getId()), newNote.getContent()});
+ int rows = db.update(table_notes, values, key_id + " = ? AND (" + key_content + " != ? OR " + key_category + " != ?)", new String[]{String.valueOf(newNote.getId()), newNote.getContent(), newNote.getCategory()});
// if data was changed, set new status and schedule sync (with callback); otherwise invoke callback directly.
if(rows > 0) {
if(callback!=null) {
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/util/NotesClient.java b/app/src/main/java/it/niedermann/owncloud/notes/util/NotesClient.java
index dd56f0730..9217dc78e 100644
--- a/app/src/main/java/it/niedermann/owncloud/notes/util/NotesClient.java
+++ b/app/src/main/java/it/niedermann/owncloud/notes/util/NotesClient.java
@@ -14,6 +14,7 @@
import java.net.MalformedURLException;
import at.bitfire.cert4android.CustomCertManager;
+import it.niedermann.owncloud.notes.BuildConfig;
import it.niedermann.owncloud.notes.model.CloudNote;
import it.niedermann.owncloud.notes.util.ServerResponse.NoteResponse;
import it.niedermann.owncloud.notes.util.ServerResponse.NotesResponse;
@@ -94,7 +95,8 @@ private NoteResponse putNote(CustomCertManager ccm, CloudNote note, String path,
JSONObject paramObject = new JSONObject();
paramObject.accumulate(JSON_CONTENT, note.getContent());
paramObject.accumulate(JSON_MODIFIED, note.getModified().getTimeInMillis()/1000);
- paramObject.accumulate(JSON_FAVORITE, note.isFavorite());
+ paramObject.accumulate(JSON_FAVORITE, note.isFavorite());
+ paramObject.accumulate(JSON_CATEGORY, note.getCategory());
return new NoteResponse(requestServer(ccm, path, method, paramObject, null));
}
@@ -138,6 +140,7 @@ private ResponseData requestServer(CustomCertManager ccm, String target, String
con.setRequestProperty(
"Authorization",
"Basic " + Base64.encodeToString((username + ":" + password).getBytes(), Base64.NO_WRAP));
+ con.setRequestProperty("User-Agent", "nextcloud-notes/" + BuildConfig.VERSION_NAME + " (Android)");
if(lastETag!=null && METHOD_GET.equals(method)) {
con.setRequestProperty("If-None-Match", lastETag);
}
@@ -177,4 +180,4 @@ private ResponseData requestServer(CustomCertManager ccm, String target, String
// return these header fields since they should only be saved after successful processing the result!
return new ResponseData(result.toString(), etag, lastModified);
}
-}
+}
\ No newline at end of file
diff --git a/app/src/main/res/layout/dialog_change_category.xml b/app/src/main/res/layout/dialog_change_category.xml
new file mode 100644
index 000000000..f590da89b
--- /dev/null
+++ b/app/src/main/res/layout/dialog_change_category.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/menu/menu_note_list_view.xml b/app/src/main/res/menu/menu_note_list_view.xml
index 2aa6866e4..c27740ea7 100644
--- a/app/src/main/res/menu/menu_note_list_view.xml
+++ b/app/src/main/res/menu/menu_note_list_view.xml
@@ -7,6 +7,11 @@
android:title="@string/menu_favorite"
android:checkable="true"
app:showAsAction="ifRoom" />
+
- Copy
Edit
Cancel
+ Category
Favorite
Preview
Share
About
+ Chose category
+ Please enter a category name
Copy
Today