package com.alorma.github.ui.fragment.search; import android.app.SearchManager; import android.os.Bundle; import android.view.View; import com.alorma.github.R; import com.alorma.github.sdk.services.search.RepoSearchClient; import com.alorma.github.ui.fragment.repos.BaseReposListFragment; import com.alorma.github.ui.listeners.TitleProvider; import com.mikepenz.iconics.typeface.IIcon; import com.mikepenz.octicons_typeface_library.Octicons; import rx.android.schedulers.AndroidSchedulers; import rx.functions.Action1; import rx.schedulers.Schedulers; public class SearchReposFragment extends BaseReposListFragment implements TitleProvider { private String query = null; public static SearchReposFragment newInstance(String query) { Bundle args = new Bundle(); if (query != null) { args.putString(SearchManager.QUERY, query); } SearchReposFragment f = new SearchReposFragment(); f.setArguments(args); return f; } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); String query = getArguments().getString(SearchManager.QUERY, null); if (query != null) { setQuery(query); } else { setEmpty(); } } @Override protected Octicons.Icon getNoDataIcon() { return Octicons.Icon.oct_repo; } @Override protected int getNoDataText() { return R.string.no_results; } @Override protected void loadArguments() { } @Override protected void executeRequest() { if (getActivity() != null) { if (query != null) { super.executeRequest(); RepoSearchClient client = new RepoSearchClient(query); client.observable() .subscribeOn(Schedulers.io()) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .doOnNext(listIntegerPair -> { if (getAdapter() != null) { getAdapter().clear(); } }) .doOnError((Action1<Throwable>) throwable -> { }) .subscribe(this); } } } @Override protected void executePaginatedRequest(int page) { if (getActivity() != null) { if (query != null) { super.executePaginatedRequest(page); RepoSearchClient client = new RepoSearchClient(query, page); client.observable() .subscribeOn(Schedulers.io()) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(this); } } } public void setQuery(String query) { this.query = query; executeRequest(); } @Override public int getTitle() { return R.string.navigation_repos_search; } @Override public IIcon getTitleIcon() { return Octicons.Icon.oct_repo; } @Override protected int getLightTheme() { return R.style.AppTheme_Search; } @Override protected int getDarkTheme() { return R.style.AppTheme_Dark_Search; } }