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