package org.aisen.weibo.sina.ui.fragment.search;
import java.lang.reflect.Field;
import java.util.ArrayList;
import org.aisen.weibo.sina.R;
import org.aisen.weibo.sina.support.utils.AisenUtil;
import org.aisen.weibo.sina.support.utils.AppContext;
import org.aisen.weibo.sina.support.utils.BaiduAnalyzeUtils;
import org.aisen.weibo.sina.ui.fragment.search.SearchHistoryFragment.OnSearchItemClicked;
import org.aisen.weibo.sina.ui.fragment.search.SearchHistoryFragment.Type;
import org.aisen.weibo.sina.ui.fragment.timeline.ATimelineFragment;
import org.sina.android.SinaSDK;
import org.sina.android.bean.StatusContent;
import org.sina.android.bean.StatusContents;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ListView;
import android.widget.SearchView;
import android.widget.SearchView.OnCloseListener;
import android.widget.SearchView.OnQueryTextListener;
import android.widget.TextView;
import com.m.support.Inject.ViewInject;
import com.m.support.paging.IPaging;
import com.m.support.paging.PageIndexPaging;
import com.m.support.task.TaskException;
import com.m.ui.activity.AViewpagerActivity;
import com.m.ui.fragment.ABaseFragment;
import fr.castorflex.android.smoothprogressbar.SmoothProgressBar;
/**
* 搜索某话题下的微博
*
* @author wangdan
*
*/
public class SearchTopicsFragment extends ATimelineFragment
implements OnQueryTextListener, OnSearchItemClicked{
public static ABaseFragment newInstance() {
SearchTopicsFragment fragment = new SearchTopicsFragment();
fragment.setArguments(new Bundle());
return fragment;
}
@ViewInject(id = R.id.topicsprogress)
SmoothProgressBar mSmoothProgressBar;
@ViewInject(id = R.id.searchView)
SearchView searchView;
@ViewInject(id = R.id.layTopicHistory)
View layHistory;
@ViewInject(id = R.id.layEmpty)
View layEmpty;
@ViewInject(id = R.id.layList)
View layList;
@ViewInject(id = R.id.layEdit)
View layEdit;
private SearchTopicsTask mTask;
private String query;
private SearchHistoryFragment mSearchHistoryFragment;
@Override
protected int inflateContentView() {
return R.layout.ui_search_topics;
}
@Override
protected RefreshListType configListType() {
return RefreshListType.actionbarPulltorefresh;
}
@Override
protected void layoutInit(LayoutInflater inflater, Bundle savedInstanceSate) {
super.layoutInit(inflater, savedInstanceSate);
query = savedInstanceSate != null ? savedInstanceSate.getString("q") : "";
mSmoothProgressBar.setIndeterminate(true);
((TextView) layEmpty.findViewById(R.id.txtHint)).setText(R.string.empty_search_topics);
AisenUtil.setAlpha(layEdit);
searchView.onActionViewExpanded();
searchView.setQueryHint(getString(R.string.hint_topics));
searchView.setOnQueryTextListener(this);
searchView.setOnCloseListener(new OnCloseListener() {
@Override
public boolean onClose() {
if (TextUtils.isEmpty(searchView.getQuery().toString()))
return true;
return false;
}
});
try {
int left = getResources().getDimensionPixelSize(R.dimen.horizontal_gap);
int right = getResources().getDimensionPixelSize(R.dimen.horizontal_margin);
Field textField = searchView.getClass().getDeclaredField("mQueryTextView");
textField.setAccessible(true);
TextView txt = (TextView) textField.get(searchView);
txt.setPadding(left, 0, right, 0);
} catch (Exception e) {
}
if (savedInstanceSate == null) {
mSearchHistoryFragment = SearchHistoryFragment.newInstance(Type.status);
getFragmentManager().beginTransaction().add(R.id.layTopicHistory, mSearchHistoryFragment, "SearchTopicsHistoryFragment").commit();
}
else {
mSearchHistoryFragment = (SearchHistoryFragment) getActivity().getFragmentManager().findFragmentByTag("SearchTopicsHistoryFragment");
}
mSearchHistoryFragment.setOnseaItemClicked(this);
layHistory.setVisibility(View.VISIBLE);
layList.setVisibility(View.GONE);
AisenUtil.setAlpha(layHistory);
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString("q", query);
}
@Override
public void onItemClicked(String query) {
searchView.setQuery(query, true);
}
@Override
public boolean onQueryTextSubmit(String query) {
if (TextUtils.isEmpty(query.trim()))
return true;
query(query);
SearchHistoryFragment.addQuery(Type.status, query);
return true;
}
@Override
public boolean onQueryTextChange(String newText) {
layHistory.setVisibility(TextUtils.isEmpty(newText) ? View.VISIBLE : View.GONE);
if (layHistory.getVisibility() == View.VISIBLE) {
setAdapterItems(new ArrayList<StatusContent>());
notifyDataSetChanged();
}
if (getAdapterCount() == 0) {
layList.setVisibility(View.GONE);
layEmpty.setVisibility(View.GONE);
}
if (TextUtils.isEmpty(newText))
mSearchHistoryFragment.query();
return true;
}
private void query(String q) {
query = q;
mSmoothProgressBar.setVisibility(View.VISIBLE);
new SearchTopicsTask(RefreshMode.reset).execute();
((ListView) getRefreshView()).setSelectionFromTop(0, 0);
}
@Override
protected void requestData(RefreshMode mode) {
if (getAdapterCount() > 0)
new SearchTopicsTask(mode == RefreshMode.refresh ? RefreshMode.reset : mode).execute();
}
@SuppressWarnings({ "unchecked", "rawtypes" })
@Override
protected IPaging<StatusContent, StatusContents> configPaging() {
return new PageIndexPaging("total_number");
}
@Override
public boolean onAcUnusedDoubleClicked() {
if (getActivity() instanceof AViewpagerActivity) {
AViewpagerActivity activity = (AViewpagerActivity) getActivity();
if (activity.getCurrentFragment() == this) {
if (layHistory.getVisibility() == View.VISIBLE) {
return mSearchHistoryFragment._onAcUnusedDoubleClicked();
}
return super.onAcUnusedDoubleClicked();
}
else
return false;
}
return super.onAcUnusedDoubleClicked();
}
class SearchTopicsTask extends TimelineTask {
public SearchTopicsTask(RefreshMode mode) {
super(mode);
if (mTask != null)
mTask.cancel(true);
mTask = this;
}
@Override
protected StatusContents workInBackground(RefreshMode mode, String previousPage, String nextPage,
Void... params) throws TaskException {
return SinaSDK.getInstance(AppContext.getToken()).searchTopics(nextPage, query, "30");
}
@Override
protected void onFinished() {
super.onFinished();
BaiduAnalyzeUtils.onEvent("search_status", "搜索微博");
mTask = null;
mSmoothProgressBar.setVisibility(View.GONE);
if (getAdapterCount() == 0) {
layEmpty.setVisibility(View.VISIBLE);
layList.setVisibility(View.GONE);
}
else {
layEmpty.setVisibility(View.GONE);
layList.setVisibility(View.VISIBLE);
}
}
}
}