package info.justaway.fragment.main.tab; import android.os.AsyncTask; import android.os.Bundle; import android.view.View; import info.justaway.model.Row; import info.justaway.model.TabManager; import info.justaway.model.TwitterManager; import twitter4j.Query; import twitter4j.QueryResult; /** * 検索タブ */ public class SearchFragment extends BaseFragment { /** * このタブを表す固有のID、ユーザーリストで正数を使うため負数を使う */ public long getTabId() { return TabManager.SEARCH_TAB_ID - Math.abs(mSearchWord.hashCode()); } public String getSearchWord() { return mSearchWord; } private Query mQuery; private String mSearchWord; @Override public void onActivityCreated(Bundle savedInstanceState) { if (mSearchWord == null) { mSearchWord = getArguments().getString("searchWord"); } super.onActivityCreated(savedInstanceState); } /** * このタブに表示するツイートの定義 * @param row ストリーミングAPIから受け取った情報(ツイート+ふぁぼ) * CreateFavoriteEventをキャッチしている為、ふぁぼイベントを受け取ることが出来る * @return trueは表示しない、falseは表示する */ @Override protected boolean isSkip(Row row) { if (row.isStatus()) { if (row.getStatus().getText().contains(mSearchWord)) { return false; } } return true; } @Override protected void taskExecute() { new SearchTask().execute(); } private class SearchTask extends AsyncTask<Void, Void, QueryResult> { @Override protected QueryResult doInBackground(Void... params) { try { Query query; if (mQuery != null && !mReloading) { query = mQuery; } else { query = new Query(mSearchWord.concat(" exclude:retweets")); } return TwitterManager.getTwitter().search(query); } catch (OutOfMemoryError e) { return null; } catch (Exception e) { e.printStackTrace(); return null; } } @Override protected void onPostExecute(QueryResult queryResult) { mFooter.setVisibility(View.GONE); if (queryResult == null) { mReloading = false; mPullToRefreshLayout.setRefreshComplete(); mListView.setVisibility(View.VISIBLE); mQuery = null; return; } if (mReloading) { clear(); for (twitter4j.Status status : queryResult.getTweets()) { mAdapter.add(Row.newStatus(status)); } mReloading = false; if (queryResult.hasNext()) { mQuery = queryResult.nextQuery(); mAutoLoader = true; } else { mQuery = null; mAutoLoader = false; } mPullToRefreshLayout.setRefreshComplete(); } else { for (twitter4j.Status status : queryResult.getTweets()) { mAdapter.extensionAdd(Row.newStatus(status)); } mAutoLoader = true; mQuery = queryResult.nextQuery(); mListView.setVisibility(View.VISIBLE); } } } }