content: package tv.baokan.baokanandroid.ui.activity;
  
  import android.Manifest;
  import android.app.Activity;
  import android.content.Context;
  import android.content.Intent;
  import android.content.pm.PackageManager;
  import android.graphics.Bitmap;
  import android.graphics.drawable.Drawable;
  import android.net.Uri;
  import android.os.Environment;
  import android.provider.MediaStore;
  import android.support.annotation.NonNull;
  import android.support.v4.app.ActivityCompat;
  import android.support.v4.content.ContextCompat;
  import android.support.v4.view.ViewPager;
  import android.os.Bundle;
  import android.text.TextUtils;
  import android.view.View;
  import android.widget.ImageView;
  import android.widget.TextView;
  import android.widget.Toast;
  
  import com.squareup.picasso.Picasso;
  import com.squareup.picasso.Target;
  
  import java.io.File;
  import java.io.FileNotFoundException;
  import java.io.FileOutputStream;
  import java.io.IOException;
  import java.io.Serializable;
  import java.util.ArrayList;
  import java.util.List;
  
  import tv.baokan.baokanandroid.R;
  import tv.baokan.baokanandroid.adapter.PhotoDetailViewPageAdapter;
  import tv.baokan.baokanandroid.model.ArticleDetailBean;
  import tv.baokan.baokanandroid.utils.ProgressHUD;
  import tv.baokan.baokanandroid.utils.StreamUtils;
  
  public class PhotoBrowserActivity extends BaseActivity {
  
      private static final String TAG = "PhotoBrowserActivity";
      private static final int PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE = 0; // 写入SD卡权限
  
      private List<ArticleDetailBean.InsetPhotoBean> insetPhotoBeanList;
      private int mIndex;
      private PhotoDetailViewPageAdapter adapter;
      private ViewPager mViewPager;            // 图片载体
      private TextView mPageTextView;          // 页码
      private TextView mCaptionTextView;       // 图片文字介绍
      private ImageView mSaveImageView;        // 保存
  
      /**
       * 便捷启动当前activity
       *
       * @param activity           来源activity
       * @param insetPhotoBeanList 插图集合
       */
      public static void start(Activity activity, List<ArticleDetailBean.InsetPhotoBean> insetPhotoBeanList, int index) {
          Intent intent = new Intent(activity, PhotoBrowserActivity.class);
          Bundle bundle = new Bundle();
          bundle.putSerializable("insetPhotoBeanList_key", (Serializable) insetPhotoBeanList);
          intent.putExtras(bundle);
          intent.putExtra("index_key", index);
          activity.startActivity(intent);
          activity.overridePendingTransition(0, 0);
      }
  
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_photo_browser);
  
          prepareUI();
          prepareData();
  
      }
  
      /**
       * 准备UI
       */
      private void prepareUI() {
          mViewPager = (ViewPager) findViewById(R.id.vp_photo_browser_viewPager);
          mPageTextView = (TextView) findViewById(R.id.tv_photo_browser_page);
          mCaptionTextView = (TextView) findViewById(R.id.tv_photo_browser_caption);
          mSaveImageView = (ImageView) findViewById(R.id.iv_photo_browser_save);
  
          mSaveImageView.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View v) {
                  // 保存图片
                  saveCurrentImage();
              }
          });
      }
  
      /**
       * 准备数据
       */
      private void prepareData() {
  
          Intent intent = getIntent();
          mIndex = intent.getIntExtra("index_key", 0);
          insetPhotoBeanList = (List<ArticleDetailBean.InsetPhotoBean>) intent.getSerializableExtra("insetPhotoBeanList_key");
  
          // 组合图片url集合
          List<String> photoList = new ArrayList<>();
          for (ArticleDetailBean.InsetPhotoBean photoBean :
                  insetPhotoBeanList) {
              photoList.add(photoBean.getUrl());
          }
  
          // 设置ViewPager
          adapter = new PhotoDetailViewPageAdapter(this, photoList);
          adapter.setOnPhotoTapListener(new PhotoDetailViewPageAdapter.OnPhotoTapListener() {
              @Override
              public void onPhotoTap() {
                  // 隐藏/显示 顶部/底部视图
                  onPhotoOneTapped();
              }
          });
          mViewPager.setAdapter(adapter);
          mViewPager.setCurrentItem(mIndex);
          onPageChanged(mIndex);
  
          // 监听viewPager的滚动
          mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
              @Override
              public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
  
              }
  
              @Override
              public void onPageSelected(int position) {
                  onPageChanged(position);
              }
  
              @Override
              public void onPageScrollStateChanged(int state) {
  
              }
          });
  
      }
  
      /**
       * 页码发生改变 更新页码指示器和图片描述文字
       *
       * @param position 页码
       */
      private void onPageChanged(int position) {
          mIndex = position;
          mPageTextView.setText(position + 1 + "/" + insetPhotoBeanList.size());
          mCaptionTextView.setText(insetPhotoBeanList.get(position).getCaption());
      }
  
      /**
       * 图片单击手势 返回资讯内容页
       */
      private void onPhotoOneTapped() {
          finish();
      }
  
      /**
       * 判断有没有保存权限，有则保存，没有则申请权限
       */
      private void saveCurrentImage() {
          // 判断是否有写入SD权限
          if (ContextCompat.checkSelfPermission(mContext,
                  Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
              // 申请权限
              ActivityCompat.requestPermissions(mContext,
                      new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
                      PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE);
          } else {
              // 保存图片到相册中
              StreamUtils.saveImageToAlbum(mContext, insetPhotoBeanList.get(mIndex).getUrl());
          }
      }
  
      /**
       * 运行时权限请求回调结果
       */
      @Override
      public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
          switch (requestCode) {
              case PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE:
                  if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                      // 保存图片到相册中
                      StreamUtils.saveImageToAlbum(mContext, insetPhotoBeanList.get(mIndex).getUrl());
                  } else {
                      Toast.makeText(getApplicationContext(), "你没有文件写入权限", Toast.LENGTH_SHORT).show();
                  }
                  break;
          }
      }
  
  }
  