package com.alorma.github.ui.fragment.orgs; import android.os.Bundle; import android.support.annotation.StyleRes; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import com.alorma.github.R; import com.alorma.github.sdk.services.client.GithubListClient; import com.alorma.github.sdk.services.orgs.GetOrgsClient; import com.alorma.github.ui.adapter.orgs.OrganizationsAdapter; import com.alorma.github.ui.fragment.base.LoadingListFragment; import com.alorma.gitskarios.core.Pair; import com.mikepenz.octicons_typeface_library.Octicons; import core.User; import java.util.List; import rx.Observer; import rx.android.schedulers.AndroidSchedulers; import rx.functions.Func1; import rx.schedulers.Schedulers; public class OrganizationsFragment extends LoadingListFragment<OrganizationsAdapter> implements Observer<List<User>> { private String username; public static OrganizationsFragment newInstance() { return new OrganizationsFragment(); } public static OrganizationsFragment newInstance(String username) { OrganizationsFragment followersFragment = new OrganizationsFragment(); if (username != null) { Bundle bundle = new Bundle(); bundle.putString(USERNAME, username); followersFragment.setArguments(bundle); } return followersFragment; } @StyleRes @Override protected int getLightTheme() { return R.style.AppTheme_People; } @StyleRes @Override protected int getDarkTheme() { return R.style.AppTheme_Dark_People; } @Override protected void executeRequest() { super.executeRequest(); setAction(new GetOrgsClient(username)); } @Override protected void executePaginatedRequest(int page) { super.executePaginatedRequest(page); setAction(new GetOrgsClient(username, page)); } private void setAction(GithubListClient<List<User>> getOrgsClient) { startRefresh(); getOrgsClient.observable() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .map(new Func1<Pair<List<User>, Integer>, List<User>>() { @Override public List<User> call(Pair<List<User>, Integer> listIntegerPair) { setPage(listIntegerPair.second); return listIntegerPair.first; } }) .subscribe(this); } @Override public void onCompleted() { stopRefresh(); } @Override public void onError(Throwable e) { } @Override public void onNext(List<User> organizations) { if (organizations.size() > 0) { hideEmpty(); if (refreshing || getAdapter() == null) { OrganizationsAdapter adapter = new OrganizationsAdapter(LayoutInflater.from(getActivity())); adapter.addAll(organizations); setAdapter(adapter); } else { getAdapter().addAll(organizations); } } else if (getAdapter() == null || getAdapter().getItemCount() == 0) { setEmpty(); } else { getAdapter().clear(); setEmpty(); } } @Override protected RecyclerView.LayoutManager getLayoutManager() { return new GridLayoutManager(getActivity(), getResources().getInteger(R.integer.grid_layout_columns)); } @Override protected void loadArguments() { if (getArguments() != null) { username = getArguments().getString(USERNAME); } } @Override protected Octicons.Icon getNoDataIcon() { return Octicons.Icon.oct_organization; } @Override protected int getNoDataText() { return R.string.no_organizations; } }