android-ibc-forum

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

commit ed0e049bbc51c98d0ffd7dca9d5978cf281ef991
parent 409db0275db1c4ccd3d38e1bcfd73917ff68c459
Author: Jan Dankert <devnull@localhost>
Date:   Sun,  5 Feb 2012 23:51:19 +0100

Ungelesene Themen/Foren fett markieren, Themenliste umschaltbar auf Ankündigungen und wichtigen Themen.

Diffstat:
res/menu/forum.xml | 3+++
res/menu/topic.xml | 8+++++---
res/values/strings.xml | 7+++++++
src/de/mtbnews/android/EndlessListActivity.java | 3+++
src/de/mtbnews/android/ForumActivity.java | 24++++++++++++++++++++++--
src/de/mtbnews/android/TopicActivity.java | 67+++++++++++++++++++++++++++++++++----------------------------------
src/de/mtbnews/android/adapter/ListEntryContentAdapter.java | 4++++
src/de/mtbnews/android/tapatalk/TapatalkClient.java | 28+++++++++++++++++++++++-----
src/de/mtbnews/android/tapatalk/wrapper/Forum.java | 11++++++++---
src/de/mtbnews/android/tapatalk/wrapper/ListEntry.java | 2++
src/de/mtbnews/android/tapatalk/wrapper/Mailbox.java | 7+++++++
src/de/mtbnews/android/tapatalk/wrapper/Message.java | 9++++++++-
src/de/mtbnews/android/tapatalk/wrapper/Post.java | 7+++++++
src/de/mtbnews/android/tapatalk/wrapper/Topic.java | 7+++++++
src/org/mcsoxford/rss/RSSFeed.java | 6++++++
src/org/mcsoxford/rss/RSSItem.java | 6++++++
16 files changed, 151 insertions(+), 48 deletions(-)

