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