package com.distantfuture.videos.channellookup;
import android.app.ListFragment;
import android.app.LoaderManager;
import android.content.Loader;
import android.os.Bundle;
import android.os.Handler;
import android.text.TextUtils;
import android.view.View;
import android.widget.ListView;
import com.distantfuture.videos.database.YouTubeData;
import com.distantfuture.videos.misc.BusEvents;
import java.util.ArrayList;
import java.util.List;
import de.greenrobot.event.EventBus;
public class ChannelLookupListFragment extends ListFragment implements LoaderManager.LoaderCallbacks<List<YouTubeData>> {
private ChannelLookupAdapter mAdapter;
private String mQuery;
private String mPendingQuery;
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
getListView().setFastScrollEnabled(false); // true made it difficult to hit add and remove buttons
EventBus.getDefault().register(this);
mAdapter = new ChannelLookupAdapter(getActivity());
setEmptyText("Nothing found");
setListAdapter(mAdapter);
setListShown(false);
getLoaderManager().initLoader(0, null, this);
}
@Override
public void onLoadFinished(Loader<List<YouTubeData>> arg0, List<YouTubeData> data) {
mAdapter.setData(data);
ChannelLookupActivity activity = (ChannelLookupActivity) getActivity();
activity.adapterDataChanged();
if (isResumed()) {
setListShown(true);
} else {
setListShownNoAnimation(true);
}
}
@Override
public void onDestroy() {
EventBus.getDefault().unregister(this);
super.onDestroy();
}
// eventbus event
public void onEventMainThread(BusEvents.ContentEvent event) {
// refresh list if channels update if not doing a search
// search will have to refresh itself in the adapter to refresh the plus minus buttons
if (TextUtils.isEmpty(mQuery))
getLoaderManager().restartLoader(0, null, this);
}
public int getCount() {
if (mAdapter != null)
return mAdapter.getCount();
return 0;
}
public List<String> getChannels() {
List<String> result = new ArrayList<String>();
if (mAdapter != null) {
int cnt = mAdapter.getCount();
for (int i = 0; i < cnt; i++) {
YouTubeData data = mAdapter.getItem(i);
if (data != null)
result.add(data.mChannel);
}
}
return result;
}
public String getQuery() {
return mQuery;
}
public void setQuery(String inQuery) {
if (!TextUtils.equals(mPendingQuery, inQuery)) {
mPendingQuery = inQuery;
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
if (!TextUtils.equals(mPendingQuery, mQuery)) {
mQuery = mPendingQuery;
ChannelLookupListFragment.this.getLoaderManager().restartLoader(0, null, ChannelLookupListFragment.this);
}
}
}, 100);
}
}
@Override
public void onLoaderReset(Loader<List<YouTubeData>> arg0) {
mAdapter.setData(null);
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
YouTubeData selectedMedia = mAdapter.getItem(position);
handleNavigation(selectedMedia, false);
}
private void handleNavigation(YouTubeData info, boolean autoStart) {
ChannelDetailsActivity.show(getActivity(), info);
}
@Override
public Loader<List<YouTubeData>> onCreateLoader(int arg0, Bundle arg1) {
return new ChannelLookupItemLoader(getActivity(), mQuery);
}
}