auto import from //depot/cupcake/@135843
diff --git a/src/com/android/contacts/AttachImage.java b/src/com/android/contacts/AttachImage.java
new file mode 100644
index 0000000..8c91722
--- /dev/null
+++ b/src/com/android/contacts/AttachImage.java
@@ -0,0 +1,106 @@
+/*
+ * Copyright (C) 2006 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.contacts;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.graphics.Bitmap;
+import android.net.Uri;
+import android.os.Bundle;
+import android.provider.Contacts;
+import android.provider.Contacts.People;
+
+import java.io.ByteArrayOutputStream;
+
+/**
+ * Provides an external interface for other applications to attach images
+ * to contacts. It will first present a contact picker and then run the
+ * image that is handed to it through the cropper to make the image the proper
+ * size and give the user a chance to use the face detector.
+ */
+public class AttachImage extends Activity {
+    private static final int REQUEST_PICK_CONTACT = 1;
+    private static final int REQUEST_CROP_PHOTO = 2;
+
+    private static final String CONTACT_URI_KEY = "contact_uri";
+
+    public AttachImage() {
+
+    }
+
+    Uri mContactUri;
+
+    @Override
+    public void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+
+        if (icicle != null) {
+            mContactUri = icicle.getParcelable(CONTACT_URI_KEY);
+        } else {
+            Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
+            intent.setType(People.CONTENT_ITEM_TYPE);
+            startActivityForResult(intent, REQUEST_PICK_CONTACT);
+        }
+    }
+
+    @Override
+    protected void onSaveInstanceState(Bundle outState) {
+        super.onSaveInstanceState(outState);
+
+        if (mContactUri != null) {
+            outState.putParcelable(CONTACT_URI_KEY, mContactUri);
+        }
+    }
+
+    @Override
+    protected void onActivityResult(int requestCode, int resultCode, Intent result) {
+        if (resultCode != RESULT_OK) {
+            finish();
+            return;
+        }
+
+        if (requestCode == REQUEST_PICK_CONTACT) {
+            mContactUri = result.getData();
+            // A contact was picked. Launch the cropper to get face detection, the right size, etc.
+            // TODO: get these values from constants somewhere
+            Intent myIntent = getIntent();
+            Intent intent = new Intent("com.android.camera.action.CROP", myIntent.getData());
+            if (myIntent.getStringExtra("mimeType") != null) {
+                intent.setDataAndType(myIntent.getData(), myIntent.getStringExtra("mimeType"));
+            }
+            intent.putExtra("crop", "true");
+            intent.putExtra("aspectX", 1);
+            intent.putExtra("aspectY", 1);
+            intent.putExtra("outputX", 96);
+            intent.putExtra("outputY", 96);
+            intent.putExtra("return-data", true);
+            startActivityForResult(intent, REQUEST_CROP_PHOTO);
+        } else if (requestCode == REQUEST_CROP_PHOTO) {
+            final Bundle extras = result.getExtras();
+            if (extras != null) {
+                Bitmap photo = extras.getParcelable("data");
+                if (photo != null) {
+                    ByteArrayOutputStream stream = new ByteArrayOutputStream();
+                    photo.compress(Bitmap.CompressFormat.JPEG, 75, stream);
+                    Contacts.People.setPhotoData(getContentResolver(), mContactUri,
+                            stream.toByteArray());
+                }
+            }
+            finish();
+        }
+    }
+}