package com.athena.asm.util.task; import java.util.List; import android.os.AsyncTask; import com.athena.asm.aSMApplication; import com.athena.asm.data.Post; import com.athena.asm.data.Subject; import com.athena.asm.fragment.SubjectListFragment; import com.athena.asm.viewmodel.PostListViewModel; public class LoadPostTask extends AsyncTask<String, Integer, String> { private int m_boardType; private int m_action; private boolean m_isSilent; private boolean m_isUsePreload; private Subject m_subject; private int m_startNumber; private String m_url; private PostListViewModel m_viewModel; public LoadPostTask(PostListViewModel viewModel, Subject subject, int action, boolean isSilent, boolean isUsePreload, int startNumber, String url) { m_boardType = viewModel.getBoardType(); m_action = action; m_isSilent = isSilent; m_isUsePreload = isUsePreload; m_subject = subject; m_viewModel = viewModel; m_startNumber = startNumber; m_url = url; } @Override protected void onPreExecute() { } private List<Post> getPostList() { List<Post> postList = null; if (m_boardType == SubjectListFragment.BOARD_TYPE_SUBJECT) { // view post in subject mode if (m_startNumber == 0) { // expand from the first post, load from m // http://m.newsmth.net/article/CouponsLife/375717 postList = m_viewModel.getSmthSupport().getPostListFromMobile(m_subject, aSMApplication.getCurrentApplication().getBlackList(), m_boardType); } else { // expand from other post, load from www // http://www.newsmth.net/bbstcon.php?board=BasketballForum&gid=2956789&start=2956791 postList = m_viewModel.getSmthSupport().getPostList(m_subject, aSMApplication.getCurrentApplication().getBlackList(), m_startNumber); } } else if (m_boardType == SubjectListFragment.BOARD_TYPE_NORMAL) { // view post in normal mode if (m_action == Post.ACTION_DEFAULT) { if (m_url != null && m_url.length() > 0) { // from reply or @ // m_url = "http://m.newsmth.net/refer/at/read?index=" + mail.getNumber(); // m_url = "http://m.newsmth.net/refer/reply/read?index=" + mail.getNumber(); Subject newSubject = new Subject(); postList = m_viewModel.getSmthSupport().getSinglePostListFromMobileUrl(newSubject, m_url); m_viewModel.updateSubject(newSubject); } else { postList = m_viewModel.getSmthSupport().getSinglePostList(m_subject); } } else { // m_action might be: // ACTION_FIRST_POST_IN_SUBJECT // ACTION_PREVIOUS_POST_IN_SUBJECT // ACTION_NEXT_POST_IN_SUBJECT postList = m_viewModel.getSmthSupport().getTopicPostList(m_subject, m_action); } } else { // digest or mark mode postList = m_viewModel.getSmthSupport().getPostListFromMobile(m_subject, aSMApplication.getCurrentApplication().getBlackList(), m_boardType); } return postList; } @Override protected String doInBackground(String... params) { if (m_isSilent) { m_viewModel.setPreloadPostList(getPostList()); m_viewModel.setIsPreloadFinished(true); } else { if (m_isUsePreload && m_viewModel.isPreloadFinished() && m_viewModel.getPreloadPostList() != null) { m_viewModel.setIsPreloadFinished(false); m_viewModel.updatePostListFromPreloadPostList(); m_viewModel.updateCurrentSubjectFromPreloadSubject(); } else { m_viewModel.setPostList(getPostList()); } } return null; } @Override protected void onPostExecute(String result) { if (!m_isSilent) { m_viewModel.notifyPostListChanged(); if(m_viewModel.getPostListAdapter() != null){ m_viewModel.getPostListAdapter().updateIndexer(); } } } }