package com.kaorisan.common; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.URL; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import java.util.Locale; import android.annotation.SuppressLint; import android.app.Activity; import android.app.ProgressDialog; import android.content.Context; import android.content.Intent; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.Bitmap.CompressFormat; import android.graphics.BitmapFactory; import android.graphics.Matrix; import android.hardware.Camera; import android.hardware.Camera.Size; import android.media.ExifInterface; import android.net.ConnectivityManager; import android.net.Uri; import android.os.AsyncTask; import android.os.Environment; import android.provider.MediaStore; import android.provider.MediaStore.Images.Media; import android.util.Log; import android.view.Gravity; import android.widget.Toast; import com.kaorisan.R; import com.kaorisan.dataLayer.CacheData; public class Utils { // private static final String EMPTY_STRING = ""; public static final int MEDIA_TYPE_IMAGE = 1; public interface OnBitmapResult { void onBitmapResult(boolean isSuccess, String message, Bitmap bitmap); } public static ProgressDialog createProgressDialog(String message, Context context) { ProgressDialog showProcess = new ProgressDialog(context); showProcess.setMessage(message); showProcess.setCancelable(false); showProcess.setIndeterminateDrawable(context.getResources().getDrawable(R.drawable.my_progress_indeterminate)); return showProcess; } public static void makeProgressUploadDownloadToast(Context context, String content) { Toast toast = Toast.makeText(context, content, Toast.LENGTH_SHORT); toast.setGravity(Gravity.TOP | Gravity.CENTER_HORIZONTAL, 0, 0); toast.setMargin(0, 0.08f); toast.show(); } public static void showToast(final Context context, final String message) { Toast toast = Toast.makeText(context, message, Toast.LENGTH_SHORT); toast.setGravity(Gravity.CENTER_HORIZONTAL | Gravity.CENTER_VERTICAL, 0, 0); toast.show(); } public static void showToast(final Activity activity, final String message) { activity.runOnUiThread(new Runnable() { public void run() { Toast toast = Toast.makeText(activity, message, Toast.LENGTH_SHORT); toast.setDuration(0); toast.setGravity(Gravity.CENTER_HORIZONTAL | Gravity.CENTER_VERTICAL, 0, 0); toast.show(); } }); } public static void resetCacheData() { if(CacheData.getInstant().getListAttachment() != null){ CacheData.getInstant().getListAttachment().clear(); } if(CacheData.getInstant().getListAttachmentAudio() != null){ CacheData.getInstant().getListAttachmentAudio().clear(); } if(CacheData.getInstant().getListAttachmentPicture() != null){ CacheData.getInstant().getListAttachmentPicture().clear(); } if(CacheData.getInstant().getListAttachmentTmps() != null){ CacheData.getInstant().getListAttachmentTmps().clear(); } if(CacheData.getInstant().getRecommendTasks() != null){ CacheData.getInstant().getRecommendTasks().clear(); } CacheData.getInstant().setListTask(null); CacheData.getInstant().setCurrentUser(null); CacheData.getInstant().setTokenKaorisan(""); CacheData.getInstant().setDashBoard(null); CacheData.getInstant().setAccountDashBoard(null); CacheData.getInstant().setCurrentTask(null); } public static String getFileExtension(String fileName) { String extension = ""; int i = fileName.lastIndexOf('.'); if (i > 0) { extension = fileName.substring(i + 1); } return extension; } public static void dismissCurrentProgressDialog() { if (CacheData.getInstant().getCurrentProgressDialog() != null) { CacheData.getInstant().getCurrentProgressDialog().dismiss(); CacheData.getInstant().setCurrentProgressDialog(null); } } public static boolean fileExist(String filePath) { if (!filePath.isEmpty()) { File file = new File(filePath); return file.exists(); } return false; } public static void deleteFile(String filePath) { if (fileExist(filePath)) { File file = new File(filePath); file.delete(); } } public static void loadBitmap(String link, final OnBitmapResult onBitmapResult) { new AsyncTask<String, Void, Bitmap>() { Bitmap bitmap; InputStream in; @Override protected Bitmap doInBackground(String... params) { try { in = new URL(params[0]).openStream(); bitmap = BitmapFactory.decodeStream(in); } catch (Exception e) { e.printStackTrace(); } return bitmap; } @Override protected void onPostExecute(Bitmap result) { if (result == null) { onBitmapResult.onBitmapResult(false, null, null); } else { onBitmapResult.onBitmapResult(true, null, result); } } }.execute(link); } public static String convertHTML(String url, int sizeWidth) { return "<br /><img align=\"bottom\" width=\"" + sizeWidth + "\" src=\"" + url + "\"/><br /><br />"; } public static void getAvatarFaceBook(String link, final OnBitmapResult onBitmapResult) { new AsyncTask<String, Void, Bitmap>() { Bitmap bitmap; URL urlAvatar = null; @Override protected Bitmap doInBackground(String... params) { try { urlAvatar = new URL(params[0]); bitmap = BitmapFactory.decodeStream(urlAvatar.openConnection().getInputStream()); // in = new URL(params[0]).openStream(); // bitmap = BitmapFactory.decodeStream(in); } catch (Exception e) { e.printStackTrace(); } return bitmap; } @Override protected void onPostExecute(Bitmap result) { if (result == null) { onBitmapResult.onBitmapResult(false, null, null); } else { onBitmapResult.onBitmapResult(true, null, result); } } }.execute(link); } public static String convertMillisecondsToDate(long milliseconds) { Date date = new Date(milliseconds); SimpleDateFormat sdf = new SimpleDateFormat("MM/dd 'at' hh:mma", Locale.US); return sdf.format(date); } public static Camera.Size getBestSupportPictureSizeWithSurface( Camera.Parameters parameters, int width, int height) { Camera.Size bestSize = null; int minrecommendSize = 0; int maxrecommendSize = 10000000; double recommendRatio = (double) height / width; double ratioDistance = 1000; DebugLog.logd("Start getbest : width " + width + " height: " + height); List<Camera.Size> sizeList = parameters.getSupportedPictureSizes(); bestSize = sizeList.get(0); // find the best for (Size size : sizeList) { if (size.width * size.height > minrecommendSize && size.width * size.height < maxrecommendSize) { double currentRatio = (double) size.width / size.height; double currentRatioDistance = Math.abs(currentRatio - recommendRatio); if (currentRatioDistance < ratioDistance) { if (ratioDistance < 0.01) { if (size.width * size.height > bestSize.width * bestSize.height) { bestSize = size; ratioDistance = currentRatioDistance; DebugLog.logd("Try distance :" + ratioDistance); DebugLog.logd("Try getBestPictureSize : width " + size.width + " height: " + size.height); } } else { ratioDistance = currentRatioDistance; bestSize = size; DebugLog.logd("Try distance :" + ratioDistance); DebugLog.logd("Try getBestPictureSize : width " + size.width + " height: " + size.height); } } else if (currentRatioDistance == ratioDistance) { if (size.width * size.height > bestSize.width * bestSize.height) { bestSize = size; DebugLog.logd("Try distance :" + ratioDistance); DebugLog.logd("Try getBestPictureSize : width " + size.width + " height: " + size.height); } } } } DebugLog.logd("AAA getBestPictureSize : width " + bestSize.width + " height: " + bestSize.height); return bestSize; } public static Camera.Size getBestPreviewSize(Camera.Parameters parameters, Camera.Size bestPictureSize) { Camera.Size bestSize = null; List<Camera.Size> sizeList = parameters.getSupportedPreviewSizes(); double minDistance = 1000; for (Size size : sizeList) { double intRatioPreview = (double) size.width / size.height; double intRatioPicture = (double) bestPictureSize.width / bestPictureSize.height; if (Math.abs(intRatioPicture - intRatioPreview) < minDistance) { minDistance = Math.abs(intRatioPicture - intRatioPreview); bestSize = size; } } DebugLog.logd("AAA getBestPreviewSize : width " + bestSize.width + " height: " + bestSize.height); return bestSize; } public static Bitmap rotateBitmapAndResize(Bitmap sourceBitmap, int rotate, int width, int height) { Matrix rotateLeft = new Matrix(); rotateLeft.preRotate(rotate); float scale_w = ((float) width) / sourceBitmap.getWidth(); float scale_h = ((float) height) / sourceBitmap.getHeight(); rotateLeft.preScale(scale_w, scale_h); Bitmap destinationBitmap = Bitmap.createBitmap(sourceBitmap, 0, 0, sourceBitmap.getWidth(), sourceBitmap.getHeight(), rotateLeft, false); return destinationBitmap; } public static boolean checkFileType(String fileType) { if (fileType.equals(".aac")) { return false; } else if (fileType.equals(".mp3")) { return false; } else if (fileType.equals(".m4a")) { return false; } else if (fileType.equals(".flv")) { return false; } else if (fileType.equals(".wav")) { return false; } else if (fileType.equals(".webma")) { return false; } else if (fileType.equals(".webmv")) { return false; } else if (fileType.equals(".ogv")) { return false; } else if (fileType.equals(".oga")) { return false; } else if (fileType.equals(".fla")) { return false; } else if (fileType.equals(".mp4")) { return false; } else if (fileType.equals(".webm")) { return false; } else { return true; } } public static boolean checkInternetConnect(final Context cxt) { final ConnectivityManager conMgr = (ConnectivityManager) cxt .getSystemService(Context.CONNECTIVITY_SERVICE); if (conMgr.getActiveNetworkInfo() != null && conMgr.getActiveNetworkInfo().isAvailable() && conMgr.getActiveNetworkInfo().isConnected()) return true; else return false; } public static boolean isNullOrEmpty(String str) { if (str == null) { return true; } if ("".equals(str.trim())) { return true; } return false; } public static String getRelativeTime(Context context, long time) { TimeUtils timeAgo = new TimeUtils(context); return timeAgo.timeAgo(time * 1000L); } public static boolean checkIsResize(String path){ File mediaStorageDir = new File( Environment.getExternalStorageDirectory(), "KaorisanTmp"); Log.i("Folder",""+mediaStorageDir.toString()); Log.i("url", ""+path); String url = path.substring(1,path.lastIndexOf('/')); Log.i("url", ""+url); if(url.equals(mediaStorageDir.toString())){ return true; } return false; } @SuppressLint("SimpleDateFormat") public static File getOutputMediaFile(int type) { // File mediaStorageDir = new // File(Environment.getExternalStoragePublicDirectory( // Environment.DIRECTORY_PICTURES), "MyCameraApp"); File mediaStorageDir = new File( Environment.getExternalStorageDirectory(), "Kaorisan"); if (!mediaStorageDir.exists()) { if (!mediaStorageDir.mkdirs()) { return null; } } String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); File mediaFile; if (type == MEDIA_TYPE_IMAGE) { // mediaFile = new File(mediaStorageDir.getPath() + File.separator + // "IMG_"+ timeStamp + ".jpg"); String imagePath = "Kaorisan/Kaorisan_" + timeStamp + ".jpg"; mediaFile = new File(Environment.getExternalStorageDirectory(), imagePath); // galleryAddPic(imagePath, context); return mediaFile; } else { return null; } } public static Uri getOutputMediaFileUri(int paramInt) { return Uri.fromFile(getOutputMediaFile(paramInt)); } public static void galleryAddPhoto(Uri uri, Context context) { Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); mediaScanIntent.setData(uri); context.sendBroadcast(mediaScanIntent); } public static Uri galleryAddPictureToTakePhoto(Uri uri, Context context){ try { Bitmap mBitmap; Uri mUri; BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; BitmapFactory.decodeStream(context.getContentResolver().openInputStream(uri), null, options); if(options.outHeight > 800 || options.outWidth > 800){ options.inSampleSize = calculateInSampleSize(options, 800, 600); options.inJustDecodeBounds = false; Bitmap bitmap = BitmapFactory.decodeStream(context.getContentResolver().openInputStream(uri),null, options); //Bitmap bitmap = BitmapFactory.decodeFile(uri.toString().substring(6), options); Matrix matrix = new Matrix(); matrix.postRotate(getCameraPhotoOrientation(context, uri)); mBitmap = Bitmap.createBitmap(bitmap, 0, 0,bitmap.getWidth(),bitmap.getHeight(), matrix, false); mUri = writeData(mBitmap,90, context); deleteFile(uri.toString().substring(6)); mBitmap.recycle(); mBitmap = null; bitmap.recycle(); bitmap = null; return mUri; }else{ Bitmap bitmap = Media.getBitmap(context.getContentResolver(), uri); mUri = writeData(bitmap,100, context); bitmap.recycle(); bitmap = null; deleteFile(uri.toString().substring(6)); return mUri; } } catch (Exception e) { e.printStackTrace(); } return null; } public static String galleryAddPictureToLocal(Uri uri, Context context){ try { Bitmap mBitmap; Uri mUri; String url; BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; BitmapFactory.decodeStream(context.getContentResolver().openInputStream(uri), null, options); if(options.outHeight > 800 || options.outWidth > 800){ options.inSampleSize = calculateInSampleSize(options, 800, 600); options.inJustDecodeBounds = false; Bitmap bitmap = BitmapFactory.decodeStream(context.getContentResolver().openInputStream(uri),null, options); Matrix matrix = new Matrix(); matrix.postRotate(getPhotoLocalOrientation(context, uri)); mBitmap = Bitmap.createBitmap(bitmap, 0, 0,bitmap.getWidth(),bitmap.getHeight(), matrix, false); mUri = writeDataToLocal(mBitmap,90, context); mBitmap.recycle(); mBitmap = null; bitmap.recycle(); bitmap = null; url = mUri.toString().substring(6); Log.i("UriTest1", ""+mUri.toString()); return url; }else{ url = getRealPathFromURI(uri, context); return url; } } catch (Exception e) { e.printStackTrace(); } return null; } public static int calculateInSampleSize(BitmapFactory.Options options,int reqWidth, int reqHeight){ final int height = options.outHeight; final int width = options.outWidth; int inSampleSize = 1; if (height > reqHeight || width > reqWidth) { final int heightRatio = Math.round((float) height / (float) reqHeight); final int widthRatio = Math.round((float) width / (float) reqWidth); inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio; } return inSampleSize; } // public static Uri writeData(Bitmap bitmap,int quatily,Context context){ // String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss") // .format(new Date()); // String title = "Kaorisan_" + timeStamp + ".jpg"; // ContentValues values = new ContentValues(); // values.put(Images.Media.TITLE, title); // values.put(Images.Media.DISPLAY_NAME,title); // values.put(Images.Media.DESCRIPTION, "Kaorisan"); // values.put(Images.Media.MIME_TYPE, "image/jpg"); // values.put(MediaStore.Images.ImageColumns.DATE_TAKEN, timeStamp); // // Uri uri =context.getContentResolver().insert( // MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); // try { // OutputStream imageOut = context.getContentResolver().openOutputStream( // uri); // try { // //imageOut.write(data); // bitmap.compress(CompressFormat.JPEG,quatily, imageOut); // imageOut.flush(); // imageOut.close(); // return uri; // } catch (IOException e) { // e.printStackTrace(); // } // } catch (FileNotFoundException e1) { // e1.printStackTrace(); // } // return null; // } public static String getRealPathFromURI(Uri contentUri,Context context) { String[] proj = { MediaStore.Images.Media.DATA }; Cursor cursor = context.getContentResolver().query(contentUri, proj, null, null, null); int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); cursor.moveToFirst(); return cursor.getString(column_index); } @SuppressLint("SimpleDateFormat") public static Uri writeData(Bitmap bitmap,int quatily,Context context){ File mediaStorageDir = new File(Environment.getExternalStorageDirectory(), "KaorisanApp"); Log.i("Folder",""+mediaStorageDir.toString()); if (!mediaStorageDir.exists()) { if (!mediaStorageDir.mkdirs()) { return null; } } String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); File mediaFile; // mediaFile = new File(mediaStorageDir.getPath() + File.separator + // "IMG_"+ timeStamp + ".jpg"); String imagePath = "KaorisanApp/Kaorisan_" + timeStamp + ".jpg"; mediaFile = new File(Environment.getExternalStorageDirectory(), imagePath); Uri uri = Uri.fromFile(mediaFile); try { OutputStream imageOut = context.getContentResolver().openOutputStream(uri); try { //imageOut.write(data); bitmap.compress(CompressFormat.JPEG,quatily, imageOut); imageOut.flush(); imageOut.close(); return uri; } catch (IOException e) { e.printStackTrace(); } } catch (FileNotFoundException e1) { e1.printStackTrace(); } return null; } @SuppressLint("SimpleDateFormat") public static Uri writeDataToLocal(Bitmap bitmap,int quatily,Context context){ File mediaStorageDir = new File(Environment.getExternalStorageDirectory(), "KaorisanTmp"); Log.i("Folder",""+mediaStorageDir.toString()); if (!mediaStorageDir.exists()) { if (!mediaStorageDir.mkdirs()) { return null; } } String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); File mediaFile; // mediaFile = new File(mediaStorageDir.getPath() + File.separator + // "IMG_"+ timeStamp + ".jpg"); String imagePath = "KaorisanTmp/Kaorisan_" + timeStamp + ".jpg"; mediaFile = new File(Environment.getExternalStorageDirectory(), imagePath); Uri uri = Uri.fromFile(mediaFile); try { OutputStream imageOut = context.getContentResolver().openOutputStream(uri); try { //imageOut.write(data); bitmap.compress(CompressFormat.JPEG,quatily, imageOut); imageOut.flush(); imageOut.close(); return uri; } catch (IOException e) { e.printStackTrace(); } } catch (FileNotFoundException e1) { e1.printStackTrace(); } return null; } public static int getPhotoLocalOrientation(Context context, Uri uri){ int rotate = 0; String imagePath = getRealPathFromURI(uri, context); try { File imageFile = new File(imagePath); ExifInterface exif = new ExifInterface(imageFile.getAbsolutePath()); int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL); switch (orientation) { case ExifInterface.ORIENTATION_ROTATE_270: rotate = 270; break; case ExifInterface.ORIENTATION_ROTATE_180: rotate = 180; break; case ExifInterface.ORIENTATION_ROTATE_90: rotate = 90; break; } Log.i("RotateImage", "Exif orientation: " + orientation); Log.i("RotateImage", "Rotate value: " + rotate); } catch (Exception e) { e.printStackTrace(); } return rotate; } public static int getCameraPhotoOrientation(Context context, Uri uri){ int rotate = 0; String imagePath = uri.toString().substring(6); try { File imageFile = new File(imagePath); ExifInterface exif = new ExifInterface(imageFile.getAbsolutePath()); int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL); switch (orientation) { case ExifInterface.ORIENTATION_ROTATE_270: rotate = 270; break; case ExifInterface.ORIENTATION_ROTATE_180: rotate = 180; break; case ExifInterface.ORIENTATION_ROTATE_90: rotate = 90; break; } Log.i("RotateImage", "Exif orientation: " + orientation); Log.i("RotateImage", "Rotate value: " + rotate); } catch (Exception e) { e.printStackTrace(); } return rotate; } public static String replaceHttpsToHttp(String https){ String http = https.replace("https", "http"); return http; } public enum Social { FACEBOOK, GOOGLE } public enum CameraOrientation { Portrait, Lanscape, PortraitInvert, LanscapeInvert, } }