From 431aca02acae25d7b642d9420fa15d957260d05b Mon Sep 17 00:00:00 2001 From: Unknown Date: Thu, 22 Mar 2018 00:03:37 +0800 Subject: [PATCH] Implement add tags functionality --- .../opacclient/objects/Starred.java | 15 ++++++ .../opacclient/frontend/StarredFragment.java | 48 +++++++++++++++++++ .../opacclient/storage/StarDataSource.java | 22 +++++++-- .../opacclient/storage/StarDatabase.java | 2 +- .../src/main/res/layout/listitem_starred.xml | 18 +++++++ .../opacapp/src/main/res/values/strings.xml | 1 + 6 files changed, 102 insertions(+), 4 deletions(-) diff --git a/opacclient/libopac/src/main/java/de/geeksfactory/opacclient/objects/Starred.java b/opacclient/libopac/src/main/java/de/geeksfactory/opacclient/objects/Starred.java index d2e861d3e..26f639988 100644 --- a/opacclient/libopac/src/main/java/de/geeksfactory/opacclient/objects/Starred.java +++ b/opacclient/libopac/src/main/java/de/geeksfactory/opacclient/objects/Starred.java @@ -32,6 +32,7 @@ public class Starred { private String mnr; private String title; private SearchResult.MediaType mediaType; + private Tag tag; @Override public String toString() { @@ -94,4 +95,18 @@ public SearchResult.MediaType getMediaType() { public void setMediaType(SearchResult.MediaType mediaType) { this.mediaType = mediaType; } + + /** + * Get this item's tag + */ + public Tag getTag() { + return tag; + } + + /** + * Set this item's tag + */ + public void setTag(Tag tag) { + this.tag = tag; + } } diff --git a/opacclient/opacapp/src/main/java/de/geeksfactory/opacclient/frontend/StarredFragment.java b/opacclient/opacapp/src/main/java/de/geeksfactory/opacclient/frontend/StarredFragment.java index a381c2a34..076b52bb4 100644 --- a/opacclient/opacapp/src/main/java/de/geeksfactory/opacclient/frontend/StarredFragment.java +++ b/opacclient/opacapp/src/main/java/de/geeksfactory/opacclient/frontend/StarredFragment.java @@ -22,8 +22,10 @@ package de.geeksfactory.opacclient.frontend; import android.app.Activity; +import android.app.AlertDialog; import android.content.ActivityNotFoundException; import android.content.Context; +import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; import android.database.Cursor; @@ -37,6 +39,7 @@ import android.support.v4.content.Loader; import android.support.v4.widget.SimpleCursorAdapter; import android.text.Html; +import android.text.InputType; import android.util.Log; import android.view.LayoutInflater; import android.view.MenuInflater; @@ -46,6 +49,7 @@ import android.widget.AbsListView; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; +import android.widget.EditText; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; @@ -99,6 +103,7 @@ public class StarredFragment extends Fragment implements private int activatedPosition = ListView.INVALID_POSITION; private TextView tvWelcome; private Starred sItem; + private String tagName = ""; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, @@ -473,6 +478,12 @@ private void setActivatedPosition(int position) { activatedPosition = position; } + private void addTag(Starred item, String tagName) { + StarDataSource data = new StarDataSource(getActivity()); + sItem = item; + data.addTag(item, tagName); + } + @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); @@ -498,6 +509,7 @@ public ItemListAdapter() { @Override public void bindView(View view, Context context, Cursor cursor) { Starred item = StarDataSource.cursorToItem(cursor); + item.setTag(StarDataSource.cursorToTag(cursor)); TextView tv = (TextView) view.findViewById(R.id.tvTitle); if (item.getTitle() != null) { @@ -513,6 +525,42 @@ public void bindView(View view, Context context, Cursor cursor) { ivType.setImageBitmap(null); } + TextView tagView = (TextView) view.findViewById(R.id.tvTag); + if (item.getTag() != null) { + tagView.setText(Html.fromHtml(item.getTag().getTagName())); + } else { + tagView.setText(""); + } + +// EditText et = (EditText) view.findViewById(R.id.etvAddTagText); + ImageView ivAddTag = (ImageView) view.findViewById(R.id.ivAddTag); + ivAddTag.setFocusableInTouchMode(false); + ivAddTag.setFocusable(false); + ivAddTag.setTag(item); + + ivAddTag.setOnClickListener(arg0 -> { + // Create alert dialog box for entering of tag + AlertDialog.Builder builder = new AlertDialog.Builder(context); + builder.setTitle("Add tag to " + item.getTitle()); + + // Set up the input + final EditText input = new EditText(context); + + // Specify the type of input expected + input.setInputType(InputType.TYPE_CLASS_TEXT); + builder.setView(input); + + // Set up the buttons + builder.setPositiveButton("OK", + (dialog, which) -> tagName = input.getText().toString()); + + builder.setNegativeButton("Cancel", (dialog, which) -> dialog.cancel()); + + builder.show(); + Starred item1 = (Starred) arg0.getTag(); + addTag(item1, tagName); + }); + ImageView ivDelete = (ImageView) view.findViewById(R.id.ivDelete); ivDelete.setFocusableInTouchMode(false); ivDelete.setFocusable(false); diff --git a/opacclient/opacapp/src/main/java/de/geeksfactory/opacclient/storage/StarDataSource.java b/opacclient/opacapp/src/main/java/de/geeksfactory/opacclient/storage/StarDataSource.java index 0987f9e4e..31da954f1 100644 --- a/opacclient/opacapp/src/main/java/de/geeksfactory/opacclient/storage/StarDataSource.java +++ b/opacclient/opacapp/src/main/java/de/geeksfactory/opacclient/storage/StarDataSource.java @@ -215,12 +215,13 @@ public static Tag cursorToTag(Cursor cursor) { return tag; } - public long addTag(Starred item, Tag tag) { + public long addTag(Starred item, String tagName) { ContentValues values = new ContentValues(); - values.put("tag", tag.getTagName()); + values.put("tag", tagName); database.insert(StarDatabase.TAGS_TABLE, null, values); + values = new ContentValues(); - values.put("tag", tag.getId()); + values.put("tag", getTagByTagName(tagName).getId()); values.put("item", item.getId()); return database.insert(StarDatabase.STAR_TAGS_TABLE, null, values); } @@ -245,4 +246,19 @@ public void removeTag(Tag tag) { database.delete(StarDatabase.TAGS_TABLE, "tag=?", selA); } } + + public Tag getTagByTagName(String tagName) { + String[] selA = {tagName}; + Cursor cursor = database.query(StarDatabase.TAGS_TABLE, StarDatabase.TAGS_COLUMNS, "tag = ?", + selA, null, null, null); + Tag item = null; + cursor.moveToFirst(); + if (!cursor.isAfterLast()) { + item = cursorToTag(cursor); + cursor.moveToNext(); + } + // Make sure to close the cursor + cursor.close(); + return item; + } } diff --git a/opacclient/opacapp/src/main/java/de/geeksfactory/opacclient/storage/StarDatabase.java b/opacclient/opacapp/src/main/java/de/geeksfactory/opacclient/storage/StarDatabase.java index 3891e1572..3ea971583 100644 --- a/opacclient/opacapp/src/main/java/de/geeksfactory/opacclient/storage/StarDatabase.java +++ b/opacclient/opacapp/src/main/java/de/geeksfactory/opacclient/storage/StarDatabase.java @@ -48,7 +48,7 @@ public class StarDatabase extends SQLiteOpenHelper { public static final String STAR_WHERE_NR_LIB = "bib = ? AND medianr = ?"; public static final String[] COLUMNS = {"id AS _id", "medianr", "bib", "title", "mediatype"}; - public static final String[] TAGS_COLUMNS = {"id", "tags"}; + public static final String[] TAGS_COLUMNS = {"id", "tag"}; public static final String[] STAR_TAGS_COLUMNS = {"tag", "item"}; private static final String DATABASE_NAME = "starred.db"; private static final int DATABASE_VERSION = 7; // REPLACE ONUPGRADE IF YOU diff --git a/opacclient/opacapp/src/main/res/layout/listitem_starred.xml b/opacclient/opacapp/src/main/res/layout/listitem_starred.xml index 6e7376771..730fe5fad 100644 --- a/opacclient/opacapp/src/main/res/layout/listitem_starred.xml +++ b/opacclient/opacapp/src/main/res/layout/listitem_starred.xml @@ -36,4 +36,22 @@ android:padding="5dp" android:textAppearance="?android:attr/textAppearanceMedium"/> + + + \ No newline at end of file diff --git a/opacclient/opacapp/src/main/res/values/strings.xml b/opacclient/opacapp/src/main/res/values/strings.xml index 23ab25cbe..9a4091443 100644 --- a/opacclient/opacapp/src/main/res/values/strings.xml +++ b/opacclient/opacapp/src/main/res/values/strings.xml @@ -126,6 +126,7 @@ Library Really delete account? Select Account + Add tag Privacy Library Search