commit 0cff91f6ff46034f18776e2ca87262d4dae47b96
parent 993c8670b4a94310596b284bdcab632f7d0c825d
Author: Jan Dankert <devnull@localhost>
Date: Sun, 5 Feb 2012 00:20:23 +0100
Vervollständigung der Activitys zur Anzeige von abbonierten Themen und Foren.
Diffstat:
8 files changed, 159 insertions(+), 194 deletions(-)
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
@@ -35,8 +35,8 @@
<activity android:name="ReplyMailActivity" android:label="@string/mailbox"></activity>
<activity android:name="ReplyPostActivity" android:label="@string/mailbox"></activity>
<activity android:name="CreateTopicActivity" android:label="@string/mailbox"></activity>
- <activity android:name="SubscriptionForenActivity" android:label="@string/mailbox"></activity>
- <activity android:name="SubscriptionTopicsActivity" android:label="@string/mailbox"></activity>
+ <activity android:name="SubscriptionForenActivity" android:label="@string/subscription_forums"></activity>
+ <activity android:name="SubscriptionTopicsActivity" android:label="@string/subscription_topics"></activity>
<!-- declare the default searchable Activity for the whole app -->
<meta-data android:name="android.app.default_searchable"
diff --git a/res/values/strings.xml b/res/values/strings.xml
@@ -49,6 +49,8 @@
<string name="waitingforsave">Speichern</string>
<string name="waitingfor_loadmore">Lade weitere Einträge</string>
<string name="waitingfor_mailbox">Nachrichten werden geladen</string>
+ <string name="waitingfor_subscription_forums">Abbonierte Foren werden geladen</string>
+ <string name="waitingfor_subscription_topics">Abbonierte Themen werden geladen</string>
<string name="name">Name</string>
@@ -132,6 +134,8 @@
<string name="subscription_service_started">Abo-Dienst gestartet</string>
<string name="subscription_service_stopped">Abo-Dienst gestoppt</string>
<string name="subscription_service_desc">Informiert bei ungelesenen, abonnierten Foren oder Themen</string>
+ <string name="subscription_forums">Abbonierte Foren</string>
+ <string name="subscription_topics">Abbonierte Themen</string>
<string name="interval">Intervall</string>
<string-array name="interval_list">
<item>1</item>
diff --git a/src/de/mtbnews/android/EndlessListActivity.java b/src/de/mtbnews/android/EndlessListActivity.java
@@ -24,6 +24,18 @@ import android.widget.AbsListView.OnScrollListener;
*/
public abstract class EndlessListActivity<T> extends ListActivity
{
+ /**
+ * boolean-Parameter der ansagt, dass die Anzeige mit dem letzten Element
+ * beginnen soll.
+ */
+ public static final String LAST_POST = "last_post";
+
+ /**
+ * boolean-Parameter der ansagt, dass die Anzeige mit dem ersten Element
+ * beginnen soll.
+ */
+ public static final String FIRST_POST = "first_post";
+
private boolean loadingInProgress = true;
protected int displayFrom;
@@ -31,6 +43,7 @@ public abstract class EndlessListActivity<T> extends ListActivity
protected boolean autoScrollDown;
/**
+ * Die in dieser ListActivity enthaltene Liste.<br>
* Die Referenz auf diese Liste darf sich nicht ändern, da der ListAdapter
* mit dieser Instanz verbunden ist. Durch 'final' wird das sicher gestellt.
*/
@@ -52,9 +65,9 @@ public abstract class EndlessListActivity<T> extends ListActivity
prefs = PreferenceManager.getDefaultSharedPreferences(this);
final int numLoad = Integer.parseInt(prefs.getString("num_load", "10"));
- if (getIntent().getBooleanExtra("first_post", false))
+ if (getIntent().getBooleanExtra(FIRST_POST, false))
autoScrollDown = false;
- else if (getIntent().getBooleanExtra("last_post", false))
+ else if (getIntent().getBooleanExtra(LAST_POST, false))
autoScrollDown = true;
else
autoScrollDown = prefs.getBoolean("scroll_down", false);
diff --git a/src/de/mtbnews/android/ForumActivity.java b/src/de/mtbnews/android/ForumActivity.java
@@ -36,6 +36,8 @@ import de.mtbnews.android.util.ServerAsyncTask;
*/
public class ForumActivity extends EndlessListActivity<Topic>
{
+ public static final String FORUM_ID = "forum_id";
+
private SharedPreferences prefs;
private int totalSize;
private String forumId;
@@ -60,7 +62,7 @@ public class ForumActivity extends EndlessListActivity<Topic>
login();
}
- forumId = getIntent().getStringExtra("forum_id");
+ forumId = getIntent().getStringExtra(FORUM_ID);
ListAdapter adapter = new ListEntryContentAdapter(ForumActivity.this,
entries);
@@ -208,7 +210,7 @@ public class ForumActivity extends EndlessListActivity<Topic>
case R.id.menu_create_topic:
Intent intent5 = new Intent(this, CreateTopicActivity.class);
- intent5.putExtra("forum_id",forumId);
+ intent5.putExtra(FORUM_ID,forumId);
startActivity(intent5);
return true;
diff --git a/src/de/mtbnews/android/SubscriptionForenActivity.java b/src/de/mtbnews/android/SubscriptionForenActivity.java
@@ -4,13 +4,14 @@
package de.mtbnews.android;
import java.io.IOException;
-import java.util.Map;
+import java.util.ArrayList;
+import java.util.List;
+import android.app.ListActivity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
-import android.text.TextUtils;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuInflater;
@@ -19,26 +20,25 @@ import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.View.OnCreateContextMenuListener;
import android.widget.AdapterView;
+import android.widget.BaseAdapter;
import android.widget.ListAdapter;
import android.widget.ListView;
-import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
import de.mtbnews.android.adapter.ListEntryContentAdapter;
import de.mtbnews.android.tapatalk.TapatalkClient;
import de.mtbnews.android.tapatalk.TapatalkException;
import de.mtbnews.android.tapatalk.wrapper.Forum;
-import de.mtbnews.android.tapatalk.wrapper.Topic;
import de.mtbnews.android.util.ServerAsyncTask;
/**
* @author dankert
*
*/
-public class SubscriptionForenActivity extends EndlessListActivity<Topic>
+public class SubscriptionForenActivity extends ListActivity
{
private SharedPreferences prefs;
- private int totalSize;
- private String forumId;
+
+ private final List<Forum> forumList = new ArrayList<Forum>();
@Override
protected void onCreate(Bundle savedInstanceState)
@@ -55,19 +55,10 @@ public class SubscriptionForenActivity extends EndlessListActivity<Topic>
TapatalkClient client = ((IBCApplication) getApplication())
.getTapatalkClient();
- if (!client.loggedIn && prefs.getBoolean("auto_login", false))
- {
- login();
- }
-
- forumId = getIntent().getStringExtra("forum_id");
-
- ListAdapter adapter = new ListEntryContentAdapter(SubscriptionForenActivity.this,
- entries);
+ ListAdapter adapter = new ListEntryContentAdapter(
+ SubscriptionForenActivity.this, forumList);
setListAdapter(adapter);
- initialLoad();
- // TODO: ggf. das hier in die Oberklasse?
ListView list = getListView();
list.setOnCreateContextMenuListener(new OnCreateContextMenuListener()
{
@@ -81,110 +72,92 @@ public class SubscriptionForenActivity extends EndlessListActivity<Topic>
}
});
+
list.setOnItemClickListener(new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id)
{
- // int aktPosition = displayFrom + position + 1;
- final Intent intent = new Intent(SubscriptionForenActivity.this,
- TopicActivity.class);
- Topic topic = SubscriptionForenActivity.super.entries.get(position);
- intent.putExtra(TopicActivity.TOPIC_ID, topic.getId());
+ final Intent intent = new Intent(
+ SubscriptionForenActivity.this, ForumActivity.class);
+ intent.putExtra(ForumActivity.FORUM_ID, forumList.get(position)
+ .getId());
startActivity(intent);
}
});
- }
-
- // TODO: Das auch in die anderen Listviews einbauen.
- @Override
- public boolean onContextItemSelected(MenuItem item)
- {
- AdapterView.AdapterContextMenuInfo menuInfo = (AdapterView.AdapterContextMenuInfo) item
- .getMenuInfo();
-
- switch (item.getItemId())
- {
- case R.id.menu_goto_top:
-
- final Intent intent = new Intent(SubscriptionForenActivity.this,
- TopicActivity.class);
- intent.putExtra("topic_id", super.entries
- .get(menuInfo.position).getId());
- intent.putExtra("first_post", true);
- startActivity(intent);
- return true;
-
- case R.id.menu_goto_bottom:
-
- final Intent intent2 = new Intent(SubscriptionForenActivity.this,
- TopicActivity.class);
- intent2.putExtra("topic_id", super.entries.get(
- menuInfo.position).getId());
- intent2.putExtra("last_post", true);
- startActivity(intent2);
- return true;
- }
- return super.onContextItemSelected(item);
+ loadForumList();
}
- private void login()
+ private void loadForumList()
{
- final TapatalkClient client = ((IBCApplication) getApplication()).client;
- new ServerAsyncTask(this, R.string.waitingfor_login)
+ new ServerAsyncTask(this, R.string.waitingfor_subscription_forums)
{
+ private List<Forum> newForumList;
+
@Override
- protected synchronized void callServer() throws IOException
+ protected void callServer() throws IOException
{
+ TapatalkClient client = ((IBCApplication) getApplication()).client;
try
{
- Map<String, Object> map = client.login(prefs.getString(
- "username", ""), prefs.getString("password", ""));
-
+ newForumList = client.getSubscribedForum(false);
}
catch (TapatalkException e)
{
- e.printStackTrace();
throw new RuntimeException(e);
}
+ }
+ protected void doOnSuccess()
+ {
+ // Die Referenz der Liste darf nicht geändert werden, da der
+ // ListAdapter mit der Instanz verknüpft ist!
+ forumList.clear();
+ forumList.addAll(newForumList);
+
+ ((BaseAdapter) SubscriptionForenActivity.this.getListAdapter())
+ .notifyDataSetChanged();
}
}.executeSynchronized();
}
- private void logout()
+ @Override
+ public boolean onContextItemSelected(MenuItem item)
{
- final TapatalkClient client = ((IBCApplication) getApplication()).client;
+ AdapterView.AdapterContextMenuInfo menuInfo = (AdapterView.AdapterContextMenuInfo) item
+ .getMenuInfo();
- new ServerAsyncTask(this, R.string.waitingfor_logout)
+ switch (item.getItemId())
{
+ case R.id.menu_goto_top:
- @Override
- protected synchronized void callServer() throws IOException
- {
-
- try
- {
- client.logout();
+ final Intent intent = new Intent(
+ SubscriptionForenActivity.this, ForumActivity.class);
+ intent.putExtra("forum_id", forumList.get(menuInfo.position)
+ .getId());
+ intent.putExtra("first_post", true);
+ startActivity(intent);
+ return true;
- }
- catch (TapatalkException e)
- {
- e.printStackTrace();
- throw new RuntimeException(e);
- }
+ case R.id.menu_goto_bottom:
- }
+ final Intent intent2 = new Intent(
+ SubscriptionForenActivity.this, ForumActivity.class);
+ intent2.putExtra("forum_id", forumList.get(menuInfo.position)
+ .getId());
+ intent2.putExtra("last_post", true);
+ startActivity(intent2);
+ return true;
+ }
- }.executeSynchronized();
+ return super.onContextItemSelected(item);
}
- @Override
public boolean onCreateOptionsMenu(Menu menu)
{
super.onCreateOptionsMenu(menu);
@@ -224,79 +197,8 @@ public class SubscriptionForenActivity extends EndlessListActivity<Topic>
startActivity(intent3);
return true;
- case R.id.menu_logout:
- logout();
- return true;
-
- case R.id.menu_login:
-
- if (TextUtils.isEmpty(prefs.getString("username", "")))
- {
- Toast
- .makeText(this, R.string.nousername,
- Toast.LENGTH_LONG).show();
-
- Intent intent4 = new Intent(this, Configuration.class);
- startActivity(intent4);
- }
- // Evtl. gibt es jetzt einen Benutzernamen ...
-
- if (!TextUtils.isEmpty(prefs.getString("username", "")))
- {
- login();
- }
- else
- {
- Toast
- .makeText(this, R.string.nousername,
- Toast.LENGTH_LONG).show();
- }
-
- return true;
}
return false;
}
- @Override
- protected int getTotalSize()
- {
- return totalSize;
- }
-
- @Override
- protected void loadEntries(
- final de.mtbnews.android.EndlessListActivity.OnListLoadedListener<Topic> onListLoaded,
- final int from, final int to, boolean firstLoad)
- {
-
- new ServerAsyncTask(this, R.string.waitingfor_forum)
- {
- private Forum forum;
-
- @Override
- protected void callServer() throws IOException
- {
-
- TapatalkClient client = ((IBCApplication) getApplication()).client;
- try
- {
- this.forum = client.getForum(forumId, from, to);
- totalSize = this.forum.topicCount;
- }
- catch (TapatalkException e)
- {
- throw new RuntimeException(e);
- }
- }
-
- protected void doOnSuccess()
- {
- SubscriptionForenActivity.this.setTitle(forum.getTitle());
- onListLoaded.listLoaded(this.forum.getTopics());
- }
-
- }.execute();
-
- }
-
}
diff --git a/src/de/mtbnews/android/SubscriptionTopicsActivity.java b/src/de/mtbnews/android/SubscriptionTopicsActivity.java
@@ -4,10 +4,15 @@
package de.mtbnews.android;
import java.io.IOException;
-import java.util.List;
+import android.content.Intent;
import android.os.Bundle;
+import android.view.ContextMenu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
import android.view.View;
+import android.view.ContextMenu.ContextMenuInfo;
+import android.view.View.OnCreateContextMenuListener;
import android.widget.AdapterView;
import android.widget.ListAdapter;
import android.widget.ListView;
@@ -16,7 +21,7 @@ import android.widget.AdapterView.OnItemClickListener;
import de.mtbnews.android.adapter.ListEntryContentAdapter;
import de.mtbnews.android.tapatalk.TapatalkClient;
import de.mtbnews.android.tapatalk.TapatalkException;
-import de.mtbnews.android.tapatalk.wrapper.Post;
+import de.mtbnews.android.tapatalk.wrapper.ListHolder;
import de.mtbnews.android.tapatalk.wrapper.Topic;
import de.mtbnews.android.util.ServerAsyncTask;
@@ -26,10 +31,8 @@ import de.mtbnews.android.util.ServerAsyncTask;
* @author dankert
*
*/
-public class SubscriptionTopicsActivity extends EndlessListActivity<Post>
+public class SubscriptionTopicsActivity extends EndlessListActivity<Topic>
{
- public static final String TOPIC_ID = "topic_id";
-
private int totalSize;
@Override
@@ -49,28 +52,68 @@ public class SubscriptionTopicsActivity extends EndlessListActivity<Post>
initialLoad();
final ListView list = getListView();
+ list.setOnCreateContextMenuListener(new OnCreateContextMenuListener()
+ {
+ @Override
+ public void onCreateContextMenu(ContextMenu menu, View v,
+ ContextMenuInfo menuInfo)
+ {
+ MenuInflater menuInflater = new MenuInflater(getApplication());
+ menuInflater.inflate(R.menu.topic_context, menu);
+
+ }
+ });
list.setOnItemClickListener(new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id)
{
- int aktPosition = displayFrom + position + 1;
- Toast.makeText(SubscriptionTopicsActivity.this, "" + aktPosition,
- Toast.LENGTH_SHORT).show();
-
- // final Intent intent = new Intent(TopicActivity.this,
- // PostActivity.class);
- // intent.putExtra("itemid", position);
- // startActivity(intent);
+ // int aktPosition = displayFrom + position + 1;
+ final Intent intent = new Intent(SubscriptionTopicsActivity.this,
+ TopicActivity.class);
+ Topic topic = SubscriptionTopicsActivity.super.entries.get(position);
+ intent.putExtra(TopicActivity.TOPIC_ID, topic.getId());
+ startActivity(intent);
}
});
+
Toast.makeText(this, R.string.hint_press_long, Toast.LENGTH_SHORT)
.show();
}
+ @Override
+ public boolean onContextItemSelected(MenuItem item)
+ {
+ AdapterView.AdapterContextMenuInfo menuInfo = (AdapterView.AdapterContextMenuInfo) item
+ .getMenuInfo();
+ switch (item.getItemId())
+ {
+ case R.id.menu_goto_top:
+
+ final Intent intent = new Intent(
+ SubscriptionTopicsActivity.this, TopicActivity.class);
+ intent.putExtra(TopicActivity.TOPIC_ID, super.entries.get(menuInfo.position)
+ .getId());
+ intent.putExtra(EndlessListActivity.FIRST_POST, true);
+ startActivity(intent);
+ return true;
+
+ case R.id.menu_goto_bottom:
+
+ final Intent intent2 = new Intent(
+ SubscriptionTopicsActivity.this, TopicActivity.class);
+ intent2.putExtra(TopicActivity.TOPIC_ID, super.entries.get(menuInfo.position)
+ .getId());
+ intent2.putExtra(EndlessListActivity.LAST_POST, true);
+ startActivity(intent2);
+ return true;
+ }
+
+ return super.onContextItemSelected(item);
+ }
@Override
protected int getTotalSize()
{
@@ -79,15 +122,14 @@ public class SubscriptionTopicsActivity extends EndlessListActivity<Post>
@Override
protected void loadEntries(
- final OnListLoadedListener<Post> onListLoadedListener,
+ final OnListLoadedListener<Topic> onListLoadedListener,
final int from, final int to, boolean firstLoad)
{
new ServerAsyncTask(SubscriptionTopicsActivity.this,
- firstLoad ? R.string.waitingfor_topic
+ firstLoad ? R.string.waitingfor_subscription_topics
: R.string.waitingfor_loadmore)
{
- private List<Post> posts;
- private Topic topic;
+ private ListHolder<Topic> topicHolder;
@Override
protected void callServer() throws IOException
@@ -96,13 +138,9 @@ public class SubscriptionTopicsActivity extends EndlessListActivity<Post>
try
{
- String topicId = SubscriptionTopicsActivity.this.getIntent()
- .getStringExtra(TOPIC_ID);
-
- topic = client.getTopic(topicId, from, to);
+ topicHolder = client.getSubscribedTopics(from, to,false);
- totalSize = topic.getPostCount();
- this.posts = topic.getPosts();
+ totalSize = topicHolder.totalCount;
}
catch (TapatalkException e)
{
@@ -112,8 +150,8 @@ public class SubscriptionTopicsActivity extends EndlessListActivity<Post>
protected void doOnSuccess()
{
- SubscriptionTopicsActivity.this.setTitle(topic.getTitle());
- onListLoadedListener.listLoaded(this.posts);
+ //SubscriptionTopicsActivity.this.setTitle(topicHolder.getTitle());
+ onListLoadedListener.listLoaded(this.topicHolder.getChildren());
}
}.execute();
diff --git a/src/de/mtbnews/android/service/SubscriptionService.java b/src/de/mtbnews/android/service/SubscriptionService.java
@@ -33,6 +33,7 @@ import de.mtbnews.android.TopicActivity;
import de.mtbnews.android.tapatalk.TapatalkClient;
import de.mtbnews.android.tapatalk.TapatalkException;
import de.mtbnews.android.tapatalk.wrapper.Forum;
+import de.mtbnews.android.tapatalk.wrapper.ListHolder;
import de.mtbnews.android.tapatalk.wrapper.Mailbox;
import de.mtbnews.android.tapatalk.wrapper.Topic;
@@ -177,10 +178,10 @@ public class SubscriptionService extends Service
try
{
- List<Topic> subscribedTopic = client.getSubscribedTopics(0, 10,
- true);
+ ListHolder<Topic> subscribedTopic = client.getSubscribedTopics(
+ 0, 10, true);
final List<String> topicNameList = new ArrayList<String>();
- for (Topic topic : subscribedTopic)
+ for (Topic topic : subscribedTopic.getChildren())
{
topicNameList.add(topic.getTitle());
}
@@ -200,10 +201,13 @@ public class SubscriptionService extends Service
final Notification notification = new Notification(
R.drawable.ibc_logo, tickerText, actualTime);
+ final String title = getResources().getString(
+ R.string.unread_topic)
+ + " (" + subscribedTopic.getChildren().size() + ")";
+ final String content = TextUtils.join(", ", topicNameList);
+
notification.setLatestEventInfo(getApplicationContext(),
- getResources().getString(R.string.unread_topic)
- + " (" + subscribedTopic.size() + ")",
- TextUtils.join(", ", topicNameList), contentIntent);
+ title, content, contentIntent);
notification.flags = Notification.FLAG_AUTO_CANCEL;
// notification.flags = Notification.FLAG_ONGOING_EVENT
// | Notification.FLAG_NO_CLEAR;
diff --git a/src/de/mtbnews/android/tapatalk/TapatalkClient.java b/src/de/mtbnews/android/tapatalk/TapatalkClient.java
@@ -12,6 +12,7 @@ import android.text.TextUtils;
import android.util.Log;
import de.mtbnews.android.tapatalk.wrapper.Forum;
+import de.mtbnews.android.tapatalk.wrapper.ListHolder;
import de.mtbnews.android.tapatalk.wrapper.Mailbox;
import de.mtbnews.android.tapatalk.wrapper.Message;
import de.mtbnews.android.tapatalk.wrapper.Post;
@@ -197,8 +198,8 @@ public class TapatalkClient
}
@SuppressWarnings("unchecked")
- public List<Topic> getSubscribedTopics(int from, int to, boolean onlyUnread)
- throws TapatalkException
+ public ListHolder<Topic> getSubscribedTopics(int from, int to,
+ boolean onlyUnread) throws TapatalkException
{
try
{
@@ -207,7 +208,6 @@ public class TapatalkClient
Map map = (Map) o;
- @SuppressWarnings("unused")
int topicCount = (Integer) map.get("total_topic_num");
final List<Topic> topics = new ArrayList<Topic>();
@@ -229,7 +229,9 @@ public class TapatalkClient
}
}
- return topics;
+ ListHolder<Topic> topicHolder = new ListHolder<Topic>(topics,
+ topicCount, from, to);
+ return topicHolder;
}
catch (XMLRPCException e)
{