PhotoEditorView.java revision 69c182afb0e6d82a341a28b4317aa703af768906
13efae4aeae8715fbfcf67c56f123da49330ea01aWalter Jang/* 23efae4aeae8715fbfcf67c56f123da49330ea01aWalter Jang * Copyright (C) 2015 The Android Open Source Project 33efae4aeae8715fbfcf67c56f123da49330ea01aWalter Jang * 43efae4aeae8715fbfcf67c56f123da49330ea01aWalter Jang * Licensed under the Apache License, Version 2.0 (the "License"); 53efae4aeae8715fbfcf67c56f123da49330ea01aWalter Jang * you may not use this file except in compliance with the License. 63efae4aeae8715fbfcf67c56f123da49330ea01aWalter Jang * You may obtain a copy of the License at 73efae4aeae8715fbfcf67c56f123da49330ea01aWalter Jang * 83efae4aeae8715fbfcf67c56f123da49330ea01aWalter Jang * http://www.apache.org/licenses/LICENSE-2.0 93efae4aeae8715fbfcf67c56f123da49330ea01aWalter Jang * 103efae4aeae8715fbfcf67c56f123da49330ea01aWalter Jang * Unless required by applicable law or agreed to in writing, software 113efae4aeae8715fbfcf67c56f123da49330ea01aWalter Jang * distributed under the License is distributed on an "AS IS" BASIS, 123efae4aeae8715fbfcf67c56f123da49330ea01aWalter Jang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 133efae4aeae8715fbfcf67c56f123da49330ea01aWalter Jang * See the License for the specific language governing permissions and 143efae4aeae8715fbfcf67c56f123da49330ea01aWalter Jang * limitations under the License. 153efae4aeae8715fbfcf67c56f123da49330ea01aWalter Jang */ 163efae4aeae8715fbfcf67c56f123da49330ea01aWalter Jang 173efae4aeae8715fbfcf67c56f123da49330ea01aWalter Jangpackage com.android.contacts.editor; 183efae4aeae8715fbfcf67c56f123da49330ea01aWalter Jang 193bb7a0f2a8ec3aed48ba740810997b3f8ad1a260Walter Jangimport android.app.Activity; 203efae4aeae8715fbfcf67c56f123da49330ea01aWalter Jangimport android.content.Context; 213bb7a0f2a8ec3aed48ba740810997b3f8ad1a260Walter Jangimport android.content.res.TypedArray; 223efae4aeae8715fbfcf67c56f123da49330ea01aWalter Jangimport android.graphics.Bitmap; 233efae4aeae8715fbfcf67c56f123da49330ea01aWalter Jangimport android.net.Uri; 243efae4aeae8715fbfcf67c56f123da49330ea01aWalter Jangimport android.provider.ContactsContract; 253efae4aeae8715fbfcf67c56f123da49330ea01aWalter Jangimport android.util.AttributeSet; 263bb7a0f2a8ec3aed48ba740810997b3f8ad1a260Walter Jangimport android.util.DisplayMetrics; 271044645b9c2050436f4f0e0c7e5b8da2931879baWalter Jangimport android.util.TypedValue; 283efae4aeae8715fbfcf67c56f123da49330ea01aWalter Jangimport android.view.View; 291044645b9c2050436f4f0e0c7e5b8da2931879baWalter Jangimport android.view.ViewGroup; 30ff16eea0e4d18cf2964667ce8e597780797e2b69Walter Jangimport android.widget.RelativeLayout; 313efae4aeae8715fbfcf67c56f123da49330ea01aWalter Jang 3265971d0f87dbee0b5ff93a7d64cdaab0940f56f5Gary Maiimport com.android.contacts.R; 3365971d0f87dbee0b5ff93a7d64cdaab0940f56f5Gary Maiimport com.android.contacts.common.ContactPhotoManager; 3469c182afb0e6d82a341a28b4317aa703af768906Gary Maiimport com.android.contacts.model.ValuesDelta; 3569c182afb0e6d82a341a28b4317aa703af768906Gary Maiimport com.android.contacts.util.MaterialColorMapUtils.MaterialPalette; 3665971d0f87dbee0b5ff93a7d64cdaab0940f56f5Gary Maiimport com.android.contacts.util.SchedulingUtils; 3765971d0f87dbee0b5ff93a7d64cdaab0940f56f5Gary Maiimport com.android.contacts.widget.QuickContactImageView; 3865971d0f87dbee0b5ff93a7d64cdaab0940f56f5Gary Mai 393efae4aeae8715fbfcf67c56f123da49330ea01aWalter Jang/** 4031a74ad969b650eb733e536569254ed3978c4f54Walter Jang * Displays a photo and calls the host back when the user clicks it. 413efae4aeae8715fbfcf67c56f123da49330ea01aWalter Jang */ 42363af60ea23e5a3b945005712a16564ab69db18bGary Maipublic class PhotoEditorView extends RelativeLayout implements View.OnClickListener { 433efae4aeae8715fbfcf67c56f123da49330ea01aWalter Jang 4431a74ad969b650eb733e536569254ed3978c4f54Walter Jang /** 4531a74ad969b650eb733e536569254ed3978c4f54Walter Jang * Callbacks for the host of this view. 4631a74ad969b650eb733e536569254ed3978c4f54Walter Jang */ 4731a74ad969b650eb733e536569254ed3978c4f54Walter Jang public interface Listener { 4831a74ad969b650eb733e536569254ed3978c4f54Walter Jang 4931a74ad969b650eb733e536569254ed3978c4f54Walter Jang /** 5031a74ad969b650eb733e536569254ed3978c4f54Walter Jang * Invoked when the user wants to change their photo. 5131a74ad969b650eb733e536569254ed3978c4f54Walter Jang */ 5231a74ad969b650eb733e536569254ed3978c4f54Walter Jang void onPhotoEditorViewClicked(); 5331a74ad969b650eb733e536569254ed3978c4f54Walter Jang } 543efae4aeae8715fbfcf67c56f123da49330ea01aWalter Jang 5531a74ad969b650eb733e536569254ed3978c4f54Walter Jang private Listener mListener; 563efae4aeae8715fbfcf67c56f123da49330ea01aWalter Jang 571044645b9c2050436f4f0e0c7e5b8da2931879baWalter Jang private final float mLandscapePhotoRatio; 589d8f37e77052543c4ae07cbf8329e4ff0ddef66bWalter Jang private final float mPortraitPhotoRatio; 591044645b9c2050436f4f0e0c7e5b8da2931879baWalter Jang private final boolean mIsTwoPanel; 601044645b9c2050436f4f0e0c7e5b8da2931879baWalter Jang 613bb7a0f2a8ec3aed48ba740810997b3f8ad1a260Walter Jang private final int mActionBarHeight; 623bb7a0f2a8ec3aed48ba740810997b3f8ad1a260Walter Jang private final int mStatusBarHeight; 633bb7a0f2a8ec3aed48ba740810997b3f8ad1a260Walter Jang 64f46abd89a3386cbdadff99e96df826bb27f987e9Walter Jang private QuickContactImageView mPhotoImageView; 65ab50e6f5cf14e1bdb6cd3598372fefc2fa6b0b83Walter Jang private View mPhotoIcon; 664a268d3dc9eb0fa067b1e408199ec7c969f34a25Walter Jang private View mPhotoIconOverlay; 67ab50e6f5cf14e1bdb6cd3598372fefc2fa6b0b83Walter Jang private View mPhotoTouchInterceptOverlay; 6818724188d3abe065b0a030fb2d9d5557dcb6163eGary Mai private MaterialPalette mMaterialPalette; 693efae4aeae8715fbfcf67c56f123da49330ea01aWalter Jang 7031a74ad969b650eb733e536569254ed3978c4f54Walter Jang private boolean mReadOnly; 7131a74ad969b650eb733e536569254ed3978c4f54Walter Jang private boolean mIsNonDefaultPhotoBound; 7231a74ad969b650eb733e536569254ed3978c4f54Walter Jang 73363af60ea23e5a3b945005712a16564ab69db18bGary Mai public PhotoEditorView(Context context) { 741044645b9c2050436f4f0e0c7e5b8da2931879baWalter Jang this(context, null); 753efae4aeae8715fbfcf67c56f123da49330ea01aWalter Jang } 763efae4aeae8715fbfcf67c56f123da49330ea01aWalter Jang 77363af60ea23e5a3b945005712a16564ab69db18bGary Mai public PhotoEditorView(Context context, AttributeSet attrs) { 783efae4aeae8715fbfcf67c56f123da49330ea01aWalter Jang super(context, attrs); 7931a74ad969b650eb733e536569254ed3978c4f54Walter Jang 80261e106d87056d0c9727dd9ae436d5aadadd0762Walter Jang mLandscapePhotoRatio = getTypedFloat(R.dimen.quickcontact_landscape_photo_ratio); 819d8f37e77052543c4ae07cbf8329e4ff0ddef66bWalter Jang mPortraitPhotoRatio = getTypedFloat(R.dimen.editor_portrait_photo_ratio); 82caf26197087343fdc18739e20e217236ff26831eWenyi Wang mIsTwoPanel = getResources().getBoolean(R.bool.contacteditor_two_panel); 833bb7a0f2a8ec3aed48ba740810997b3f8ad1a260Walter Jang 843bb7a0f2a8ec3aed48ba740810997b3f8ad1a260Walter Jang final TypedArray styledAttributes = getContext().getTheme().obtainStyledAttributes( 853bb7a0f2a8ec3aed48ba740810997b3f8ad1a260Walter Jang new int[] { android.R.attr.actionBarSize }); 863bb7a0f2a8ec3aed48ba740810997b3f8ad1a260Walter Jang mActionBarHeight = (int) styledAttributes.getDimension(0, 0); 873bb7a0f2a8ec3aed48ba740810997b3f8ad1a260Walter Jang styledAttributes.recycle(); 883bb7a0f2a8ec3aed48ba740810997b3f8ad1a260Walter Jang 893bb7a0f2a8ec3aed48ba740810997b3f8ad1a260Walter Jang final int resourceId = getResources().getIdentifier( 903bb7a0f2a8ec3aed48ba740810997b3f8ad1a260Walter Jang "status_bar_height", "dimen", "android"); 913bb7a0f2a8ec3aed48ba740810997b3f8ad1a260Walter Jang mStatusBarHeight = resourceId > 0 ? getResources().getDimensionPixelSize(resourceId) : 0; 923efae4aeae8715fbfcf67c56f123da49330ea01aWalter Jang } 933efae4aeae8715fbfcf67c56f123da49330ea01aWalter Jang 94261e106d87056d0c9727dd9ae436d5aadadd0762Walter Jang private float getTypedFloat(int resourceId) { 95261e106d87056d0c9727dd9ae436d5aadadd0762Walter Jang final TypedValue typedValue = new TypedValue(); 96261e106d87056d0c9727dd9ae436d5aadadd0762Walter Jang getResources().getValue(resourceId, typedValue, /* resolveRefs =*/ true); 97261e106d87056d0c9727dd9ae436d5aadadd0762Walter Jang return typedValue.getFloat(); 98261e106d87056d0c9727dd9ae436d5aadadd0762Walter Jang } 99261e106d87056d0c9727dd9ae436d5aadadd0762Walter Jang 1003efae4aeae8715fbfcf67c56f123da49330ea01aWalter Jang @Override 1013efae4aeae8715fbfcf67c56f123da49330ea01aWalter Jang protected void onFinishInflate() { 1023efae4aeae8715fbfcf67c56f123da49330ea01aWalter Jang super.onFinishInflate(); 103f46abd89a3386cbdadff99e96df826bb27f987e9Walter Jang mPhotoImageView = (QuickContactImageView) findViewById(R.id.photo); 104ab50e6f5cf14e1bdb6cd3598372fefc2fa6b0b83Walter Jang mPhotoIcon = findViewById(R.id.photo_icon); 1054a268d3dc9eb0fa067b1e408199ec7c969f34a25Walter Jang mPhotoIconOverlay = findViewById(R.id.photo_icon_overlay); 106ab50e6f5cf14e1bdb6cd3598372fefc2fa6b0b83Walter Jang mPhotoTouchInterceptOverlay = findViewById(R.id.photo_touch_intercept_overlay); 1073efae4aeae8715fbfcf67c56f123da49330ea01aWalter Jang } 1083efae4aeae8715fbfcf67c56f123da49330ea01aWalter Jang 10931a74ad969b650eb733e536569254ed3978c4f54Walter Jang public void setListener(Listener listener) { 11031a74ad969b650eb733e536569254ed3978c4f54Walter Jang mListener = listener; 11131a74ad969b650eb733e536569254ed3978c4f54Walter Jang } 1123efae4aeae8715fbfcf67c56f123da49330ea01aWalter Jang 11331a74ad969b650eb733e536569254ed3978c4f54Walter Jang public void setReadOnly(boolean readOnly) { 11431a74ad969b650eb733e536569254ed3978c4f54Walter Jang mReadOnly = readOnly; 115ab50e6f5cf14e1bdb6cd3598372fefc2fa6b0b83Walter Jang if (mReadOnly) { 116ab50e6f5cf14e1bdb6cd3598372fefc2fa6b0b83Walter Jang mPhotoIcon.setVisibility(View.GONE); 117ab50e6f5cf14e1bdb6cd3598372fefc2fa6b0b83Walter Jang mPhotoIconOverlay.setVisibility(View.GONE); 1184ceabed629c43cb247fd4a0faa36c09bd5ec999aGary Mai mPhotoTouchInterceptOverlay.setClickable(false); 11934047d2d076f5501ff958f0ef041b4e25c65bbedGary Mai mPhotoTouchInterceptOverlay.setContentDescription(getContext().getString( 12034047d2d076f5501ff958f0ef041b4e25c65bbedGary Mai R.string.editor_contact_photo_content_description)); 121ab50e6f5cf14e1bdb6cd3598372fefc2fa6b0b83Walter Jang } else { 1224ceabed629c43cb247fd4a0faa36c09bd5ec999aGary Mai mPhotoIcon.setVisibility(View.VISIBLE); 1234ceabed629c43cb247fd4a0faa36c09bd5ec999aGary Mai mPhotoIconOverlay.setVisibility(View.VISIBLE); 124ab50e6f5cf14e1bdb6cd3598372fefc2fa6b0b83Walter Jang mPhotoTouchInterceptOverlay.setOnClickListener(this); 125ef6ceb2714641eb70dcedddf6a18e6344fd7cbccGary Mai updatePhotoDescription(); 126ab50e6f5cf14e1bdb6cd3598372fefc2fa6b0b83Walter Jang } 127fa127a1c0ca95139664771edc3d5d97331c93b19Walter Jang } 128fa127a1c0ca95139664771edc3d5d97331c93b19Walter Jang 12918724188d3abe065b0a030fb2d9d5557dcb6163eGary Mai public void setPalette(MaterialPalette palette) { 13018724188d3abe065b0a030fb2d9d5557dcb6163eGary Mai mMaterialPalette = palette; 13118724188d3abe065b0a030fb2d9d5557dcb6163eGary Mai } 13218724188d3abe065b0a030fb2d9d5557dcb6163eGary Mai 133fa127a1c0ca95139664771edc3d5d97331c93b19Walter Jang /** 13431a74ad969b650eb733e536569254ed3978c4f54Walter Jang * Tries to bind a full size photo or a bitmap loaded from the given ValuesDelta, 13531a74ad969b650eb733e536569254ed3978c4f54Walter Jang * and falls back to the default avatar, tinted using the given MaterialPalette (if it's not 13631a74ad969b650eb733e536569254ed3978c4f54Walter Jang * null); 137fa127a1c0ca95139664771edc3d5d97331c93b19Walter Jang */ 13818724188d3abe065b0a030fb2d9d5557dcb6163eGary Mai public void setPhoto(ValuesDelta valuesDelta) { 13931a74ad969b650eb733e536569254ed3978c4f54Walter Jang // Check if we can update to the full size photo immediately 14031a74ad969b650eb733e536569254ed3978c4f54Walter Jang final Long photoFileId = EditorUiUtils.getPhotoFileId(valuesDelta); 14131a74ad969b650eb733e536569254ed3978c4f54Walter Jang if (photoFileId != null) { 14231a74ad969b650eb733e536569254ed3978c4f54Walter Jang final Uri photoUri = ContactsContract.DisplayPhoto.CONTENT_URI.buildUpon() 14331a74ad969b650eb733e536569254ed3978c4f54Walter Jang .appendPath(photoFileId.toString()).build(); 14431a74ad969b650eb733e536569254ed3978c4f54Walter Jang setFullSizedPhoto(photoUri); 14531a74ad969b650eb733e536569254ed3978c4f54Walter Jang adjustDimensions(); 14631a74ad969b650eb733e536569254ed3978c4f54Walter Jang return; 1473efae4aeae8715fbfcf67c56f123da49330ea01aWalter Jang } 1481044645b9c2050436f4f0e0c7e5b8da2931879baWalter Jang 14931a74ad969b650eb733e536569254ed3978c4f54Walter Jang // Use the bitmap image from the values delta 15031a74ad969b650eb733e536569254ed3978c4f54Walter Jang final Bitmap bitmap = EditorUiUtils.getPhotoBitmap(valuesDelta); 15131a74ad969b650eb733e536569254ed3978c4f54Walter Jang if (bitmap != null) { 15231a74ad969b650eb733e536569254ed3978c4f54Walter Jang setPhoto(bitmap); 15331a74ad969b650eb733e536569254ed3978c4f54Walter Jang adjustDimensions(); 15431a74ad969b650eb733e536569254ed3978c4f54Walter Jang return; 155f46abd89a3386cbdadff99e96df826bb27f987e9Walter Jang } 156f46abd89a3386cbdadff99e96df826bb27f987e9Walter Jang 15718724188d3abe065b0a030fb2d9d5557dcb6163eGary Mai setDefaultPhoto(mMaterialPalette); 15831a74ad969b650eb733e536569254ed3978c4f54Walter Jang adjustDimensions(); 15931a74ad969b650eb733e536569254ed3978c4f54Walter Jang } 16031a74ad969b650eb733e536569254ed3978c4f54Walter Jang 16131a74ad969b650eb733e536569254ed3978c4f54Walter Jang private void adjustDimensions() { 16231a74ad969b650eb733e536569254ed3978c4f54Walter Jang // Follow the same logic as MultiShrinkScroll.initialize 1631044645b9c2050436f4f0e0c7e5b8da2931879baWalter Jang SchedulingUtils.doOnPreDraw(this, /* drawNextFrame =*/ false, new Runnable() { 1641044645b9c2050436f4f0e0c7e5b8da2931879baWalter Jang @Override 1651044645b9c2050436f4f0e0c7e5b8da2931879baWalter Jang public void run() { 166a5e4bb287ea08f895c84d5de56fcc2483386b306Walter Jang final int photoHeight, photoWidth; 167a5e4bb287ea08f895c84d5de56fcc2483386b306Walter Jang if (mIsTwoPanel) { 1683bb7a0f2a8ec3aed48ba740810997b3f8ad1a260Walter Jang photoHeight = getContentViewHeight(); 169a5e4bb287ea08f895c84d5de56fcc2483386b306Walter Jang photoWidth = (int) (photoHeight * mLandscapePhotoRatio); 170a5e4bb287ea08f895c84d5de56fcc2483386b306Walter Jang } else { 1719d8f37e77052543c4ae07cbf8329e4ff0ddef66bWalter Jang // Make the photo slightly shorter that it is wide 17231a74ad969b650eb733e536569254ed3978c4f54Walter Jang photoWidth = getContentViewWidth(); 1739d8f37e77052543c4ae07cbf8329e4ff0ddef66bWalter Jang photoHeight = (int) (photoWidth / mPortraitPhotoRatio); 174a5e4bb287ea08f895c84d5de56fcc2483386b306Walter Jang } 1751044645b9c2050436f4f0e0c7e5b8da2931879baWalter Jang final ViewGroup.LayoutParams layoutParams = getLayoutParams(); 1761044645b9c2050436f4f0e0c7e5b8da2931879baWalter Jang layoutParams.height = photoHeight; 177a5e4bb287ea08f895c84d5de56fcc2483386b306Walter Jang layoutParams.width = photoWidth; 1781044645b9c2050436f4f0e0c7e5b8da2931879baWalter Jang setLayoutParams(layoutParams); 1791044645b9c2050436f4f0e0c7e5b8da2931879baWalter Jang } 1801044645b9c2050436f4f0e0c7e5b8da2931879baWalter Jang }); 1813efae4aeae8715fbfcf67c56f123da49330ea01aWalter Jang } 1823efae4aeae8715fbfcf67c56f123da49330ea01aWalter Jang 18331a74ad969b650eb733e536569254ed3978c4f54Walter Jang private int getContentViewWidth() { 18431a74ad969b650eb733e536569254ed3978c4f54Walter Jang final Activity activity = (Activity) getContext(); 18531a74ad969b650eb733e536569254ed3978c4f54Walter Jang final DisplayMetrics displayMetrics = new DisplayMetrics(); 18631a74ad969b650eb733e536569254ed3978c4f54Walter Jang activity.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); 18731a74ad969b650eb733e536569254ed3978c4f54Walter Jang return displayMetrics.widthPixels; 18831a74ad969b650eb733e536569254ed3978c4f54Walter Jang } 18931a74ad969b650eb733e536569254ed3978c4f54Walter Jang 1903bb7a0f2a8ec3aed48ba740810997b3f8ad1a260Walter Jang // We're calculating the height the hard way because using the height of the content view 1913bb7a0f2a8ec3aed48ba740810997b3f8ad1a260Walter Jang // (found using android.view.Window.ID_ANDROID_CONTENT) with the soft keyboard up when 1923bb7a0f2a8ec3aed48ba740810997b3f8ad1a260Walter Jang // going from portrait to landscape mode results in a very small height value. 1933bb7a0f2a8ec3aed48ba740810997b3f8ad1a260Walter Jang // See b/20526470 1943bb7a0f2a8ec3aed48ba740810997b3f8ad1a260Walter Jang private int getContentViewHeight() { 1953bb7a0f2a8ec3aed48ba740810997b3f8ad1a260Walter Jang final Activity activity = (Activity) getContext(); 1963bb7a0f2a8ec3aed48ba740810997b3f8ad1a260Walter Jang final DisplayMetrics displayMetrics = new DisplayMetrics(); 1973bb7a0f2a8ec3aed48ba740810997b3f8ad1a260Walter Jang activity.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); 1983bb7a0f2a8ec3aed48ba740810997b3f8ad1a260Walter Jang return displayMetrics.heightPixels - mActionBarHeight - mStatusBarHeight; 1993bb7a0f2a8ec3aed48ba740810997b3f8ad1a260Walter Jang } 2003bb7a0f2a8ec3aed48ba740810997b3f8ad1a260Walter Jang 2013efae4aeae8715fbfcf67c56f123da49330ea01aWalter Jang /** 20231a74ad969b650eb733e536569254ed3978c4f54Walter Jang * Whether a removable, non-default photo is bound to this view. 2033efae4aeae8715fbfcf67c56f123da49330ea01aWalter Jang */ 2043efae4aeae8715fbfcf67c56f123da49330ea01aWalter Jang public boolean isWritablePhotoSet() { 20531a74ad969b650eb733e536569254ed3978c4f54Walter Jang return !mReadOnly && mIsNonDefaultPhotoBound; 2063efae4aeae8715fbfcf67c56f123da49330ea01aWalter Jang } 2073efae4aeae8715fbfcf67c56f123da49330ea01aWalter Jang 2083efae4aeae8715fbfcf67c56f123da49330ea01aWalter Jang /** 20931a74ad969b650eb733e536569254ed3978c4f54Walter Jang * Binds the given bitmap. 2103efae4aeae8715fbfcf67c56f123da49330ea01aWalter Jang */ 21131a74ad969b650eb733e536569254ed3978c4f54Walter Jang private void setPhoto(Bitmap bitmap) { 21231a74ad969b650eb733e536569254ed3978c4f54Walter Jang mPhotoImageView.setImageBitmap(bitmap); 21331a74ad969b650eb733e536569254ed3978c4f54Walter Jang mIsNonDefaultPhotoBound = true; 214ef6ceb2714641eb70dcedddf6a18e6344fd7cbccGary Mai updatePhotoDescription(); 21531a74ad969b650eb733e536569254ed3978c4f54Walter Jang } 2163efae4aeae8715fbfcf67c56f123da49330ea01aWalter Jang 21731a74ad969b650eb733e536569254ed3978c4f54Walter Jang private void setDefaultPhoto(MaterialPalette materialPalette) { 218da20b47c2b85390a2c3772379e71203c5aab513cGary Mai mIsNonDefaultPhotoBound = false; 219ef6ceb2714641eb70dcedddf6a18e6344fd7cbccGary Mai updatePhotoDescription(); 22031a74ad969b650eb733e536569254ed3978c4f54Walter Jang EditorUiUtils.setDefaultPhoto(mPhotoImageView, getResources(), materialPalette); 2213efae4aeae8715fbfcf67c56f123da49330ea01aWalter Jang } 2223efae4aeae8715fbfcf67c56f123da49330ea01aWalter Jang 223ef6ceb2714641eb70dcedddf6a18e6344fd7cbccGary Mai private void updatePhotoDescription() { 224ef6ceb2714641eb70dcedddf6a18e6344fd7cbccGary Mai mPhotoTouchInterceptOverlay.setContentDescription(getContext().getString( 225ef6ceb2714641eb70dcedddf6a18e6344fd7cbccGary Mai mIsNonDefaultPhotoBound 226ef6ceb2714641eb70dcedddf6a18e6344fd7cbccGary Mai ? R.string.editor_change_photo_content_description 227ef6ceb2714641eb70dcedddf6a18e6344fd7cbccGary Mai : R.string.editor_add_photo_content_description)); 228ef6ceb2714641eb70dcedddf6a18e6344fd7cbccGary Mai } 2293efae4aeae8715fbfcf67c56f123da49330ea01aWalter Jang /** 23031a74ad969b650eb733e536569254ed3978c4f54Walter Jang * Binds a full size photo loaded from the given Uri. 2313efae4aeae8715fbfcf67c56f123da49330ea01aWalter Jang */ 23231a74ad969b650eb733e536569254ed3978c4f54Walter Jang public void setFullSizedPhoto(Uri photoUri) { 23331a74ad969b650eb733e536569254ed3978c4f54Walter Jang EditorUiUtils.loadPhoto(ContactPhotoManager.getInstance(getContext()), 23431a74ad969b650eb733e536569254ed3978c4f54Walter Jang mPhotoImageView, photoUri); 23531a74ad969b650eb733e536569254ed3978c4f54Walter Jang mIsNonDefaultPhotoBound = true; 236ef6ceb2714641eb70dcedddf6a18e6344fd7cbccGary Mai updatePhotoDescription(); 2371573aa697284e6627c7bb74eae4c350f56780c33Walter Jang } 2381573aa697284e6627c7bb74eae4c350f56780c33Walter Jang 2393efae4aeae8715fbfcf67c56f123da49330ea01aWalter Jang /** 24031a74ad969b650eb733e536569254ed3978c4f54Walter Jang * Removes the current bound photo bitmap. 2413efae4aeae8715fbfcf67c56f123da49330ea01aWalter Jang */ 24231a74ad969b650eb733e536569254ed3978c4f54Walter Jang public void removePhoto() { 24318724188d3abe065b0a030fb2d9d5557dcb6163eGary Mai setDefaultPhoto(mMaterialPalette); 2443efae4aeae8715fbfcf67c56f123da49330ea01aWalter Jang } 2453efae4aeae8715fbfcf67c56f123da49330ea01aWalter Jang 2463efae4aeae8715fbfcf67c56f123da49330ea01aWalter Jang @Override 2473efae4aeae8715fbfcf67c56f123da49330ea01aWalter Jang public void onClick(View view) { 24831a74ad969b650eb733e536569254ed3978c4f54Walter Jang if (mListener != null) { 24931a74ad969b650eb733e536569254ed3978c4f54Walter Jang mListener.onPhotoEditorViewClicked(); 2503efae4aeae8715fbfcf67c56f123da49330ea01aWalter Jang } 2513efae4aeae8715fbfcf67c56f123da49330ea01aWalter Jang } 2523efae4aeae8715fbfcf67c56f123da49330ea01aWalter Jang} 253