package party.danyang.nationalgeographic.ui; import android.annotation.SuppressLint; import android.app.SharedElementCallback; import android.content.Intent; import android.databinding.DataBindingUtil; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentStatePagerAdapter; import android.support.v4.view.ViewPager; import android.support.v7.app.ActionBar; import android.support.v7.widget.Toolbar; import android.view.Menu; import android.view.MenuItem; import android.view.View; import com.umeng.analytics.MobclickAgent; import java.util.ArrayList; import java.util.List; import java.util.Map; import me.yokeyword.swipebackfragment.SwipeBackActivity; import party.danyang.nationalgeographic.R; import party.danyang.nationalgeographic.databinding.ActivityAlbumBinding; import party.danyang.nationalgeographic.utils.Utils; import party.danyang.nationalgeographic.utils.singleton.PicassoHelper; public class AlbumActivity extends SwipeBackActivity { private static final String TAG = AlbumActivity.class.getSimpleName(); public static final String INTENT_INDEX = "party.danyang.ng.index"; public static final String INTENT_TITLES = "party.danyang.ng.titles"; public static final String INTENT_CONTENTS = "party.danyang.ng.contents"; public static final String INTENT_AUTHORS = "party.danyang.ng.authors"; public static final String INTENT_URLS = "party.danyang.ng.urls"; public static final String INTENT_PAGE_URLS = "party.danyang.ng.page_urls"; private ActivityAlbumBinding binding; private PagerAdapter adapter; public boolean mVisible = true; private ArrayList<String> titles; private ArrayList<String> contents; private ArrayList<String> authors; private ArrayList<String> urls; private ArrayList<String> pageUrls; private int index = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); binding = DataBindingUtil.setContentView(this, R.layout.activity_album); supportPostponeEnterTransition(); Intent intent = getIntent(); if (intent != null) { titles = intent.getStringArrayListExtra(INTENT_TITLES); contents = intent.getStringArrayListExtra(INTENT_CONTENTS); authors = intent.getStringArrayListExtra(INTENT_AUTHORS); urls = intent.getStringArrayListExtra(INTENT_URLS); pageUrls = intent.getStringArrayListExtra(INTENT_PAGE_URLS); index = intent.getIntExtra(INTENT_INDEX, 0); } initViews(); setEnterAnimator(); } @Override public void onResume() { super.onResume(); MobclickAgent.onResume(this); PicassoHelper.getInstance(this).resumeTag(AlbumFragment.TAG_ALBUM_FRAGMENT); } @Override public void onPause() { super.onPause(); MobclickAgent.onPause(this); PicassoHelper.getInstance(this).pauseTag(AlbumFragment.TAG_ALBUM_FRAGMENT); } @Override protected void onDestroy() { super.onDestroy(); PicassoHelper.getInstance(this).cancelTag(AlbumFragment.TAG_ALBUM_FRAGMENT); } private void setEnterAnimator() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { setEnterSharedElementCallback(new SharedElementCallback() { @Override public void onMapSharedElements(List<String> names, Map<String, View> sharedElements) { String url = urls.get(binding.viewPager.getCurrentItem()); AlbumFragment fragment = (AlbumFragment) adapter.instantiateItem(binding.viewPager, binding.viewPager.getCurrentItem()); sharedElements.clear(); sharedElements.put(url, fragment.getSharedElement()); } }); } } @Override public void supportFinishAfterTransition() { Intent data = new Intent(); data.putExtra(INTENT_INDEX, binding.viewPager.getCurrentItem()); setResult(RESULT_OK, data); super.supportFinishAfterTransition(); } private void initViews() { binding.toolbar.setNavigationIcon(R.drawable.ic_arrow_back_grey_300_24dp); setSupportActionBar(binding.toolbar); setTitle(null); binding.toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { supportFinishAfterTransition(); } }); binding.toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { onToolbarMenuItemClicked(item); return true; } }); adapter = new PagerAdapter(); binding.viewPager.setAdapter(adapter); binding.viewPager.setCurrentItem(index); //初始化title content author binding.setTitle(titles.get(index)); binding.setContent(contents.get(index)); binding.setAuthor(authors.get(index)); //初始化为可见 binding.setFullScreen(false); //viewPage 滑动时改变title content author binding.viewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { @Override public void onPageSelected(int position) { super.onPageSelected(position); binding.setTitle(titles.get(position)); binding.setContent(contents.get(position)); binding.setAuthor(authors.get(position)); } }); } private void onToolbarMenuItemClicked(MenuItem menuItem) { int id = menuItem.getItemId(); if (id == R.id.action_yourshotlink) { Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse(pageUrls.get(binding.viewPager.getCurrentItem()))); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } else { Utils.makeSnackBar(binding.getRoot(), R.string.not_legal_yourshotlink, true); } } else if (id == R.id.action_share) { int currentPosition = binding.viewPager.getCurrentItem(); Utils.shareItem(this, urls.get(currentPosition), titles.get(currentPosition), contents.get(currentPosition) + "\n" + authors.get(currentPosition), binding.getRoot()); } } private class PagerAdapter extends FragmentStatePagerAdapter { public PagerAdapter() { super(getSupportFragmentManager()); } @Override public Fragment getItem(int position) { return AlbumFragment.newInstance(urls, position); } @Override public int getCount() { return urls.size(); } } private static final int UI_ANIMATION_DELAY = 300; private final Handler mHideHandler = new Handler(); private final Runnable mHidePart2Runnable = new Runnable() { @SuppressLint("InlinedApi") @Override public void run() { binding.viewPager.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); } }; private final Runnable mShowPart2Runnable = new Runnable() { @Override public void run() { ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { actionBar.show(); } binding.setFullScreen(false); } }; public void hide() { ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { actionBar.hide(); } binding.setFullScreen(true); mVisible = false; mHideHandler.removeCallbacks(mShowPart2Runnable); mHideHandler.postDelayed(mHidePart2Runnable, UI_ANIMATION_DELAY); } public void show() { binding.viewPager.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION); mVisible = true; mHideHandler.removeCallbacks(mHidePart2Runnable); mHideHandler.postDelayed(mShowPart2Runnable, UI_ANIMATION_DELAY); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_album, menu); return true; } @Override public void onBackPressed() { supportFinishAfterTransition(); } }