package org.goodev.discourse.photos;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.ProgressDialog;
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.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.support.v4.app.Fragment;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ShareActionProvider;
import android.widget.Toast;
import com.google.ads.Ad;
import com.google.ads.AdListener;
import com.google.ads.AdRequest;
import com.google.ads.AdRequest.ErrorCode;
import com.google.ads.AdView;
import com.lamerman.FileDialog;
import com.lamerman.SelectionMode;
import org.goodev.discourse.App;
import org.goodev.discourse.BuildConfig;
import org.goodev.discourse.R;
import org.goodev.discourse.photos.NetworkPhotoView.OnSetImageBitmap;
import org.goodev.discourse.utils.Tools;
import org.goodev.discourse.utils.Utils;
import java.io.File;
import java.lang.ref.WeakReference;
public class PhotoFragment extends Fragment implements OnSetImageBitmap, OnClickListener, AdListener {
private static final int REQUEST_CODE = 6384;
NetworkPhotoView mPhotoView;
ShareActionProvider mShareActionProvider;
ShareTask mShareTask;
SetAsTask mSetAsTask;
DownloadTask mDownloadTask;
AdRequest mAdRequest;
// private String mTitle;
// private String mDes;
private String mUrl;
private String mTempFilePath;
private AdView mAdView;
private View mCloseAdView;
public PhotoFragment() {
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle args = getArguments();
mUrl = args.getString(Utils.EXTRA_URL);
// mTitle = args.getString(Utils.EXTRA_TITLE);
// mDes = args.getString(Utils.EXTRA_MSG);
setHasOptionsMenu(true);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.photo_layout, container, false);
mCloseAdView = rootView.findViewById(R.id.title);
mCloseAdView.setOnClickListener(this);
// TextView des = (TextView) rootView.findViewById(R.id.des);
// des.setText(mDes);
mAdView = (AdView) rootView.findViewById(R.id.adView);
mAdView.setAdListener(this);
NetworkPhotoView photoView = (NetworkPhotoView) rootView.findViewById(R.id.photo);
photoView.setOnSetImageBitmap(this);
photoView.setErrorImageResId(R.drawable.ic_error);
photoView.setDefaultImageResId(R.drawable.ic_default);
photoView.setImageUrl(mUrl, App.getImageLoader());
mPhotoView = photoView;
return rootView;
}
@Override
public void onResume() {
super.onResume();
// getActivity().setTitle(mTitle);
}
@Override
public void onDestroy() {
super.onDestroy();
}
@Override
public void onDestroyView() {
super.onDestroyView();
}
@SuppressLint("NewApi")
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.fragment_photo, menu);
// Locate MenuItem with ShareActionProvider
// MenuItem item = menu.findItem(R.id.action_share);
// Fetch and store ShareActionProvider
// mShareActionProvider = (ShareActionProvider)
// item.getActionProvider();
}
@Override
public void onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
}
private void setShareIntent(Intent shareIntent) {
if (mShareActionProvider != null) {
mShareActionProvider.setShareIntent(shareIntent);
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.action_share) {
if (mShareTask == null) {
mShareTask = new ShareTask(this, getActivity(), getString(R.string.share_dialog_title));
mShareTask.execute();
}
} else if (item.getItemId() == R.id.action_set_as) {
if (mSetAsTask == null) {
mSetAsTask = new SetAsTask(this, getActivity(), getString(R.string.set_as));
mSetAsTask.execute();
}
} else if (item.getItemId() == R.id.action_download) {
if (mDownloadTask == null) {
mDownloadTask = new DownloadTask(this, getActivity(), getString(R.string.downlaod));
mDownloadTask.execute();
}
}
return super.onOptionsItemSelected(item);
}
private void chooserDir() {
Intent intent = new Intent(getActivity(), FileDialog.class);
intent.putExtra(FileDialog.START_PATH, Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getAbsolutePath());
// can user select directories or not
intent.putExtra(FileDialog.CAN_SELECT_DIR, true);
intent.putExtra(FileDialog.SELECTION_MODE, SelectionMode.MODE_CREATE);
// alternatively you can set file filter
// intent.putExtra(FileDialog.FORMAT_FILTER, new String[] { "png" });
startActivityForResult(intent, REQUEST_CODE);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case REQUEST_CODE:
if (resultCode == Activity.RESULT_OK) {
if (data != null) {
String filePath = data.getStringExtra(FileDialog.RESULT_PATH);
boolean remember = data.getBooleanExtra(FileDialog.CHECKBOX, false);
if (remember) {
Tools.setDownloadRemember(getActivity());
}
Tools.setDownloadFolder(getActivity(), filePath);
if (!TextUtils.isEmpty(mTempFilePath)) {
if (Tools.copyFile(mTempFilePath, filePath)) {
Toast.makeText(getActivity(), R.string.download_success, Toast.LENGTH_LONG).show();
} else {
Toast.makeText(getActivity(), R.string.download_failed, Toast.LENGTH_LONG).show();
}
}
}
}
break;
}
super.onActivityResult(requestCode, resultCode, data);
}
@Override
public void onImageBitmap(int width, int height) {
if (width > height && (Tools.isShowBannerAd(getActivity()) || BuildConfig.DEBUG)) {
if (mAdRequest == null) {
mAdRequest = new AdRequest();
}
mAdView.setVisibility(View.VISIBLE);
mAdView.loadAd(mAdRequest);
mCloseAdView.setVisibility(View.VISIBLE);
} else {
mCloseAdView.setVisibility(View.GONE);
}
}
@Override
public void onClick(View v) {
mAdView.setVisibility(View.GONE);
mCloseAdView.setVisibility(View.GONE);
}
@Override
public void onDismissScreen(Ad arg0) {
}
@Override
public void onFailedToReceiveAd(Ad arg0, ErrorCode arg1) {
mCloseAdView.setVisibility(View.GONE);
mAdView.setVisibility(View.GONE);
}
@Override
public void onLeaveApplication(Ad arg0) {
}
@Override
public void onPresentScreen(Ad arg0) {
}
@Override
public void onReceiveAd(Ad arg0) {
mAdView.setVisibility(View.VISIBLE);
}
class DownloadTask extends PhotoTask {
public DownloadTask(PhotoFragment fragment, Activity activity, String msg) {
super(fragment, activity, msg);
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
PhotoFragment photo = mPhotoFragment.get();
Activity activity = mActivity.get();
if (!TextUtils.isEmpty(result) && photo != null && activity != null) {
mTempFilePath = result;
if (!Tools.isRememberDownload(activity)) {
photo.chooserDir();
} else {
String dir = Tools.getDownloadFolder(activity);
if (Tools.copyFile(result, dir)) {
Toast.makeText(activity, R.string.download_success, Toast.LENGTH_LONG).show();
} else {
Toast.makeText(activity, R.string.download_failed, Toast.LENGTH_LONG).show();
}
}
} else {
Toast.makeText(activity, R.string.download_failed, Toast.LENGTH_LONG).show();
}
photo.mDownloadTask = null;
}
}
class PhotoTask extends AsyncTask<Void, Void, String> {
final WeakReference<PhotoFragment> mPhotoFragment;
final WeakReference<Activity> mActivity;
final ProgressDialog mDialog;
public PhotoTask(PhotoFragment fragment, Activity activity, String msg) {
mPhotoFragment = new WeakReference<PhotoFragment>(fragment);
mActivity = new WeakReference<Activity>(activity);
mDialog = new ProgressDialog(activity);
mDialog.setMessage(msg);
}
@Override
protected void onPreExecute() {
super.onPreExecute();
mDialog.show();
}
@Override
protected String doInBackground(Void... params) {
PhotoFragment photo = mPhotoFragment.get();
if (photo == null) {
return null;
}
Drawable drawable = photo.mPhotoView.getDrawable();
if (drawable instanceof BitmapDrawable) {
Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();
String file = Tools.writeBitmapToCacheDir(bitmap);
return file;
}
return null;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
if (mDialog.isShowing()) {
mDialog.dismiss();
}
}
}
class SetAsTask extends PhotoTask {
public SetAsTask(PhotoFragment fragment, Activity activity, String msg) {
super(fragment, activity, msg);
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
PhotoFragment photo = mPhotoFragment.get();
Activity activity = mActivity.get();
if (!TextUtils.isEmpty(result) && photo != null && activity != null) {
Intent intent = new Intent(Intent.ACTION_ATTACH_DATA).addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
// intent.setType("image/*");
intent.setDataAndType(Uri.fromFile(new File(result)), "image/*");
intent.putExtra("mimeType", intent.getType());
activity.startActivity(Intent.createChooser(intent, activity.getString(R.string.set_as)));
} else {
Toast.makeText(activity, R.string.share_failed, Toast.LENGTH_LONG).show();
}
photo.mSetAsTask = null;
}
}
class ShareTask extends PhotoTask {
public ShareTask(PhotoFragment fragment, Activity activity, String msg) {
super(fragment, activity, msg);
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
PhotoFragment photo = mPhotoFragment.get();
Activity activity = mActivity.get();
if (!TextUtils.isEmpty(result) && photo != null && activity != null) {
Intent emailIntent = new Intent(Intent.ACTION_SEND);
// emailIntent.setType("text/plain");
// emailIntent.putExtra(Intent.EXTRA_SUBJECT, photo.mTitle);
// emailIntent.putExtra(Intent.EXTRA_TITLE, photo.mTitle);
// emailIntent.putExtra(Intent.EXTRA_TEXT, photo.mDes);
emailIntent.setType("image/*");
emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(result)));
activity.startActivity(emailIntent);
} else {
Toast.makeText(activity, R.string.share_failed, Toast.LENGTH_LONG).show();
}
photo.mShareTask = null;
}
}
}