diff --git a/res/menu/forum.xml b/res/menu/forum.xml @@ -9,6 +9,9 @@ <item android:id="@+id/menu_subscribe" android:title="@string/subscribe_forum" android:icon="@android:drawable/ic_input_get"></item> + <item android:id="@+id/menu_mode" android:title="@string/mode" + android:icon="@android:drawable/ic_menu_share"></item> + <item android:id="@+id/menu_mark_all_read" android:title="@string/mark_all_forum_read" android:icon="@android:drawable/ic_menu_agenda"></item> diff --git a/res/menu/topic.xml b/res/menu/topic.xml @@ -2,12 +2,14 @@ <item android:id="@+id/menu_subscribe" android:title="@string/subscribe_topic" android:icon="@android:drawable/ic_input_get"></item> - - <item android:id="@+id/menu_mark_read" android:title="@string/mark_topic_read" + <!-- + Erst ab Tapatalk-API-Version 4 <item android:id="@+id/menu_mark_read" + android:title="@string/mark_topic_read" android:icon="@android:drawable/ic_menu_agenda"></item> + --> <item android:id="@+id/menu_reply" android:title="@string/reply" android:icon="@android:drawable/ic_menu_gallery"></item> - + </menu> \ No newline at end of file diff --git a/res/values/strings.xml b/res/values/strings.xml @@ -147,6 +147,7 @@ <string name="mark_unread">Als ungelesen markieren</string> <string name="subscribe_forum">Forum abonnieren</string> <string name="subscribe_topic">Thema abonnieren</string> + <string name="mode">Modus</string> <string name="interval">Intervall</string> @@ -181,4 +182,10 @@ <item>Wöchentliche E-Mail</item> </string-array> + <string-array name="topic_modes"> + <item>Standard-Themen</item> + <item>Wichtige Themen</item> + <item>Ankündigungen</item> + </string-array> + </resources> diff --git a/src/de/mtbnews/android/EndlessListActivity.java b/src/de/mtbnews/android/EndlessListActivity.java @@ -60,6 +60,9 @@ public abstract class EndlessListActivity<T> extends ListActivity */ protected abstract int getTotalSize(); + /** + * Initiales Laden der ersten Listeneinträge. + */ protected void initialLoad() { prefs = PreferenceManager.getDefaultSharedPreferences(this); diff --git a/src/de/mtbnews/android/ForumActivity.java b/src/de/mtbnews/android/ForumActivity.java @@ -42,6 +42,7 @@ public class ForumActivity extends EndlessListActivity<Topic> private SharedPreferences prefs; private int totalSize; private String forumId; + private int topicMode = TapatalkClient.TOPIC_STANDARD; @Override protected void onCreate(Bundle savedInstanceState) @@ -335,7 +336,7 @@ public class ForumActivity extends EndlessListActivity<Topic> }.execute(); return true; - + case R.id.menu_mark_all_read: new ServerAsyncTask(ForumActivity.this, @@ -363,6 +364,25 @@ public class ForumActivity extends EndlessListActivity<Topic> }.execute(); return true; + + case R.id.menu_mode: + + // Den Topic-Mode ändern (Standard,Wichtig,Ankündigungen) + AlertDialog.Builder builder2 = new AlertDialog.Builder(this); + builder2.setTitle(R.string.mode); + builder2.setItems(R.array.topic_modes, + new DialogInterface.OnClickListener() + { + + public void onClick(DialogInterface dialog, + final int item) + { + topicMode = item + 1; + initialLoad(); + } + }); + builder2.create().show(); + return true; } return false; } @@ -390,7 +410,7 @@ public class ForumActivity extends EndlessListActivity<Topic> TapatalkClient client = ((IBCApplication) getApplication()).client; try { - this.forum = client.getForum(forumId, from, to); + this.forum = client.getForum(forumId, from, to, topicMode); totalSize = this.forum.topicCount; } catch (TapatalkException e) diff --git a/src/de/mtbnews/android/TopicActivity.java b/src/de/mtbnews/android/TopicActivity.java @@ -109,7 +109,6 @@ public class TopicActivity extends EndlessListActivity<Post> try { - topic = client.getTopic(topicId, from, to); forumId = topic.forumId; @@ -156,49 +155,49 @@ public class TopicActivity extends EndlessListActivity<Post> return true; case R.id.menu_subscribe: - + AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle(R.string.subscribe_topic); builder.setItems(R.array.subscription_modes, new DialogInterface.OnClickListener() + { + public void onClick(DialogInterface dialog, + final int item) + { + new ServerAsyncTask(TopicActivity.this, + R.string.mark_topic_read) { - public void onClick(DialogInterface dialog, - final int item) + + @Override + protected void callServer() + throws IOException { - new ServerAsyncTask(TopicActivity.this, - R.string.mark_topic_read) + TapatalkClient client = ((IBCApplication) getApplication()) + .getTapatalkClient(); + try { - - @Override - protected void callServer() - throws IOException - { - TapatalkClient client = ((IBCApplication) getApplication()) - .getTapatalkClient(); - try - { - client.subscribeTopic(topicId, - item - 1); - } - catch (TapatalkException e) - { - throw new RuntimeException(e); - } - } - - @Override - protected void doOnSuccess() - { - Toast.makeText(getApplicationContext(), - R.string.subscription_saved, - Toast.LENGTH_SHORT).show(); - } - }.execute(); + client.subscribeTopic(topicId, + item - 1); + } + catch (TapatalkException e) + { + throw new RuntimeException(e); + } + } + + @Override + protected void doOnSuccess() + { + Toast.makeText(getApplicationContext(), + R.string.subscription_saved, + Toast.LENGTH_SHORT).show(); } - }); + }.execute(); + } + }); builder.create().show(); return true; - + case R.id.menu_mark_read: new ServerAsyncTask(TopicActivity.this, diff --git a/src/de/mtbnews/android/adapter/ListEntryContentAdapter.java b/src/de/mtbnews/android/adapter/ListEntryContentAdapter.java @@ -10,6 +10,7 @@ import ru.perm.kefir.bbcode.TextProcessor; import android.app.Activity; import android.content.Context; import android.content.SharedPreferences; +import android.graphics.Typeface; import android.text.Html; import android.text.format.DateFormat; import android.view.LayoutInflater; @@ -127,6 +128,9 @@ public class ListEntryContentAdapter extends BaseAdapter else viewHolder.title.setEnabled(false); + if (e.isUnread() ) + viewHolder.title.setTypeface(null, Typeface.BOLD); + if (e.getContent() != null) { SharedPreferences prefs = ((IBCApplication) ((Activity) mContext) diff --git a/src/de/mtbnews/android/tapatalk/TapatalkClient.java b/src/de/mtbnews/android/tapatalk/TapatalkClient.java @@ -154,14 +154,26 @@ public class TapatalkClient return mapArr; } + public final static int TOPIC_STANDARD = 1; + public final static int TOPIC_STICKY = 2; + public final static int TOPIC_ANNOUNCEMENT = 3; + @SuppressWarnings("unchecked") - public Forum getForum(String forumId, int from, int to) + public Forum getForum(String forumId, int from, int to, int mode) throws TapatalkException { try { - final Object[] params = new Object[] { forumId, from, to }; - // TODO Paging! + final String mode2; + + if (mode == TOPIC_ANNOUNCEMENT) + mode2 = "ANN"; + else if (mode == TOPIC_STICKY) + mode2 = "TOP"; + else + mode2 = ""; + + final Object[] params = new Object[] { forumId, from, to, mode2 }; Object o = client.callEx("get_topic", params); Map map = (Map) o; @@ -185,6 +197,7 @@ public class TapatalkClient new String((byte[]) topicMap.get("short_content")),// new String((byte[]) topicMap.get("topic_author_name")), 0); + topic.unread = (Boolean) topicMap.get("new_post"); topics.add(topic); } @@ -224,6 +237,7 @@ public class TapatalkClient new String((byte[]) topicMap.get("short_content")),// new String((byte[]) topicMap .get("post_author_name")), 0); + topic.unread = (Boolean) topicMap.get("new_post"); topics.add(topic); } } @@ -262,6 +276,7 @@ public class TapatalkClient String name = byteArrayToString(map2.get("forum_name")); Forum forum = new Forum(id, new ArrayList<Topic>(), name, null, null); + forum.unread = (Boolean) map2.get("new_post"); forums.add(forum); } @@ -313,8 +328,10 @@ public class TapatalkClient { try { - Object param = new String[] { topicId }; - toMap(client.call("mark_topic_read", param)); + // Object param = new String[] { topicId }; + // toMap(client.call("mark_topic_read", param)); + Object[] params = new String[] { topicId }; + toMap(client.callEx("mark_topic_read", params)); } catch (XMLRPCException e) @@ -460,6 +477,7 @@ public class TapatalkClient new String((byte[]) topicMap.get("short_content")),// new String((byte[]) topicMap.get("post_author_name")), 0); + topic.unread = (Boolean) topicMap.get("new_post"); topics.add(topic); } diff --git a/src/de/mtbnews/android/tapatalk/wrapper/Forum.java b/src/de/mtbnews/android/tapatalk/wrapper/Forum.java @@ -14,10 +14,16 @@ public class Forum implements ListEntry private String title; private Date date; private String content; - + public List<Forum> subForen; public boolean subOnly; + public boolean unread; + @Override + public boolean isUnread() + { + return this.unread; + } /** * @param id @@ -38,7 +44,6 @@ public class Forum implements ListEntry this.content = content; } - /** * @return the id */ @@ -79,9 +84,9 @@ public class Forum implements ListEntry return topics; } - /** * Forum hat keinen Namen + * * @see de.mtbnews.android.tapatalk.wrapper.ListEntry#getName() */ @Override diff --git a/src/de/mtbnews/android/tapatalk/wrapper/ListEntry.java b/src/de/mtbnews/android/tapatalk/wrapper/ListEntry.java @@ -12,4 +12,6 @@ public interface ListEntry Date getDate(); String getName(); + + boolean isUnread(); } diff --git a/src/de/mtbnews/android/tapatalk/wrapper/Mailbox.java b/src/de/mtbnews/android/tapatalk/wrapper/Mailbox.java @@ -48,5 +48,12 @@ public class Mailbox implements ListEntry { return name; } + public boolean unread; + + @Override + public boolean isUnread() + { + return this.unread; + } } diff --git a/src/de/mtbnews/android/tapatalk/wrapper/Message.java b/src/de/mtbnews/android/tapatalk/wrapper/Message.java @@ -5,12 +5,19 @@ import java.util.Date; public class Message implements ListEntry { public String id; - public boolean unread; private Date date; public String from; public String[] to; public String subject; public String content; + public boolean unread; + + + @Override + public boolean isUnread() + { + return this.unread; + } /** * @param id diff --git a/src/de/mtbnews/android/tapatalk/wrapper/Post.java b/src/de/mtbnews/android/tapatalk/wrapper/Post.java @@ -10,6 +10,13 @@ public class Post implements ListEntry private String content; private String name; + public boolean unread; + + @Override + public boolean isUnread() + { + return this.unread; + } /** * @param time diff --git a/src/de/mtbnews/android/tapatalk/wrapper/Topic.java b/src/de/mtbnews/android/tapatalk/wrapper/Topic.java @@ -17,6 +17,13 @@ public class Topic implements ListEntry private int postCount; public String forumId; + public boolean unread; + + @Override + public boolean isUnread() + { + return this.unread; + } /** * @param id diff --git a/src/org/mcsoxford/rss/RSSFeed.java b/src/org/mcsoxford/rss/RSSFeed.java @@ -30,6 +30,12 @@ public class RSSFeed extends RSSBase { items = new java.util.LinkedList<RSSItem>(); } + @Override + public boolean isUnread() + { + return false; + } + /** * Returns an unmodifiable list of RSS items. */ diff --git a/src/org/mcsoxford/rss/RSSItem.java b/src/org/mcsoxford/rss/RSSItem.java @@ -25,6 +25,12 @@ public class RSSItem extends RSSBase { private final java.util.List<MediaThumbnail> thumbnails; private String content; + @Override + public boolean isUnread() + { + return false; + } + /* Internal constructor for RSSHandler */ RSSItem(byte categoryCapacity, byte thumbnailCapacity) { super(categoryCapacity);