package com.xeishawn.googleplusmini;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.view.ViewPager;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarActivity;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.Button;
import android.widget.CheckedTextView;
import android.widget.ExpandableListView;
import android.widget.ImageView;
import android.widget.TextView;
import com.google.api.services.plusDomains.model.Person;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.assist.ImageScaleType;
import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer;
import java.util.List;
import java.util.Locale;
public class PlusActivity extends ActionBarActivity implements ActionBar.TabListener {
// private static final String TAG = "gpm-plus-activity";
SectionsPagerAdapter mSectionsPagerAdapter;
ViewPager mViewPager;
private static String accessToken;
private static String displayName;
private static String organizations;
private static String aboutMe;
private static String image_url;
private static String occupation;
private static String[] circle_list;
private static String[][] circle_children_list;
private static Person[][] circle_children_people;
private static ImageLoader imageLoader;
private static DisplayImageOptions options;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder()
.imageScaleType(ImageScaleType.EXACTLY)
.displayer(new FadeInBitmapDisplayer(300)).build();
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(
getApplicationContext())
.defaultDisplayImageOptions(defaultOptions)
.discCacheSize(100 * 1024 * 1024).build();
ImageLoader.getInstance().init(config);
imageLoader = ImageLoader.getInstance();
options = new DisplayImageOptions.Builder().cacheInMemory(true)
.cacheOnDisc(true).resetViewBeforeLoading(true)
.showImageForEmptyUri(getResources().getDrawable(R.drawable.ic_launcher))
.showImageOnFail(getResources().getDrawable(R.drawable.ic_launcher))
.showImageOnLoading(getResources().getDrawable(R.drawable.ic_launcher)).build();
Intent activity = getIntent();
accessToken = activity.getExtras().getString("accessToken");
aboutMe = activity.getExtras().getString("aboutMe");
occupation = activity.getExtras().getString("occupation");
organizations = activity.getExtras().getString("organizations");
displayName = activity.getExtras().getString("displayName");
image_url = activity.getExtras().getString("image_url");
image_url = image_url.substring(0,image_url.indexOf("?")) + "?sz=300";
circle_list = activity.getStringArrayExtra("circle_list");
circle_children_list = GetUsernameTask.getArray();
circle_children_people = GetUsernameTask.getCircle_children_people();
final ActionBar actionBar = getSupportActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
actionBar.setHomeButtonEnabled(true);
mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
mViewPager = (ViewPager) findViewById(R.id.pager);
mViewPager.setAdapter(mSectionsPagerAdapter);
mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
actionBar.setSelectedNavigationItem(position);
}
});
for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) {
actionBar.addTab(
actionBar.newTab()
.setText(mSectionsPagerAdapter.getPageTitle(i))
.setTabListener(this));
}
}
@Override
public void onBackPressed()
{
super.onBackPressed();
Intent activity = new Intent(getApplicationContext(), LoginActivity.class);
activity.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(activity);
finish();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_sign_out) {
Intent activity = new Intent(getApplicationContext(), LoginActivity.class);
activity.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(activity);
finish();
}
return super.onOptionsItemSelected(item);
}
@Override
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
mViewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
}
@Override
public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
}
public class SectionsPagerAdapter extends FragmentPagerAdapter {
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return MyProfile.newInstance(0, "Profile");
case 1:
return MyCircles.newInstance(1, "Circles");
default:
return null;
}
}
@Override
public int getCount() {
return 2;
}
@Override
public CharSequence getPageTitle(int position) {
Locale l = Locale.getDefault();
switch (position) {
case 0:
return getString(R.string.title_section1).toUpperCase(l);
case 1:
return getString(R.string.title_section2).toUpperCase(l);
}
return null;
}
}
public static class MyProfile extends Fragment {
private static final String ARG_SECTION_NUMBER = "section_number";
private static final String TITLE = "Profile";
public static MyProfile newInstance(int sectionNumber, String title) {
MyProfile fragment = new MyProfile();
Bundle args = new Bundle();
args.putInt(ARG_SECTION_NUMBER, sectionNumber);
args.putString(TITLE, title);
fragment.setArguments(args);
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.profile_fragment, container, false);
ImageView imageView = (ImageView) rootView.findViewById(R.id.icon);
imageLoader.displayImage(image_url, imageView, options);
TextView profile_name = (TextView) rootView.findViewById(R.id.profile_name);
TextView profile_info = (TextView) rootView.findViewById(R.id.profile_info);
if (displayName != null) {
profile_name.setText(displayName);
}
else{
displayName = "User";
profile_name.setText(displayName);
}
if (occupation != null) {
profile_info.setText(occupation + "\n");
}
else{
profile_info.setText("\n");
}
if (organizations != null) {
profile_info.append(organizations + "\n");
}
else{
profile_info.append("\n");
}
if (aboutMe != null) {
profile_info.append(aboutMe + "\n");
}
else{
profile_info.append("\n");
}
Button email = (Button) rootView.findViewById(R.id.button_email);
email.setVisibility(View.INVISIBLE);
return rootView;
}
}
public static class MyCircles extends Fragment {
private static final String ARG_SECTION_NUMBER = "section_number";
private static final String TITLE = "Circles";
public static MyCircles newInstance(int sectionNumber, String title) {
MyCircles fragment = new MyCircles();
Bundle args = new Bundle();
args.putInt(ARG_SECTION_NUMBER, sectionNumber);
args.putString(TITLE, title);
fragment.setArguments(args);
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, final ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.circle_main, container, false);
ExpandableListView list = (ExpandableListView) rootView.findViewById(R.id.listView);
list.setAdapter(new FriendListAdapter(this.getActivity()));
list.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
//Set child listener. clicking on friend under a circle will open the friend's profile
@Override
public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
String friendDisplayName;
String friendOrganizations = "";
String friendAboutMe;
String friendImage_url;
String friendOccupation;
Intent activity = new Intent(parent.getContext(), FriendProfile.class);
activity.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
Person friend = circle_children_people[groupPosition][childPosition];
// Log.i(TAG, friend.toString());
friendDisplayName = friend.getDisplayName();
activity.putExtra("friendDisplayName", friendDisplayName);
friendAboutMe = friend.getAboutMe();
activity.putExtra("friendAboutMe", friendAboutMe);
friendImage_url = friend.getImage().getUrl();
activity.putExtra("friendImage_url", friendImage_url);
friendOccupation = friend.getOccupation();
activity.putExtra("friendOccupation", friendOccupation);
if(friend.getOrganizations() != null) {
List<Person.Organizations> tmp = friend.getOrganizations();
for (Person.Organizations o: tmp){
friendOrganizations = organizations + " " + o.getName() + ",";
}
friendOrganizations = friendOrganizations.substring(0, friendOrganizations.length()-1);
activity.putExtra("friendOrganizations", friendOrganizations);
}
startActivity(activity);
return true;
}
});
return rootView;
}
public class FriendListAdapter extends BaseExpandableListAdapter {
public LayoutInflater inflater;
public Activity activity;
private String[] circles = circle_list;
private String[][] circle_children = (String[][])circle_children_list;
public FriendListAdapter (Activity activity) {
this.activity = activity;
inflater = activity.getLayoutInflater();
}
@Override
public int getGroupCount() {
return circles.length;
}
@Override
public int getChildrenCount(int groupPosition) {
return circle_children[groupPosition].length;
}
@Override
public Object getGroup(int groupPosition) {
return circles[groupPosition];
}
@Override
public Object getChild(int groupPosition, int childPosition) {
return circle_children[groupPosition][childPosition];
}
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@Override
public boolean hasStableIds() {
return true;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = inflater.inflate(R.layout.circle_list, null);
}
((CheckedTextView) convertView).setText(getGroup(groupPosition).toString());
((CheckedTextView) convertView).setChecked(isExpanded);
return convertView;
}
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = inflater.inflate(R.layout.entry, null);
}
convertView.setClickable(false);
TextView textView = (TextView) convertView.findViewById(R.id.entry);
textView.setText(getChild(groupPosition, childPosition).toString());
Person friend = circle_children_people[groupPosition][childPosition];
ImageView icon = (ImageView) convertView.findViewById(R.id.mini_icon);
imageLoader.displayImage(friend.getImage().getUrl(), icon, options);
return convertView;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
}
}
}