package cheng.app.cnbeta;
import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.ActionBar.TabListener;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.FragmentManager;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import cheng.app.cnbeta.util.HelpUtils;
/**
* An activity representing a list of Pages. This activity has different
* presentations for handset and tablet-size devices. On handsets, the activity
* presents a list of items, which when touched, lead to a
* {@link PageDetailActivity} representing item details. On tablets, the
* activity presents the list of items and item details side-by-side using two
* vertical panes.
* <p>
* The activity makes heavy use of fragments. The list of items is a
* {@link PageListFragment} and the item details (if present) is a
* {@link PageDetailFragment}.
* <p>
* This activity also implements the required {@link PageListFragment.Callbacks}
* interface to listen for item selections.
*/
public class PageListActivity extends ThemedFragmentActivity implements PageListFragment.Callbacks,
TabListener, OnPageChangeListener {
private static final String TAG = "PageListActivity";
private boolean mTwoPane;
private PageFragmentAdapter mPageFragmentAdapter;
private ViewPager mViewPager;
public static class DepthPageTransformer implements ViewPager.PageTransformer {
@Override
public void transformPage(View view, float position) {
int pageWidth = view.getWidth();
int pageHeight = view.getHeight();
if (position <= 0) {
view.setPivotX(pageWidth);
view.setPivotY(pageHeight / 2);
view.setAlpha(1 + position);
view.setRotationY(22.5f * position);
} else if (position >= 0.25) {
view.setPivotX(0);
view.setPivotY(pageHeight / 2);
view.setAlpha(1.25f - position);
view.setRotationY(22.5f * position - 22.5f / 4);
}
}
}
public static class DepthPageTransformer2 implements ViewPager.PageTransformer {
@Override
public void transformPage(View view, float position) {
int pageWidth = view.getWidth();
int pageHeight = view.getHeight();
if (position == 0) {
view.setAlpha(1);
view.setRotationY(0);
} else if (position < 0) {
view.setPivotX(pageWidth);
view.setPivotY(pageHeight / 2);
view.setAlpha(1 + position / 2);
view.setRotationY(22.5f * position);
} else {
view.setPivotX(0);
view.setPivotY(pageHeight / 2);
view.setAlpha(1 - position / 2);
view.setRotationY(22.5f * position);
}
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_page_list);
mViewPager = (ViewPager) findViewById(R.id.list_pager);
mTwoPane = getResources().getBoolean(R.bool.two_pane);
boolean shortPageWidth = getResources().getBoolean(R.bool.short_page_width);
final ActionBar bar = getActionBar();
bar.setDisplayOptions(ActionBar.DISPLAY_SHOW_TITLE | ActionBar.DISPLAY_SHOW_HOME,
ActionBar.DISPLAY_SHOW_TITLE | ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_HOME_AS_UP);
final FragmentManager fm = getSupportFragmentManager();
float pageWidth = 1.f;
if (mTwoPane) {
pageWidth = 0.5f;
} else if (shortPageWidth) {
pageWidth = 0.75f;
mViewPager.setPageTransformer(true, new DepthPageTransformer());
} else {
mViewPager.setPageTransformer(true, new DepthPageTransformer2());
}
mPageFragmentAdapter = new PageFragmentAdapter(fm, pageWidth);
mViewPager.setAdapter(mPageFragmentAdapter);
mViewPager.setOnPageChangeListener(this);
if (!mTwoPane) {
//mViewPager.setPageMarginDrawable(R.drawable.grey_border_inset_lr);
//mViewPager.setPageMargin(getResources().getDimensionPixelSize(R.dimen.page_margin_width));
bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
bar.addTab(bar.newTab()
.setText(R.string.page_title_news)
.setTabListener(this));
bar.addTab(bar.newTab()
.setText(R.string.page_title_comments)
.setTabListener(this));
}
// TODO: If exposing deep links into your app, handle intents here.
}
/**
* Callback method from {@link PageListFragment.Callbacks} indicating that
* the item with the given ID was selected.
*/
@Override
public void onItemSelected(int pageId, long id) {
Intent detailIntent = new Intent(this, PageDetailActivity.class);
detailIntent.putExtra(PageDetailFragment.ARG_PAGE_ID, pageId);
detailIntent.putExtra(PageDetailFragment.ARG_ITEM_ID, id);
startActivity(detailIntent);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_activity_actions, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_abouts:
HelpUtils.showAbout(this);
return true;
case R.id.action_settings:
startActivity(new Intent(this, SettingsActivity.class));
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onTabReselected(Tab tab, android.app.FragmentTransaction ft) {
// TODO Auto-generated method stub
}
@Override
public void onTabSelected(Tab tab, android.app.FragmentTransaction ft) {
if (!mTwoPane)
mViewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(Tab tab, android.app.FragmentTransaction ft) {
// TODO Auto-generated method stub
}
@Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub
}
@Override
public void onPageSelected(int arg0) {
if (!mTwoPane)
getActionBar().setSelectedNavigationItem(arg0);
}
}