package com.airlocksoftware.hackernews.activity;
import org.apache.commons.lang3.StringUtils;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.airlocksoftware.hackernews.R;
import com.airlocksoftware.hackernews.fragment.AboutUserFragment;
import com.airlocksoftware.hackernews.fragment.SubmissionsFragment;
import com.airlocksoftware.hackernews.fragment.ThreadsFragment;
import com.airlocksoftware.hackernews.interfaces.SharePopupInterface;
import com.airlocksoftware.hackernews.view.SharePopup;
import com.airlocksoftware.holo.actionbar.interfaces.ActionBarClient;
import com.airlocksoftware.holo.adapters.FragmentPagerArrayAdapter;
import com.airlocksoftware.holo.checkable.CheckableView;
import com.airlocksoftware.holo.checkable.CheckableViewManager;
import com.airlocksoftware.holo.checkable.CheckableViewManager.OnCheckedViewChangedListener;
import com.airlocksoftware.holo.utils.ViewUtils;
import com.slidingmenu.lib.SlidingMenu;
public class UserActivity extends SlideoutMenuActivity implements SharePopupInterface {
private String mUsername;
private int mCurrentPosition = 0;
private ViewPager mPager;
private LinearLayout mTabContainer;
private SharePopup mSharePopup;
private FragmentPagerArrayAdapter mAdapter;
private CheckableViewManager mTabManager;
public static final String USERNAME = UserActivity.class.getSimpleName() + ".username";
@Override
public void onCreate(Bundle savedState) {
super.onCreate(savedState);
retrieveBundles(savedState, getIntent().getExtras());
setContentView(R.layout.act_user);
findViews();
setupTabs();
setupSlidingMenu();
mAdapter = new FragmentPagerArrayAdapter(getSupportFragmentManager());
setupFragments();
mPager.setAdapter(mAdapter);
mSharePopup = new SharePopup(this, null, getOverlayManager());
// make sure ActionBar is setup & first tab is checked
pageListener.onPageSelected(0);
}
private void setupSlidingMenu() {
SlidingMenu menu = super.getSlidingMenu();
// disable touchmode so that ViewPager works
menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_NONE);
// change username to match current user
setActiveMenuItem(R.id.user_button);
((TextView) menu.findViewById(R.id.txt_user)).setText(mUsername);
}
private void setupFragments() {
Fragment aboutUserFrag = new AboutUserFragment();
Bundle aboutUserArgs = new Bundle();
aboutUserArgs.putString(AboutUserFragment.USERNAME, mUsername);
aboutUserFrag.setArguments(aboutUserArgs);
mAdapter.addItem(aboutUserFrag);
Fragment submissionsFragment = new SubmissionsFragment();
Bundle submissionsArgs = new Bundle();
submissionsArgs.putString(SubmissionsFragment.USERNAME, mUsername);
submissionsFragment.setArguments(submissionsArgs);
mAdapter.addItem(submissionsFragment);
Fragment threadsFragment = new ThreadsFragment();
Bundle threadsArgs = new Bundle();
threadsArgs.putString(ThreadsFragment.USERNAME, mUsername);
threadsFragment.setArguments(threadsArgs);
mAdapter.addItem(threadsFragment);
}
private void setupTabs() {
mTabManager = new CheckableViewManager();
for (View tab : ViewUtils.directChildViews(mTabContainer)) {
mTabManager.register((CheckableView) tab);
}
mTabManager.setOnCheckedChangedListener(tabListener);
mPager.setOnPageChangeListener(pageListener);
}
private void findViews() {
mPager = (ViewPager) findViewById(R.id.viewpager);
mTabContainer = (LinearLayout) findViewById(R.id.cnt_tabs);
}
private void retrieveBundles(Bundle savedState, Bundle extras) {
if (extras != null) mUsername = extras.getString(USERNAME);
if (savedState != null) mUsername = savedState.getString(USERNAME);
if (StringUtils.isBlank(mUsername)) throw new RuntimeException("Username passed to UserActivity is blank!");
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString(USERNAME, mUsername);
}
OnPageChangeListener pageListener = new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrollStateChanged(int arg0) {
// do nothing
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// do nothing
}
@Override
public void onPageSelected(int position) {
((ActionBarClient) mAdapter.getItem(mCurrentPosition)).cleanupActionBar(UserActivity.this,
getActionBarView().getController());
((ActionBarClient) mAdapter.getItem(position)).setupActionBar(UserActivity.this,
getActionBarView().getController());
mCurrentPosition = position;
mTabManager.protectedCheck(mTabManager.getChildAt(position)
.getId());
}
};
private OnCheckedViewChangedListener tabListener = new OnCheckedViewChangedListener() {
@Override
public void onCheckedViewChanged(CheckableViewManager manager, int newIndex, int oldIndex) {
mPager.setCurrentItem(newIndex);
}
};
public static void startUserActivity(Context context, String username) {
Intent intent = new Intent(context, UserActivity.class);
intent.putExtra(UserActivity.USERNAME, username);
context.startActivity(intent);
}
@Override
public SharePopup getSharePopup() {
return mSharePopup;
}
}