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.AppContext;
import org.aisen.weibo.sina.ui.activity.common.FragmentContainerActivity;
import org.aisen.weibo.sina.ui.activity.profile.UserProfileActivity;
import org.sina.android.SinaSDK;
import org.sina.android.bean.SuggestionsUser;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.MenuItem.OnActionExpandListener;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.SearchView;
import android.widget.SearchView.OnQueryTextListener;
import android.widget.TextView;
import com.m.common.context.GlobalContext;
import com.m.common.utils.ActivityHelper;
import com.m.support.Inject.ViewInject;
import com.m.support.adapter.ABaseAdapter.AbstractItemView;
import com.m.support.task.TaskException;
import com.m.ui.fragment.AListFragment;
import fr.castorflex.android.smoothprogressbar.SmoothProgressBar;
/**
* 搜索建议用户<br/>
* 联想搜索的数据范围是:v用户、粉丝500以上的达人、粉丝600以上的普通用户。
*
* @author wangdan
*
*/
public class SearchUsersFragment extends AListFragment<SuggestionsUser, SuggestionsUser[]>
implements OnItemClickListener, OnQueryTextListener, OnActionExpandListener {
public static void launch(Activity from) {
FragmentContainerActivity.launch(from, SearchUsersFragment.class, null);
}
@ViewInject(id = R.id.progress)
SmoothProgressBar mSmoothProgressBar;
private SearchUsersTask mTask;
private MenuItem searchMenu;
private SearchView searchView;
@Override
protected int inflateContentView() {
return R.layout.ui_search_users;
}
public int setTheme() {
return R.style.BaseTheme_DarkActionBar;
}
@Override
protected void layoutInit(LayoutInflater inflater, Bundle savedInstanceSate) {
super.layoutInit(inflater, savedInstanceSate);
getRefreshView().setOnItemClickListener(this);
setHasOptionsMenu(true);
getActivity().getActionBar().setTitle(R.string.title_search_user);
getActivity().getActionBar().setDisplayHomeAsUpEnabled(true);
mSmoothProgressBar.setIndeterminate(true);
if (ActivityHelper.getInstance().getBooleanShareData("showSearchHint", true)) {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
if (getActivity() != null) {
new AlertDialog.Builder(getActivity()).setTitle(R.string.search_search_remind)
.setCancelable(false)
.setMessage(R.string.search_search_fuck)
.setNegativeButton(R.string.donnot_remind, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
ActivityHelper.getInstance().putBooleanShareData("showSearchHint", false);
}
})
.setPositiveButton(R.string.i_know, null)
.show();
}
}
}, 1000);
}
}
@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 void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.search_friend, menu);
searchMenu = menu.findItem(R.id.search);
searchMenu.expandActionView();
searchMenu.setOnActionExpandListener(this);
searchView = (SearchView) searchMenu.getActionView();
searchView.setOnQueryTextListener(this);
searchView.setQueryHint(getString(R.string.hint_user_name));
try {
Field textField = searchView.getClass().getDeclaredField("mQueryTextView");
textField.setAccessible(true);
TextView txt = (TextView) textField.get(searchView);
txt.setHintTextColor(Color.parseColor("#88ffffff"));
} catch (Exception e) {
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.search) {
if (searchMenu.isActionViewExpanded())
searchMenu.collapseActionView();
else
searchMenu.expandActionView();
}
return super.onOptionsItemSelected(item);
}
@Override
public boolean onQueryTextSubmit(String query) {
query(query);
return true;
}
@Override
public boolean onQueryTextChange(String newText) {
query(newText);
return true;
}
@Override
public boolean onMenuItemActionExpand(MenuItem item) {
return true;
}
@Override
public boolean onMenuItemActionCollapse(MenuItem item) {
getActivity().finish();
return true;
}
private void query(String q) {
new SearchUsersTask().execute(q);
}
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());
}
}
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 {
try {
Thread.sleep(500);
} catch (Exception e) {
}
if (TextUtils.isEmpty(params[0]))
return new SuggestionsUser[0];
return SinaSDK.getInstance(AppContext.getToken()).searchSuggestionsUsers(params[0], 100);
}
@Override
protected void onFinished() {
super.onFinished();
mTask = null;
mSmoothProgressBar.setVisibility(View.GONE);
}
}
}