Extract VoicemailProviderSettings from CallFeaturesSetting.

This private a class which can stand alone and does not need to
be intertwined with CallFeaturesSetting. Ideally I would like to
make it package visibility, but I don't want to move
CallFeaturesSetting right now.

+ Add new VoicemailProviderSettings class.
+ Give it private member variables with get-ters.
+ Add relevant constants to it.
+ Rename FWD_SETTINGS_DONT_TOUCH to NO_FORWARDING.
+ Cleanup code formatting.
+ Rename a bunch of things from *VoiceMail* to *Voicemail*.
+ Logic and functionality should be unchanged.

Bug: 17019623
Change-Id: Iffb948565407de13624f205d8383f2ec2eb5b906
diff --git a/src/com/android/phone/CallFeaturesSetting.java b/src/com/android/phone/CallFeaturesSetting.java
index 7c828f9..fff7153 100644
--- a/src/com/android/phone/CallFeaturesSetting.java
+++ b/src/com/android/phone/CallFeaturesSetting.java
@@ -62,6 +62,7 @@
 import com.android.internal.telephony.PhoneConstants;
 import com.android.phone.common.util.SettingsUtil;
 import com.android.phone.settings.AccountSelectionPreference;
+import com.android.phone.settings.VoicemailProviderSettings;
 import com.android.services.telephony.sip.SipUtil;
 
 import java.lang.String;
@@ -126,8 +127,6 @@
     private static final String UP_ACTIVITY_CLASS =
             "com.android.dialer.DialtactsActivity";
 
-    // Used to tell the saving logic to leave forwarding number as is
-    public static final CallForwardInfo[] FWD_SETTINGS_DONT_TOUCH = null;
     // Suffix appended to provider key for storing vm number
     public static final String VM_NUMBER_TAG = "#VMNumber";
     // Suffix appended to provider key for storing forwarding settings
@@ -272,90 +271,6 @@
         public Intent intent;
     }
 
