android-ibc-forum

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

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:
AndroidManifest.xml | 4++--
res/values/strings.xml | 4++++
src/de/mtbnews/android/EndlessListActivity.java | 17+++++++++++++++--
src/de/mtbnews/android/ForumActivity.java | 6++++--
src/de/mtbnews/android/SubscriptionForenActivity.java | 208+++++++++++++++++++++----------------------------------------------------------
src/de/mtbnews/android/SubscriptionTopicsActivity.java | 88++++++++++++++++++++++++++++++++++++++++++++++++++++++++-----------------------
src/de/mtbnews/android/service/SubscriptionService.java | 16++++++++++------
src/de/mtbnews/android/tapatalk/TapatalkClient.java | 10++++++----
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) {