Remove dead PhotoSelectionActivity
The activity had dependencies on some hidden APIs.
Since it is dead anyway, lets remove it.
Bug: 18777272
Change-Id: Ib0071e2ef609fd53be4acb784e5cf67bb44155b7
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index d23e74a..459af59 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -378,18 +378,6 @@
</intent-filter>
</activity>
- <!--
- Internal photo selection activity. This activity handles all configuration changes by
- itself.
- -->
- <activity android:name=".activities.PhotoSelectionActivity"
- android:theme="@style/Theme.PhotoSelector"
- android:launchMode="singleTop"
- android:windowSoftInputMode="stateUnchanged"
- android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|screenLayout|fontScale|uiMode|orientation|screenSize|smallestScreenSize"
- >
- </activity>
-
<!-- vCard related -->
<activity android:name=".common.vcard.ImportVCardActivity"
android:label="@string/launcherActivityLabel"
diff --git a/res/layout/photoselection_activity.xml b/res/layout/photoselection_activity.xml
deleted file mode 100644
index e7ef901..0000000
--- a/res/layout/photoselection_activity.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2011 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.
--->
-<FrameLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent">
- <View
- android:id="@+id/backdrop"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:background="#000000" />
- <view
- android:id="@+id/photo"
- class="com.android.contacts.detail.TransformableImageView"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:scaleType="centerCrop" />
-</FrameLayout>
\ No newline at end of file
diff --git a/src/com/android/contacts/activities/PhotoSelectionActivity.java b/src/com/android/contacts/activities/PhotoSelectionActivity.java
deleted file mode 100644
index c81c448..0000000
--- a/src/com/android/contacts/activities/PhotoSelectionActivity.java
+++ /dev/null
@@ -1,571 +0,0 @@
-/*
- * Copyright (C) 2011 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.activities;
-
-import android.animation.Animator;
-import android.animation.AnimatorListenerAdapter;
-import android.animation.ObjectAnimator;
-import android.animation.PropertyValuesHolder;
-import android.app.Activity;
-import android.content.Context;
-import android.content.Intent;
-import android.content.res.Configuration;
-import android.graphics.Bitmap;
-import android.graphics.Rect;
-import android.net.Uri;
-import android.os.Bundle;
-import android.os.Parcelable;
-import android.view.View;
-import android.view.ViewGroup.MarginLayoutParams;
-import android.widget.FrameLayout.LayoutParams;
-import android.widget.ImageView;
-
-import com.android.contacts.common.ContactPhotoManager;
-import com.android.contacts.ContactSaveService;
-import com.android.contacts.R;
-import com.android.contacts.detail.PhotoSelectionHandler;
-import com.android.contacts.editor.PhotoActionPopup;
-import com.android.contacts.common.model.RawContactDeltaList;
-import com.android.contacts.util.SchedulingUtils;
-
-/**
- * Popup activity for choosing a contact photo within the Contacts app.
- */
-public class PhotoSelectionActivity extends Activity {
-
- private static final String TAG = "PhotoSelectionActivity";
-
- /** Number of ms for the animation to expand the photo. */
- private static final int PHOTO_EXPAND_DURATION = 100;
-
- /** Number of ms for the animation to contract the photo on activity exit. */
- private static final int PHOTO_CONTRACT_DURATION = 50;
-
- /** Number of ms for the animation to hide the backdrop on finish. */
- private static final int BACKDROP_FADEOUT_DURATION = 100;
-
- /** Key used to persist photo uri. */
- private static final String KEY_CURRENT_PHOTO_URI = "currentphotouri";
-
- /** Key used to persist whether a sub-activity is currently in progress. */
- private static final String KEY_SUB_ACTIVITY_IN_PROGRESS = "subinprogress";
-
- /** Intent extra to get the photo URI. */
- public static final String PHOTO_URI = "photo_uri";
-
- /** Intent extra to get the entity delta list. */
- public static final String ENTITY_DELTA_LIST = "entity_delta_list";
-
- /** Intent extra to indicate whether the contact is the user's profile. */
- public static final String IS_PROFILE = "is_profile";
-
- /** Intent extra to indicate whether the contact is from a directory (non-editable). */
- public static final String IS_DIRECTORY_CONTACT = "is_directory_contact";
-
- /**
- * Intent extra to indicate whether the photo should be animated to show the full contents of
- * the photo (on a larger portion of the screen) when clicked. If unspecified or false, the
- * photo will not move from its original location.
- */
- public static final String EXPAND_PHOTO = "expand_photo";
-
- /** Source bounds of the image that was clicked on. */
- private Rect mSourceBounds;
-
- /**
- * The photo URI. May be null, in which case the default avatar will be used.
- */
- private Uri mPhotoUri;
-
- /** Entity delta list of the contact. */
- private RawContactDeltaList mState;
-
- /** Whether the contact is the user's profile. */
- private boolean mIsProfile;
-
- /** Whether the contact is from a directory. */
- private boolean mIsDirectoryContact;
-
- /** Whether to animate the photo to an expanded view covering more of the screen. */
- private boolean mExpandPhoto;
-
- /**
- * Side length (in pixels) of the expanded photo if to be expanded. Photos are expected to
- * be square.
- */
- private int mExpandedPhotoSize;
-
- /** Height (in pixels) to leave underneath the expanded photo to show the list popup */
- private int mHeightOffset;
-
- /** The semi-transparent backdrop. */
- private View mBackdrop;
-
- /** The photo view. */
- private ImageView mPhotoView;
-
- /** The photo handler attached to this activity, if any. */
- private PhotoHandler mPhotoHandler;
-
- /** Animator to expand the photo out to full size. */
- private ObjectAnimator mPhotoAnimator;
-
- /** Listener for the animation. */
- private AnimatorListenerAdapter mAnimationListener;
-
- /** Whether a change in layout of the photo has occurred that has no animation yet. */
- private boolean mAnimationPending;
-
- /** Prior position of the image (for animating). */
- Rect mOriginalPos = new Rect();
-
- /** Layout params for the photo view before we started animating. */
- private LayoutParams mPhotoStartParams;
-
- /** Layout params for the photo view after we finished animating. */
- private LayoutParams mPhotoEndParams;
-
- /** Whether a sub-activity is currently in progress. */
- private boolean mSubActivityInProgress;
-
- private boolean mCloseActivityWhenCameBackFromSubActivity;
-
- /**
- * A photo result received by the activity, persisted across activity lifecycle.
- */
- private PendingPhotoResult mPendingPhotoResult;
-
- /**
- * The photo uri being interacted with, if any. Saved/restored between activity instances.
- */
- private Uri mCurrentPhotoUri;
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.photoselection_activity);
- if (savedInstanceState != null) {
- mCurrentPhotoUri = savedInstanceState.getParcelable(KEY_CURRENT_PHOTO_URI);
- mSubActivityInProgress = savedInstanceState.getBoolean(KEY_SUB_ACTIVITY_IN_PROGRESS);
- }
-
- // Pull data out of the intent.
- final Intent intent = getIntent();
- mPhotoUri = intent.getParcelableExtra(PHOTO_URI);
- mState = (RawContactDeltaList) intent.getParcelableExtra(ENTITY_DELTA_LIST);
- mIsProfile = intent.getBooleanExtra(IS_PROFILE, false);
- mIsDirectoryContact = intent.getBooleanExtra(IS_DIRECTORY_CONTACT, false);
- mExpandPhoto = intent.getBooleanExtra(EXPAND_PHOTO, false);
-
- // Pull out photo expansion properties from resources
- mExpandedPhotoSize = getResources().getDimensionPixelSize(
- R.dimen.detail_contact_photo_expanded_size);
- mHeightOffset = getResources().getDimensionPixelOffset(
- R.dimen.expanded_photo_height_offset);
-
- mBackdrop = findViewById(R.id.backdrop);
- mPhotoView = (ImageView) findViewById(R.id.photo);
-
- mSourceBounds = intent.getSourceBounds();
-
- // Fade in the background.
- animateInBackground();
-
- // Dismiss the dialog on clicking the backdrop.
- mBackdrop.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- finish();
- }
- });
-
- // Wait until the layout pass to show the photo, so that the source bounds will match up.
- SchedulingUtils.doAfterLayout(mBackdrop, new Runnable() {
- @Override
- public void run() {
- displayPhoto();
- }
- });
- }
-
- /**
- * Compute the adjusted expanded photo size to fit within the enclosing view with the same
- * aspect ratio.
- * @param enclosingView This is the view that the photo must fit within.
- * @param heightOffset This is the amount of height to leave open for the photo action popup.
- */
- private int getAdjustedExpandedPhotoSize(View enclosingView, int heightOffset) {
- // pull out the bounds of the backdrop
- final Rect bounds = new Rect();
- enclosingView.getDrawingRect(bounds);
- final int boundsWidth = bounds.width();
- final int boundsHeight = bounds.height() - heightOffset;
-
- // ensure that the new expanded photo size can fit within the backdrop
- final float alpha = Math.min((float) boundsHeight / (float) mExpandedPhotoSize,
- (float) boundsWidth / (float) mExpandedPhotoSize);
- if (alpha < 1.0f) {
- // need to shrink width and height while maintaining aspect ratio
- return (int) (alpha * mExpandedPhotoSize);
- } else {
- return mExpandedPhotoSize;
- }
- }
-
- @Override
- public void onConfigurationChanged(Configuration newConfig) {
- super.onConfigurationChanged(newConfig);
-
- // The current look may not seem right on the new configuration, so let's just close self.
-
- if (!mSubActivityInProgress) {
- finishImmediatelyWithNoAnimation();
- } else {
- // A sub-activity is in progress, so don't close it yet, but close it when we come back
- // to this activity.
- mCloseActivityWhenCameBackFromSubActivity = true;
- }
- }
-
- @Override
- public void finish() {
- if (!mSubActivityInProgress) {
- closePhotoAndFinish();
- } else {
- finishImmediatelyWithNoAnimation();
- }
- }
-
- /**
- * Builds a well-formed intent for invoking this activity.
- * @param context The context.
- * @param photoUri The URI of the current photo (may be null, in which case the default
- * avatar image will be displayed).
- * @param photoBitmap The bitmap of the current photo (may be null, in which case the default
- * avatar image will be displayed).
- * @param photoBytes The bytes for the current photo (may be null, in which case the default
- * avatar image will be displayed).
- * @param photoBounds The pixel bounds of the current photo.
- * @param delta The entity delta list for the contact.
- * @param isProfile Whether the contact is the user's profile.
- * @param isDirectoryContact Whether the contact comes from a directory (non-editable).
- * @param expandPhotoOnClick Whether the photo should be expanded on click or not (generally,
- * this should be true for phones, and false for tablets).
- * @return An intent that can be used to invoke the photo selection activity.
- */
- public static Intent buildIntent(Context context, Uri photoUri, Bitmap photoBitmap,
- byte[] photoBytes, Rect photoBounds, RawContactDeltaList delta, boolean isProfile,
- boolean isDirectoryContact, boolean expandPhotoOnClick) {
- Intent intent = new Intent(context, PhotoSelectionActivity.class);
- if (photoUri != null && photoBitmap != null && photoBytes != null) {
- intent.putExtra(PHOTO_URI, photoUri);
- }
- intent.setSourceBounds(photoBounds);
- intent.putExtra(ENTITY_DELTA_LIST, (Parcelable) delta);
- intent.putExtra(IS_PROFILE, isProfile);
- intent.putExtra(IS_DIRECTORY_CONTACT, isDirectoryContact);
- intent.putExtra(EXPAND_PHOTO, expandPhotoOnClick);
- return intent;
- }
-
- private void finishImmediatelyWithNoAnimation() {
- super.finish();
- }
-
- @Override
- protected void onDestroy() {
- super.onDestroy();
- if (mPhotoAnimator != null) {
- mPhotoAnimator.cancel();
- mPhotoAnimator = null;
- }
- if (mPhotoHandler != null) {
- mPhotoHandler.destroy();
- mPhotoHandler = null;
- }
- }
-
- private void displayPhoto() {
- // Animate the photo view into its end location.
- final int[] pos = new int[2];
- mBackdrop.getLocationOnScreen(pos);
- LayoutParams layoutParams = new LayoutParams(mSourceBounds.width(),
- mSourceBounds.height());
- mOriginalPos.left = mSourceBounds.left - pos[0];
- mOriginalPos.top = mSourceBounds.top - pos[1];
- mOriginalPos.right = mOriginalPos.left + mSourceBounds.width();
- mOriginalPos.bottom = mOriginalPos.top + mSourceBounds.height();
- layoutParams.setMargins(mOriginalPos.left, mOriginalPos.top, mOriginalPos.right,
- mOriginalPos.bottom);
- mPhotoStartParams = layoutParams;
- mPhotoView.setLayoutParams(layoutParams);
- mPhotoView.requestLayout();
-
- // Load the photo.
- int photoWidth = getPhotoEndParams().width;
- if (mPhotoUri != null) {
- // If we have a URI, the bitmap should be cached directly.
- ContactPhotoManager.getInstance(this).loadPhoto(mPhotoView, mPhotoUri, photoWidth,
- false /* darkTheme */, false /* isCircular */, null);
- } else {
- // If we don't have a URI, just display an empty ImageView. The default image from the
- // ContactDetailFragment will show up in the background instead.
- mPhotoView.setImageDrawable(null);
- }
-
- mPhotoView.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
- @Override
- public void onLayoutChange(View v, int left, int top, int right, int bottom,
- int oldLeft, int oldTop, int oldRight, int oldBottom) {
- if (mAnimationPending) {
- mAnimationPending = false;
- PropertyValuesHolder pvhLeft =
- PropertyValuesHolder.ofInt("left", mOriginalPos.left, left);
- PropertyValuesHolder pvhTop =
- PropertyValuesHolder.ofInt("top", mOriginalPos.top, top);
- PropertyValuesHolder pvhRight =
- PropertyValuesHolder.ofInt("right", mOriginalPos.right, right);
- PropertyValuesHolder pvhBottom =
- PropertyValuesHolder.ofInt("bottom", mOriginalPos.bottom, bottom);
- ObjectAnimator anim = ObjectAnimator.ofPropertyValuesHolder(mPhotoView,
- pvhLeft, pvhTop, pvhRight, pvhBottom).setDuration(
- PHOTO_EXPAND_DURATION);
- if (mAnimationListener != null) {
- anim.addListener(mAnimationListener);
- }
- anim.start();
- }
- }
- });
- attachPhotoHandler();
- }
-
- /**
- * This sets the photo's layout params at the end of the animation.
- * <p>
- * The scheme is to enlarge the photo to the desired size with the enlarged photo shifted
- * to the top left of the screen as much as possible while keeping the underlying smaller
- * photo occluded.
- */
- private LayoutParams getPhotoEndParams() {
- if (mPhotoEndParams == null) {
- mPhotoEndParams = new LayoutParams(mPhotoStartParams);
- if (mExpandPhoto) {
- final int adjustedPhotoSize = getAdjustedExpandedPhotoSize(mBackdrop,
- mHeightOffset);
- int widthDelta = adjustedPhotoSize - mPhotoStartParams.width;
- int heightDelta = adjustedPhotoSize - mPhotoStartParams.height;
- if (widthDelta >= 1 || heightDelta >= 1) {
- // This is an actual expansion.
- mPhotoEndParams.width = adjustedPhotoSize;
- mPhotoEndParams.height = adjustedPhotoSize;
- mPhotoEndParams.topMargin =
- Math.max(mPhotoStartParams.topMargin - heightDelta, 0);
- mPhotoEndParams.leftMargin =
- Math.max(mPhotoStartParams.leftMargin - widthDelta, 0);
- mPhotoEndParams.bottomMargin = 0;
- mPhotoEndParams.rightMargin = 0;
- }
- }
- }
- return mPhotoEndParams;
- }
-
- private void animatePhotoOpen() {
- mAnimationListener = new AnimatorListenerAdapter() {
- private void capturePhotoPos() {
- mPhotoView.requestLayout();
- mOriginalPos.left = mPhotoView.getLeft();
- mOriginalPos.top = mPhotoView.getTop();
- mOriginalPos.right = mPhotoView.getRight();
- mOriginalPos.bottom = mPhotoView.getBottom();
- }
-
- @Override
- public void onAnimationEnd(Animator animation) {
- capturePhotoPos();
- if (mPhotoHandler != null) {
- mPhotoHandler.onClick(mPhotoView);
- }
- }
-
- @Override
- public void onAnimationCancel(Animator animation) {
- capturePhotoPos();
- }
- };
- animatePhoto(getPhotoEndParams());
- }
-
- private void closePhotoAndFinish() {
- mAnimationListener = new AnimatorListenerAdapter() {
- @Override
- public void onAnimationEnd(Animator animation) {
- // After the photo animates down, fade it away and finish.
- ObjectAnimator anim = ObjectAnimator.ofFloat(
- mPhotoView, "alpha", 0f).setDuration(PHOTO_CONTRACT_DURATION);
- anim.addListener(new AnimatorListenerAdapter() {
- @Override
- public void onAnimationEnd(Animator animation) {
- finishImmediatelyWithNoAnimation();
- }
- });
- anim.start();
- }
- };
-
- animatePhoto(mPhotoStartParams);
- animateAwayBackground();
- }
-
- private void animatePhoto(MarginLayoutParams to) {
- // Cancel any existing animation.
- if (mPhotoAnimator != null) {
- mPhotoAnimator.cancel();
- }
-
- mPhotoView.setLayoutParams(to);
- mAnimationPending = true;
- mPhotoView.requestLayout();
- }
-
- private void animateInBackground() {
- ObjectAnimator.ofFloat(mBackdrop, "alpha", 0, 0.5f).setDuration(
- PHOTO_EXPAND_DURATION).start();
- }
-
- private void animateAwayBackground() {
- ObjectAnimator.ofFloat(mBackdrop, "alpha", 0f).setDuration(
- BACKDROP_FADEOUT_DURATION).start();
- }
-
- @Override
- protected void onSaveInstanceState(Bundle outState) {
- super.onSaveInstanceState(outState);
- outState.putParcelable(KEY_CURRENT_PHOTO_URI, mCurrentPhotoUri);
- outState.putBoolean(KEY_SUB_ACTIVITY_IN_PROGRESS, mSubActivityInProgress);
- }
-
- @Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- if (mPhotoHandler != null) {
- mSubActivityInProgress = false;
- if (mPhotoHandler.handlePhotoActivityResult(requestCode, resultCode, data)) {
- // Clear out any pending photo result.
- mPendingPhotoResult = null;
- } else {
- // User cancelled the sub-activity and returning to the photo selection activity.
- if (mCloseActivityWhenCameBackFromSubActivity) {
- finishImmediatelyWithNoAnimation();
- } else {
- // Re-display options.
- mPhotoHandler.onClick(mPhotoView);
- }
- }
- } else {
- // Create a pending photo result to be handled when the photo handler is created.
- mPendingPhotoResult = new PendingPhotoResult(requestCode, resultCode, data);
- }
- }
-
- private void attachPhotoHandler() {
- // Always provide the same two choices (take a photo with the camera, select a photo
- // from the gallery), but with slightly different wording.
- // Note: don't worry about this being a read-only contact; this code will not be invoked.
- int mode = (mPhotoUri == null) ? PhotoActionPopup.Modes.NO_PHOTO
- : PhotoActionPopup.Modes.WRITE_ABLE_PHOTO;
- // We don't want to provide a choice to remove the photo for two reasons:
- // 1) the UX designs don't call for it
- // 2) even if we wanted to, the implementation would be moderately hairy
- mode &= ~PhotoActionPopup.Flags.REMOVE_PHOTO;
-
- mPhotoHandler = new PhotoHandler(this, mPhotoView, mode, mState);
-
- if (mPendingPhotoResult != null) {
- mPhotoHandler.handlePhotoActivityResult(mPendingPhotoResult.mRequestCode,
- mPendingPhotoResult.mResultCode, mPendingPhotoResult.mData);
- mPendingPhotoResult = null;
- } else {
- // Setting the photo in displayPhoto() resulted in a relayout
- // request... to avoid jank, wait until this layout has happened.
- SchedulingUtils.doAfterLayout(mBackdrop, new Runnable() {
- @Override
- public void run() {
- animatePhotoOpen();
- }
- });
- }
- }
-
- private final class PhotoHandler extends PhotoSelectionHandler {
- private final PhotoActionListener mListener;
-
- private PhotoHandler(
- Context context, View photoView, int photoMode, RawContactDeltaList state) {
- super(context, photoView, photoMode, PhotoSelectionActivity.this.mIsDirectoryContact,
- state);
- mListener = new PhotoListener();
- }
-
- @Override
- public PhotoActionListener getListener() {
- return mListener;
- }
-
- @Override
- public void startPhotoActivity(Intent intent, int requestCode, Uri photoUri) {
- mSubActivityInProgress = true;
- mCurrentPhotoUri = photoUri;
- PhotoSelectionActivity.this.startActivityForResult(intent, requestCode);
- }
-
- private final class PhotoListener extends PhotoActionListener {
- @Override
- public void onPhotoSelected(Uri uri) {
- RawContactDeltaList delta = getDeltaForAttachingPhotoToContact();
- long rawContactId = getWritableEntityId();
-
- Intent intent = ContactSaveService.createSaveContactIntent(
- mContext, delta, "", 0, mIsProfile, null, null, rawContactId, uri);
- startService(intent);
- finish();
- }
-
- @Override
- public Uri getCurrentPhotoUri() {
- return mCurrentPhotoUri;
- }
-
- @Override
- public void onPhotoSelectionDismissed() {
- if (!mSubActivityInProgress) {
- finish();
- }
- }
- }
- }
-
- private static class PendingPhotoResult {
- final private int mRequestCode;
- final private int mResultCode;
- final private Intent mData;
- private PendingPhotoResult(int requestCode, int resultCode, Intent data) {
- mRequestCode = requestCode;
- mResultCode = resultCode;
- mData = data;
- }
- }
-}
diff --git a/src/com/android/contacts/detail/ContactDetailPhotoSetter.java b/src/com/android/contacts/detail/ContactDetailPhotoSetter.java
deleted file mode 100644
index 437de45..0000000
--- a/src/com/android/contacts/detail/ContactDetailPhotoSetter.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * 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.common.ContactPhotoManager;
-import com.android.contacts.activities.PhotoSelectionActivity;
-import com.android.contacts.common.model.Contact;
-import com.android.contacts.common.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) {
- Bitmap bitmap = setupContactPhoto(contactData, photoView);
- 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);
- }
-}
diff --git a/src/com/android/contacts/detail/TransformableImageView.java b/src/com/android/contacts/detail/TransformableImageView.java
deleted file mode 100644
index 1eb35aa..0000000
--- a/src/com/android/contacts/detail/TransformableImageView.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright (C) 2011 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.graphics.Canvas;
-import android.graphics.Matrix;
-import android.util.AttributeSet;
-import android.widget.ImageView;
-
-/**
- * Extension to ImageView that handles cropping during resize animations.
- */
-public class TransformableImageView extends ImageView {
-
- public TransformableImageView(Context context) {
- super(context);
- }
-
- public TransformableImageView(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
-
- public TransformableImageView(Context context, AttributeSet attrs, int defStyle) {
- super(context, attrs, defStyle);
- }
-
- @Override
- protected void onDraw(Canvas canvas) {
- if (getDrawable() == null) {
- return;
- }
- int saveCount = canvas.getSaveCount();
- canvas.save();
- canvas.translate(mPaddingLeft, mPaddingTop);
- Matrix drawMatrix = new Matrix();
- int dwidth = getDrawable().getIntrinsicWidth();
- int dheight = getDrawable().getIntrinsicHeight();
-
- int vwidth = getWidth() - mPaddingLeft - mPaddingRight;
- int vheight = getHeight() - mPaddingTop - mPaddingBottom;
- float scale;
- float dx = 0, dy = 0;
-
- if (dwidth * vheight > vwidth * dheight) {
- scale = (float) vheight / (float) dheight;
- dx = (vwidth - dwidth * scale) * 0.5f;
- } else {
- scale = (float) vwidth / (float) dwidth;
- dy = (vheight - dheight * scale) * 0.5f;
- }
-
- drawMatrix.setScale(scale, scale);
- drawMatrix.postTranslate((int) (dx + 0.5f), (int) (dy + 0.5f));
- canvas.concat(drawMatrix);
- getDrawable().draw(canvas);
- canvas.restoreToCount(saveCount);
- }
-}