package party.danyang.nationalgeographic.utils;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Build;
import android.os.Environment;
import android.support.design.widget.Snackbar;
import android.support.v4.content.FileProvider;
import android.support.v4.widget.SwipeRefreshLayout;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import com.squareup.picasso.Picasso;
import com.squareup.picasso.Target;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Calendar;
import java.util.List;
import java.util.TimeZone;
import party.danyang.nationalgeographic.R;
import party.danyang.nationalgeographic.utils.singleton.PicassoHelper;
import rx.Observable;
import rx.Subscriber;
import rx.schedulers.Schedulers;
/**
* Created by dream on 16-6-9.
*/
public final class Utils {
public static boolean deleteFile(String filename) {
return new File(filename).delete();
}
public static boolean deleteFiles(String folder) {
if (TextUtils.isEmpty(folder)) {
return true;
}
File file = new File(folder);
if (!file.exists()) {
return true;
}
if (file.isFile()) {
return file.delete();
}
if (!file.isDirectory()) {
return false;
}
for (File f : file.listFiles()) {
if (f.isFile()) {
f.delete();
} else if (f.isDirectory()) {
deleteFile(f.getAbsolutePath());
}
}
return file.delete();
}
public static Observable<Boolean> deleteFileObservable(final String[] folders) {
return Observable.create(new Observable.OnSubscribe<Boolean>() {
@Override
public void call(Subscriber<? super Boolean> subscriber) {
for (String folder : folders) {
subscriber.onNext(deleteFiles(folder));
}
subscriber.onCompleted();
}
}).subscribeOn(Schedulers.io());
}
public static void makeSnackBar(View v, String msg, boolean lengthShort) {
if (v == null) return;
Snackbar snackbar = Snackbar.make(v, msg, lengthShort ? Snackbar.LENGTH_SHORT : Snackbar.LENGTH_LONG);
snackbar.getView().setBackgroundResource(R.color.colorPrimary);
snackbar.show();
}
public static void makeSnackBar(View v, int resId, boolean lengthShort) {
makeSnackBar(v, v.getContext().getString(resId), lengthShort);
}
public static void setRefresher(final SwipeRefreshLayout refresher, final boolean isRefresh) {
if (refresher != null) {
refresher.post(new Runnable() {
@Override
public void run() {
refresher.setRefreshing(isRefresh);
}
});
}
}
public static int getYearOfNow() {
Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT-4"));
return calendar.get(Calendar.YEAR);
}
public static int getMonthOfNow() {
Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT-4"));
return calendar.get(Calendar.MONTH) + 1;
}
public static boolean isIntentSafe(Context context, Intent intent) {
PackageManager packageManager = context.getPackageManager();
List<ResolveInfo> activities = packageManager.queryIntentActivities(intent, 0);
return activities.size() > 0;
}
public static void shareItem(final Context context, String url,
final String title, final String describe, final View snackView) {
final String name = String.valueOf(url.hashCode());
if (!TextUtils.isEmpty(describe)) {
url = convertImageUrl(context, url);
}
PicassoHelper.getInstance(context)
.load(url)
.into(new Target() {
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
Intent intent = new Intent(Intent.ACTION_SEND);
// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
// intent.setType("image/");
// intent.setData(Utils.getLocalBitmapUri(context, bitmap, name));
// intent.setDataAndType(getLocalBitmapUri(context, bitmap, name), "image/*");
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
// } else {
// intent.setType("image/");
// }
intent.putExtra(Intent.EXTRA_STREAM, getLocalBitmapUri(context, bitmap, name));
intent.setType("image/");
// intent.setDataAndType(getLocalBitmapUri(context, bitmap, name), "image/*");
intent.putExtra(Intent.EXTRA_TITLE, title);
intent.putExtra(Intent.EXTRA_TEXT, describe);
intent.putExtra(Intent.EXTRA_SUBJECT, title);
if (isIntentSafe(context, intent)) {
context.startActivity(intent);
}
}
@Override
public void onBitmapFailed(Drawable errorDrawable) {
makeSnackBar(snackView, R.string.error_share, true);
}
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
}
});
}
public static Uri getLocalBitmapUri(Context context, Bitmap bmp, String name) {
Uri bmpUri = null;
try {
// File file = new File(Environment.getExternalStorageDirectory(), "share_image_" + name + ".jpg");
File file = new File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), "share_image_" + name + ".jpg");
// File file = new File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), "share_image_" + name + ".jpg");
FileOutputStream out = new FileOutputStream(file);
bmp.compress(Bitmap.CompressFormat.JPEG, 90, out);
out.close();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
bmpUri = FileProvider.getUriForFile(context, "party.danyang.nationalgeographic.provider", file);
} else {
bmpUri = Uri.fromFile(file);
}
} catch (IOException e) {
e.printStackTrace();
}
return bmpUri;
}
public static String convertImageUrl(Context context, String url) {
int length = SettingsModel.getAccelerateImageSize(context);
if (SettingsModel.getAccelerate(context)) {
if (url.startsWith("http://pic01.bdatu.com/Upload/picimg/")) {
url = url.replace("http://pic01.bdatu.com/Upload/picimg/", "https://ocgasl9gh.qnssl.com/") + "?imageMogr2/thumbnail/" + length + "x" + length;
}
}
//us接口图太大故直接七牛云转换
if (url.startsWith("http://yourshot.nationalgeographic.com/")) {
url = url.replace("http://yourshot.nationalgeographic.com/", "https://ocgawl9z2.qnssl.com/") + "?imageMogr2/thumbnail/" + length + "x" + length;
} else if (url.startsWith("http://www.nationalgeographic.com/")) {
url = url.replace("http://www.nationalgeographic.com/", "https://ocwluxhzm.qnssl.com/") + "?imageMogr2/thumbnail/" + length + "x" + length;
}
return url;
}
}