package com.ambergleam.android.photogallery.controller; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Bundle; import android.provider.MediaStore; import android.support.v4.view.MenuItemCompat; import android.support.v7.widget.ShareActionProvider; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import com.ambergleam.android.photogallery.R; import com.ambergleam.android.photogallery.BaseActivity; import com.ambergleam.android.photogallery.BaseFragment; import com.ambergleam.android.photogallery.manager.DataManager; import com.ambergleam.android.photogallery.model.Photo; import com.facebook.messenger.MessengerUtils; import com.facebook.messenger.ShareToMessengerParams; import com.squareup.picasso.Callback; import com.squareup.picasso.Picasso; import javax.inject.Inject; import butterknife.ButterKnife; import butterknife.Bind; import butterknife.OnClick; import timber.log.Timber; public class PhotoFragment extends BaseFragment { private static final int REQUEST_CODE_SHARE_TO_MESSENGER = 0; public static final String ARGS_PHOTO = "ARGS_PHOTO"; @Inject DataManager mDataManager; @Bind(R.id.fragment_photo_image) ImageView mImageView; private Photo mPhoto; private boolean mIsFavorite; public static PhotoFragment newInstance(Photo photo) { Bundle args = new Bundle(); args.putSerializable(ARGS_PHOTO, photo); PhotoFragment fragment = new PhotoFragment(); fragment.setArguments(args); return fragment; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mPhoto = (Photo) getArguments().getSerializable(ARGS_PHOTO); mIsFavorite = mDataManager.isFavorite(mPhoto); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_photo, parent, false); ButterKnife.bind(this, view); load(); return view; } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); inflater.inflate(R.menu.menu_photo, menu); MenuItem shareMenuItem = menu.findItem(R.id.menu_item_photo_share); ShareActionProvider shareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(shareMenuItem); Uri uri = Uri.parse(mPhoto.getSmallUrl()); Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("image/plain"); intent.putExtra(Intent.EXTRA_STREAM, uri); shareActionProvider.setShareIntent(intent); } @Override public void onPrepareOptionsMenu(Menu menu) { super.onPrepareOptionsMenu(menu); MenuItem menuItemFavorite = menu.findItem(R.id.menu_item_photo_favorite); MenuItem menuItemUnfavorite = menu.findItem(R.id.menu_item_photo_unfavorite); menuItemFavorite.setVisible(!mIsFavorite); menuItemUnfavorite.setVisible(mIsFavorite); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.menu_item_photo_web: Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse(mPhoto.getPhotoPageUrl())); startActivity(intent); return true; case R.id.menu_item_photo_favorite: mDataManager.addFavorite(mPhoto); mIsFavorite = true; getActivity().invalidateOptionsMenu(); return true; case R.id.menu_item_photo_unfavorite: mDataManager.removeFavorite(mPhoto); mIsFavorite = false; getActivity().invalidateOptionsMenu(); return true; default: return super.onOptionsItemSelected(item); } } private void load() { int size = mPhoto.getSmallestSide(); Picasso.with(getActivity()) .load(mPhoto.getLargeUrl()) .resize(size, size) .centerCrop() .into(mImageView, new Callback() { @Override public void onSuccess() { ((BaseActivity) getActivity()).scheduleStartPostponedTransition(mImageView); } @Override public void onError() { Timber.e("Error loading image."); ((BaseActivity) getActivity()).scheduleStartPostponedTransition(mImageView); } }); } private void share() { Drawable mDrawable = mImageView.getDrawable(); Bitmap mBitmap = ((BitmapDrawable) mDrawable).getBitmap(); String path = MediaStore.Images.Media.insertImage(getActivity().getContentResolver(), mBitmap, "Image Description", null); Uri uri = Uri.parse(path); ShareToMessengerParams shareToMessengerParams = ShareToMessengerParams.newBuilder( uri, "image/*" ).build(); MessengerUtils.shareToMessenger(getActivity(), REQUEST_CODE_SHARE_TO_MESSENGER, shareToMessengerParams); } @OnClick(R.id.fragment_photo_share) public void onClickShare() { share(); } }