Forums, Topics, and Threads are now downloaded dynamically.
This allows for faster content downloads, however only content downloaded will be available while offline. Signed-off-by: Ricky Barrette <rickbarrette@gmail.com>
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
<manifest package="org.RickBarrette.osj.forum"
|
||||
android:versionCode="345"
|
||||
android:versionCode="364"
|
||||
android:versionName="1.0" xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="auto">
|
||||
|
||||
<uses-sdk
|
||||
|
||||
@@ -24,6 +24,9 @@ import org.RickBarrette.osj.forum.content.ForumContent.ForumItem;
|
||||
import org.RickBarrette.osj.forum.content.OnItemSelectedListener;
|
||||
import org.RickBarrette.osj.forum.content.TopicAdapter;
|
||||
import org.RickBarrette.osj.forum.content.TopicContent;
|
||||
import org.RickBarrette.osj.forum.database.DatabaseListener;
|
||||
import org.RickBarrette.osj.forum.database.ForumDatabase;
|
||||
import org.xmlrpc.android.XMLRPCClient;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.os.Bundle;
|
||||
@@ -38,7 +41,7 @@ import android.widget.ListView;
|
||||
*
|
||||
* @author ricky barrette
|
||||
*/
|
||||
public class ForumDetailFragment extends ListFragment {
|
||||
public class ForumDetailFragment extends ListFragment implements DatabaseListener {
|
||||
|
||||
public static final String ARG_ITEM_ID = "item_id";
|
||||
private int mActivatedPosition = ListView.INVALID_POSITION;
|
||||
@@ -46,10 +49,30 @@ public class ForumDetailFragment extends ListFragment {
|
||||
|
||||
ForumItem mItem;
|
||||
private OnItemSelectedListener mCallbacks;
|
||||
private ForumDatabase mDb;
|
||||
|
||||
public ForumDetailFragment() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivityCreated(final Bundle savedInstanceState) {
|
||||
super.onActivityCreated(savedInstanceState);
|
||||
mDb = new ForumDatabase(getActivity(), this);
|
||||
|
||||
new Thread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
mDb.saveTopics(XMLRPCClient.getClient(getActivity()), mItem.content.get("forum_id"), false);
|
||||
}
|
||||
}).start();
|
||||
|
||||
if (TopicContent.ITEMS.size() == 0) {
|
||||
TopicContent.getTopics((String) mItem.content.get("forum_id"), mDb);
|
||||
if (TopicContent.ITEMS.size() != 0)
|
||||
setListAdapter(new TopicAdapter(getActivity()));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* (non-Javadoc)
|
||||
*
|
||||
@@ -69,19 +92,28 @@ public class ForumDetailFragment extends ListFragment {
|
||||
super.onCreate(savedInstanceState);
|
||||
if (getArguments().containsKey(ARG_ITEM_ID))
|
||||
mItem = ForumContent.ITEM_MAP.get(getArguments().getString(ARG_ITEM_ID));
|
||||
}
|
||||
|
||||
new Thread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
TopicContent.getTopics((String) mItem.content.get("forum_id"), getActivity());
|
||||
getActivity().runOnUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
setListAdapter(new TopicAdapter(getActivity()));
|
||||
}
|
||||
});
|
||||
}
|
||||
}).start();
|
||||
@Override
|
||||
public void onDatabaseCreate() {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDatabaseUpgrade() {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDatabaseUpgradeComplete() {
|
||||
refreshList();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDeletionComplete() {
|
||||
refreshList();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -96,6 +128,11 @@ public class ForumDetailFragment extends ListFragment {
|
||||
mCallbacks.onItemSelected(this, TopicContent.ITEMS.get(position).id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRestoreComplete() {
|
||||
refreshList();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSaveInstanceState(final Bundle outState) {
|
||||
super.onSaveInstanceState(outState);
|
||||
@@ -103,6 +140,11 @@ public class ForumDetailFragment extends ListFragment {
|
||||
outState.putInt(STATE_ACTIVATED_POSITION, mActivatedPosition);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSyncComplete() {
|
||||
refreshList();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onViewCreated(final View view, final Bundle savedInstanceState) {
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
@@ -110,6 +152,21 @@ public class ForumDetailFragment extends ListFragment {
|
||||
setActivatedPosition(savedInstanceState.getInt(STATE_ACTIVATED_POSITION));
|
||||
}
|
||||
|
||||
/**
|
||||
* Refreshes the listview
|
||||
*
|
||||
* @author ricky barrette
|
||||
*/
|
||||
private void refreshList() {
|
||||
getActivity().runOnUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
TopicContent.getTopics((String) mItem.content.get("forum_id"), mDb);
|
||||
setListAdapter(new TopicAdapter(getActivity()));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void setActivatedPosition(final int position) {
|
||||
if (position == AdapterView.INVALID_POSITION)
|
||||
getListView().setItemChecked(mActivatedPosition, false);
|
||||
|
||||
@@ -35,6 +35,7 @@ import android.widget.AdapterView;
|
||||
import android.widget.ListView;
|
||||
|
||||
/**
|
||||
* This fragment will be used to display a list of forums to the user
|
||||
*
|
||||
* @author ricky barrette
|
||||
*/
|
||||
@@ -42,19 +43,38 @@ public class ForumListFragment extends ListFragment implements DatabaseListener
|
||||
|
||||
private ForumDatabase mDb;
|
||||
private static final String STATE_ACTIVATED_POSITION = "activated_position";
|
||||
private static final String TAG = "ForumListFragment";
|
||||
private OnItemSelectedListener mCallbacks = sForumCallbacks;
|
||||
private int mActivatedPosition = ListView.INVALID_POSITION;
|
||||
|
||||
private static OnItemSelectedListener sForumCallbacks = new OnItemSelectedListener() {
|
||||
@Override
|
||||
public void onItemSelected(final Fragment listFragment, final String id) {
|
||||
// TODO something
|
||||
}
|
||||
};
|
||||
|
||||
public ForumListFragment() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivityCreated(final Bundle savedInstanceState) {
|
||||
super.onActivityCreated(savedInstanceState);
|
||||
mDb = new ForumDatabase(getActivity(), this);
|
||||
|
||||
new Thread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
mDb.saveForums(false);
|
||||
}
|
||||
}).start();
|
||||
|
||||
if (ForumContent.ITEMS.size() == 0) {
|
||||
ForumContent.getForum(mDb);
|
||||
if (ForumContent.ITEMS.size() != 0)
|
||||
setListAdapter(new ForumAdapter(getActivity()));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAttach(final Activity activity) {
|
||||
super.onAttach(activity);
|
||||
@@ -64,25 +84,6 @@ public class ForumListFragment extends ListFragment implements DatabaseListener
|
||||
mCallbacks = (OnItemSelectedListener) activity;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate(final Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
Log.v(TAG, "onCreate()");
|
||||
|
||||
mDb = new ForumDatabase(getActivity(), this);
|
||||
|
||||
new Thread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
mDb.saveForums(true);
|
||||
}
|
||||
}).start();
|
||||
|
||||
if (ForumContent.ITEMS.size() == 0)
|
||||
ForumContent.getForum(mDb);
|
||||
setListAdapter(new ForumAdapter(getActivity()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDatabaseCreate() {
|
||||
// TODO Auto-generated method stub
|
||||
@@ -103,8 +104,7 @@ public class ForumListFragment extends ListFragment implements DatabaseListener
|
||||
|
||||
@Override
|
||||
public void onDeletionComplete() {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
refreshList();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -121,8 +121,7 @@ public class ForumListFragment extends ListFragment implements DatabaseListener
|
||||
|
||||
@Override
|
||||
public void onRestoreComplete() {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
refreshList();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -134,13 +133,7 @@ public class ForumListFragment extends ListFragment implements DatabaseListener
|
||||
|
||||
@Override
|
||||
public void onSyncComplete() {
|
||||
getActivity().runOnUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
ForumContent.getForum(mDb);
|
||||
setListAdapter(new ForumAdapter(getActivity()));
|
||||
}
|
||||
});
|
||||
refreshList();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -150,6 +143,21 @@ public class ForumListFragment extends ListFragment implements DatabaseListener
|
||||
setActivatedPosition(savedInstanceState.getInt(STATE_ACTIVATED_POSITION));
|
||||
}
|
||||
|
||||
/**
|
||||
* Refreshes the listview
|
||||
*
|
||||
* @author ricky barrette
|
||||
*/
|
||||
private void refreshList() {
|
||||
getActivity().runOnUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
ForumContent.getForum(mDb);
|
||||
setListAdapter(new ForumAdapter(getActivity()));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void setActivatedPosition(final int position) {
|
||||
if (position == AdapterView.INVALID_POSITION)
|
||||
getListView().setItemChecked(mActivatedPosition, false);
|
||||
|
||||
@@ -24,6 +24,9 @@ import org.RickBarrette.osj.forum.content.ThreadAdapter;
|
||||
import org.RickBarrette.osj.forum.content.ThreadContent;
|
||||
import org.RickBarrette.osj.forum.content.TopicContent;
|
||||
import org.RickBarrette.osj.forum.content.TopicContent.TopicItem;
|
||||
import org.RickBarrette.osj.forum.database.DatabaseListener;
|
||||
import org.RickBarrette.osj.forum.database.ForumDatabase;
|
||||
import org.xmlrpc.android.XMLRPCClient;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.os.Bundle;
|
||||
@@ -33,7 +36,7 @@ import android.widget.AbsListView;
|
||||
import android.widget.AdapterView;
|
||||
import android.widget.ListView;
|
||||
|
||||
public class TopicDetailFragment extends ListFragment {
|
||||
public class TopicDetailFragment extends ListFragment implements DatabaseListener {
|
||||
|
||||
public static final String ARG_ITEM_ID = "item_id";
|
||||
private int mActivatedPosition = ListView.INVALID_POSITION;
|
||||
@@ -41,10 +44,30 @@ public class TopicDetailFragment extends ListFragment {
|
||||
|
||||
TopicItem mItem;
|
||||
private OnItemSelectedListener mCallbacks;
|
||||
private ForumDatabase mDb;
|
||||
|
||||
public TopicDetailFragment() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivityCreated(final Bundle savedInstanceState) {
|
||||
super.onActivityCreated(savedInstanceState);
|
||||
mDb = new ForumDatabase(getActivity(), this);
|
||||
|
||||
new Thread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
mDb.saveThreads(XMLRPCClient.getClient(getActivity()), mItem.content.get("forum_id"), mItem.content.get("topic_id"));
|
||||
}
|
||||
}).start();
|
||||
|
||||
if (ThreadContent.ITEMS.size() == 0) {
|
||||
ThreadContent.getThread((String) mItem.content.get("topic_id"), mDb);
|
||||
if (ThreadContent.ITEMS.size() != 0)
|
||||
setListAdapter(new ThreadAdapter(getActivity()));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* (non-Javadoc)
|
||||
*
|
||||
@@ -67,19 +90,28 @@ public class TopicDetailFragment extends ListFragment {
|
||||
|
||||
if (mItem == null)
|
||||
throw new NullPointerException();
|
||||
}
|
||||
|
||||
new Thread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
ThreadContent.getThread((String) mItem.content.get("topic_id"), 0, 0, getActivity());
|
||||
getActivity().runOnUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
setListAdapter(new ThreadAdapter(getActivity()));
|
||||
}
|
||||
});
|
||||
}
|
||||
}).start();
|
||||
@Override
|
||||
public void onDatabaseCreate() {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDatabaseUpgrade() {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDatabaseUpgradeComplete() {
|
||||
refreshList();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDeletionComplete() {
|
||||
refreshList();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -94,6 +126,11 @@ public class TopicDetailFragment extends ListFragment {
|
||||
mCallbacks.onItemSelected(this, TopicContent.ITEMS.get(position).id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRestoreComplete() {
|
||||
refreshList();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSaveInstanceState(final Bundle outState) {
|
||||
super.onSaveInstanceState(outState);
|
||||
@@ -101,6 +138,11 @@ public class TopicDetailFragment extends ListFragment {
|
||||
outState.putInt(STATE_ACTIVATED_POSITION, mActivatedPosition);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSyncComplete() {
|
||||
refreshList();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onViewCreated(final View view, final Bundle savedInstanceState) {
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
@@ -108,6 +150,21 @@ public class TopicDetailFragment extends ListFragment {
|
||||
setActivatedPosition(savedInstanceState.getInt(STATE_ACTIVATED_POSITION));
|
||||
}
|
||||
|
||||
/**
|
||||
* Refreshes the listview
|
||||
*
|
||||
* @author ricky barrette
|
||||
*/
|
||||
private void refreshList() {
|
||||
getActivity().runOnUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
ThreadContent.getThread((String) mItem.content.get("topic_id"), mDb);
|
||||
setListAdapter(new ThreadAdapter(getActivity()));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void setActivatedPosition(final int position) {
|
||||
if (position == AdapterView.INVALID_POSITION)
|
||||
getListView().setItemChecked(mActivatedPosition, false);
|
||||
|
||||
@@ -27,8 +27,6 @@ import java.util.Map;
|
||||
import org.RickBarrette.osj.forum.Log;
|
||||
import org.RickBarrette.osj.forum.database.ForumDatabase;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
/**
|
||||
* This class is used to maintain an instance of a thread's data content
|
||||
*
|
||||
@@ -85,13 +83,10 @@ public class ThreadContent {
|
||||
* @param context
|
||||
* @author ricky barrette
|
||||
*/
|
||||
public static void getThread(final String topicId, final int startNumber, final int lastNumber, final Context context) {
|
||||
public static void getThread(final String topicId, final ForumDatabase db) {
|
||||
ITEMS.clear();
|
||||
ITEM_MAP.clear();
|
||||
|
||||
final ForumDatabase db = new ForumDatabase(context);
|
||||
final List<String> list = db.getThreads(topicId);
|
||||
|
||||
int index = 0;
|
||||
for (final String item : list)
|
||||
addItem(new ThreadItem(Integer.valueOf(index++).toString(), db.getThread(item)));
|
||||
|
||||
@@ -27,8 +27,6 @@ import java.util.Map;
|
||||
import org.RickBarrette.osj.forum.Log;
|
||||
import org.RickBarrette.osj.forum.database.ForumDatabase;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
/**
|
||||
* This class is used to maintain an instance of a topic's content data
|
||||
*
|
||||
@@ -83,11 +81,10 @@ public class TopicContent {
|
||||
* @return
|
||||
* @author ricky barrette
|
||||
*/
|
||||
public static void getTopics(final String forumId, final Context context) {
|
||||
public static void getTopics(final String forumId, final ForumDatabase db) {
|
||||
ITEMS.clear();
|
||||
ITEM_MAP.clear();
|
||||
|
||||
final ForumDatabase db = new ForumDatabase(context);
|
||||
final List<String> list = db.getTopics(forumId);
|
||||
|
||||
int index = 0;
|
||||
|
||||
Reference in New Issue
Block a user