package com.yuantiku.yyl.pages; import android.graphics.Color; import android.os.Bundle; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.View; import butterknife.InjectView; import com.yuantiku.dbdata.Account; import com.yuantiku.yyl.R; import com.yuantiku.yyl.adapter.ContactAdapter; import com.yuantiku.yyl.helper.AccountDBHelper; import com.yuantiku.yyl.helper.L; import com.yuantiku.yyl.helper.ZGYWikiHelper; import com.yuantiku.yyl.interfaces.OnItemClickListener; import com.yuantiku.yyl.observe.MyObservable; import java.util.List; import retrofit.RetrofitError; /** * @author wanghb * @date 15/4/29. */ public class ContactsPage extends FragmentPage implements OnItemClickListener { @InjectView(R.id.swipeRefreshLayout) SwipeRefreshLayout swipeRefreshLayout; @InjectView(R.id.recyclerview) RecyclerView recyclerView; @InjectView(R.id.progress) View progress; private ContactAdapter adapter; @Override protected int getLayoutId() { return R.layout.page_contacts; } @Override protected View setupView(View view) { swipeRefreshLayout.setOnRefreshListener(this::refreshData); swipeRefreshLayout.setProgressBackgroundColorSchemeColor(Color.YELLOW); initVertical(); return super.setupView(view); } public void initVertical() { LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity()); layoutManager.setOrientation(LinearLayoutManager.VERTICAL); recyclerView.setLayoutManager(layoutManager); adapter = new ContactAdapter(null); adapter.setOnItemClickListener(this); recyclerView.setAdapter(adapter); loadLocalAccounts(); refreshData(); } @Override public void onItemClicked(View itemView, Object data) { DetailPage detailPage = new DetailPage(); Bundle bundle = new Bundle(); bundle.putSerializable(Account.class.getName(), (java.io.Serializable) data); detailPage.setArguments(bundle); pageManager.push(detailPage, null); } private void refreshData() { if (adapter == null || adapter.getItemCount() <= 0) { progress.setVisibility(View.VISIBLE); } ZGYWikiHelper.helper.loadMembers(this::updateData, this::handleException); } private void handleException(Throwable e) { if (e instanceof RetrofitError) { RetrofitError error = (RetrofitError) e; if (error.getResponse() != null && error.getResponse().getStatus() == 403) { toLogin(); } else { loadLocalAccounts(); } } else { L.e(e); toLogin(); } } private void loadLocalAccounts() { List<Account> accounts = AccountDBHelper.helper.getAccounts(); updateData(accounts); } private void toLogin() { FragmentPage loginPage = new LoginPage(); loginPage.addObserver(this); pageManager.push(loginPage, null); } @Override public void update(MyObservable myObservable, Object data) { super.update(myObservable, data); refreshData(); } public void updateData(List<Account> accounts) { progress.setVisibility(View.GONE); swipeRefreshLayout.setRefreshing(false); adapter.updateData(accounts); } @Override public boolean interceptBackPressed() { return false; } }