package org.aisen.weibo.sina.ui.fragment.search; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; 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.activity.profile.UserProfileActivity; import org.aisen.weibo.sina.ui.fragment.search.SearchHistoryFragment.OnSearchItemClicked; import org.aisen.weibo.sina.ui.fragment.search.SearchHistoryFragment.Type; import org.sina.android.SinaSDK; import org.sina.android.bean.SuggestionsUser; import android.content.Context; import android.os.Bundle; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.inputmethod.InputMethodManager; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; 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.common.context.GlobalContext; import com.m.support.Inject.ViewInject; import com.m.support.adapter.ABaseAdapter.AbstractItemView; import com.m.support.task.TaskException; import com.m.ui.activity.AViewpagerActivity; import com.m.ui.activity.BaseActivity; import com.m.ui.fragment.ABaseFragment; import com.m.ui.fragment.AListFragment; import fr.castorflex.android.smoothprogressbar.SmoothProgressBar; /** * 搜索用户 * * @author wangdan * */ public class SearchUsers_v2Fragment extends AListFragment<SuggestionsUser, SuggestionsUser[]> implements OnQueryTextListener, OnItemClickListener, OnSearchItemClicked { public static ABaseFragment newInstance() { return new SearchUsers_v2Fragment(); } @ViewInject(id = R.id.progress) SmoothProgressBar mSmoothProgressBar; @ViewInject(id = R.id.searchView) SearchView searchView; @ViewInject(id = R.id.layUserHistory) View layHistory; @ViewInject(id = R.id.layEmpty) View layEmpty; @ViewInject(id = R.id.layList) View layList; @ViewInject(id = R.id.layEdit) View layEdit; private SearchUsersTask mTask; private SearchHistoryFragment mSearchHistoryFragment; @Override protected int inflateContentView() { return R.layout.ui_search_users_v2; } @Override protected void layoutInit(LayoutInflater inflater, Bundle savedInstanceSate) { super.layoutInit(inflater, savedInstanceSate); mSmoothProgressBar.setIndeterminate(true); searchView.onActionViewExpanded(); searchView.setQueryHint(getString(R.string.hint_user_name)); 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) { } getRefreshView().setOnItemClickListener(this); if (savedInstanceSate == null) { mSearchHistoryFragment = SearchHistoryFragment.newInstance(Type.user); getFragmentManager().beginTransaction().add(R.id.layUserHistory, mSearchHistoryFragment, "SearchUserHistoryFragment").commit(); } else { mSearchHistoryFragment = (SearchHistoryFragment) getActivity().getFragmentManager().findFragmentByTag("SearchUserHistoryFragment"); } mSearchHistoryFragment.setOnseaItemClicked(this); BaseActivity baseActivity = (BaseActivity) getActivity(); org.aisen.weibo.sina.ui.fragment.base.ActivityHelper activityHelper = (org.aisen.weibo.sina.ui.fragment.base.ActivityHelper) baseActivity.getActivityHelper(); getRefreshView().setPadding(getRefreshView().getPaddingLeft(), getRefreshView().getPaddingTop(), getRefreshView().getPaddingRight(), activityHelper.wallpaper.systemBarConfig.getPixelInsetBottom()); AisenUtil.setAlpha(layList); AisenUtil.setAlpha(layHistory); AisenUtil.setAlpha(layEdit); layList.setVisibility(View.GONE); } @Override public void onItemClicked(String query) { searchView.setQuery(query, true); } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { InputMethodManager im = (InputMethodManager) GlobalContext.getInstance().getSystemService(Context.INPUT_METHOD_SERVICE); im.hideSoftInputFromWindow(searchView.getWindowToken(), 0); UserProfileActivity.launch(getActivity(), getAdapterItems().get(position).getScreen_name()); } @Override protected AbstractItemView<SuggestionsUser> newItemView() { return new SearchUsersItemView(); } @Override protected void requestData(RefreshMode mode) { } @Override public boolean onQueryTextSubmit(String query) { if (TextUtils.isEmpty(query.trim())) return true; query(query); SearchHistoryFragment.addQuery(Type.user, query); return true; } @Override public boolean onQueryTextChange(String newText) { layHistory.setVisibility(TextUtils.isEmpty(newText) ? View.VISIBLE : View.GONE); if (layHistory.getVisibility() == View.VISIBLE) { setItems(new ArrayList<SuggestionsUser>()); } if (getAdapterCount() == 0) { layList.setVisibility(View.GONE); layEmpty.setVisibility(View.GONE); } if (TextUtils.isEmpty(newText)) mSearchHistoryFragment.query(); return true; } private void query(String q) { new SearchUsersTask().execute(q); ((ListView) getRefreshView()).setSelectionFromTop(0, 0); } class SearchUsersItemView extends AbstractItemView<SuggestionsUser> { @ViewInject(id = R.id.txtName) TextView txtName; @Override public int inflateViewId() { return R.layout.item_search_users; } @Override public void bindingData(View convertView, SuggestionsUser data) { txtName.setText(data.getScreen_name()); AisenUtil.setAlpha(convertView); } } class SearchUsersTask extends PagingTask<String, Void, SuggestionsUser[]> { public SearchUsersTask() { super("SearchUsersTask", RefreshMode.reset); if (mTask != null) mTask.cancel(true); mTask = this; } @Override protected void onPrepare() { super.onPrepare(); mSmoothProgressBar.setVisibility(View.VISIBLE); } @Override protected List<SuggestionsUser> parseResult(SuggestionsUser[] result) { List<SuggestionsUser> list = new ArrayList<SuggestionsUser>(); for (SuggestionsUser user : result) list.add(user); return list; } @Override protected SuggestionsUser[] workInBackground(RefreshMode mode, String previousPage, String nextPage, String... params) throws TaskException { return SinaSDK.getInstance(AppContext.getToken()).searchSuggestionsUsers(params[0], 100); } @Override protected void onFinished() { super.onFinished(); BaiduAnalyzeUtils.onEvent("search_user", "搜索用户"); 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); } } @Override protected void onFailure(TaskException exception) { super.onFailure(exception); showMessage(exception.getMessage()); } } @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(); } }