Merge "Fix Dialer tests"
diff --git a/res/menu/dialpad_options.xml b/res/menu/dialpad_options.xml
index c1f2515..311a5ee 100644
--- a/res/menu/dialpad_options.xml
+++ b/res/menu/dialpad_options.xml
@@ -19,8 +19,8 @@
         android:title="@string/add_contact"
         android:showAsAction="withText" />
     <item
-        android:id="@+id/menu_select_sim"
-        android:title="@string/menu_select_sim"
+        android:id="@+id/menu_select_subscription"
+        android:title="@string/menu_select_subscription"
         android:showAsAction="withText" />
     <item
         android:id="@+id/menu_2s_pause"
diff --git a/res/menu/dialtacts_options.xml b/res/menu/dialtacts_options.xml
index d1c8854..558cbd8 100644
--- a/res/menu/dialtacts_options.xml
+++ b/res/menu/dialtacts_options.xml
@@ -20,8 +20,8 @@
         android:icon="@drawable/ic_menu_history_lt"
         android:title="@string/action_menu_call_history_description" />
     <item
-        android:id="@+id/menu_select_sim"
-        android:title="@string/menu_select_sim" />
+        android:id="@+id/menu_select_subscription"
+        android:title="@string/menu_select_subscription" />
     <item
         android:id="@+id/menu_import_export"
         android:title="@string/menu_import_export" />
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 7513b50..a6aecc1 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -327,7 +327,7 @@
     <string name="add_wait">Add wait</string>
 
     <!-- Menu item to select SIM card [CHAR LIMIT=30] -->
-    <string name="menu_select_sim">Select SIM card</string>
+    <string name="menu_select_subscription">Select Subscription</string>
 
     <!-- Menu item label for call settings [CHAR LIMIT=30] -->
     <string name="call_settings">Settings</string>
diff --git a/src/com/android/dialer/DialtactsActivity.java b/src/com/android/dialer/DialtactsActivity.java
index cbb2fe8..9fe636f 100644
--- a/src/com/android/dialer/DialtactsActivity.java
+++ b/src/com/android/dialer/DialtactsActivity.java
@@ -37,6 +37,7 @@
 import android.provider.ContactsContract.Intents;
 import android.speech.RecognizerIntent;
 import android.support.v4.view.ViewPager;
+import android.telecomm.Subscription;
 import android.telephony.TelephonyManager;
 import android.text.Editable;
 import android.text.TextUtils;
@@ -62,10 +63,11 @@
 import android.widget.Toast;
 
 import com.android.contacts.common.CallUtil;
+import com.android.contacts.common.SubscriptionManager;
 import com.android.contacts.common.activity.TransactionSafeActivity;
 import com.android.contacts.common.animation.AnimationListenerAdapter;
 import com.android.contacts.common.dialog.ClearFrequentsDialog;
-import com.android.contacts.common.dialog.SelectSIMDialogFragment;
+import com.android.contacts.common.dialog.SelectSubscriptionDialogFragment;
 import com.android.contacts.common.interactions.ImportExportDialogFragment;
 import com.android.contacts.common.list.OnPhoneNumberPickerActionListener;
 import com.android.contacts.common.widget.FloatingActionButtonController;
@@ -106,13 +108,15 @@
         OnDragDropListener,
         OnPhoneNumberPickerActionListener,
         PopupMenu.OnMenuItemClickListener,
