package com.refactech.driibo.ui.fragment; import com.refactech.driibo.AppData; import com.refactech.driibo.R; import com.refactech.driibo.dao.ShotsDataHelper; import com.refactech.driibo.type.dribble.Category; import com.refactech.driibo.type.dribble.Shot; import com.refactech.driibo.ui.adapter.ShotsAdapter; import com.refactech.driibo.util.PreferenceUtils; import com.refactech.driibo.vendor.DribbbleApi; import android.content.Intent; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.support.v4.app.LoaderManager; import android.support.v4.content.Loader; import android.support.v4.widget.CursorAdapter; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.BaseAdapter; import java.util.ArrayList; /** * Created by Issac on 7/18/13. */ public class FollowingFragment extends BasePageListFragment<Shot.ShotsRequestData> implements LoaderManager.LoaderCallbacks<Cursor> { private ShotsDataHelper mDataHelper; public static FollowingFragment newInstance() { FollowingFragment fragment = new FollowingFragment(); return fragment; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View contentView = super.onCreateView(inflater, container, savedInstanceState); mDataHelper = new ShotsDataHelper(AppData.getContext(), Category.following); getLoaderManager().initLoader(0, null, this); mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Shot shot = (Shot) getAdapter().getItem(position - mListView.getHeaderViewsCount()); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse(shot.getUrl())); startActivity(intent); } }); mListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { Shot shot = (Shot) getAdapter().getItem(position - mListView.getHeaderViewsCount()); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse(shot.getImage_url())); startActivity(intent); return true; } }); return contentView; } @Override public Loader<Cursor> onCreateLoader(int id, Bundle args) { return mDataHelper.getCursorLoader(); } @Override public void onLoadFinished(Loader<Cursor> loader, Cursor data) { getAdapter().changeCursor(data); if (data != null && data.getCount() == 0) { loadFirstPage(); } } @Override public void onLoaderReset(Loader<Cursor> loader) { getAdapter().changeCursor(null); } @Override protected int getContentViewResId() { return R.layout.fragment_shot; } @Override protected CursorAdapter getAdapter() { return (CursorAdapter) super.getAdapter(); } @Override protected BaseAdapter newAdapter() { return new ShotsAdapter(getActivity(), mListView); } @Override protected void processData(Shot.ShotsRequestData response) { mPage = response.getPage(); if (mPage == 1) { mDataHelper.deleteAll(); } ArrayList<Shot> shots = response.getShots(); mDataHelper.bulkInsert(shots); } @Override protected String getUrl(int page) { return String.format( DribbbleApi.FOLLOWING, PreferenceUtils.getPrefString(getString(R.string.pref_key_login), null).replaceAll( " ", ""), page); } @Override protected Class getResponseDataClass() { return Shot.ShotsRequestData.class; } }