package com.maxiee.heartbeat.common; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.net.Uri; import android.os.Build; import android.preference.PreferenceManager; import com.maxiee.heartbeat.R; import java.io.File; import java.io.IOException; import java.util.List; import me.nereo.multi_image_selector.MultiImageSelectorActivity; /** * Created by maxiee on 16/3/25. */ public class GalleryUtils { private static final int ADD_IMAGE = 1127; private static boolean useInternalGallery(Context context) { SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context); return sp.getBoolean("use_internal_gallery", false); } public static void openGallery(Context context) { if (useInternalGallery(context)) { openInternalGallery(context); } else { openSystemGallery(context); } } private static void openSystemGallery(Context context) { if (Build.VERSION.SDK_INT < 19) { Intent i = new Intent(); i.setType("image/*"); i.setAction(Intent.ACTION_GET_CONTENT); ((Activity) context).startActivityForResult( Intent.createChooser(i, context.getString(R.string.add_image)), ADD_IMAGE); } else { Intent i = new Intent(Intent.ACTION_OPEN_DOCUMENT); i.addCategory(Intent.CATEGORY_OPENABLE); i.setType("image/*"); ((Activity) context).startActivityForResult( Intent.createChooser(i, context.getString(R.string.add_image)), ADD_IMAGE); } } private static void openInternalGallery(Context context) { Intent i = new Intent(context, MultiImageSelectorActivity.class); i.putExtra(MultiImageSelectorActivity.EXTRA_SHOW_CAMERA, false); i.putExtra(MultiImageSelectorActivity.EXTRA_SELECT_MODE, MultiImageSelectorActivity.MODE_SINGLE); ((Activity) context).startActivityForResult(i, ADD_IMAGE); } public static String onActivityResult(Context context, int requestCode, int resultCode, Intent data) { if (requestCode == ADD_IMAGE && resultCode == Activity.RESULT_OK) { String path; if (useInternalGallery(context)) { path = onInternalResult(context, data); } else { path = onSystemResult(context, data); } try { path = FileUtils.copyImageToHeartBeat(path); } catch (IOException e) { e.printStackTrace(); } return path; } return null; } private static String onSystemResult(Context context, Intent data) { Uri mImageUri = data.getData(); if (Build.VERSION.SDK_INT >= 19) { final int takeFlags = data.getFlags() & (Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION); //noinspection ResourceType context.getContentResolver().takePersistableUriPermission(mImageUri, takeFlags); } // convert uri to path return FileUtils.uriToPath(context, mImageUri); } private static String onInternalResult(Context context, Intent data) { List<String> path = data.getStringArrayListExtra(MultiImageSelectorActivity.EXTRA_RESULT); return path.get(0); } public static String getImagePath(String oldPath) { // old format if (oldPath.contains("/")) { return oldPath; } // new format return new File(FileUtils.getImageDir(), oldPath).toString(); } }