-    /**
-     * Forwarding settings we are going to save.
-     */
-    private static final int [] FORWARDING_SETTINGS_REASONS = new int[] {
-        CommandsInterface.CF_REASON_UNCONDITIONAL,
-        CommandsInterface.CF_REASON_BUSY,
-        CommandsInterface.CF_REASON_NO_REPLY,
-        CommandsInterface.CF_REASON_NOT_REACHABLE
-    };
-
-    private class VoiceMailProviderSettings {
-        /**
-         * Constructs settings object, setting all conditional forwarding to the specified number
-         */
-        public VoiceMailProviderSettings(String voicemailNumber, String forwardingNumber,
-                int timeSeconds) {
-            this.voicemailNumber = voicemailNumber;
-            if (forwardingNumber == null || forwardingNumber.length() == 0) {
-                this.forwardingSettings = FWD_SETTINGS_DONT_TOUCH;
-            } else {
-                this.forwardingSettings = new CallForwardInfo[FORWARDING_SETTINGS_REASONS.length];
-                for (int i = 0; i < this.forwardingSettings.length; i++) {
-                    CallForwardInfo fi = new CallForwardInfo();
-                    this.forwardingSettings[i] = fi;
-                    fi.reason = FORWARDING_SETTINGS_REASONS[i];
-                    fi.status = (fi.reason == CommandsInterface.CF_REASON_UNCONDITIONAL) ? 0 : 1;
-                    fi.serviceClass = CommandsInterface.SERVICE_CLASS_VOICE;
-                    fi.toa = PhoneNumberUtils.TOA_International;
-                    fi.number = forwardingNumber;
-                    fi.timeSeconds = timeSeconds;
-                }
-            }
-        }
-
-        public VoiceMailProviderSettings(String voicemailNumber, CallForwardInfo[] infos) {
-            this.voicemailNumber = voicemailNumber;
-            this.forwardingSettings = infos;
-        }
-
-        @Override
-        public boolean equals(Object o) {
-            if (o == null) return false;
-            if (!(o instanceof VoiceMailProviderSettings)) return false;
-            final VoiceMailProviderSettings v = (VoiceMailProviderSettings)o;
-
-            return ((this.voicemailNumber == null &&
-                        v.voicemailNumber == null) ||
-                    this.voicemailNumber != null &&
-                        this.voicemailNumber.equals(v.voicemailNumber))
-                    &&
-                    forwardingSettingsEqual(this.forwardingSettings,
-                            v.forwardingSettings);
-        }
-
-        private boolean forwardingSettingsEqual(CallForwardInfo[] infos1,
-                CallForwardInfo[] infos2) {
-            if (infos1 == infos2) return true;
-            if (infos1 == null || infos2 == null) return false;
-            if (infos1.length != infos2.length) return false;
-            for (int i = 0; i < infos1.length; i++) {
-                CallForwardInfo i1 = infos1[i];
-                CallForwardInfo i2 = infos2[i];
-                if (i1.status != i2.status ||
-                    i1.reason != i2.reason ||
-                    i1.serviceClass != i2.serviceClass ||
-                    i1.toa != i2.toa ||
-                    i1.number != i2.number ||
-                    i1.timeSeconds != i2.timeSeconds) {
-                    return false;
-                }
-            }
-            return true;
-        }
-
-        @Override
-        public String toString() {
-            return voicemailNumber + ((forwardingSettings != null ) ? (", " +
-                    forwardingSettings.toString()) : "");
-        }
-
-        public String voicemailNumber;
-        public CallForwardInfo[] forwardingSettings;
-    }
-
     private SharedPreferences mPerProviderSavedVMNumbers;
 
     /**
@@ -562,7 +477,7 @@
             }
             updateVMPreferenceWidgets(newProviderKey);
 
-            final VoiceMailProviderSettings newProviderSettings =
+            final VoicemailProviderSettings newProviderSettings =
                     loadSettingsForVoiceMailProvider(newProviderKey);
 
             // If the user switches to a voice mail provider and we have a
@@ -655,11 +570,11 @@
                 }
 
                 showDialogIfForeground(VOICEMAIL_REVERTING_DIALOG);
-                final VoiceMailProviderSettings prevSettings =
+                final VoicemailProviderSettings prevSettings =
                         loadSettingsForVoiceMailProvider(mPreviousVMProviderKey);
                 if (prevSettings == null) {
                     // prevSettings never becomes null since it should be already loaded!
-                    Log.e(LOG_TAG, "VoiceMailProviderSettings for the key \""
+                    Log.e(LOG_TAG, "VoicemailProviderSettings for the key \""
                             + mPreviousVMProviderKey + "\" becomes null, which is unexpected.");
                     if (DBG) {
                         Log.e(LOG_TAG,
@@ -668,7 +583,7 @@
                     }
                 }
                 if (mVMChangeCompletedSuccessfully) {
-                    mNewVMNumber = prevSettings.voicemailNumber;
+                    mNewVMNumber = prevSettings.getVoicemailNumber();
                     Log.i(LOG_TAG, "VM change is already completed successfully."
                             + "Have to revert VM back to " + mNewVMNumber + " again.");
                     mPhone.setVoiceMailNumber(
@@ -678,8 +593,7 @@
                 }
                 if (mFwdChangesRequireRollback) {
                     Log.i(LOG_TAG, "Requested to rollback Fwd changes.");
-                    final CallForwardInfo[] prevFwdSettings =
-                        prevSettings.forwardingSettings;
+                    final CallForwardInfo[] prevFwdSettings = prevSettings.getForwardingSettings();
                     if (prevFwdSettings != null) {
                         Map<Integer, AsyncResult> results =
                             mForwardingChangeResults;
@@ -790,7 +704,7 @@
             if (DBG) log("onActivityResult: vm provider cfg result " +
                     (fwdNum != null ? "has" : " does not have") + " forwarding number");
             saveVoiceMailAndForwardingNumber(getCurrentVoicemailProviderKey(),
-                    new VoiceMailProviderSettings(vmNum, fwdNum, fwdNumTime));
+                    new VoicemailProviderSettings(vmNum, fwdNum, fwdNumTime));
             return;
         }
 
@@ -829,8 +743,8 @@
 
         saveVoiceMailAndForwardingNumber(
                 getCurrentVoicemailProviderKey(),
-                new VoiceMailProviderSettings(mSubMenuVoicemailSettings.getPhoneNumber(),
-                        FWD_SETTINGS_DONT_TOUCH)
+                new VoicemailProviderSettings(mSubMenuVoicemailSettings.getPhoneNumber(),
+                        VoicemailProviderSettings.NO_FORWARDING)
         );
     }
 
@@ -875,28 +789,29 @@
         }
     }
 
-    private void saveVoiceMailAndForwardingNumber(String key,
-            VoiceMailProviderSettings newSettings) {
+    private void saveVoiceMailAndForwardingNumber(
+            String key, VoicemailProviderSettings newSettings) {
         if (DBG) log("saveVoiceMailAndForwardingNumber: " + newSettings.toString());
-        mNewVMNumber = newSettings.voicemailNumber;
+        mNewVMNumber = newSettings.getVoicemailNumber();
         // empty vm number == clearing the vm number ?
         if (mNewVMNumber == null) {
             mNewVMNumber = "";
         }
 
-        mNewFwdSettings = newSettings.forwardingSettings;
-        if (DBG) log("newFwdNumber " +
-                String.valueOf((mNewFwdSettings != null ? mNewFwdSettings.length : 0))
+        mNewFwdSettings = newSettings.getForwardingSettings();
+        if (DBG) log("newFwdNumber "
+                + String.valueOf((mNewFwdSettings != null ? mNewFwdSettings.length : 0))
                 + " settings");
 
         // No fwd settings on CDMA
         if (mPhone.getPhoneType() == PhoneConstants.PHONE_TYPE_CDMA) {
             if (DBG) log("ignoring forwarding setting since this is CDMA phone");
-            mNewFwdSettings = FWD_SETTINGS_DONT_TOUCH;
+            mNewFwdSettings = VoicemailProviderSettings.NO_FORWARDING;
         }
 
-        //throw a warning if the vm is the same and we do not touch forwarding.
-        if (mNewVMNumber.equals(mOldVmNumber) && mNewFwdSettings == FWD_SETTINGS_DONT_TOUCH) {
+        //Throw a warning if the voicemail is the same and we did not change forwarding.
+        if (mNewVMNumber.equals(mOldVmNumber)
+                && mNewFwdSettings == VoicemailProviderSettings.NO_FORWARDING) {
             showVMDialog(MSG_VM_NOCHANGE);
             return;
         }
@@ -909,10 +824,11 @@
             mReadingSettingsForDefaultProvider =
                     mPreviousVMProviderKey.equals(DEFAULT_VM_PROVIDER_KEY);
             if (DBG) log("Reading current forwarding settings");
-            mForwardingReadResults = new CallForwardInfo[FORWARDING_SETTINGS_REASONS.length];
-            for (int i = 0; i < FORWARDING_SETTINGS_REASONS.length; i++) {
-                mForwardingReadResults[i] = null;
-                mPhone.getCallForwardingOption(FORWARDING_SETTINGS_REASONS[i],
+            int numSettingsReasons = VoicemailProviderSettings.FORWARDING_SETTINGS_REASONS.length;
+            mForwardingReadResults = new CallForwardInfo[numSettingsReasons];
+            for (int i = 0; i < mForwardingReadResults.length; i++) {
+                mPhone.getCallForwardingOption(
+                        VoicemailProviderSettings.FORWARDING_SETTINGS_REASONS[i],
                         mGetOptionComplete.obtainMessage(EVENT_FORWARDING_GET_COMPLETED, i, 0));
             }
             showDialogIfForeground(VOICEMAIL_FWD_READING_DIALOG);
@@ -978,7 +894,7 @@
             if (DBG) Log.d(LOG_TAG, "Creating default info for " + idx);
             fi = new CallForwardInfo();
             fi.status = 0;
-            fi.reason = FORWARDING_SETTINGS_REASONS[idx];
+            fi.reason = VoicemailProviderSettings.FORWARDING_SETTINGS_REASONS[idx];
             fi.serviceClass = CommandsInterface.SERVICE_CLASS_VOICE;
         } else {
             // if there is not a forwarding number, ensure the entry is set to "not active."
@@ -1003,7 +919,7 @@
             dismissDialogSafely(VOICEMAIL_FWD_READING_DIALOG);
             if (mReadingSettingsForDefaultProvider) {
                 maybeSaveSettingsForVoicemailProvider(DEFAULT_VM_PROVIDER_KEY,
-                        new VoiceMailProviderSettings(this.mOldVmNumber,
+                        new VoicemailProviderSettings(this.mOldVmNumber,
                                 mForwardingReadResults));
                 mReadingSettingsForDefaultProvider = false;
             }
@@ -1049,7 +965,7 @@
     private void saveVoiceMailAndForwardingNumberStage2() {
         mForwardingChangeResults = null;
         mVoicemailChangeResult = null;
-        if (mNewFwdSettings != FWD_SETTINGS_DONT_TOUCH) {
+        if (mNewFwdSettings != VoicemailProviderSettings.NO_FORWARDING) {
             resetForwardingChangeState();
             for (int i = 0; i < mNewFwdSettings.length; i++) {
                 CallForwardInfo fi = mNewFwdSettings[i];
@@ -1929,11 +1845,11 @@
      * Later on these will be used when the user switches a provider.
      */
     private void maybeSaveSettingsForVoicemailProvider(String key,
-            VoiceMailProviderSettings newSettings) {
+            VoicemailProviderSettings newSettings) {
         if (mVoicemailProviders == null) {
             return;
         }
-        final VoiceMailProviderSettings curSettings = loadSettingsForVoiceMailProvider(key);
+        final VoicemailProviderSettings curSettings = loadSettingsForVoiceMailProvider(key);
         if (newSettings.equals(curSettings)) {
             if (DBG) {
                 log("maybeSaveSettingsForVoicemailProvider:"
@@ -1943,10 +1859,10 @@
         }
         if (DBG) log("Saving settings for " + key + ": " + newSettings.toString());
         Editor editor = mPerProviderSavedVMNumbers.edit();
-        editor.putString(key + VM_NUMBER_TAG, newSettings.voicemailNumber);
+        editor.putString(key + VM_NUMBER_TAG, newSettings.getVoicemailNumber());
         String fwdKey = key + FWD_SETTINGS_TAG;
-        CallForwardInfo[] s = newSettings.forwardingSettings;
-        if (s != FWD_SETTINGS_DONT_TOUCH) {
+        CallForwardInfo[] s = newSettings.getForwardingSettings();
+        if (s != VoicemailProviderSettings.NO_FORWARDING) {
             editor.putInt(fwdKey + FWD_SETTINGS_LENGTH_TAG, s.length);
             for (int i = 0; i < s.length; i++) {
                 final String settingKey = fwdKey + FWD_SETTING_TAG + String.valueOf(i);
@@ -1970,7 +1886,7 @@
      * and forwarding number to the stored one. Otherwise we will bring up provider's configuration
      * UI.
      */
-    private VoiceMailProviderSettings loadSettingsForVoiceMailProvider(String key) {
+    private VoicemailProviderSettings loadSettingsForVoiceMailProvider(String key) {
         final String vmNumberSetting = mPerProviderSavedVMNumbers.getString(key + VM_NUMBER_TAG,
                 null);
         if (vmNumberSetting == null) {
@@ -1979,7 +1895,7 @@
             return null;
         }
 
-        CallForwardInfo[] cfi = FWD_SETTINGS_DONT_TOUCH;
+        CallForwardInfo[] cfi = VoicemailProviderSettings.NO_FORWARDING;
         String fwdKey = key + FWD_SETTINGS_TAG;
         final int fwdLen = mPerProviderSavedVMNumbers.getInt(fwdKey + FWD_SETTINGS_LENGTH_TAG, 0);
         if (fwdLen > 0) {
@@ -2001,7 +1917,7 @@
             }
         }
 
-        VoiceMailProviderSettings settings =  new VoiceMailProviderSettings(vmNumberSetting, cfi);
+        VoicemailProviderSettings settings =  new VoicemailProviderSettings(vmNumberSetting, cfi);
         if (DBG) log("Loaded settings for " + key + ": " + settings.toString());
         return settings;
     }