package com.xiaomai.geek.ui.module.github;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.design.widget.NavigationView;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.SearchView;
import android.support.v7.widget.Toolbar;
import android.text.TextUtils;
import android.view.MenuItem;
import android.view.View;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.xiaomai.geek.GeekApplication;
import com.xiaomai.geek.R;
import com.xiaomai.geek.common.utils.Const;
import com.xiaomai.geek.data.module.Repo;
import com.xiaomai.geek.di.IComponent;
import com.xiaomai.geek.di.component.DaggerGitHubComponent;
import com.xiaomai.geek.di.component.GitHubComponent;
import com.xiaomai.geek.di.module.ActivityModule;
import com.xiaomai.geek.di.module.GitHubModule;
import com.xiaomai.geek.presenter.github.SearchPresenter;
import com.xiaomai.geek.ui.base.BaseLoadActivity;
import com.xiaomai.geek.ui.base.EndlessRecyclerOnScrollListener;
import com.xiaomai.geek.view.ISearchView;
import java.util.ArrayList;
import javax.inject.Inject;
import butterknife.BindView;
import butterknife.ButterKnife;
/**
* Created by XiaoMai on 2017/5/4.
*/
public class SearchActivity extends BaseLoadActivity implements ISearchView<ArrayList<Repo>>,
IComponent<GitHubComponent>, NavigationView.OnNavigationItemSelectedListener {
@BindView(R.id.tool_bar)
Toolbar toolBar;
@BindView(R.id.recycler_view)
RecyclerView recyclerView;
@BindView(R.id.nav_view)
NavigationView navView;
@BindView(R.id.drawer_layout)
DrawerLayout drawerLayout;
@BindView(R.id.empty_root_layout)
RelativeLayout emptyRootLayout;
@BindView(R.id.search_view)
SearchView searchView;
private RepoListAdapter mAdapter;
private String mCurrentKey;
private String mCurrentLanguage;
@Inject
SearchPresenter mPresenter;
private int mCurrentPage;
private TextView mFooterViewContent;
private View mFooterView;
public static void launch(Context context) {
context.startActivity(new Intent(context, SearchActivity.class));
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getComponent().inject(this);
setContentView(R.layout.activity_search);
ButterKnife.bind(this);
initViews();
mPresenter.attachView(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
mPresenter.detachView();
}
private void initViews() {
setSupportActionBar(toolBar);
setTitle("搜索");
navView.setNavigationItemSelectedListener(this);
mAdapter = new RepoListAdapter(null);
mAdapter.setOnRecyclerViewItemClickListener(new BaseQuickAdapter.OnRecyclerViewItemClickListener() {
@Override
public void onItemClick(View view, int i) {
Repo repo = mAdapter.getItem(i);
RepoDetailActivity.launch(SearchActivity.this, repo.getOwner().getLogin(), repo.getName());
}
});
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(mAdapter);
recyclerView.addOnScrollListener(new EndlessRecyclerOnScrollListener() {
@Override
public void loadMore() {
if (!TextUtils.isEmpty(mCurrentKey))
mPresenter.searchRepo(mCurrentKey, mCurrentLanguage, ++mCurrentPage, true);
}
});
mFooterView = getLayoutInflater().inflate(R.layout.layout_load_more, recyclerView, false);
mFooterViewContent = (TextView) mFooterView.findViewById(R.id.tv_content);
mCurrentLanguage = "Java";
searchView.setIconified(false);//输入框内icon不显示
searchView.requestFocusFromTouch();//模拟焦点点击事件
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
mCurrentKey = query;
search();
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
return false;
}
});
searchView.setOnCloseListener(new SearchView.OnCloseListener() {
@Override
public boolean onClose() {
return false;
}
});
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
drawerLayout.openDrawer(GravityCompat.START);
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public GitHubComponent getComponent() {
return DaggerGitHubComponent.builder()
.applicationComponent(GeekApplication.get(this).getComponent())
.gitHubModule(new GitHubModule())
.activityModule(new ActivityModule(this))
.build();
}
@Override
public void showSearchResult(ArrayList<Repo> result) {
mAdapter.addFooterView(null);
searchView.clearFocus();
invalidateOptionsMenu();
if (result != null && result.size() > 0) {
recyclerView.setVisibility(View.VISIBLE);
emptyRootLayout.setVisibility(View.GONE);
mAdapter.setNewData(result);
// 当结果不足 PAGE_SIZE 时很明显没有更多数据了。
if (result.size() >= Const.PAGE_SIZE) {
mFooterViewContent.setText("加载更多...");
} else {
mFooterViewContent.setText("加载完毕!");
}
mAdapter.addFooterView(mFooterView);
} else {
recyclerView.setVisibility(View.GONE);
emptyRootLayout.setVisibility(View.VISIBLE);
}
}
@Override
public void showMoreResult(ArrayList<Repo> result) {
mAdapter.addFooterView(null);
if (result != null && result.size() > 0) {
// 当结果不足 PAGE_SIZE 时很明显没有更多数据了。
if (result.size() >= Const.PAGE_SIZE) {
mFooterViewContent.setText("加载更多...");
} else {
mFooterViewContent.setText("加载完毕!");
}
mAdapter.notifyDataChangedAfterLoadMore(result, false);
} else {
mFooterViewContent.setText("加载完毕!");
}
mAdapter.addFooterView(mFooterView);
}
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
mCurrentLanguage = item.getTitle().toString();
drawerLayout.closeDrawer(GravityCompat.START);
search();
return true;
}
private void search() {
mCurrentPage = 1;
if (!TextUtils.isEmpty(mCurrentKey))
mPresenter.searchRepo(mCurrentKey, mCurrentLanguage, 1);
}
@Override
public void onBackPressed() {
if (drawerLayout.isDrawerOpen(GravityCompat.START))
drawerLayout.closeDrawer(GravityCompat.START);
else
super.onBackPressed();
}
}