Merge N-MR1 to remote branch.

Change-Id: I77a4ce17c9c85189c03a36e6d34e1a4abf71220a
diff --git a/src/com/android/contacts/common/MoreContactUtils.java b/src/com/android/contacts/common/MoreContactUtils.java
index 77f2bda..7c6201c 100755
--- a/src/com/android/contacts/common/MoreContactUtils.java
+++ b/src/com/android/contacts/common/MoreContactUtils.java
@@ -29,6 +29,7 @@
 import android.database.Cursor;
 import android.database.sqlite.SQLiteException;
 import android.content.Intent;
+import android.graphics.drawable.Drawable;
 import android.graphics.Rect;
 import android.net.Uri;
 import android.os.RemoteException;
@@ -52,6 +53,7 @@
 
 import com.android.contacts.common.model.account.AccountType;
 import com.android.contacts.common.SimContactsConstants;
+import com.android.internal.telephony.OperatorSimInfo;
 
 import org.codeaurora.wrapper.UiccPhoneBookController_Wrapper;
 import java.util.ArrayList;
@@ -78,6 +80,8 @@
     private static final int EMAIL_USED_POS = 3;
     private static final int ANR_COUNT_POS = 4;
     private static final int ANR_USED_POS = 5;
+    public static final String SIM1_TYPE = "SIM1";
+    public static final String SIM2_TYPE = "SIM2";
 
     public static final String PREFERRED_SIM_ICON_INDEX = "preferred_sim_icon_index";
     public final static int[] IC_SIM_PICTURE = {
@@ -740,4 +744,72 @@
 
         return simFilter.toString();
     }
+
+    public static String getCustomOperatorLabel(Context context, int slotIndex) {
+        String customLabel = "";
+        OperatorSimInfo operatorSimInfo = new OperatorSimInfo(context);
+        boolean isCustomSimFeatureEnabled = operatorSimInfo.isOperatorFeatureEnabled();
+        if (isCustomSimFeatureEnabled) {
+            boolean isSimTypeOperator = operatorSimInfo.isSimTypeOperator(slotIndex);
+            if (isSimTypeOperator) {
+                customLabel = operatorSimInfo.getOperatorDisplayName();
+            } else {
+                int subId = MoreContactUtils.getActiveSubId(context, slotIndex);
+                customLabel = operatorSimInfo.getOperatorNameForSubId(subId);
+            }
+        }
+        return customLabel;
+    }
+
+    public static void setSimOperatorName(String accountName, TextView accountNameTextView,
+            Context context) {
+        String operatorSimLabel = "";
+        if (accountName != null) {
+            if (accountName.equals(SIM1_TYPE)) {
+                operatorSimLabel = getCustomOperatorLabel(context, SimContactsConstants.SLOT1);
+            } else if(accountName.equals(SIM2_TYPE)) {
+                operatorSimLabel = getCustomOperatorLabel(context, SimContactsConstants.SLOT2);
+            }
+        }
+        if (!TextUtils.isEmpty(operatorSimLabel)) {
+            accountNameTextView.setText(operatorSimLabel);
+        }
+    }
+
+    public static String getSimAccountName(Context context, String accountName) {
+        String operatorSimLabel = "";
+        if (accountName != null) {
+            if (accountName.equalsIgnoreCase(SIM1_TYPE)) {
+                operatorSimLabel = getCustomOperatorLabel(context, SimContactsConstants.SLOT1);
+            } else if(accountName.equalsIgnoreCase(SIM2_TYPE)) {
+                operatorSimLabel = getCustomOperatorLabel(context, SimContactsConstants.SLOT2);
+            }
+        }
+        return operatorSimLabel;
+    }
+
+    public static Drawable getDisplayIcon(Context context, String accountName) {
+        int slotIndex = -1;
+        OperatorSimInfo operatorSimInfo = new OperatorSimInfo(context);
+        boolean isCustomSimFeatureEnabled = operatorSimInfo.isOperatorFeatureEnabled();
+        if (isCustomSimFeatureEnabled) {
+            if (accountName != null && accountName.equals(SIM1_TYPE)) {
+                slotIndex = SimContactsConstants.SLOT1;
+            } else if (accountName != null && accountName.equals(SIM2_TYPE)) {
+                slotIndex = SimContactsConstants.SLOT2;
+            }
+            if (slotIndex >=0) {
+                boolean isSimTypeOperator = operatorSimInfo.isSimTypeOperator(slotIndex);
+                if (isSimTypeOperator) {
+                    return operatorSimInfo.getOperatorDrawable();
+                }
+                else {
+                    return operatorSimInfo.getGenericSimDrawable();
+                }
+            }
+            return null;
+        }
+        return null;
+    }
+
 }
