package com.alorma.github.ui.fragment.repos; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.design.widget.Snackbar; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.alorma.github.R; import com.alorma.github.injector.component.ApiComponent; import com.alorma.github.injector.component.ApplicationComponent; import com.alorma.github.injector.component.DaggerApiComponent; import com.alorma.github.injector.module.ApiModule; import com.alorma.github.ui.adapter.base.RecyclerArrayAdapter; import com.alorma.github.ui.fragment.base.BaseFragment; import com.alorma.github.ui.listeners.TitleProvider; import com.alorma.github.utils.AttributesUtils; import java.util.List; import core.repositories.Repo; public abstract class ReposFragment extends BaseFragment implements TitleProvider, com.alorma.github.presenter.View<List<Repo>>, RecyclerArrayAdapter.RecyclerAdapterContentListener { private ReposAdapter adapter; private SwipeRefreshLayout refreshLayout; private RecyclerView recyclerView; @Override protected void injectComponents(ApplicationComponent applicationComponent) { super.injectComponents(applicationComponent); ApiComponent apiComponent = DaggerApiComponent.builder().applicationComponent(applicationComponent).apiModule(new ApiModule()).build(); initInjectors(apiComponent); } @Override protected int getLightTheme() { return R.style.AppTheme_Repository; } @Override protected int getDarkTheme() { return R.style.AppTheme_Dark_Repository; } protected abstract void initInjectors(ApiComponent apiComponent); @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { super.onCreateView(inflater, container, savedInstanceState); return getLayoutInflater(savedInstanceState).inflate(R.layout.recyclerview, null, false); } @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); refreshLayout = (SwipeRefreshLayout) view.findViewById(R.id.swipe); refreshLayout.setOnRefreshListener(this::onRefresh); refreshLayout.setColorSchemeColors(AttributesUtils.getAccentColor(getContext())); recyclerView = (RecyclerView) view.findViewById(R.id.recycler); adapter = new ReposAdapter(LayoutInflater.from(getContext())); adapter.setRecyclerAdapterContentListener(this); recyclerView.setAdapter(adapter); recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); } protected abstract void onRefresh(); @Override public void showLoading() { refreshLayout.post(() -> refreshLayout.setRefreshing(true)); } @Override public void onDataReceived(List<Repo> repos, boolean isFromPaginated) { if (!isFromPaginated) { adapter.clear(); } adapter.addAll(repos); } @Override public void showError(Throwable throwable) { if (isResumed()) { if (recyclerView != null) { Snackbar.make(recyclerView, R.string.empty_repos, Snackbar.LENGTH_SHORT).show(); } } } @Override public void hideLoading() { refreshLayout.post(() -> refreshLayout.setRefreshing(false)); } @Override protected boolean showTitle() { return false; } }