diff options
author | Andrew Dolgov <[email protected]> | 2011-12-25 14:59:59 +0300 |
---|---|---|
committer | Andrew Dolgov <[email protected]> | 2011-12-25 14:59:59 +0300 |
commit | 59a46f701d1b7c7920923eac9cb72f9e5a1ba8a2 (patch) | |
tree | 818bc7eaaeda67f92bbb3d73f1239b3ce48d76ad | |
parent | adf1750387f5819318934f17d30c8ccba16b849c (diff) |
implement setting labels for selected article
-rw-r--r-- | AndroidManifest.xml | 4 | ||||
-rw-r--r-- | res/menu/main_menu.xml | 6 | ||||
-rw-r--r-- | res/values/strings.xml | 1 | ||||
-rw-r--r-- | src/org/fox/ttrss/Label.java | 9 | ||||
-rw-r--r-- | src/org/fox/ttrss/MainActivity.java | 80 |
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); |