package com.alorma.github.ui.fragment.gists; import android.content.Intent; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import com.alorma.github.R; import com.alorma.github.sdk.bean.dto.response.Gist; import com.alorma.github.sdk.services.client.GithubListClient; import com.alorma.github.sdk.services.gists.UserGistsClient; import com.alorma.github.ui.activity.gists.GistDetailActivity; import com.alorma.github.ui.activity.gists.GistsFileActivity; import com.alorma.github.ui.adapter.GistsAdapter; import com.alorma.github.ui.fragment.base.LoadingListFragment; import com.alorma.github.ui.fragment.detail.repo.BackManager; import com.alorma.gitskarios.core.Pair; import com.mikepenz.octicons_typeface_library.Octicons; import java.util.List; import rx.Subscriber; import rx.android.schedulers.AndroidSchedulers; import rx.functions.Func1; import rx.schedulers.Schedulers; public class GistsFragment extends LoadingListFragment<GistsAdapter> implements GistsAdapter.GistsAdapterListener, BackManager { private static final String USERNAME = "USERNAME"; private String username; public static GistsFragment newInstance(String username) { Bundle bundle = new Bundle(); bundle.putString(USERNAME, username); GistsFragment f = new GistsFragment(); f.setArguments(bundle); return f; } @Override protected void loadArguments() { if (getArguments() != null) { username = getArguments().getString(USERNAME); } } @Override public void onResume() { super.onResume(); getActivity().setTitle(getString(R.string.username_gists, username)); } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); GistsAdapter adapter = new GistsAdapter(LayoutInflater.from(getActivity())); adapter.setFilesCallback(item -> { Intent launcherIntent = GistsFileActivity.createLauncherIntent(getActivity(), item.filename, item.content); startActivity(launcherIntent); }); adapter.setGistsAdapterListener(this); setAdapter(adapter); } @Override protected Octicons.Icon getNoDataIcon() { return Octicons.Icon.oct_gist; } @Override protected int getNoDataText() { return R.string.no_gists; } @Override protected void executeRequest() { super.executeRequest(); if (username != null) { setAction(new UserGistsClient(username)); } } @Override protected void executePaginatedRequest(int page) { super.executePaginatedRequest(page); if (username != null) { setAction(new UserGistsClient(username, page)); } } private void setAction(GithubListClient<List<Gist>> userGistsClient) { userGistsClient.observable() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .map(new Func1<Pair<List<Gist>, Integer>, List<Gist>>() { @Override public List<Gist> call(Pair<List<Gist>, Integer> listIntegerPair) { setPage(listIntegerPair.second); return listIntegerPair.first; } }) .subscribe(new Subscriber<List<Gist>>() { @Override public void onCompleted() { stopRefresh(); } @Override public void onError(Throwable e) { stopRefresh(); if (getAdapter() == null || getAdapter().getItemCount() == 0) { setEmpty(); } } @Override public void onNext(List<Gist> gists) { if (refreshing) { getAdapter().clear(); } getAdapter().addAll(gists); } }); } @Override public void onGistSelected(Gist gist) { Intent launcherIntent = GistDetailActivity.createLauncherIntent(getActivity(), gist.id); startActivity(launcherIntent); } @Override public boolean onBackPressed() { return false; } @Override protected int getDarkTheme() { return R.style.AppTheme_Dark_Gists; } @Override protected int getLightTheme() { return R.style.AppTheme_Gists; } }