package io.github.xwz.base.fragments;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.support.v17.leanback.widget.ArrayObjectAdapter;
import android.support.v17.leanback.widget.HeaderItem;
import android.support.v17.leanback.widget.ListRow;
import android.support.v17.leanback.widget.ListRowPresenter;
import android.support.v17.leanback.widget.ObjectAdapter;
import android.support.v17.leanback.widget.OnItemViewClickedListener;
import android.support.v17.leanback.widget.Presenter;
import android.support.v17.leanback.widget.Row;
import android.support.v17.leanback.widget.RowPresenter;
import android.text.TextUtils;
import android.util.Log;
import java.util.List;
import io.github.xwz.base.R;
import io.github.xwz.base.adapters.CardSelector;
import io.github.xwz.base.api.EpisodeBaseModel;
import io.github.xwz.base.content.ContentManagerBase;
public abstract class SearchFragment extends android.support.v17.leanback.app.SearchFragment
implements android.support.v17.leanback.app.SearchFragment.SearchResultProvider {
private static final String TAG = "SearchFragment";
private static final int SEARCH_DELAY_MS = 150;
private ArrayObjectAdapter adapter;
private SearchRunnable searcher;
private final Handler handler = new Handler();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setSearchResultProvider(this);
setSpeechRecognitionCallback(null);
adapter = new ArrayObjectAdapter(new ListRowPresenter());
searcher = new SearchRunnable();
setOnItemViewClickedListener(getItemClickedListener());
}
@Override
public ObjectAdapter getResultsAdapter() {
return adapter;
}
protected abstract ContentManagerBase getContentManger();
protected abstract Class<?> getDetailsActivityClass();
private OnItemViewClickedListener getItemClickedListener() {
return new OnItemViewClickedListener() {
@Override
public void onItemClicked(Presenter.ViewHolder itemViewHolder, Object item, RowPresenter.ViewHolder rowViewHolder, Row row) {
if (item instanceof EpisodeBaseModel) {
Intent intent = new Intent(getActivity(), getDetailsActivityClass());
intent.putExtra(ContentManagerBase.CONTENT_ID, (EpisodeBaseModel) item);
startActivity(intent);
}
}
};
}
@Override
public boolean onQueryTextChange(String query) {
if (!TextUtils.isEmpty(query)) {
List<String> suggestions = getContentManger().suggestions(query);
Log.d(TAG, "Suggestions: " + suggestions);
displayCompletions(suggestions);
} else {
displayCompletions(null);
}
return true;
}
@Override
public boolean onQueryTextSubmit(String query) {
adapter.clear();
if (!TextUtils.isEmpty(query)) {
searcher.setQuery(query);
handler.removeCallbacks(searcher);
handler.postDelayed(searcher, SEARCH_DELAY_MS);
}
return true;
}
private class SearchRunnable implements Runnable {
private String query;
public void setQuery(String str) {
query = str;
}
@Override
public void run() {
Log.d(TAG, "Searching: " + query);
List<EpisodeBaseModel> results = getContentManger().searchShows(query);
ArrayObjectAdapter row = new ArrayObjectAdapter(new CardSelector());
row.addAll(0, results);
HeaderItem header = new HeaderItem(0, getResources().getString(R.string.search_results));
adapter.add(new ListRow(header, row));
}
}
}