Merge "Import translations. DO NOT MERGE"
diff --git a/res/layout/call_log_activity.xml b/res/layout/call_log_activity.xml
index 5a50823..6934fee 100644
--- a/res/layout/call_log_activity.xml
+++ b/res/layout/call_log_activity.xml
@@ -14,12 +14,22 @@
      limitations under the License.
 -->
 
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    android:id="@+id/calllog_frame">
+    android:id="@+id/calllog_frame"
+    android:orientation="vertical">
+    <com.android.dialer.list.ViewPagerTabs
+        android:id="@+id/viewpager_header"
+        android:layout_width="match_parent"
+        android:layout_height="?android:attr/actionBarSize"
+        android:textAllCaps="true"
+        android:orientation="horizontal"
+        android:layout_gravity="top"
+        style="@style/DialtactsActionBarTabTextStyle" />
     <android.support.v4.view.ViewPager
         android:id="@+id/call_log_pager"
         android:layout_width="match_parent"
-        android:layout_height="match_parent"/>
-</FrameLayout>
+        android:layout_height="0dp"
+        android:layout_weight="1"/>
+</LinearLayout>
diff --git a/res/layout/lists_fragment.xml b/res/layout/lists_fragment.xml
index d4995e0..740dc2a 100644
--- a/res/layout/lists_fragment.xml
+++ b/res/layout/lists_fragment.xml
@@ -26,7 +26,8 @@
         android:layout_height="?android:attr/actionBarSize"
         android:textAllCaps="true"
         android:orientation="horizontal"
-        android:layout_gravity="top"/>
+        android:layout_gravity="top"
+        style="@style/DialtactsActionBarTabTextStyle" />
     <android.support.v4.view.ViewPager
         android:id="@+id/lists_pager"
         android:layout_width="match_parent"
diff --git a/res/layout/phone_favorite_tile_view.xml b/res/layout/phone_favorite_tile_view.xml
index 0779f2a..c48ace3 100644
--- a/res/layout/phone_favorite_tile_view.xml
+++ b/res/layout/phone_favorite_tile_view.xml
@@ -15,9 +15,6 @@
 -->
 <view
     xmlns:android="http://schemas.android.com/apk/res/android"
-    android:paddingBottom="1dip"
-    android:paddingRight="1dip"
-    android:paddingEnd="1dip"
     android:id="@+id/contact_tile"
     class="com.android.dialer.list.PhoneFavoriteSquareTileView" >
 
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index c8dfecc..7eb2ea0 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -68,17 +68,15 @@
     <dimen name="fake_menu_button_min_width">56dp</dimen>
 
     <!--  Favorites tile and recent call log padding -->
-    <dimen name="contact_tile_divider_width">12dp</dimen>
-    <!-- Favorites tile and recent call log padding -->
-    <dimen name="contact_tile_divider_padding">3dp</dimen>
+    <dimen name="contact_tile_divider_width">1dp</dimen>
     <dimen name="contact_tile_info_button_height_and_width">36dp</dimen>
     <item name="contact_tile_height_to_width_ratio" type="dimen">67%</item>
     <dimen name="contact_tile_text_side_padding">10dp</dimen>
     <dimen name="contact_tile_text_bottom_padding">8dp</dimen>
-    <dimen name="favorites_row_top_padding">6dp</dimen>
-    <dimen name="favorites_row_bottom_padding">6dp</dimen>
-    <dimen name="favorites_row_start_padding">8dp</dimen>
-    <dimen name="favorites_row_end_padding">8dp</dimen>
+    <dimen name="favorites_row_top_padding">1dp</dimen>
+    <dimen name="favorites_row_bottom_padding">0dp</dimen>
+    <dimen name="favorites_row_start_padding">1dp</dimen>
+    <dimen name="favorites_row_end_padding">1dp</dimen>
     <dimen name="favorites_row_undo_text_side_padding">32dp</dimen>
     <dimen name="recent_call_log_item_padding">8dp</dimen>
 
diff --git a/res/values/strings.xml b/res/values/strings.xml
index d67c788..4832ee9 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -698,13 +698,17 @@
     <string name="dialpad_pound_letters"></string>
 
     <!-- Title for the call log tab containing the list of all voicemails and calls
-         [CHAR LIMIT=15] -->
+         [CHAR LIMIT=30] -->
     <string name="call_log_all_title">All</string>
 
     <!-- Title for the call log tab containing the list of all missed calls only
-         [CHAR LIMIT=15] -->
+         [CHAR LIMIT=30] -->
     <string name="call_log_missed_title">Missed</string>
 
+    <!-- Title for the call log tab containing the list of all voicemail calls only
+         [CHAR LIMIT=30] -->
+    <string name="call_log_voicemail_title">Voicemail</string>
+
     <string name="tab_speed_dial">Speed Dial</string>
 
     <string name="tab_recents">Recents</string>
diff --git a/src/com/android/dialer/calllog/CallLogActivity.java b/src/com/android/dialer/calllog/CallLogActivity.java
index d1b3623..cdd0baf 100644
--- a/src/com/android/dialer/calllog/CallLogActivity.java
+++ b/src/com/android/dialer/calllog/CallLogActivity.java
@@ -19,26 +19,18 @@
 import android.app.Activity;
 import android.app.Fragment;
 import android.app.FragmentManager;
