Merge "Add Carrier Config to hide "Network default" option in Caller ID setting" am: a01db49f14
am: 3b052ad236

Change-Id: I073329f33d65c7f4efc8fe01fd795cc1ecc01be7
diff --git a/src/com/android/phone/CLIRListPreference.java b/src/com/android/phone/CLIRListPreference.java
old mode 100644
new mode 100755
index b3ff171..5c6132b
--- a/src/com/android/phone/CLIRListPreference.java
+++ b/src/com/android/phone/CLIRListPreference.java
@@ -7,6 +7,7 @@
 import android.os.Handler;
 import android.os.Message;
 import android.preference.ListPreference;
+import android.telephony.CarrierConfigManager;
 import android.util.AttributeSet;
 import android.util.Log;
 
@@ -26,6 +27,12 @@
     private Phone mPhone;
     private TimeConsumingPreferenceListener mTcpListener;
 
+    private final String[] mEntries = getContext().getResources()
+            .getStringArray(R.array.clir_display_values);
+    private final String[] mValues = getContext().getResources()
+            .getStringArray(R.array.clir_values);
+    private boolean mConfigSupportNetworkDefault;
+
     int clirArray[];
 
     public CLIRListPreference(Context context, AttributeSet attrs) {
@@ -40,7 +47,7 @@
     protected void onDialogClosed(boolean positiveResult) {
         super.onDialogClosed(positiveResult);
 
-        mPhone.setOutgoingCallerIdDisplay(findIndexOfValue(getValue()),
+        mPhone.setOutgoingCallerIdDisplay(convertValueToCLIRMode(getValue()),
                 mHandler.obtainMessage(MyHandler.MESSAGE_SET_CLIR));
         if (mTcpListener != null) {
             mTcpListener.onStarted(this, false);
@@ -51,6 +58,19 @@
             TimeConsumingPreferenceListener listener, boolean skipReading, Phone phone) {
         mPhone = phone;
         mTcpListener = listener;
+        mConfigSupportNetworkDefault = PhoneGlobals.getInstance()
+                .getCarrierConfigForSubId(mPhone.getSubId())
+                .getBoolean(CarrierConfigManager.KEY_SUPPORT_CLIR_NETWORK_DEFAULT_BOOL);
+        // When "Network default" is not supported, create entries with remaining two values.
+        if (!mConfigSupportNetworkDefault) {
+            String[] noNetworkDefaultEntries = {mEntries[CommandsInterface.CLIR_INVOCATION],
+                    mEntries[CommandsInterface.CLIR_SUPPRESSION]};
+            String[] noNetworkDefaultValues = {mValues[CommandsInterface.CLIR_INVOCATION],
+                    mValues[CommandsInterface.CLIR_SUPPRESSION]};
+            setEntries(noNetworkDefaultEntries);
+            setEntryValues(noNetworkDefaultValues);
+        }
+
         if (!skipReading) {
             Log.i(LOG_TAG, "init: requesting CLIR");
             mPhone.getOutgoingCallerIdDisplay(mHandler.obtainMessage(MyHandler.MESSAGE_GET_CLIR,
@@ -92,7 +112,10 @@
                 value = CommandsInterface.CLIR_DEFAULT;
                 break;
         }
-        setValueIndex(value);
+        value = (!mConfigSupportNetworkDefault && value == CommandsInterface.CLIR_DEFAULT)
+                ? CommandsInterface.CLIR_SUPPRESSION : value;
+
+        setValue(mValues[value]);
 
         // set the string summary to reflect the value
         int summary = R.string.sum_default_caller_id;
@@ -110,6 +133,25 @@
         setSummary(summary);
     }
 
+    /**
+     * When "Network default" is hidden, UI list index(0-1) doesn't match CLIR Mode(0-2 for Modem).
+     * In order to send request to Modem, it is necessary to convert value to CLIR Mode.
+     * ("Hide" = CommandsInterface.CLIR_INVOCATION, "Show" = CommandsInterface.CLIR_SUPPRESSION)
+     *
+     * @param String of entry value.
+     * @return "CommandInterface.CLIR_*" for Modem.
+     */
+    private int convertValueToCLIRMode(String value) {
+        if (mValues[CommandsInterface.CLIR_INVOCATION].equals(value)) {
+            return CommandsInterface.CLIR_INVOCATION;
+        } else if (mValues[CommandsInterface.CLIR_SUPPRESSION].equals(value)) {
+            return CommandsInterface.CLIR_SUPPRESSION;
+        } else {
+            return mConfigSupportNetworkDefault ? CommandsInterface.CLIR_DEFAULT :
+                    CommandsInterface.CLIR_SUPPRESSION;
+        }
+    }
+
     private class MyHandler extends Handler {
         static final int MESSAGE_GET_CLIR = 0;
         static final int MESSAGE_SET_CLIR = 1;