diff --git a/src/com/android/contacts/common/interactions/ImportExportDialogFragment.java b/src/com/android/contacts/common/interactions/ImportExportDialogFragment.java
index c231ab2..880411f 100755
--- a/src/com/android/contacts/common/interactions/ImportExportDialogFragment.java
+++ b/src/com/android/contacts/common/interactions/ImportExportDialogFragment.java
@@ -949,8 +949,13 @@
             case R.string.export_to_sim: {
                 String[] items = new String[tm.getPhoneCount()];
                 for (int i = 0; i < items.length; i++) {
-                items[i] = getString(R.string.export_to_sim) + ": "
-                        + MoreContactUtils.getAcount(mActivity, i).name;
+                    items[i] = getString(R.string.export_to_sim) + ": "
+                            + MoreContactUtils.getAcount(mActivity, i).name;
+                    String customLabel = MoreContactUtils.
+                            getCustomOperatorLabel(mActivity.getApplicationContext(), i);
+                    if(!TextUtils.isEmpty(customLabel)) {
+                        items[i] = customLabel;
+                    }
                 }
                 mExportSub = SimContactsConstants.SLOT1;
                 ExportToSimSelectListener listener = new ExportToSimSelectListener();
@@ -972,6 +977,11 @@
         for (int i = 0; i < items.length; i++) {
             items[i] = getString(R.string.import_from_sim) + ": "
                     + MoreContactUtils.getAcount(mActivity, i).name;
+            String customLabel = MoreContactUtils.
+                    getCustomOperatorLabel(mActivity.getApplicationContext(), i);
+            if(!TextUtils.isEmpty(customLabel)) {
+                items[i] = customLabel;
+            }
         }
         new AlertDialog.Builder(mActivity)
                 .setTitle(R.string.import_from_sim)
diff --git a/src/com/android/contacts/common/list/AccountFilterActivity.java b/src/com/android/contacts/common/list/AccountFilterActivity.java
index 86d3df8..095238c 100644
--- a/src/com/android/contacts/common/list/AccountFilterActivity.java
+++ b/src/com/android/contacts/common/list/AccountFilterActivity.java
@@ -25,6 +25,7 @@
 import android.content.Loader;
 import android.graphics.drawable.Drawable;
 import android.os.Bundle;
+import android.text.TextUtils;
 import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.MenuItem;
@@ -34,6 +35,7 @@
 import android.widget.BaseAdapter;
 import android.widget.ListView;
 
+import com.android.contacts.common.MoreContactUtils;
 import com.android.contacts.common.R;
 import com.android.contacts.common.model.AccountTypeManager;
 import com.android.contacts.common.model.account.AccountType;
@@ -125,8 +127,18 @@
                 continue;
             }
             Drawable icon = accountType != null ? accountType.getDisplayIcon(context) : null;
