summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Dolgov <[email protected]>2011-12-25 14:59:59 +0300
committerAndrew Dolgov <[email protected]>2011-12-25 14:59:59 +0300
commit59a46f701d1b7c7920923eac9cb72f9e5a1ba8a2 (patch)
tree818bc7eaaeda67f92bbb3d73f1239b3ce48d76ad
parentadf1750387f5819318934f17d30c8ccba16b849c (diff)
implement setting labels for selected article
-rw-r--r--AndroidManifest.xml4
-rw-r--r--res/menu/main_menu.xml6
-rw-r--r--res/values/strings.xml1
-rw-r--r--src/org/fox/ttrss/Label.java9
-rw-r--r--src/org/fox/ttrss/MainActivity.java80
5 files changed, 98 insertions, 2 deletions
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index f43a4921..04528cb3 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.fox.ttrss"
- android:versionCode="44"
- android:versionName="0.3.11" >
+ android:versionCode="45"
+ android:versionName="0.3.12" >
<uses-sdk android:minSdkVersion="7" />
diff --git a/res/menu/main_menu.xml b/res/menu/main_menu.xml
index f8865d90..cc9f474e 100644
--- a/res/menu/main_menu.xml
+++ b/res/menu/main_menu.xml
@@ -112,6 +112,12 @@
android:id="@+id/catchup_above"
android:icon="@drawable/ic_menu_tick"
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"/>
+
</group>
</group>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 9a7adf46..27eea636 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -114,4 +114,5 @@
<string name="offline_image_cache_enabled">Cache images</string>
<string name="offline_image_cache_enabled_summary">Download images to sdcard. This might significantly increase time it takes to go offline.</string>
<string name="notify_downloading_images">Downloading images (%1$d)...</string>
+ <string name="article_set_labels">Set labels</string>
</resources> \ No newline at end of file
diff --git a/src/org/fox/ttrss/Label.java b/src/org/fox/ttrss/Label.java
new file mode 100644
index 00000000..eccc1e66
--- /dev/null
+++ b/src/org/fox/ttrss/Label.java
@@ -0,0 +1,9 @@
+package org.fox.ttrss;
+
+public class Label {
+ int id;
+ String caption;
+ String fg_color;
+ String bg_color;
+ boolean checked;
+}
diff --git a/src/org/fox/ttrss/MainActivity.java b/src/org/fox/ttrss/MainActivity.java
index e89b6adc..932445cb 100644
--- a/src/org/fox/ttrss/MainActivity.java
+++ b/src/org/fox/ttrss/MainActivity.java
@@ -1,5 +1,7 @@
package org.fox.ttrss;
+import java.lang.reflect.Type;
+import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Timer;
@@ -13,6 +15,8 @@ import android.app.Dialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
+import android.content.DialogInterface.OnClickListener;
+import android.content.DialogInterface.OnMultiChoiceClickListener;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
@@ -40,8 +44,10 @@ import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
+import com.google.gson.Gson;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
+import com.google.gson.reflect.TypeToken;
public class MainActivity extends FragmentActivity implements OnlineServices {
private final String TAG = this.getClass().getSimpleName();
@@ -1024,6 +1030,78 @@ 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("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("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);
+
+ }
+ return true;
default:
Log.d(TAG,
"onOptionsItemSelected, unhandled id=" + item.getItemId());
@@ -1127,6 +1205,8 @@ public class MainActivity extends FragmentActivity implements OnlineServices {
getActionBar().setDisplayHomeAsUpEnabled(m_selectedArticle != null);
}
+ m_menu.findItem(R.id.set_labels).setEnabled(m_apiLevel >= 1);
+
} else {
m_menu.setGroupVisible(R.id.menu_group_logged_in, false);
m_menu.setGroupVisible(R.id.menu_group_logged_out, true);