blob: eb832e992e06116f23984c529317de18f9f92ad6 [file] [log] [blame]
/*
* Copyright (C) 2012 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.detail;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Rect;
import android.net.Uri;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;
import com.android.contacts.ContactPhotoManager;
import com.android.contacts.activities.PhotoSelectionActivity;
import com.android.contacts.model.Contact;
import com.android.contacts.model.RawContactDeltaList;
import com.android.contacts.util.ImageViewDrawableSetter;
/**
* Extends superclass with methods specifically for setting the contact-detail
* photo.
*/
public class ContactDetailPhotoSetter extends ImageViewDrawableSetter {
public OnClickListener setupContactPhotoForClick(Context context, Contact contactData,
ImageView photoView, boolean expandPhotoOnClick) {
setTarget(photoView);
Bitmap bitmap = setCompressedImage(contactData.getPhotoBinaryData());
return setupClickListener(context, contactData, bitmap, expandPhotoOnClick);
}
private static final class PhotoClickListener implements OnClickListener {
private final Context mContext;
private final Contact mContactData;
private final Bitmap mPhotoBitmap;
private final byte[] mPhotoBytes;
private final boolean mExpandPhotoOnClick;
public PhotoClickListener(Context context, Contact contactData, Bitmap photoBitmap,
byte[] photoBytes, boolean expandPhotoOnClick) {
mContext = context;
mContactData = contactData;
mPhotoBitmap = photoBitmap;
mPhotoBytes = photoBytes;
mExpandPhotoOnClick = expandPhotoOnClick;
}
@Override
public void onClick(View v) {
// Assemble the intent.
RawContactDeltaList delta = mContactData.createRawContactDeltaList();
// Find location and bounds of target view, adjusting based on the
// assumed local density.
final float appScale =
mContext.getResources().getCompatibilityInfo().applicationScale;
final int[] pos = new int[2];
v.getLocationOnScreen(pos);
// rect is the bounds (in pixels) of the photo view in screen coordinates
final Rect rect = new Rect();
rect.left = (int) (pos[0] * appScale + 0.5f);
rect.top = (int) (pos[1] * appScale + 0.5f);
rect.right = (int) ((pos[0] + v.getWidth()) * appScale + 0.5f);
rect.bottom = (int) ((pos[1] + v.getHeight()) * appScale + 0.5f);
Uri photoUri = null;
if (mContactData.getPhotoUri() != null) {
photoUri = Uri.parse(mContactData.getPhotoUri());
}
Intent photoSelectionIntent = PhotoSelectionActivity.buildIntent(mContext,
photoUri, mPhotoBitmap, mPhotoBytes, rect, delta, mContactData.isUserProfile(),
mContactData.isDirectoryEntry(), mExpandPhotoOnClick);
// Cache the bitmap directly, so the activity can pull it from the
// photo manager.
if (mPhotoBitmap != null) {
ContactPhotoManager.getInstance(mContext).cacheBitmap(
photoUri, mPhotoBitmap, mPhotoBytes);
}
mContext.startActivity(photoSelectionIntent);
}
}
private OnClickListener setupClickListener(Context context, Contact contactData, Bitmap bitmap,
boolean expandPhotoOnClick) {
final ImageView target = getTarget();
if (target == null) return null;
return new PhotoClickListener(
context, contactData, bitmap, getCompressedImage(), expandPhotoOnClick);
}
}