am 5e06d94a: Merge "Add extra to jump to DialtactsActivity tab." into mnc-dev

* commit '5e06d94af135fe5a5b971601a7e6d4a8f420e4d0':
  Add extra to jump to DialtactsActivity tab.
diff --git a/src/com/android/dialer/DialtactsActivity.java b/src/com/android/dialer/DialtactsActivity.java
index fc0f1fb..b77e910 100644
--- a/src/com/android/dialer/DialtactsActivity.java
+++ b/src/com/android/dialer/DialtactsActivity.java
@@ -133,6 +133,7 @@
      * Just for backward compatibility. Should behave as same as {@link Intent#ACTION_DIAL}.
      */
     private static final String ACTION_TOUCH_DIALER = "com.android.phone.action.TOUCH_DIALER";
+    public static final String EXTRA_SHOW_TAB = "EXTRA_SHOW_TAB";
 
     private static final int ACTIVITY_REQUEST_CODE_VOICE_SEARCH = 1;
 
@@ -539,6 +540,7 @@
             }
             mIsRestarting = false;
         }
+
         prepareVoiceSearchButton();
         mDialerDatabaseHelper.startSmartDialUpdateThread();
         mFloatingActionButtonController.align(getFabAlignment(), false /* animate */);
@@ -903,6 +905,11 @@
         mStateSaved = false;
         displayFragment(newIntent);
 
+        if (newIntent.hasExtra(EXTRA_SHOW_TAB)) {
+            mListsFragment.showTab(
+                    getIntent().getIntExtra(EXTRA_SHOW_TAB, mListsFragment.TAB_INDEX_SPEED_DIAL));
+        }
+
         invalidateOptionsMenu();
     }
 
diff --git a/src/com/android/dialer/calllog/DefaultVoicemailNotifier.java b/src/com/android/dialer/calllog/DefaultVoicemailNotifier.java
index 3c9fa1d..d43238a 100644
--- a/src/com/android/dialer/calllog/DefaultVoicemailNotifier.java
+++ b/src/com/android/dialer/calllog/DefaultVoicemailNotifier.java
@@ -32,8 +32,10 @@
 import android.util.Log;
 
 import com.android.common.io.MoreCloseables;
+import com.android.dialer.DialtactsActivity;
 import com.android.dialer.R;
 import com.android.dialer.calllog.PhoneAccountUtils;
+import com.android.dialer.list.ListsFragment;
 import com.google.common.collect.Maps;
 
 import java.util.Map;
@@ -172,10 +174,10 @@
         final Intent contentIntent;
         // Open the call log.
         // TODO: Send to recents tab in Dialer instead.
-        contentIntent = new Intent(Intent.ACTION_VIEW, Calls.CONTENT_URI);
-        contentIntent.putExtra(Calls.EXTRA_CALL_TYPE_FILTER, Calls.VOICEMAIL_TYPE);
-        notificationBuilder.setContentIntent(
-                PendingIntent.getActivity(mContext, 0, contentIntent, 0));
+        contentIntent = new Intent(mContext, DialtactsActivity.class);
+        contentIntent.putExtra(DialtactsActivity.EXTRA_SHOW_TAB, ListsFragment.TAB_INDEX_VOICEMAIL);
+        notificationBuilder.setContentIntent(PendingIntent.getActivity(
+                mContext, 0, contentIntent, PendingIntent.FLAG_UPDATE_CURRENT));
 
         // The text to show in the ticker, describing the new event.
         if (callToNotify != null) {
diff --git a/src/com/android/dialer/list/ListsFragment.java b/src/com/android/dialer/list/ListsFragment.java
index 0e3df52..e45da0c 100644
--- a/src/com/android/dialer/list/ListsFragment.java
+++ b/src/com/android/dialer/list/ListsFragment.java
@@ -84,6 +84,8 @@
 
     private SharedPreferences mPrefs;
     private boolean mHasActiveVoicemailProvider;
+    private boolean mHasFetchedVoicemailStatus;
+    private boolean mShowVoicemailTabAfterVoicemailStatusIsFetched;
 
     private VoicemailStatusHelper mVoicemailStatusHelper;
     private ArrayList<OnPageChangeListener> mOnPageChangeListeners =
@@ -167,6 +169,7 @@
         Trace.endSection();
 
         mVoicemailStatusHelper = new VoicemailStatusHelperImpl();
+        mHasFetchedVoicemailStatus = false;
 
         mPrefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
         mHasActiveVoicemailProvider = mPrefs.getBoolean(
@@ -204,7 +207,7 @@
         mViewPager.setAdapter(mViewPagerAdapter);
         mViewPager.setOffscreenPageLimit(TAB_COUNT_WITH_VOICEMAIL - 1);
         mViewPager.setOnPageChangeListener(this);
-        mViewPager.setCurrentItem(getRtlPosition(TAB_INDEX_SPEED_DIAL));
+        showTab(TAB_INDEX_SPEED_DIAL);
 
         mTabTitles = new String[TAB_COUNT_WITH_VOICEMAIL];
         mTabTitles[TAB_INDEX_SPEED_DIAL] = getResources().getString(R.string.tab_speed_dial);
@@ -237,6 +240,24 @@
         }
     }
 
+    /**
+     * Shows the tab with the specified index. If the voicemail tab index is specified, but the
+     * voicemail status hasn't been fetched, it will try to show the tab after the voicemail status
+     * has been fetched.
+     */
+    public void showTab(int index) {
+        if (index == TAB_INDEX_VOICEMAIL) {
+            if (mHasActiveVoicemailProvider) {
+                mViewPager.setCurrentItem(getRtlPosition(TAB_INDEX_VOICEMAIL));
+            } else if (!mHasFetchedVoicemailStatus) {
+                // Try to show the voicemail tab after the voicemail status returns.
+                mShowVoicemailTabAfterVoicemailStatusIsFetched = true;
+            }
+        } else {
+            mViewPager.setCurrentItem(getRtlPosition(index));
+        }
+    }
+
     @Override
     public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
         mTabIndex = getRtlPosition(position);
@@ -252,6 +273,9 @@
     public void onPageSelected(int position) {
         mTabIndex = getRtlPosition(position);
 
+        // Show the tab which has been selected instead.
+        mShowVoicemailTabAfterVoicemailStatusIsFetched = false;
+
         final int count = mOnPageChangeListeners.size();
         for (int i = 0; i < count; i++) {
             mOnPageChangeListeners.get(i).onPageSelected(position);
@@ -269,6 +293,8 @@
 
     @Override
     public void onVoicemailStatusFetched(Cursor statusCursor) {
+        mHasFetchedVoicemailStatus = true;
+
         if (getActivity() == null || getActivity().isFinishing()) {
             return;
         }
@@ -285,6 +311,11 @@
                     .putBoolean(PREF_KEY_HAS_ACTIVE_VOICEMAIL_PROVIDER, hasActiveVoicemailProvider)
                     .commit();
         }
+
+        if (mHasActiveVoicemailProvider && mShowVoicemailTabAfterVoicemailStatusIsFetched) {
+            mShowVoicemailTabAfterVoicemailStatusIsFetched = false;
+            showTab(TAB_INDEX_VOICEMAIL);
+        }
     }
 
     @Override