-import android.app.ActionBar.Tab;
-import android.app.ActionBar.TabListener;
-import android.app.FragmentTransaction;
 import android.content.Intent;
 import android.os.Bundle;
 import android.provider.CallLog.Calls;
 import android.support.v13.app.FragmentPagerAdapter;
-import android.support.v4.view.PagerTabStrip;
 import android.support.v4.view.ViewPager;
-import android.support.v4.view.ViewPager.OnPageChangeListener;
-import android.text.Spannable;
-import android.text.SpannableString;
-import android.text.style.TypefaceSpan;
 import android.view.Menu;
 import android.view.MenuInflater;
 import android.view.MenuItem;
 
 import com.android.dialer.DialtactsActivity;
 import com.android.dialer.R;
-import com.android.dialer.calllog.CallLogFragment;
+import com.android.dialer.list.ViewPagerTabs;
 
 public class CallLogActivity extends Activity {
 
@@ -46,11 +38,15 @@
     private ViewPagerAdapter mViewPagerAdapter;
     private CallLogFragment mAllCallsFragment;
     private CallLogFragment mMissedCallsFragment;
+    private CallLogFragment mVoicemailFragment;
+
+    private String[] mTabTitles;
 
     private static final int TAB_INDEX_ALL = 0;
     private static final int TAB_INDEX_MISSED = 1;
+    private static final int TAB_INDEX_VOICEMAIL = 2;
 
-    private static final int TAB_INDEX_COUNT = 2;
+    private static final int TAB_INDEX_COUNT = 3;
 
     public class ViewPagerAdapter extends FragmentPagerAdapter {
         public ViewPagerAdapter(FragmentManager fm) {
@@ -66,50 +62,24 @@
                 case TAB_INDEX_MISSED:
                     mMissedCallsFragment = new CallLogFragment(Calls.MISSED_TYPE);
                     return mMissedCallsFragment;
+                case TAB_INDEX_VOICEMAIL:
+                    mVoicemailFragment = new CallLogFragment(Calls.VOICEMAIL_TYPE);
+                    return mVoicemailFragment;
             }
             throw new IllegalStateException("No fragment at position " + position);
         }
 
         @Override
+        public CharSequence getPageTitle(int position) {
+            return mTabTitles[position];
+        }
+
+        @Override
         public int getCount() {
             return TAB_INDEX_COUNT;
         }
     }
 
-    private final TabListener mTabListener = new TabListener() {
-        @Override
-        public void onTabUnselected(Tab tab, FragmentTransaction ft) {
-        }
-
-        @Override
-        public void onTabSelected(Tab tab, FragmentTransaction ft) {
-            if (mViewPager != null && mViewPager.getCurrentItem() != tab.getPosition()) {
-                mViewPager.setCurrentItem(tab.getPosition(), true);
-            }
-        }
-
-        @Override
-        public void onTabReselected(Tab tab, FragmentTransaction ft) {
-        }
-    };
-
-    private final OnPageChangeListener mOnPageChangeListener = new OnPageChangeListener() {
-
-        @Override
-        public void onPageScrolled(
-                int position, float positionOffset, int positionOffsetPixels) {}
-
-        @Override
-        public void onPageSelected(int position) {
-            final ActionBar actionBar = getActionBar();
-            actionBar.selectTab(actionBar.getTabAt(position));
-        }
-
-        @Override
-        public void onPageScrollStateChanged(int arg0) {
-        }
-    };
-
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -118,30 +88,23 @@
         getWindow().setBackgroundDrawable(null);
 
         final ActionBar actionBar = getActionBar();
-        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
         actionBar.setDisplayShowHomeEnabled(true);
         actionBar.setDisplayHomeAsUpEnabled(true);
         actionBar.setDisplayShowTitleEnabled(true);
 
-        final Tab allTab = actionBar.newTab();
-        final String allTitle = getString(R.string.call_log_all_title);
-        allTab.setContentDescription(allTitle);
-        allTab.setText(allTitle);
-        allTab.setTabListener(mTabListener);
-        actionBar.addTab(allTab);
-
-        final Tab missedTab = actionBar.newTab();
-        final String missedTitle = getString(R.string.call_log_missed_title);
-        missedTab.setContentDescription(missedTitle);
-        missedTab.setText(missedTitle);
-        missedTab.setTabListener(mTabListener);
-        actionBar.addTab(missedTab);
+        mTabTitles = new String[TAB_INDEX_COUNT];
+        mTabTitles[0] = getString(R.string.call_log_all_title);
+        mTabTitles[1] = getString(R.string.call_log_missed_title);
+        mTabTitles[2] = getString(R.string.call_log_voicemail_title);
 
         mViewPager = (ViewPager) findViewById(R.id.call_log_pager);
+
         mViewPagerAdapter = new ViewPagerAdapter(getFragmentManager());
         mViewPager.setAdapter(mViewPagerAdapter);
