summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Dolgov <fox@madoka.volgo-balt.ru>2012-06-20 15:20:19 +0400
committerAndrew Dolgov <fox@madoka.volgo-balt.ru>2012-06-20 15:20:19 +0400
commitf532761611f633bf87a63c542ee5326bf6d9654c (patch)
tree027fb9dace3595f7788c0159206a7781ba6a9852
parentb4b781209f643302b69b696fbafcbe9ee0495f76 (diff)
implement publish with note
-rw-r--r--res/menu/headlines_menu.xml44
-rw-r--r--res/menu/main_menu.xml5
-rw-r--r--res/values/strings.xml1
-rw-r--r--src/org/fox/ttrss/HeadlinesFragment.java3
-rw-r--r--src/org/fox/ttrss/MainActivity.java224
5 files changed, 186 insertions, 91 deletions
diff --git a/res/menu/headlines_menu.xml b/res/menu/headlines_menu.xml
index d9c6b7be..073ecb37 100644
--- a/res/menu/headlines_menu.xml
+++ b/res/menu/headlines_menu.xml
@@ -1,39 +1,39 @@
-<menu xmlns:android="http://schemas.android.com/apk/res/android">
+<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/selection_toggle_unread"
android:showAsAction=""
android:title="@string/context_selection_toggle_unread"/>
-
<item
android:id="@+id/selection_toggle_marked"
android:showAsAction=""
android:title="@string/context_selection_toggle_marked"/>
-
<item
android:id="@+id/selection_toggle_published"
android:showAsAction=""
android:title="@string/context_selection_toggle_published"/>
- <group android:id="@+id/menu_group_single_article">
-
- <item
- android:id="@+id/share_article"
- android:showAsAction=""
- android:title="@string/share_article"/>
-
+ <group android:id="@+id/menu_group_single_article" >
<item
- android:id="@+id/article_link_copy"
- android:showAsAction=""
- android:title="@string/article_link_copy"/>
-
- <item
- android:id="@+id/catchup_above"
- android:showAsAction=""
- android:title="@string/article_mark_read_above"/>
-
-
+ android:id="@+id/share_article"
+ android:showAsAction=""
+ android:title="@string/share_article"/>
+ <item
+ android:id="@+id/article_link_copy"
+ android:showAsAction=""
+ android:title="@string/article_link_copy"/>
+ <item
+ android:id="@+id/catchup_above"
+ android:showAsAction=""
+ android:title="@string/article_mark_read_above"/>
+ <item
+ android:id="@+id/set_labels"
+ android:icon="@drawable/ic_menu_marked"
+ android:title="@string/article_set_labels"/>
+ <item
+ android:id="@+id/article_set_note"
+ android:showAsAction=""
+ android:title="@string/article_set_note"/>
</group>
-
-
+
</menu> \ No newline at end of file
diff --git a/res/menu/main_menu.xml b/res/menu/main_menu.xml
index 053c9373..23b36521 100644
--- a/res/menu/main_menu.xml
+++ b/res/menu/main_menu.xml
@@ -127,6 +127,11 @@
android:id="@+id/set_labels"
android:icon="@drawable/ic_menu_marked"
android:title="@string/article_set_labels"/>
+
+ <item
+ android:id="@+id/article_set_note"
+ android:showAsAction=""
+ android:title="@string/article_set_note"/>
</group>
</group>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index c686a2a3..266a86e4 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -118,4 +118,5 @@
<string name="dialog_offline_sync_in_progress">Offline sync in progress</string>
<string name="dialog_offline_sync_stop">Stop syncing</string>
<string name="dialog_offline_sync_continue">Continue</string>
+ <string name="article_set_note">Publish with note</string>
</resources> \ No newline at end of file
diff --git a/src/org/fox/ttrss/HeadlinesFragment.java b/src/org/fox/ttrss/HeadlinesFragment.java
index 58b68e75..66696d63 100644
--- a/src/org/fox/ttrss/HeadlinesFragment.java
+++ b/src/org/fox/ttrss/HeadlinesFragment.java
@@ -116,6 +116,9 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener,
menu.setGroupVisible(R.id.menu_group_single_article, true);
}
+ menu.findItem(R.id.set_labels).setEnabled(m_onlineServices.getApiLevel() >= 1);
+ menu.findItem(R.id.article_set_note).setEnabled(m_onlineServices.getApiLevel() >= 1);
+
super.onCreateContextMenu(menu, v, menuInfo);
}
diff --git a/src/org/fox/ttrss/MainActivity.java b/src/org/fox/ttrss/MainActivity.java
index 63f5f0ea..c8215534 100644
--- a/src/org/fox/ttrss/MainActivity.java
+++ b/src/org/fox/ttrss/MainActivity.java
@@ -247,6 +247,24 @@ public class MainActivity extends FragmentActivity implements OnlineServices {
req.execute(map);
}
+ @SuppressWarnings({ "unchecked", "serial" })
+ public void saveArticleNote(final Article article, final String note) {
+ ApiRequest req = new ApiRequest(getApplicationContext());
+
+ HashMap<String, String> map = new HashMap<String, String>() {
+ {
+ put("sid", m_sessionId);
+ put("op", "updateArticle");
+ put("article_ids", String.valueOf(article.id));
+ put("mode", "1");
+ put("data", note);
+ put("field", "3");
+ }
+ };
+
+ req.execute(map);
+ }
+
public static String articlesToIdString(ArticleList articles) {
String tmp = "";
@@ -936,6 +954,11 @@ public class MainActivity extends FragmentActivity implements OnlineServices {
case R.id.go_offline:
switchOffline();
return true;
+ case R.id.article_set_note:
+ if (m_selectedArticle != null) {
+ editArticleNote(m_selectedArticle);
+ }
+ return true;
case R.id.headlines_select:
if (hf != null) {
Dialog dialog = new Dialog(this);
@@ -1095,74 +1118,7 @@ public class MainActivity extends FragmentActivity implements OnlineServices {
return true;
case R.id.set_labels:
if (m_selectedArticle != null) {
-
- ApiRequest req = new ApiRequest(getApplicationContext()) {
- @Override
- protected void onPostExecute(JsonElement result) {
- if (result != null) {
- Type listType = new TypeToken<List<Label>>() {}.getType();
- final List<Label> labels = new Gson().fromJson(result, listType);
-
- CharSequence[] items = new CharSequence[labels.size()];
- final int[] itemIds = new int[labels.size()];
- boolean[] checkedItems = new boolean[labels.size()];
-
- for (int i = 0; i < labels.size(); i++) {
- items[i] = labels.get(i).caption;
- itemIds[i] = labels.get(i).id;
- checkedItems[i] = labels.get(i).checked;
- }
-
- Dialog dialog = new Dialog(MainActivity.this);
- AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this)
- .setTitle(R.string.article_set_labels)
- .setMultiChoiceItems(items, checkedItems, new OnMultiChoiceClickListener() {
-
- @Override
- public void onClick(DialogInterface dialog, int which, final boolean isChecked) {
- final int labelId = itemIds[which];
-
- @SuppressWarnings("serial")
- HashMap<String, String> map = new HashMap<String, String>() {
- {
- put("sid", m_sessionId);
- put("op", "setArticleLabel");
- put("label_id", String.valueOf(labelId));
- put("article_ids", String.valueOf(m_selectedArticle.id));
- if (isChecked) put("assign", "true");
- }
- };
-
- ApiRequest req = new ApiRequest(m_context);
- req.execute(map);
-
- }
- }).setPositiveButton(R.string.dialog_close, new OnClickListener() {
-
- @Override
- public void onClick(DialogInterface dialog, int which) {
- dialog.cancel();
- }
- });
-
- dialog = builder.create();
- dialog.show();
-
- }
- }
- };
-
- @SuppressWarnings("serial")
- HashMap<String, String> map = new HashMap<String, String>() {
- {
- put("sid", m_sessionId);
- put("op", "getLabels");
- put("article_id", String.valueOf(m_selectedArticle.id));
- }
- };
-
- req.execute(map);
-
+ editArticleLabels(m_selectedArticle);
}
return true;
default:
@@ -1172,6 +1128,105 @@ public class MainActivity extends FragmentActivity implements OnlineServices {
}
}
+ private void editArticleNote(final Article article) {
+ String note = "";
+
+ AlertDialog.Builder builder = new AlertDialog.Builder(this);
+ builder.setTitle(article.title);
+ final EditText topicEdit = new EditText(this);
+ topicEdit.setText(note);
+ builder.setView(topicEdit);
+
+ builder.setPositiveButton(R.string.article_set_note, new Dialog.OnClickListener() {
+ public void onClick(DialogInterface dialog, int which) {
+ saveArticleNote(article, topicEdit.getText().toString().trim());
+ article.published = true;
+ saveArticlePublished(article);
+ updateHeadlines();
+ }
+ });
+
+ builder.setNegativeButton(R.string.dialog_cancel, new Dialog.OnClickListener() {
+ public void onClick(DialogInterface dialog, int which) {
+ //
+ }
+ });
+
+ AlertDialog dialog = builder.create();
+ dialog.show();
+ }
+
+ private void editArticleLabels(Article article) {
+ final int articleId = article.id;
+
+ ApiRequest req = new ApiRequest(getApplicationContext()) {
+ @Override
+ protected void onPostExecute(JsonElement result) {
+ if (result != null) {
+ Type listType = new TypeToken<List<Label>>() {}.getType();
+ final List<Label> labels = new Gson().fromJson(result, listType);
+
+ CharSequence[] items = new CharSequence[labels.size()];
+ final int[] itemIds = new int[labels.size()];
+ boolean[] checkedItems = new boolean[labels.size()];
+
+ for (int i = 0; i < labels.size(); i++) {
+ items[i] = labels.get(i).caption;
+ itemIds[i] = labels.get(i).id;
+ checkedItems[i] = labels.get(i).checked;
+ }
+
+ Dialog dialog = new Dialog(MainActivity.this);
+ AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this)
+ .setTitle(R.string.article_set_labels)
+ .setMultiChoiceItems(items, checkedItems, new OnMultiChoiceClickListener() {
+
+ @Override
+ public void onClick(DialogInterface dialog, int which, final boolean isChecked) {
+ final int labelId = itemIds[which];
+
+ @SuppressWarnings("serial")
+ HashMap<String, String> map = new HashMap<String, String>() {
+ {
+ put("sid", m_sessionId);
+ put("op", "setArticleLabel");
+ put("label_id", String.valueOf(labelId));
+ put("article_ids", String.valueOf(articleId));
+ if (isChecked) put("assign", "true");
+ }
+ };
+
+ ApiRequest req = new ApiRequest(m_context);
+ req.execute(map);
+
+ }
+ }).setPositiveButton(R.string.dialog_close, new OnClickListener() {
+
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.cancel();
+ }
+ });
+
+ dialog = builder.create();
+ dialog.show();
+
+ }
+ }
+ };
+
+ @SuppressWarnings("serial")
+ HashMap<String, String> map = new HashMap<String, String>() {
+ {
+ put("sid", m_sessionId);
+ put("op", "getLabels");
+ put("article_id", String.valueOf(articleId));
+ }
+ };
+
+ req.execute(map);
+ }
+
private Intent getShareIntent(Article article) {
Intent intent = new Intent(Intent.ACTION_SEND);
@@ -1317,6 +1372,7 @@ public class MainActivity extends FragmentActivity implements OnlineServices {
}
m_menu.findItem(R.id.set_labels).setEnabled(m_apiLevel >= 1);
+ m_menu.findItem(R.id.article_set_note).setEnabled(m_apiLevel >= 1);
m_menu.findItem(R.id.donate).setVisible(BillingHelper.isBillingSupported());
@@ -1744,7 +1800,37 @@ public class MainActivity extends FragmentActivity implements OnlineServices {
if (m_selectedArticle != null) {
shareArticle(m_selectedArticle);
}
- return true;
+ return true;
+ case R.id.set_labels:
+ if (true) {
+ Article article = null;
+
+ if (m_selectedArticle != null) {
+ article = m_selectedArticle;
+ } else if (info != null) {
+ article = hf.getArticleAtPosition(info.position);
+ }
+
+ if (article != null) {
+ editArticleLabels(article);
+ }
+ }
+ return true;
+ case R.id.article_set_note:
+ if (true) {
+ Article article = null;
+
+ if (m_selectedArticle != null) {
+ article = m_selectedArticle;
+ } else if (info != null) {
+ article = hf.getArticleAtPosition(info.position);
+ }
+
+ if (article != null) {
+ editArticleNote(article);
+ }
+ }
+ return true;
case R.id.browse_articles:
if (cf != null) {
FeedCategory cat = cf.getCategoryAtPosition(info.position);