-        SelectSIMDialogFragment.OnClickOkListener,
         ViewPager.OnPageChangeListener,
         ActionBarController.ActivityUi {
     private static final String TAG = "DialtactsActivity";
 
     public static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
 
+    /** Temporary flag for disabling subscription selection menu */
+    public static final boolean ENABLE_SUBSCRIPTION_SELECT = false;
+
     public static final String SHARED_PREFS_NAME = "com.android.dialer_preferences";
 
     /** Used to open Call Setting */
@@ -141,11 +145,6 @@
 
     private static final int ACTIVITY_REQUEST_CODE_VOICE_SEARCH = 1;
 
-    /**
-     * Constant to indicate there is only one service provider available.
-     */
-    private static final int NO_MULTI_SIM = -1;
-
     private FrameLayout parentLayout;
 
     /**
@@ -200,9 +199,9 @@
     private boolean mIsLandscape;
 
     /**
-     * Information about the currently selected SIM card.
+     * Information about the currently selected subscription.
      */
-    private int mCurrentSimCard = NO_MULTI_SIM;
+    private SubscriptionManager mSubscriptionManager = null;
 
     /**
      * The position of the currently selected tab in the attached {@link ListsFragment}.
@@ -370,7 +369,6 @@
         mActionBarController = new ActionBarController(this,
                 (SearchEditTextLayout) actionBar.getCustomView());
 
-
         SearchEditTextLayout searchEditTextLayout =
                 (SearchEditTextLayout) actionBar.getCustomView();
         searchEditTextLayout.setPreImeKeyListener(mSearchEditTextLayoutListener);
@@ -391,6 +389,11 @@
 
         mIsLandscape = getResources().getConfiguration().orientation
                 == Configuration.ORIENTATION_LANDSCAPE;
+
+        if (getTelephonyManager().getSubscriptions().size() > 1 && ENABLE_SUBSCRIPTION_SELECT) {
+            mSubscriptionManager = new SubscriptionManager(getTelephonyManager());
+        }
+
         final View floatingActionButtonContainer = findViewById(
                 R.id.floating_action_button_container);
         mFloatingActionButton = (ImageButton) findViewById(R.id.floating_action_button);
@@ -598,22 +601,14 @@
             case R.id.menu_call_settings:
                 handleMenuSettings();
                 return true;
-            case R.id.menu_select_sim:
-                SelectSIMDialogFragment.show(getFragmentManager(), mCurrentSimCard);
+            case R.id.menu_select_subscription:
+                SelectSubscriptionDialogFragment.show(getFragmentManager(), mSubscriptionManager);
                 return true;
         }
         return false;
     }
 
     @Override
-    public void passSimUpdate(int simId) {
-        mCurrentSimCard = simId;
-        if (mIsDialpadShown) {
-            mDialpadFragment.setSimCard(simId);
-        }
-    }
-
-    @Override
     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
         if (requestCode == ACTIVITY_REQUEST_CODE_VOICE_SEARCH) {
             if (resultCode == RESULT_OK) {
@@ -643,7 +638,7 @@
         }
         mIsDialpadShown = true;
         mDialpadFragment.setAnimate(animate);
-        mDialpadFragment.setSimCard(mCurrentSimCard);
+        mDialpadFragment.setSubscriptionManager(mSubscriptionManager);
 
         final FragmentTransaction ft = getFragmentManager().beginTransaction();
         ft.show(mDialpadFragment);
@@ -781,8 +776,8 @@
         final OptionsPopupMenu popupMenu = new OptionsPopupMenu(this, invoker);
         popupMenu.inflate(R.menu.dialtacts_options);
         final Menu menu = popupMenu.getMenu();
-        final MenuItem selectSim = menu.findItem(R.id.menu_select_sim);
-        selectSim.setVisible(mCurrentSimCard != NO_MULTI_SIM);
+        final MenuItem selectSubscription = menu.findItem(R.id.menu_select_subscription);
+        selectSubscription.setVisible(mSubscriptionManager != null);
         popupMenu.setOnMenuItemClickListener(this);
         return popupMenu;
     }
diff --git a/src/com/android/dialer/dialpad/DialpadFragment.java b/src/com/android/dialer/dialpad/DialpadFragment.java
index cc42755..509bd52 100644
--- a/src/com/android/dialer/dialpad/DialpadFragment.java
+++ b/src/com/android/dialer/dialpad/DialpadFragment.java
@@ -71,7 +71,8 @@
 
 import com.android.contacts.common.CallUtil;
 import com.android.contacts.common.GeoUtil;
-import com.android.contacts.common.dialog.SelectSIMDialogFragment;
+import com.android.contacts.common.SubscriptionManager;
+import com.android.contacts.common.dialog.SelectSubscriptionDialogFragment;
 import com.android.contacts.common.dialpad.DialpadKeyButton;
 import com.android.contacts.common.dialpad.DialpadView;
 import com.android.contacts.common.util.PhoneNumberFormatter;
@@ -99,15 +100,7 @@
         DialpadKeyButton.OnPressedListener {
     private static final String TAG = DialpadFragment.class.getSimpleName();
 
-    /**
-     * Constant to indicate there is only a single service provider available
-     */
-    private static final int NO_MULTI_SIM = -1;
-
-    /**
-     * Information about the currently selected SIM card.
-     */
-    private int mCurrentSimCard = NO_MULTI_SIM;
+    private static SubscriptionManager mSubscriptionManager;
 
     /**
      * This interface allows the DialpadFragment to tell its hosting Activity when and when not
@@ -858,9 +851,9 @@
             @Override
             public void show() {
                 final Menu menu = getMenu();
-                final MenuItem selectSim = menu.findItem(R.id.menu_select_sim);
+                final MenuItem selectSubscription = menu.findItem(R.id.menu_select_subscription);
                 final MenuItem sendMessage = menu.findItem(R.id.menu_send_message);
-                selectSim.setVisible(mCurrentSimCard != NO_MULTI_SIM);
+                selectSubscription.setVisible(mSubscriptionManager != null);
                 sendMessage.setVisible(mSmsPackageComponentName != null);
 
                 boolean enable = !isDigitsEmpty();
@@ -1445,8 +1438,8 @@
                 smsIntent.setComponent(mSmsPackageComponentName);
                 DialerUtils.startActivityWithErrorToast(getActivity(), smsIntent);
             }
-            case R.id.menu_select_sim:
-              SelectSIMDialogFragment.show(getFragmentManager(), mCurrentSimCard);
+            case R.id.menu_select_subscription:
+              SelectSubscriptionDialogFragment.show(getFragmentManager(), mSubscriptionManager);
               return true;
 
             default:
@@ -1618,8 +1611,8 @@
         return mAnimate;
     }
 
-    public void setSimCard(int simId) {
-        mCurrentSimCard = simId;
+    public void setSubscriptionManager(SubscriptionManager subscriptionManager) {
+        mSubscriptionManager = subscriptionManager;
     }
 
     public void setYFraction(float yFraction) {