package tellh.com.gitclub.presentation.widget;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.design.widget.BottomSheetBehavior;
import android.support.design.widget.BottomSheetDialog;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import com.tellh.nolistadapter.adapter.HeaderAndFooterAdapterWrapper;
import com.tellh.nolistadapter.adapter.RecyclerViewAdapter;
import tellh.com.gitclub.R;
import tellh.com.gitclub.model.entity.ShowCaseInfo;
import tellh.com.gitclub.presentation.presenter.IRepoListPresenter;
import tellh.com.gitclub.presentation.view.adapter.viewbinder.RepoListItemViewBinder;
import tellh.com.gitclub.presentation.view.adapter.viewbinder.ShowCaseHeaderViewBinder;
/**
* Created by tlh on 2016/9/8 :)
*/
public class ShowcaseListBottomSheetDialog extends BottomSheetDialog {
private IRepoListPresenter presenter;
private HeaderAndFooterAdapterWrapper adapterWrapper;
private BottomSheetBehavior<View> bottomSheetBehavior;
private RecyclerView recyclerView;
private ShowCaseHeaderViewBinder viewBinder;
public ShowcaseListBottomSheetDialog(@NonNull Context context, IRepoListPresenter presenter) {
super(context);
this.presenter = presenter;
init();
}
private void init() {
//init recycler view
View view = LayoutInflater.from(getContext()).inflate(R.layout.dialog_list, null, false);
setContentView(view);
recyclerView = (RecyclerView) view.findViewById(R.id.list);
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
viewBinder = new ShowCaseHeaderViewBinder();
adapterWrapper = (HeaderAndFooterAdapterWrapper) RecyclerViewAdapter.builder()
.addItemType(new RepoListItemViewBinder(presenter))
.addHeader(viewBinder)
.build();
recyclerView.setAdapter(adapterWrapper);
//set bottom sheet behaviour
View sheetView = getDelegate().findViewById(android.support.design.R.id.design_bottom_sheet);
assert sheetView != null;
bottomSheetBehavior = BottomSheetBehavior.from(sheetView);
bottomSheetBehavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
@Override
public void onStateChanged(@NonNull View bottomSheet, int newState) {
if (newState == BottomSheetBehavior.STATE_HIDDEN) {
dismiss();
bottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
}
}
@Override
public void onSlide(@NonNull View bottomSheet, float slideOffset) {
}
});
}
public void refreshAndShow(ShowCaseInfo showCaseInfo) {
viewBinder.setShowcase(showCaseInfo);
adapterWrapper.refresh(showCaseInfo.getRepositories());
show();
}
@Override
public void onBackPressed() {
if (bottomSheetBehavior.getState() == BottomSheetBehavior.STATE_EXPANDED) {
recyclerView.scrollToPosition(0);
bottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
return;
}
super.onBackPressed();
}
}