+            String accountName = account.name;
+            String customLabel = MoreContactUtils.getSimAccountName(context, accountName);
+            if (!TextUtils.isEmpty(customLabel)) {
+                accountName = customLabel;
+            }
+            Drawable customIcon = accountType != null ? MoreContactUtils.
+                    getDisplayIcon(context, account.name) : null;
+            if (customIcon != null) {
+                icon = customIcon;
+            }
             accountFilters.add(ContactListFilter.createAccountFilter(
-                    account.type, account.name, account.dataSet, icon));
+                    account.type, accountName, account.dataSet, icon));
         }
 
         // Always show "All", even when there's no accounts.  (We may have local contacts)
diff --git a/src/com/android/contacts/common/preference/DefaultAccountPreference.java b/src/com/android/contacts/common/preference/DefaultAccountPreference.java
index 267d259..c32639a 100644
--- a/src/com/android/contacts/common/preference/DefaultAccountPreference.java
+++ b/src/com/android/contacts/common/preference/DefaultAccountPreference.java
@@ -19,12 +19,14 @@
 import android.app.AlertDialog;
 import android.content.Context;
 import android.preference.ListPreference;
+import android.text.TextUtils;
 import android.util.AttributeSet;
 
 import com.android.contacts.common.model.AccountTypeManager;
 import com.android.contacts.common.model.account.AccountType;
 import com.android.contacts.common.model.account.AccountTypeWithDataSet;
 import com.android.contacts.common.model.account.AccountWithDataSet;
+import com.android.contacts.common.MoreContactUtils;
 
 import java.util.HashMap;
 import java.util.List;
@@ -51,7 +53,12 @@
         final AccountTypeManager accountTypeManager = AccountTypeManager.getInstance(getContext());
         List<AccountWithDataSet> accounts = accountTypeManager.getAccounts(true);
         for (AccountWithDataSet account : accounts) {
-            mAccountMap.put(account.name, account);
+            String accountName = account.name;
+            String customLabel = MoreContactUtils.getSimAccountName(getContext(), accountName);
+            if(!TextUtils.isEmpty(customLabel)) {
+                accountName = customLabel;
+            }
+            mAccountMap.put(accountName, account);
         }
         final Set<String> accountNames = mAccountMap.keySet();
         final String[] accountNamesArray = accountNames.toArray(new String[accountNames.size()]);
@@ -74,7 +81,12 @@
 
     @Override
     public CharSequence getSummary() {
-        return mPreferences.getDefaultAccount();
+        String customLabel = MoreContactUtils.getSimAccountName(getContext(),
+                mPreferences.getDefaultAccount());
+        if(TextUtils.isEmpty(customLabel)) {
+            return mPreferences.getDefaultAccount();
+        }
+        return customLabel;
     }
 
     @Override
diff --git a/src/com/android/contacts/common/util/AccountsListAdapter.java b/src/com/android/contacts/common/util/AccountsListAdapter.java
index 65a4a77..d82fd2d 100644
--- a/src/com/android/contacts/common/util/AccountsListAdapter.java
+++ b/src/com/android/contacts/common/util/AccountsListAdapter.java
@@ -17,6 +17,7 @@
 package com.android.contacts.common.util;
 
 import android.content.Context;
+import android.graphics.drawable.Drawable;
 import android.text.TextUtils.TruncateAt;
 import android.view.LayoutInflater;
 import android.view.View;
@@ -26,6 +27,7 @@
 import android.widget.TextView;
 
 import com.android.contacts.common.R;
+import com.android.contacts.common.MoreContactUtils;
 import com.android.contacts.common.model.AccountTypeManager;
 import com.android.contacts.common.model.account.AccountType;
 import com.android.contacts.common.model.account.AccountWithDataSet;
@@ -123,6 +125,11 @@
 
         icon.setImageDrawable(accountType.getDisplayIcon(mContext));
 
+        MoreContactUtils.setSimOperatorName(account.name, text2, mContext);
+        Drawable customIcon = MoreContactUtils.getDisplayIcon(mContext, account.name);
+        if (customIcon != null) {
+            icon.setImageDrawable(customIcon);
+        }
         return resultView;
     }