-        mViewPager.setOnPageChangeListener(mOnPageChangeListener);
-        mViewPager.setOffscreenPageLimit(1);
+        mViewPager.setOffscreenPageLimit(2);
+
+        ViewPagerTabs tabs = (ViewPagerTabs) findViewById(R.id.viewpager_header);
+        tabs.setViewPager(mViewPager);
     }
 
     @Override
@@ -177,4 +140,4 @@
         }
         return super.onOptionsItemSelected(item);
     }
-}
+}
\ No newline at end of file
diff --git a/src/com/android/dialer/calllog/CallLogFragment.java b/src/com/android/dialer/calllog/CallLogFragment.java
index 9526f39..18f37f2 100644
--- a/src/com/android/dialer/calllog/CallLogFragment.java
+++ b/src/com/android/dialer/calllog/CallLogFragment.java
@@ -30,7 +30,6 @@
 import android.provider.CallLog.Calls;
 import android.provider.ContactsContract;
 import android.provider.VoicemailContract.Status;
-import android.telephony.PhoneNumberUtils;
 import android.telephony.TelephonyManager;
 import android.view.LayoutInflater;
 import android.view.View;
@@ -48,7 +47,6 @@
 import com.android.dialer.voicemail.VoicemailStatusHelper.StatusMessage;
 import com.android.dialer.voicemail.VoicemailStatusHelperImpl;
 import com.android.dialerbind.ObjectFactory;
-import com.android.internal.telephony.ITelephony;
 
 import java.util.List;
 
@@ -84,8 +82,6 @@
 
     private final Handler mHandler = new Handler();
 
-    private TelephonyManager mTelephonyManager;
-
     private class CustomContentObserver extends ContentObserver {
         public CustomContentObserver() {
             super(mHandler);
@@ -346,6 +342,9 @@
             case Calls.MISSED_TYPE:
                 message = getString(R.string.recentMissed_empty);
                 break;
+            case Calls.VOICEMAIL_TYPE:
+                message = getString(R.string.recentVoicemails_empty);
+                break;
             case CallLogQueryHandler.CALL_TYPE_ALL:
                 message = getString(R.string.recentCalls_empty);
                 break;
diff --git a/src/com/android/dialer/list/PhoneFavoritesTileAdapter.java b/src/com/android/dialer/list/PhoneFavoritesTileAdapter.java
index 1b5123d..0438fbd 100644
--- a/src/com/android/dialer/list/PhoneFavoritesTileAdapter.java
+++ b/src/com/android/dialer/list/PhoneFavoritesTileAdapter.java
@@ -826,7 +826,7 @@
                         MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY)
                         );
             }
-            setMeasuredDimension(width, height + getPaddingTop() + getPaddingBottom());
+            setMeasuredDimension(width, height);
         }
 
         /**
diff --git a/src/com/android/dialer/list/ViewPagerTabs.java b/src/com/android/dialer/list/ViewPagerTabs.java
index 45f468d..8019f76 100644
--- a/src/com/android/dialer/list/ViewPagerTabs.java
+++ b/src/com/android/dialer/list/ViewPagerTabs.java
@@ -6,6 +6,7 @@
 import android.support.v4.view.PagerAdapter;
 import android.support.v4.view.ViewPager;
 import android.util.AttributeSet;
+import android.util.TypedValue;
 import android.view.Gravity;
 import android.view.View;
 import android.widget.FrameLayout;
@@ -30,6 +31,7 @@
      * of the parent HorizontalScrollView.
      */
     LinearLayout mChild;
+    final int mTextStyle;
     final ColorStateList mTextColor;
     final int mTextSize;
     final boolean mTextAllCaps;
@@ -39,7 +41,7 @@
     private static final int TAB_SIDE_PADDING_IN_DPS = 10;
 
     private static final int[] ATTRS = new int[] {
-        android.R.attr.textAppearance,
+        android.R.attr.textStyle,
         android.R.attr.textSize,
         android.R.attr.textColor,
         android.R.attr.textAllCaps
@@ -92,6 +94,7 @@
         mSidePadding = (int) (getResources().getDisplayMetrics().density * TAB_SIDE_PADDING_IN_DPS);
 
         final TypedArray a = context.obtainStyledAttributes(attrs, ATTRS);
+        mTextStyle = a.getInt(0, 0);
         mTextSize = a.getDimensionPixelSize(1, 0);
         mTextColor = a.getColorStateList(2);
         mTextAllCaps = a.getBoolean(3, false);
@@ -99,6 +102,7 @@
         mChild = new LinearLayout(context);
         addView(mChild,
                 new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT));
+        a.recycle();
     }
 
     public void setViewPager(ViewPager viewPager) {
@@ -129,8 +133,11 @@
         textView.setOnLongClickListener(new OnTabLongClickListener(position));
 
         // Assign various text appearance related attributes to child views.
+        if (mTextStyle > 0) {
+            textView.setTypeface(textView.getTypeface(), mTextStyle);
+        }
         if (mTextSize > 0) {
-            textView.setTextSize(mTextSize);
+            textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, mTextSize);
         }
         if (mTextColor != null) {
             textView.setTextColor(mTextColor);