/*
* Copyright (C) 2013 Peng fei Pan <sky@xiaopan.me>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package me.xiaopan.sketchsample.fragment;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.widget.TextView;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import java.util.List;
import me.xiaopan.androidinjector.InjectContentView;
import me.xiaopan.androidinjector.InjectExtra;
import me.xiaopan.androidinjector.InjectView;
import me.xiaopan.assemblyadapter.AssemblyFragmentStatePagerAdapter;
import me.xiaopan.sketch.feature.zoom.ImageZoomer;
import me.xiaopan.sketch.util.SketchUtils;
import me.xiaopan.sketchsample.MyFragment;
import me.xiaopan.sketchsample.R;
import me.xiaopan.sketchsample.adapter.itemfactory.ImageFragmentItemFactory;
import me.xiaopan.sketchsample.util.PageNumberSetter;
import me.xiaopan.sketchsample.util.ViewPagerPlayer;
import me.xiaopan.sketchsample.widget.DepthPageTransformer;
import me.xiaopan.sketchsample.widget.ZoomOutPageTransformer;
/**
* 图片详情页面
*/
@InjectContentView(R.layout.fragment_detail)
public class DetailFragment extends MyFragment implements ImageZoomer.OnViewTapListener {
public static final String PARAM_REQUIRED_STRING_ARRAY_LIST_URLS = "PARAM_REQUIRED_STRING_ARRAY_LIST_URLS";
public static final String PARAM_REQUIRED_STRING_LOADING_IMAGE_OPTIONS_INFO = "PARAM_REQUIRED_STRING_LOADING_IMAGE_OPTIONS_INFO";
public static final String PARAM_OPTIONAL_INT_DEFAULT_POSITION = "PARAM_OPTIONAL_INT_DEFAULT_POSITION";
@InjectView(R.id.pager_detail_content)
private ViewPager viewPager;
@InjectView(R.id.text_detail_currentItem)
private TextView currentItemTextView;
@InjectView(R.id.text_detail_countItem)
private TextView countTextView;
@InjectExtra(PARAM_REQUIRED_STRING_ARRAY_LIST_URLS)
private List<String> uris;
@InjectExtra(PARAM_REQUIRED_STRING_LOADING_IMAGE_OPTIONS_INFO)
private String loadingImageOptionsInfo;
@InjectExtra(PARAM_OPTIONAL_INT_DEFAULT_POSITION)
private int position;
private Handler handler;
private ViewPagerPlayer viewPagerPlayer;
private boolean recoverPlay;
private StartPlay startPlay;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
handler = new Handler();
startPlay = new StartPlay();
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
viewPagerPlayer = new ViewPagerPlayer(viewPager);
new PageNumberSetter(currentItemTextView, viewPager);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
// 4.0上使用
viewPager.setPageTransformer(true, new DepthPageTransformer());
} else {
viewPager.setPageTransformer(true, new ZoomOutPageTransformer());
}
} else {
viewPager.setPageMargin(SketchUtils.dp2px(getActivity(), 8));
}
if (uris != null) {
AssemblyFragmentStatePagerAdapter pagerAdapter = new AssemblyFragmentStatePagerAdapter(getChildFragmentManager(), uris);
pagerAdapter.addItemFactory(new ImageFragmentItemFactory(getActivity(), loadingImageOptionsInfo));
viewPager.setAdapter(pagerAdapter);
viewPager.setCurrentItem(position);
currentItemTextView.setText(position + 1 + "");
countTextView.setText(String.valueOf(uris.size()));
}
EventBus.getDefault().register(this);
}
@Override
public void onResume() {
super.onResume();
if (recoverPlay && !viewPagerPlayer.isPlaying()) {
handler.postDelayed(startPlay, 1000);
}
}
@Override
public void onPause() {
super.onPause();
if (viewPagerPlayer.isPlaying()) {
viewPagerPlayer.stop();
recoverPlay = true;
}
handler.removeCallbacks(startPlay);
}
@Override
public void onDestroyView() {
EventBus.getDefault().unregister(this);
super.onDestroyView();
}
@Override
public void onViewTap(View view, float x, float y) {
// 如果正在播放就关闭自动播放
if (viewPagerPlayer.isPlaying()) {
viewPagerPlayer.stop();
} else {
getActivity().finish();
}
}
@SuppressWarnings("unused")
@Subscribe
public void onEvent(ImageFragment.PlayImageEvent event) {
viewPagerPlayer.start();
}
private class StartPlay implements Runnable {
@Override
public void run() {
viewPagerPlayer.start();
recoverPlay = false;
}
}
}