package edu.cmsc434.paintdrip.paintdripprototype.Feed;
import edu.cmsc434.paintdrip.paintdripprototype.MapsActivity;
import edu.cmsc434.paintdrip.paintdripprototype.ParseManager;
import edu.cmsc434.paintdrip.paintdripprototype.R;
import android.app.ActionBar;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.res.Resources;
import android.graphics.Typeface;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.os.Bundle;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.util.Log;
import android.util.TypedValue;
import android.view.Menu;
import android.view.MenuItem;
import android.support.v4.view.ViewPager.SimpleOnPageChangeListener;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.astuetz.PagerSlidingTabStrip;
import com.parse.Parse;
import com.parse.ParseObject;
import com.parse.ParseUser;
import com.parse.ui.ParseLoginBuilder;
public class FeedActivity extends FragmentActivity implements
PaintingListFragment.OnFragmentInteractionListener, FeedItemListener {
private PagerSlidingTabStrip mPageTabs;
private MyPagerAdapter mPageAdapter;
private PagerSlidingTabStrip mTabs;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// intialize Parse
ParseObject.registerSubclass(Painting.class);
Parse.initialize(this, "0JR6ZeP19ikuzEW4gGtQrNu8B1m5jukmjNZFwigF", "pX0frOadB8eHXmZignS2p7WOgTfOlKSHPHfWAjlN");
if (ParseUser.getCurrentUser() == null) {
// show login screen
ParseLoginBuilder builder = new ParseLoginBuilder(FeedActivity.this);
startActivityForResult(builder.build(), 0);
}
setContentView(R.layout.activity_feed);
// Initialize the ViewPager and set an adapter
mPageAdapter = new MyPagerAdapter(getSupportFragmentManager());
ViewPager pager = (ViewPager) findViewById(R.id.pager);
pager.setAdapter(mPageAdapter);
pager.setCurrentItem(0);
// bind tabs to the ViewPager
mPageTabs = (PagerSlidingTabStrip) findViewById(R.id.tabs);
mPageTabs.setAllCaps(true);
mPageTabs.setShouldExpand(true);
mPageTabs.setViewPager(pager);
mPageTabs.setIndicatorColorResource(R.color.transparent_blue);
Resources r = getResources();
mPageTabs.setIndicatorHeight((int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 4.5f, r.getDisplayMetrics()));
mPageTabs.setUnderlineHeight((int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 1f, r.getDisplayMetrics()));
mPageTabs.setDividerColorResource(R.color.white);
mPageTabs.setTextSize((int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 13.5f, r.getDisplayMetrics()));
mPageTabs.setOnPageChangeListener(new SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
updateTabs(position);
mPageAdapter.setCurrentPage(position);
}
});
mPageTabs.setOnTabListener(new PagerSlidingTabStrip.TabListener() {
@Override
public void onTabReselected(View tab, int position) {
mPageAdapter.scrollToTop();
}
});
// set the actionbar title font
int actionBarTitle = Resources.getSystem().getIdentifier("action_bar_title", "id", "android");
TextView actionBarTitleView = (TextView) getWindow().findViewById(actionBarTitle);
if (actionBarTitleView != null){
Typeface font = Typeface.createFromAsset(getAssets(), "fonts/GrandHotel-Regular.otf");
actionBarTitleView.setTypeface(font);
}
updateTabs(0);
}
@Override
protected void onStart() {
super.onStart();
}
private void updateTabs(int position) {
LinearLayout tabsLayout = ((LinearLayout)mPageTabs.getChildAt(0));
for(int i = 0; i < tabsLayout.getChildCount(); i++) {
TextView tabText = (TextView) tabsLayout.getChildAt(i);
if (i == position) {
tabText.setTextAppearance(getApplicationContext(), R.style.SelectedTabBarText);
} else {
tabText.setTextAppearance(getApplicationContext(), R.style.DeselectedTabBarText);
}
}
}
@Override
public void onResume(){
super.onResume();
mPageAdapter.updateFeed();
mPageAdapter.scrollToTop();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.feed, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_paint) {
startActivity(new Intent(this, MapsActivity.class));
}
return super.onOptionsItemSelected(item);
}
@Override
public void onFragmentInteraction(String id) {
}
public void updatePaintings() {
Log.i("JB", "Updating tabs");
mPageAdapter.updateFeed();
}
public void menuClicked(final Painting painting) {
AlertDialog.Builder builder = new AlertDialog.Builder(FeedActivity.this);
final String[] items = getApplicationContext().getResources()
.getStringArray(R.array.dialog_your_drawing);
builder.setItems(items, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (which == 0) {
// TODO add share functionality
} else if (which == 1) {
// TODO add edit functionality
} else if (which == 2) {
// TODO add confirmation dialog
new ParseManager(getBaseContext()).deletePainting(painting, FeedActivity.this);
}
}
}).show();
}
public class MyPagerAdapter extends FragmentPagerAdapter {
private final String[] TITLES = new String[3];
int mCurrentPage = -1;
PaintingListFragment[] mFragments;
public MyPagerAdapter(FragmentManager fm) {
super(fm);
Log.i("JB", "Creating PagerAdapter");
TITLES[0] = "FRIENDS";
TITLES[1] = "GLOBAL";
TITLES[2] = "ME";
mCurrentPage = 0;
mFragments = new PaintingListFragment[3];
mFragments[0] = PaintingListFragment.newInstance(PaintingListFragment.FRIENDS_FRAGMENT);
mFragments[1] = PaintingListFragment.newInstance(PaintingListFragment.GLOBAL_FRAGMENT);
mFragments[2] = PaintingListFragment.newInstance(PaintingListFragment.ME_FRAGMENT);
}
@Override
public CharSequence getPageTitle(int position) {
return TITLES[position];
}
public void updateFeed() {
for (int i = 0; i < mFragments.length; i++) {
mFragments[i].refresh();
}
}
public void scrollToTop() {
mFragments[mCurrentPage].scrollToTop();
}
@Override
public int getCount() {
return TITLES.length;
}
@Override
public Fragment getItem(int position) {
Log.i("JB", "Getting fragment");
return mFragments[position];
}
public void setCurrentPage(int position) {
mCurrentPage = position;
}
public int getCurrentPage() {
return mCurrentPage;
}
}
}