package party.danyang.nationalgeographic.ui; import android.Manifest; import android.content.Context; import android.content.DialogInterface; import android.databinding.DataBindingUtil; import android.graphics.Bitmap; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.support.v7.app.AlertDialog; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.ViewTreeObserver; import com.squareup.picasso.Callback; import com.squareup.picasso.Picasso; import com.tbruyelle.rxpermissions.RxPermissions; import java.util.ArrayList; import java.util.List; import party.danyang.nationalgeographic.R; import party.danyang.nationalgeographic.databinding.FragmentBigPicBinding; import party.danyang.nationalgeographic.utils.DownloadMangerResolver; import party.danyang.nationalgeographic.utils.SaveImage; import party.danyang.nationalgeographic.utils.Utils; import party.danyang.nationalgeographic.utils.singleton.PicassoHelper; import rx.functions.Action1; import rx.subscriptions.CompositeSubscription; public class AlbumFragment extends Fragment { private static final String TAG = AlbumFragment.class.getSimpleName(); public static final String TAG_ALBUM_FRAGMENT = "tag.albunfragment"; private static final String URLS = "party.danyang.ng.af.urls"; private static final String INDEX = "party.danyang.ng.af.index"; private AlbumActivity activity; private FragmentBigPicBinding binding; private List<String> urls; private int index; protected CompositeSubscription mSubscriptions = new CompositeSubscription(); @Override public void onAttach(Context context) { super.onAttach(context); this.activity = (AlbumActivity) context; } @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (getArguments() != null) { urls = getArguments().getStringArrayList(URLS); index = getArguments().getInt(INDEX); } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { binding = DataBindingUtil.inflate(inflater, R.layout.fragment_big_pic, container, false); binding.imgTouch.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { @Override public boolean onPreDraw() { binding.imgTouch.getViewTreeObserver().removeOnPreDrawListener(this); binding.imgTouch.requestFocus(); getActivity().supportStartPostponedEnterTransition(); return true; } }); binding.imgTouch.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { toggle(); } }); binding.imgTouch.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View view) { showSaveImgDialog(); return true; } }); return binding.getRoot(); } @Override public void onResume() { super.onResume(); String url = Utils.convertImageUrl(activity, urls.get(index)); PicassoHelper.getInstance(binding.imgTouch.getContext()).load(url) .config(Bitmap.Config.ARGB_8888) .noFade() .priority(Picasso.Priority.HIGH) .tag(TAG_ALBUM_FRAGMENT) .into(binding.imgTouch, new Callback() { @Override public void onSuccess() { binding.progressBar.hide(); binding.imgTouch.setZoom(1); } @Override public void onError() { } }); } @Override public void onDestroyView() { PicassoHelper.getInstance(getContext()).cancelRequest(binding.imgTouch); super.onDestroyView(); } @Override public void onDestroy() { super.onDestroy(); if (mSubscriptions != null) { mSubscriptions.unsubscribe(); } } public static AlbumFragment newInstance(ArrayList<String> urls, int position) { Bundle args = new Bundle(); args.putStringArrayList(URLS, urls); args.putInt(INDEX, position); AlbumFragment fragment = new AlbumFragment(); fragment.setArguments(args); return fragment; } private void toggle() { if (activity.mVisible) { activity.hide(); } else { activity.show(); } } private void showSaveImgDialog() { AlertDialog.Builder builder = new AlertDialog.Builder(activity, R.style.AlertDialogTheme); builder.setMessage(R.string.save_img); builder.setPositiveButton(R.string.save, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { dialogInterface.dismiss(); RxPermissions rxPermissions = new RxPermissions(getActivity()); rxPermissions.request(Manifest.permission.WRITE_EXTERNAL_STORAGE) .subscribe(new Action1<Boolean>() { @Override public void call(Boolean aBoolean) { if (aBoolean) { saveImg(); } else {//无权限 Utils.makeSnackBar(binding.getRoot(), R.string.permission_denied, true); } } }); } }); builder.setNegativeButton(R.string.cancel, null); builder.show(); } private void saveImg() { if (DownloadMangerResolver.resolve(activity)) SaveImage.saveImg(activity, binding.getRoot(), urls.get(index).hashCode() + ".jpg", urls.get(index)); } public View getSharedElement() { return binding.imgTouch; } }