package com.brink.main.Fragments; import java.util.ArrayList; import java.util.List; import java.util.TreeSet; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import android.content.Context; import android.graphics.Bitmap; import android.os.AsyncTask; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import android.support.v4.app.ListFragment; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.ProgressBar; import android.widget.TextView; import com.brink.main.R; import com.brink.main.api.FeedApiManager; import com.brink.main.contracts.ISecondTaskNotifier; import com.brink.main.contracts.IThirdTaskNotifier; import com.brink.main.converters.FeedConverter; import com.brink.main.models.Checkin; import com.brink.main.models.FeedItem; public class ActivityFeed extends FragmentActivity { private static String TAG = "ActivityFeedFragmentActivity"; public static Context mContext; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); FragmentManager fm = getSupportFragmentManager(); //Add our fragment if and only if it has not been added before if(fm.findFragmentById(android.R.id.content) == null) { Log.i(TAG, "onCreate - Adding FeedFragment"); FeedFragment mFeedFragment = new FeedFragment(); fm.beginTransaction().add(android.R.id.content, mFeedFragment).commit(); } } public static class FeedFragment extends ListFragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment return inflater.inflate(R.layout.feed, container, false); } public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); mContext = getActivity(); ActivityFeed eFeed = new ActivityFeed(); FeedAdapter mFeedAdapter = eFeed.new FeedAdapter(getActivity()); this.setListAdapter(mFeedAdapter); } } /* * Name: ActivityFeedListAdapter * Description: Adapter to mesh the array of items containted in the data feed and the list. * @param ArrayList<feedItems> items: This will be the list of items to be displayed to the user. */ public class FeedAdapter extends BaseAdapter implements ISecondTaskNotifier<List<FeedItem>>, AdapterView.OnItemClickListener{ private ArrayList<FeedItem> feedData = new ArrayList<FeedItem>(); private FeedItem mLoadingItem = new FeedItem(); private LayoutInflater mInflater; private Context mContext; private Checkin mCheckin = null; private static final int TYPE_CHECKIN = 0; private static final int TYPE_TRENDING =1; private static final int TYPE_ADVERTITEM = 2; private static final int TYPE_LOAD = 3; public ISecondTaskNotifier<List<FeedItem>> _notifier; public FeedAdapter(Context _context) { mContext = _context; mInflater = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); _notifier = this; mLoadingItem.SetEnum("Loading"); AsyncTask<Integer, Void, List<FeedItem>> mFeedTask = FeedApiManager.getFeedItems(_notifier, "Baton Rouge"); mFeedTask.execute(0); } public void addFeedItems(List<FeedItem> feedItems) { if(feedData.size() == 0) { feedData.addAll(feedItems); feedData.add(mLoadingItem); notifyDataSetChanged(); } else { feedData.remove(feedData.size() - 1); feedData.addAll(feedItems); feedData.add(mLoadingItem); notifyDataSetChanged(); } } public int getCount() { return feedData.size(); } public Object getItem(int position) { return feedData.get(position); } public int getViewTypeCount() { return 2; } public int getItemViewType(int position) { return feedData.get(position).type.TypeValue(); } public long getItemId(int position) { return position; } public View getView(int position, View convertView, ViewGroup parent) { RatedItemHolder rateHolder = null; LoadItemHolder loadHolder = null; AdvertisementHolder advertHolder = null; int type = getItemViewType(position); if(convertView == null) { switch(type) { case TYPE_CHECKIN: convertView = mInflater.inflate(R.layout.feeditem1, null); rateHolder = new RatedItemHolder(); rateHolder.barName = (TextView)convertView.findViewById(R.id.feeditemratebarname); rateHolder.barRating = (TextView)convertView.findViewById(R.id.feeditemratebarrating); rateHolder.checkedIn = (TextView)convertView.findViewById(R.id.feeditemratebarcheckins); rateHolder.usersName = (TextView)convertView.findViewById(R.id.feeditemrateusersname); rateHolder.userTakenPicture = (ImageView)convertView.findViewById(R.id.ratedbarpicture); convertView.setTag(rateHolder); break; //This is the case for when we add advertisement items. case TYPE_ADVERTITEM: break; case TYPE_TRENDING: break; case TYPE_LOAD: convertView = mInflater.inflate(R.layout.feed_load, null); loadHolder = new LoadItemHolder(); loadHolder.feedLoad = (ProgressBar)convertView.findViewById(R.id.feedloadprogress); convertView.setTag(loadHolder); break; } } else { switch(type) { case TYPE_CHECKIN: rateHolder = (RatedItemHolder) convertView.getTag(); break; //This is the case for when we add advertisement items. case TYPE_ADVERTITEM: break; case TYPE_TRENDING: break; case TYPE_LOAD: loadHolder = (LoadItemHolder) convertView.getTag(); break; } } //Setting the data on to the feed. switch(type) { case TYPE_CHECKIN: //Get the information to inflate; mCheckin = new Checkin(); mCheckin = (Checkin) getItem(position); rateHolder.barName.setText(mCheckin.Bar.Name); rateHolder.barRating.setText(mCheckin.Bar.Rating); rateHolder.checkedIn.setText("" + mCheckin.Bar.CheckinCount); rateHolder.usersName.setText(mCheckin.User.Name); rateHolder.userTakenPicture.setImageBitmap(mCheckin.Image); break; //This is the case for when we add advertisement items. case TYPE_ADVERTITEM: break; case TYPE_TRENDING: break; case TYPE_LOAD: loadHolder.feedLoad.setVisibility(View.INVISIBLE); break; } return convertView; } public void onSecondTaskComplete(List<FeedItem> result) { addFeedItems(result); } public void onItemClick(AdapterView<?> arg0, View arg1, int position, long id) { Log.i("TAG", "Receiving input"); } } //TODO adjust later to where these are in the current format of the app. public static class Advertisement { public String barName, barAddress, happeningSpecial; Bitmap barLogo; } public static class RatedItemHolder { TextView barName, barRating, usersName, checkedIn; ImageView userTakenPicture; } public static class LoadItemHolder { ProgressBar feedLoad; } public static class AdvertisementHolder { TextView barName, barAddress, happeningSpecial; ImageView barLogo; } }