package com.troy.xifan.activity; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.Toolbar; import android.text.Editable; import android.text.TextWatcher; import android.view.KeyEvent; import android.view.Menu; import android.view.MenuItem; import android.view.inputmethod.EditorInfo; import android.widget.EditText; import android.widget.TextView; import butterknife.BindView; import butterknife.ButterKnife; import com.chenenyu.router.Router; import com.chenenyu.router.annotation.Route; import com.jude.easyrecyclerview.EasyRecyclerView; import com.jude.easyrecyclerview.adapter.RecyclerArrayAdapter; import com.troy.xifan.R; import com.troy.xifan.adapter.StatusAdapter; import com.troy.xifan.config.Constants; import com.troy.xifan.http.HttpRequestFactory; import com.troy.xifan.http.callback.SimpleHttpRequestCallback; import com.troy.xifan.http.exception.ApiException; import com.troy.xifan.http.request.SearchRequest; import com.troy.xifan.model.response.StatusRes; import com.troy.xifan.util.UIUtils; import com.troy.xifan.util.Utils; import java.util.List; /** * Created by chenlongfei on 2016/12/17. */ @Route(Constants.Router.SEARCH) public class SearchActivity extends BaseActivity { @BindView(R.id.search_bar) Toolbar mSearchBar; @BindView(R.id.edit_search_bar) EditText mEditSearchBar; @BindView(R.id.recycler_view) EasyRecyclerView mRecyclerView; private String mMaxId; private String mKeyword; private StatusAdapter mStatusAdapter; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_search); ButterKnife.bind(this); initViews(); } @Override public void initViews() { mSearchBar.setTitle(""); Drawable backDrawable = getResources().getDrawable(R.drawable.abc_ic_ab_back); mSearchBar.setNavigationIcon(backDrawable); setSupportActionBar(mSearchBar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); mStatusAdapter = new StatusAdapter(this); mStatusAdapter.setMore(R.layout.view_load_more, new RecyclerArrayAdapter.OnMoreListener() { @Override public void onMoreShow() { searchPublicTimeline(true); } @Override public void onMoreClick() { } }); mStatusAdapter.setError(R.layout.view_load_more_error, new RecyclerArrayAdapter.OnErrorListener() { @Override public void onErrorShow() { } @Override public void onErrorClick() { mStatusAdapter.resumeMore(); } }); mStatusAdapter.setNoMore(R.layout.view_no_more); mStatusAdapter.setOnItemClickListener(new RecyclerArrayAdapter.OnItemClickListener() { @Override public void onItemClick(int position) { StatusRes statusRes = mStatusAdapter.getItem(position); Bundle bundle = new Bundle(); bundle.putParcelable(StatusDetailActivity.EXTRA_STATUS, statusRes); Router.build(Constants.Router.STATUS_DETAIL).extras(bundle).go(SearchActivity.this); } }); mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); mRecyclerView.setAdapter(mStatusAdapter); mRecyclerView.setRefreshingColor(getResources().getIntArray(R.array.refreshing_color)); mRecyclerView.setRefreshing(false); initLiseners(); } private void initLiseners() { mEditSearchBar.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { } @Override public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { mKeyword = charSequence.toString().trim(); invalidateOptionsMenu(); } @Override public void afterTextChanged(Editable editable) { } }); mEditSearchBar.setOnEditorActionListener(new TextView.OnEditorActionListener() { @Override public boolean onEditorAction(TextView textView, int actionId, KeyEvent keyEvent) { if (actionId == EditorInfo.IME_ACTION_SEARCH) { if (textView.getText().length() == 0) { return false; } searchPublicTimeline(false); return true; } return false; } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_search, menu); return super.onCreateOptionsMenu(menu); } @Override public boolean onPrepareOptionsMenu(Menu menu) { MenuItem menuItem = menu.findItem(R.id.action_clear); menuItem.setVisible(mEditSearchBar.length() > 0); return super.onPrepareOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: finish(); break; case R.id.action_clear: mEditSearchBar.getText().clear(); break; } return super.onOptionsItemSelected(item); } private void searchPublicTimeline(final boolean loadMore) { SearchRequest request = new SearchRequest(); request.setQ(mKeyword); request.setMax_id(loadMore ? mMaxId : null); mRecyclerView.setRefreshing(loadMore ? false : true); HttpRequestFactory.getInstance() .searchPublicTimeline(request, new SimpleHttpRequestCallback<List<StatusRes>>() { @Override public void onSuccess(List<StatusRes> responseData) { if (!loadMore) { mStatusAdapter.clear(); } mStatusAdapter.addAll(responseData); mStatusAdapter.notifyDataSetChanged(); mRecyclerView.setRefreshing(false); mMaxId = Utils.getMaxId(mStatusAdapter.getAllData()); } @Override public void onFail(ApiException apiException) { UIUtils.showToast(SearchActivity.this, apiException.getErrorMessage()); } }); } }