package com.vt.vthacks; import java.text.DateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import com.vt.vthacks.model.IPhotoStreamItem; import com.vt.vthacks.model.impl.TwitterPhotoStreamItem; import com.vt.vthacks.view.PhotoStreamAdapter; import com.vt.vthacks.view.PhotoStreamAdapter.OnImageClickListener; import com.vt.vthacks.view.PullToRefreshListView; import com.vt.vthacks.view.PullToRefreshListView.OnRefreshListener; import com.vt.vthacks.view.PullToRefreshListView.OnScrollToBottomListener; import twitter4j.Query; import twitter4j.QueryResult; import twitter4j.Twitter; import twitter4j.TwitterException; import twitter4j.TwitterFactory; import twitter4j.conf.ConfigurationBuilder; import android.graphics.Bitmap; import android.os.AsyncTask; import android.os.Bundle; import android.support.v4.app.Fragment; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.View.OnClickListener; import android.widget.ImageView; // ------------------------------------------------------------------------- /** * This class handles the interaction/data for the Social page * * @author Brandon Potts * @version Mar 10, 2014 */ public class SocialFragment extends Fragment { private static final String TAG = "SocialActivity"; private static final String QUERY = "filter:images +exclude:retweets #vthacks"; private PullToRefreshListView listView; private PhotoStreamAdapter adapter; private Twitter twitter; private View previewHolder; private ImageView imageView; private QueryResult lastResult; // ---------------------------------------------------------- /** * Sets up the Social page * * @param savedInstanceState * is data that was most recently supplied */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ConfigurationBuilder cb = new ConfigurationBuilder(); TwitterFactory tf = new TwitterFactory(cb.build()); twitter = tf.getInstance(); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.social, container, false); listView = (PullToRefreshListView) view.findViewById(R.id.listView); listView.setOnRefreshListener(new OnRefreshListener() { @Override public void onRefresh() { resetList(); new TwitterTask().execute(); } }); previewHolder = view.findViewById(R.id.previewBox); imageView = (ImageView) view.findViewById(R.id.fullImageView); adapter = new PhotoStreamAdapter(getActivity(), new ArrayList<IPhotoStreamItem>(), new OnImageClickListener() { @Override public void onImageClicked(Bitmap bitmap) { imageView.setImageBitmap(bitmap); previewHolder.setVisibility(View.VISIBLE); imageView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { previewHolder.setVisibility(View.GONE); } }); } }); listView.setAdapter(adapter); listView.onRefresh(); return view; } @Override public void onStop() { super.onStop(); TwitterPhotoStreamItem.clearCache(); System.gc(); } private void resetList() { lastResult = null; listView.setOnScrollToBottomListener(null); adapter.clear(); adapter.notifyDataSetChanged(); } private class TwitterTask extends AsyncTask<Void, Void, List<IPhotoStreamItem>> { @Override protected List<IPhotoStreamItem> doInBackground(Void... arg0) { Query query = null; if (lastResult == null) { query = new Query(QUERY); } else { if (!lastResult.hasNext()) { return null; } query = lastResult.nextQuery(); } List<IPhotoStreamItem> photoStream = new ArrayList<IPhotoStreamItem>(); try { lastResult = twitter.search(query); } catch (TwitterException e) { Log.d(TAG, "Problem searching for tweets."); return photoStream; } if (lastResult != null) { List<twitter4j.Status> statuses = lastResult.getTweets(); if (statuses != null) { for (twitter4j.Status status : statuses) { photoStream.add(new TwitterPhotoStreamItem(status)); } } } return photoStream; } @Override protected void onPostExecute(List<IPhotoStreamItem> photoStream) { super.onPostExecute(photoStream); if (photoStream != null) { adapter.addAll(photoStream); adapter.notifyDataSetChanged(); Date date = new Date(System.currentTimeMillis()); String message = "Last updated at " + DateFormat.getDateTimeInstance().format(date); listView.onRefreshComplete(message); listView.onScrollToBottomComplete(message); listView.setOnScrollToBottomListener(new OnScrollToBottomListener() { @Override public void onScrollToBottom() { new TwitterTask().execute(); } }); } } } }