• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2012 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 
18 package com.android.contacts.util;
19 
20 import android.content.Context;
21 import android.content.Intent;
22 import android.graphics.Bitmap;
23 import android.net.Uri;
24 import android.os.Environment;
25 import android.provider.MediaStore;
26 import android.util.Log;
27 
28 import java.io.ByteArrayOutputStream;
29 import java.io.File;
30 import java.io.IOException;
31 import java.text.SimpleDateFormat;
32 import java.util.Date;
33 
34 /**
35  * Utilities related to loading/saving contact photos.
36  *
37  */
38 public class ContactPhotoUtils {
39     private static final String TAG = "ContactPhotoUtils";
40 
41     private static final String PHOTO_DATE_FORMAT = "'IMG'_yyyyMMdd_HHmmss";
42     private static final String NEW_PHOTO_DIR_PATH =
43             Environment.getExternalStorageDirectory() + "/DCIM/Camera";
44 
45 
46     /**
47      * Generate a new, unique file to be used as an out-of-band communication
48      * channel, since hi-res Bitmaps are too big to serialize into a Bundle.
49      * This file will be passed to other activities (such as the gallery/camera/cropper/etc.),
50      * and read by us once they are finished writing it.
51      */
generateTempPhotoFile(Context context)52     public static File generateTempPhotoFile(Context context) {
53         return new File(pathForCroppedPhoto(context, generateTempPhotoFileName()));
54     }
55 
pathForCroppedPhoto(Context context, String fileName)56     public static String pathForCroppedPhoto(Context context, String fileName) {
57         final File dir = new File(context.getExternalCacheDir() + "/tmp");
58         dir.mkdirs();
59         final File f = new File(dir, fileName);
60         return f.getAbsolutePath();
61     }
62 
pathForNewCameraPhoto(String fileName)63     public static String pathForNewCameraPhoto(String fileName) {
64         final File dir = new File(NEW_PHOTO_DIR_PATH);
65         dir.mkdirs();
66         final File f = new File(dir, fileName);
67         return f.getAbsolutePath();
68     }
69 
generateTempPhotoFileName()70     public static String generateTempPhotoFileName() {
71         Date date = new Date(System.currentTimeMillis());
72         SimpleDateFormat dateFormat = new SimpleDateFormat(PHOTO_DATE_FORMAT);
73         return "ContactPhoto-" + dateFormat.format(date) + ".jpg";
74     }
75 
76     /**
77      * Creates a byte[] containing the PNG-compressed bitmap, or null if
78      * something goes wrong.
79      */
compressBitmap(Bitmap bitmap)80     public static byte[] compressBitmap(Bitmap bitmap) {
81         final int size = bitmap.getWidth() * bitmap.getHeight() * 4;
82         final ByteArrayOutputStream out = new ByteArrayOutputStream(size);
83         try {
84             bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
85             out.flush();
86             out.close();
87             return out.toByteArray();
88         } catch (IOException e) {
89             Log.w(TAG, "Unable to serialize photo: " + e.toString());
90             return null;
91         }
92     }
93 
94     /**
95      * Adds common extras to gallery intents.
96      *
97      * @param intent The intent to add extras to.
98      * @param croppedPhotoUri The uri of the file to save the image to.
99      * @param photoSize The size of the photo to scale to.
100      */
addGalleryIntentExtras(Intent intent, Uri croppedPhotoUri, int photoSize)101     public static void addGalleryIntentExtras(Intent intent, Uri croppedPhotoUri, int photoSize) {
102         intent.putExtra("crop", "true");
103         intent.putExtra("scale", true);
104         intent.putExtra("scaleUpIfNeeded", true);
105         intent.putExtra("aspectX", 1);
106         intent.putExtra("aspectY", 1);
107         intent.putExtra("outputX", photoSize);
108         intent.putExtra("outputY", photoSize);
109         intent.putExtra(MediaStore.EXTRA_OUTPUT, croppedPhotoUri);
110     }
111 }
112 
113 
114