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:
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);