194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng/*
294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * Copyright (C) 2011 The Android Open Source Project
394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng *
494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * Licensed under the Apache License, Version 2.0 (the "License");
594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * you may not use this file except in compliance with the License.
694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * You may obtain a copy of the License at
794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng *
894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng *      http://www.apache.org/licenses/LICENSE-2.0
994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng *
1094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * Unless required by applicable law or agreed to in writing, software
1194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * distributed under the License is distributed on an "AS IS" BASIS,
1294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * See the License for the specific language governing permissions and
1494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * limitations under the License.
1594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng */
1694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng
1794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengpackage com.android.dialer.calllog;
1894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng
1994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.content.Context;
208b0e858d5b4c50813dbe2b5c244e7013814b23ecTyler Gunnimport android.graphics.Bitmap;
218b0e858d5b4c50813dbe2b5c244e7013814b23ecTyler Gunnimport android.graphics.BitmapFactory;
2294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.graphics.Canvas;
230c5fb5926ac9b9e9ce593054adf2cc96950101acTyler Gunnimport android.graphics.PorterDuff;
248b0e858d5b4c50813dbe2b5c244e7013814b23ecTyler Gunnimport android.graphics.drawable.BitmapDrawable;
2594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.graphics.drawable.Drawable;
2694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.provider.CallLog.Calls;
2794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.util.AttributeSet;
2894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.view.View;
2994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng
30e38e9ab6195950d2083efde283788b91d03354c4Yorke Leeimport com.android.contacts.common.testing.NeededForTesting;
314cfaa1a0b75b81b6feb1b78ab57016266b98611ePaul Soulosimport com.android.contacts.common.util.BitmapUtil;
329554500572ba82fbd7adb0a1637206ef870ef09eChiao Chengimport com.android.dialer.R;
3394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport com.google.common.collect.Lists;
3494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng
3594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport java.util.List;
3694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng
3794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng/**
3894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * View that draws one or more symbols for different types of calls (missed calls, outgoing etc).
3994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * The symbols are set up horizontally. As this view doesn't create subviews, it is better suited
4094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * for ListView-recycling that a regular LinearLayout using ImageViews.
4194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng */
4294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengpublic class CallTypeIconsView extends View {
4394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng    private List<Integer> mCallTypes = Lists.newArrayListWithCapacity(3);
448b0e858d5b4c50813dbe2b5c244e7013814b23ecTyler Gunn    private boolean mShowVideo = false;
4594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng    private Resources mResources;
4694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng    private int mWidth;
4794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng    private int mHeight;
4894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng
4994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng    public CallTypeIconsView(Context context) {
5094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng        this(context, null);
5194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng    }
5294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng
5394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng    public CallTypeIconsView(Context context, AttributeSet attrs) {
5494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng        super(context, attrs);
5594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng        mResources = new Resources(context);
5694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng    }
5794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng
5894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng    public void clear() {
5994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng        mCallTypes.clear();
6094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng        mWidth = 0;
6194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng        mHeight = 0;
6294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng        invalidate();
6394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng    }
6494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng
6594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng    public void add(int callType) {
6694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng        mCallTypes.add(callType);
6794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng
6894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng        final Drawable drawable = getCallTypeDrawable(callType);
6994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng        mWidth += drawable.getIntrinsicWidth() + mResources.iconMargin;
7094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng        mHeight = Math.max(mHeight, drawable.getIntrinsicHeight());
7194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng        invalidate();
7294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng    }
7394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng
748b0e858d5b4c50813dbe2b5c244e7013814b23ecTyler Gunn    /**
758b0e858d5b4c50813dbe2b5c244e7013814b23ecTyler Gunn     * Determines whether the video call icon will be shown.
768b0e858d5b4c50813dbe2b5c244e7013814b23ecTyler Gunn     *
778b0e858d5b4c50813dbe2b5c244e7013814b23ecTyler Gunn     * @param showVideo True where the video icon should be shown.
788b0e858d5b4c50813dbe2b5c244e7013814b23ecTyler Gunn     */
798b0e858d5b4c50813dbe2b5c244e7013814b23ecTyler Gunn    public void setShowVideo(boolean showVideo) {
808b0e858d5b4c50813dbe2b5c244e7013814b23ecTyler Gunn        mShowVideo = showVideo;
818b0e858d5b4c50813dbe2b5c244e7013814b23ecTyler Gunn        if (showVideo) {
828b0e858d5b4c50813dbe2b5c244e7013814b23ecTyler Gunn            mWidth += mResources.videoCall.getIntrinsicWidth();
838b0e858d5b4c50813dbe2b5c244e7013814b23ecTyler Gunn            mHeight = Math.max(mHeight, mResources.videoCall.getIntrinsicHeight());
848b0e858d5b4c50813dbe2b5c244e7013814b23ecTyler Gunn            invalidate();
858b0e858d5b4c50813dbe2b5c244e7013814b23ecTyler Gunn        }
868b0e858d5b4c50813dbe2b5c244e7013814b23ecTyler Gunn    }
878b0e858d5b4c50813dbe2b5c244e7013814b23ecTyler Gunn
885619f2ed87cb207352c0ff5578348baeb69ee202Tyler Gunn    /**
895619f2ed87cb207352c0ff5578348baeb69ee202Tyler Gunn     * Determines if the video icon should be shown.
905619f2ed87cb207352c0ff5578348baeb69ee202Tyler Gunn     *
915619f2ed87cb207352c0ff5578348baeb69ee202Tyler Gunn     * @return True if the video icon should be shown.
925619f2ed87cb207352c0ff5578348baeb69ee202Tyler Gunn     */
935619f2ed87cb207352c0ff5578348baeb69ee202Tyler Gunn    public boolean isVideoShown() {
945619f2ed87cb207352c0ff5578348baeb69ee202Tyler Gunn        return mShowVideo;
955619f2ed87cb207352c0ff5578348baeb69ee202Tyler Gunn    }
965619f2ed87cb207352c0ff5578348baeb69ee202Tyler Gunn
9794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng    @NeededForTesting
9894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng    public int getCount() {
9994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng        return mCallTypes.size();
10094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng    }
10194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng
10294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng    @NeededForTesting
10394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng    public int getCallType(int index) {
10494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng        return mCallTypes.get(index);
10594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng    }
10694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng
10794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng    private Drawable getCallTypeDrawable(int callType) {
10894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng        switch (callType) {
10994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng            case Calls.INCOMING_TYPE:
11094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng                return mResources.incoming;
11194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng            case Calls.OUTGOING_TYPE:
11294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng                return mResources.outgoing;
11394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng            case Calls.MISSED_TYPE:
11494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng                return mResources.missed;
11594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng            case Calls.VOICEMAIL_TYPE:
11694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng                return mResources.voicemail;
11794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng            default:
11866b60af960e3bf2e3b425966026e4b8ed8d01a03Yorke Lee                // It is possible for users to end up with calls with unknown call types in their
11966b60af960e3bf2e3b425966026e4b8ed8d01a03Yorke Lee                // call history, possibly due to 3rd party call log implementations (e.g. to
12066b60af960e3bf2e3b425966026e4b8ed8d01a03Yorke Lee                // distinguish between rejected and missed calls). Instead of crashing, just
12166b60af960e3bf2e3b425966026e4b8ed8d01a03Yorke Lee                // assume that all unknown call types are missed calls.
12266b60af960e3bf2e3b425966026e4b8ed8d01a03Yorke Lee                return mResources.missed;
12394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng        }
12494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng    }
12594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng
12694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng    @Override
12794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
12894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng        setMeasuredDimension(mWidth, mHeight);
12994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng    }
13094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng
13194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng    @Override
13294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng    protected void onDraw(Canvas canvas) {
13394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng        int left = 0;
13494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng        for (Integer callType : mCallTypes) {
13594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng            final Drawable drawable = getCallTypeDrawable(callType);
13694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng            final int right = left + drawable.getIntrinsicWidth();
13794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng            drawable.setBounds(left, 0, right, drawable.getIntrinsicHeight());
13894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng            drawable.draw(canvas);
13994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng            left = right + mResources.iconMargin;
14094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng        }
1418b0e858d5b4c50813dbe2b5c244e7013814b23ecTyler Gunn
1428b0e858d5b4c50813dbe2b5c244e7013814b23ecTyler Gunn        // If showing the video call icon, draw it scaled appropriately.
1438b0e858d5b4c50813dbe2b5c244e7013814b23ecTyler Gunn        if (mShowVideo) {
1448b0e858d5b4c50813dbe2b5c244e7013814b23ecTyler Gunn            final Drawable drawable = mResources.videoCall;
1458b0e858d5b4c50813dbe2b5c244e7013814b23ecTyler Gunn            final int right = left + mResources.videoCall.getIntrinsicWidth();
1468b0e858d5b4c50813dbe2b5c244e7013814b23ecTyler Gunn            drawable.setBounds(left, 0, right, mResources.videoCall.getIntrinsicHeight());
1478b0e858d5b4c50813dbe2b5c244e7013814b23ecTyler Gunn            drawable.draw(canvas);
1488b0e858d5b4c50813dbe2b5c244e7013814b23ecTyler Gunn        }
14994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng    }
15094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng
15194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng    private static class Resources {
1520c5fb5926ac9b9e9ce593054adf2cc96950101acTyler Gunn
1530c5fb5926ac9b9e9ce593054adf2cc96950101acTyler Gunn        /**
1540c5fb5926ac9b9e9ce593054adf2cc96950101acTyler Gunn         * Drawable representing an incoming answered call.
1550c5fb5926ac9b9e9ce593054adf2cc96950101acTyler Gunn         */
15694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng        public final Drawable incoming;
1570c5fb5926ac9b9e9ce593054adf2cc96950101acTyler Gunn
1580c5fb5926ac9b9e9ce593054adf2cc96950101acTyler Gunn        /**
1590c5fb5926ac9b9e9ce593054adf2cc96950101acTyler Gunn         * Drawable respresenting an outgoing call.
1600c5fb5926ac9b9e9ce593054adf2cc96950101acTyler Gunn         */
16194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng        public final Drawable outgoing;
1620c5fb5926ac9b9e9ce593054adf2cc96950101acTyler Gunn
1630c5fb5926ac9b9e9ce593054adf2cc96950101acTyler Gunn        /**
1640c5fb5926ac9b9e9ce593054adf2cc96950101acTyler Gunn         * Drawable representing an incoming missed call.
1650c5fb5926ac9b9e9ce593054adf2cc96950101acTyler Gunn         */
16694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng        public final Drawable missed;
1670c5fb5926ac9b9e9ce593054adf2cc96950101acTyler Gunn
1680c5fb5926ac9b9e9ce593054adf2cc96950101acTyler Gunn        /**
1690c5fb5926ac9b9e9ce593054adf2cc96950101acTyler Gunn         * Drawable representing a voicemail.
1700c5fb5926ac9b9e9ce593054adf2cc96950101acTyler Gunn         */
17194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng        public final Drawable voicemail;
1720c5fb5926ac9b9e9ce593054adf2cc96950101acTyler Gunn
1730c5fb5926ac9b9e9ce593054adf2cc96950101acTyler Gunn        /**
1748b0e858d5b4c50813dbe2b5c244e7013814b23ecTyler Gunn         * Drawable repesenting a video call.
1758b0e858d5b4c50813dbe2b5c244e7013814b23ecTyler Gunn         */
1768b0e858d5b4c50813dbe2b5c244e7013814b23ecTyler Gunn        public final Drawable videoCall;
1778b0e858d5b4c50813dbe2b5c244e7013814b23ecTyler Gunn
1788b0e858d5b4c50813dbe2b5c244e7013814b23ecTyler Gunn        /**
1790c5fb5926ac9b9e9ce593054adf2cc96950101acTyler Gunn         * The margin to use for icons.
1800c5fb5926ac9b9e9ce593054adf2cc96950101acTyler Gunn         */
18194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng        public final int iconMargin;
18294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng
1830c5fb5926ac9b9e9ce593054adf2cc96950101acTyler Gunn        /**
1840c5fb5926ac9b9e9ce593054adf2cc96950101acTyler Gunn         * Configures the call icon drawables.
1850c5fb5926ac9b9e9ce593054adf2cc96950101acTyler Gunn         * A single white call arrow which points down and left is used as a basis for all of the
1860c5fb5926ac9b9e9ce593054adf2cc96950101acTyler Gunn         * call arrow icons, applying rotation and colors as needed.
1870c5fb5926ac9b9e9ce593054adf2cc96950101acTyler Gunn         *
1880c5fb5926ac9b9e9ce593054adf2cc96950101acTyler Gunn         * @param context The current context.
1890c5fb5926ac9b9e9ce593054adf2cc96950101acTyler Gunn         */
19094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng        public Resources(Context context) {
19194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng            final android.content.res.Resources r = context.getResources();
1920c5fb5926ac9b9e9ce593054adf2cc96950101acTyler Gunn
1930c5fb5926ac9b9e9ce593054adf2cc96950101acTyler Gunn            incoming = r.getDrawable(R.drawable.ic_call_arrow);
1940c5fb5926ac9b9e9ce593054adf2cc96950101acTyler Gunn            incoming.setColorFilter(r.getColor(R.color.answered_call), PorterDuff.Mode.MULTIPLY);
1950c5fb5926ac9b9e9ce593054adf2cc96950101acTyler Gunn
1960c5fb5926ac9b9e9ce593054adf2cc96950101acTyler Gunn            // Create a rotated instance of the call arrow for outgoing calls.
1974cfaa1a0b75b81b6feb1b78ab57016266b98611ePaul Soulos            outgoing = BitmapUtil.getRotatedDrawable(r, R.drawable.ic_call_arrow, 180f);
1980c5fb5926ac9b9e9ce593054adf2cc96950101acTyler Gunn            outgoing.setColorFilter(r.getColor(R.color.answered_call), PorterDuff.Mode.MULTIPLY);
1990c5fb5926ac9b9e9ce593054adf2cc96950101acTyler Gunn
2000c5fb5926ac9b9e9ce593054adf2cc96950101acTyler Gunn            // Need to make a copy of the arrow drawable, otherwise the same instance colored
2010c5fb5926ac9b9e9ce593054adf2cc96950101acTyler Gunn            // above will be recolored here.
2020c5fb5926ac9b9e9ce593054adf2cc96950101acTyler Gunn            missed = r.getDrawable(R.drawable.ic_call_arrow).mutate();
2030c5fb5926ac9b9e9ce593054adf2cc96950101acTyler Gunn            missed.setColorFilter(r.getColor(R.color.missed_call), PorterDuff.Mode.MULTIPLY);
2040c5fb5926ac9b9e9ce593054adf2cc96950101acTyler Gunn
20594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng            voicemail = r.getDrawable(R.drawable.ic_call_voicemail_holo_dark);
2068b0e858d5b4c50813dbe2b5c244e7013814b23ecTyler Gunn
2078b0e858d5b4c50813dbe2b5c244e7013814b23ecTyler Gunn            // Get the video call icon, scaled to match the height of the call arrows.
2088b0e858d5b4c50813dbe2b5c244e7013814b23ecTyler Gunn            // We want the video call icon to be the same height as the call arrows, while keeping
2098b0e858d5b4c50813dbe2b5c244e7013814b23ecTyler Gunn            // the same width aspect ratio.
2108b0e858d5b4c50813dbe2b5c244e7013814b23ecTyler Gunn            Bitmap videoIcon = BitmapFactory.decodeResource(context.getResources(),
21151c2bde72ee4674266ac464bea2aba72d217d75fAndrew Lee                    R.drawable.ic_videocam_24dp);
2128b0e858d5b4c50813dbe2b5c244e7013814b23ecTyler Gunn            int scaledHeight = missed.getIntrinsicHeight();
2138b0e858d5b4c50813dbe2b5c244e7013814b23ecTyler Gunn            int scaledWidth = (int) ((float) videoIcon.getWidth() *
2148b0e858d5b4c50813dbe2b5c244e7013814b23ecTyler Gunn                    ((float) missed.getIntrinsicHeight() /
2158b0e858d5b4c50813dbe2b5c244e7013814b23ecTyler Gunn                            (float) videoIcon.getHeight()));
2168b0e858d5b4c50813dbe2b5c244e7013814b23ecTyler Gunn            Bitmap scaled = Bitmap.createScaledBitmap(videoIcon, scaledWidth, scaledHeight, false);
2178b0e858d5b4c50813dbe2b5c244e7013814b23ecTyler Gunn            videoCall = new BitmapDrawable(context.getResources(), scaled);
2188b0e858d5b4c50813dbe2b5c244e7013814b23ecTyler Gunn            videoCall.setColorFilter(r.getColor(R.color.dialtacts_secondary_text_color),
2198b0e858d5b4c50813dbe2b5c244e7013814b23ecTyler Gunn                    PorterDuff.Mode.MULTIPLY);
2208b0e858d5b4c50813dbe2b5c244e7013814b23ecTyler Gunn
22194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng            iconMargin = r.getDimensionPixelSize(R.dimen.call_log_icon_margin);
22294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng        }
22394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng    }
22494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng}
225