package com.yaoyumeng.v2ex.ui;
import android.support.v4.app.Fragment;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.view.MenuItem;
import com.yaoyumeng.v2ex.R;
import com.yaoyumeng.v2ex.ui.adapter.PhotoViewerPagerAdapter;
import com.yaoyumeng.v2ex.ui.photo.PhotoViewCallbacks;
import com.yaoyumeng.v2ex.ui.photo.PhotoViewPager;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
public class PhotoViewActivity extends BaseActivity implements ViewPager.OnPageChangeListener, PhotoViewPager.OnInterceptTouchListener, PhotoViewCallbacks {
public static final String EXTRA_PHOTO_INDEX = "photo_index";
public static final String EXTRA_PHOTO_DATAS = "photo_arrays";
private PhotoViewPager mViewPager;
private PhotoViewerPagerAdapter mAdapter;
private ArrayList<String> mPhohoUrls;
/**
* The index of the currently viewed photo
*/
private int mCurrentPhotoIndex;
/**
* The listeners wanting full screen state for each screen position
*/
private final Map<Integer, OnScreenListener>
mScreenListeners = new HashMap<Integer, OnScreenListener>();
public static void launch(Context context, int position, ArrayList<String> photoUrls) {
Intent intent = new Intent(context, PhotoViewActivity.class);
intent.putExtra(EXTRA_PHOTO_INDEX, position);
intent.putExtra(EXTRA_PHOTO_DATAS, photoUrls);
context.startActivity(intent);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_photo_view);
final Intent intent = getIntent();
if (intent.hasExtra(EXTRA_PHOTO_DATAS)) {
mPhohoUrls = (ArrayList<String>) getIntent().getSerializableExtra(EXTRA_PHOTO_DATAS);
}
mCurrentPhotoIndex = getIntent().getIntExtra(EXTRA_PHOTO_INDEX, 0);
mAdapter = new PhotoViewerPagerAdapter(getSupportFragmentManager());
mAdapter.setData(mPhohoUrls);
mViewPager = (PhotoViewPager) findViewById(R.id.photo_view_pager);
mViewPager.setAdapter(mAdapter);
mViewPager.setOnPageChangeListener(this);
mViewPager.setOnInterceptTouchListener(this);
mViewPager.setPageMargin(getResources().getDimensionPixelSize(R.dimen.photo_page_margin));
mViewPager.setCurrentItem(mCurrentPhotoIndex);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
setTitle();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
onBackPressed();
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
mCurrentPhotoIndex = position;
setTitle();
}
@Override
public void onPageScrollStateChanged(int state) {
}
@Override
public PhotoViewPager.InterceptType onTouchIntercept(float origX, float origY) {
boolean interceptLeft = false;
boolean interceptRight = false;
for (OnScreenListener listener : mScreenListeners.values()) {
if (!interceptLeft) {
interceptLeft = listener.onInterceptMoveLeft(origX, origY);
}
if (!interceptRight) {
interceptRight = listener.onInterceptMoveRight(origX, origY);
}
}
if (interceptLeft) {
if (interceptRight) {
return PhotoViewPager.InterceptType.BOTH;
}
return PhotoViewPager.InterceptType.LEFT;
} else if (interceptRight) {
return PhotoViewPager.InterceptType.RIGHT;
}
return PhotoViewPager.InterceptType.NONE;
}
@Override
public void addScreenListener(int position, OnScreenListener listener) {
mScreenListeners.put(position, listener);
}
@Override
public void removeScreenListener(int position) {
mScreenListeners.remove(position);
}
@Override
public boolean isFragmentActive(Fragment fragment) {
if (mViewPager == null || mAdapter == null) {
return false;
}
return mViewPager.getCurrentItem() == mAdapter.getItemPosition(fragment);
}
private void setTitle(){
super.setTitle(String.format("%d / %d", mCurrentPhotoIndex+1, mPhohoUrls.size()));
}
}