Merge "Implement setVisualVoicemailEnabled()" into nyc-mr1-dev
diff --git a/src/com/android/phone/PhoneInterfaceManager.java b/src/com/android/phone/PhoneInterfaceManager.java
index 9b7132b..45bea8a 100644
--- a/src/com/android/phone/PhoneInterfaceManager.java
+++ b/src/com/android/phone/PhoneInterfaceManager.java
@@ -61,7 +61,6 @@
 import android.util.Log;
 import android.util.Pair;
 import android.util.Slog;
-
 import com.android.ims.ImsManager;
 import com.android.internal.telephony.CallManager;
 import com.android.internal.telephony.CellNetworkScanResult;
@@ -83,8 +82,8 @@
 import com.android.internal.telephony.uicc.UiccCard;
 import com.android.internal.telephony.uicc.UiccController;
 import com.android.internal.util.HexDump;
+import com.android.phone.settings.VisualVoicemailSettingsUtil;
 import com.android.phone.settings.VoicemailNotificationSettingsUtil;
-
 import java.io.FileDescriptor;
 import java.io.PrintWriter;
 import java.util.ArrayList;
@@ -1900,6 +1899,27 @@
     }
 
     @Override
+    public void setVisualVoicemailEnabled(String callingPackage,
+            PhoneAccountHandle phoneAccountHandle, boolean enabled) {
+        mAppOps.checkPackage(Binder.getCallingUid(), callingPackage);
+        if (!TextUtils.equals(callingPackage,
+                TelecomManager.from(mPhone.getContext()).getDefaultDialerPackage())) {
+            enforceModifyPermissionOrCarrierPrivilege(
+                    PhoneUtils.getSubIdForPhoneAccountHandle(phoneAccountHandle));
+        }
+        VisualVoicemailSettingsUtil.setEnabled(mPhone.getContext(), phoneAccountHandle, enabled);
+    }
+
+    @Override
+    public boolean isVisualVoicemailEnabled(String callingPackage,
+            PhoneAccountHandle phoneAccountHandle) {
+        if (!canReadPhoneState(callingPackage, "isVisualVoicemailEnabled")) {
+            return false;
+        }
+        return VisualVoicemailSettingsUtil.isEnabled(mPhone.getContext(), phoneAccountHandle);
+    }
+
+    @Override
     public void enableVisualVoicemailSmsFilter(String callingPackage, int subId,
             VisualVoicemailSmsFilterSettings settings) {
         mAppOps.checkPackage(Binder.getCallingUid(), callingPackage);
diff --git a/src/com/android/phone/settings/VisualVoicemailSettingsUtil.java b/src/com/android/phone/settings/VisualVoicemailSettingsUtil.java
index c38b595..b556aa1 100644
--- a/src/com/android/phone/settings/VisualVoicemailSettingsUtil.java
+++ b/src/com/android/phone/settings/VisualVoicemailSettingsUtil.java
@@ -17,12 +17,12 @@
 
 import android.content.Context;
 import android.telecom.PhoneAccountHandle;
-
 import com.android.internal.telephony.Phone;
 import com.android.phone.PhoneUtils;
 import com.android.phone.R;
 import com.android.phone.vvm.omtp.OmtpVvmCarrierConfigHelper;
 import com.android.phone.vvm.omtp.VisualVoicemailPreferences;
+import com.android.phone.vvm.omtp.sync.OmtpVvmSourceManager;
 import com.android.phone.vvm.omtp.utils.PhoneAccountHandleConverter;
 
 /**
@@ -38,6 +38,14 @@
         new VisualVoicemailPreferences(context, phoneAccount).edit()
                 .putBoolean(IS_ENABLED_KEY, isEnabled)
                 .apply();
+        OmtpVvmCarrierConfigHelper config = new OmtpVvmCarrierConfigHelper(context, phoneAccount);
+        if (isEnabled) {
+            OmtpVvmSourceManager.getInstance(context).addPhoneStateListener(phoneAccount);
+            config.startActivation();
+        } else {
+            OmtpVvmSourceManager.getInstance(context).removeSource(phoneAccount);
+            config.startDeactivation();
+        }
     }
 
     public static boolean isEnabled(Context context,
diff --git a/src/com/android/phone/settings/VoicemailSettingsActivity.java b/src/com/android/phone/settings/VoicemailSettingsActivity.java
index af4f2ad..92e1b5f 100644
--- a/src/com/android/phone/settings/VoicemailSettingsActivity.java
+++ b/src/com/android/phone/settings/VoicemailSettingsActivity.java
@@ -37,7 +37,6 @@
 import android.util.Log;
 import android.view.MenuItem;
 import android.widget.ListAdapter;
-
 import com.android.internal.telephony.CallForwardInfo;
 import com.android.internal.telephony.Phone;
 import com.android.internal.telephony.PhoneConstants;
@@ -47,8 +46,6 @@
 import com.android.phone.R;
 import com.android.phone.SubscriptionInfoHelper;
 import com.android.phone.vvm.omtp.OmtpVvmCarrierConfigHelper;
-import com.android.phone.vvm.omtp.sync.OmtpVvmSourceManager;
-
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -414,12 +411,8 @@
                     .setEnabled(mPhone.getContext(), handle, isEnabled);
             PreferenceScreen prefSet = getPreferenceScreen();
             if (isEnabled) {
-                OmtpVvmSourceManager.getInstance(mPhone.getContext()).addPhoneStateListener(mPhone);
-                mOmtpVvmCarrierConfigHelper.startActivation();
                 prefSet.addPreference(mVoicemailChangePinPreference);
             } else {
-                OmtpVvmSourceManager.getInstance(mPhone.getContext()).removeSource(mPhone);
-                mOmtpVvmCarrierConfigHelper.startDeactivation();
                 prefSet.removePreference(mVoicemailChangePinPreference);
             }
         }
diff --git a/src/com/android/phone/vvm/omtp/ActivationTask.java b/src/com/android/phone/vvm/omtp/ActivationTask.java
index 89cb149..9c58b95 100644
--- a/src/com/android/phone/vvm/omtp/ActivationTask.java
+++ b/src/com/android/phone/vvm/omtp/ActivationTask.java
@@ -154,7 +154,8 @@
                 // The account has been activated on this device before. Pretend it is already
                 // activated. If there are any activation error it will overwrite this status.
                 VoicemailStatus.edit(getContext(), phoneAccountHandle)
-                        .setConfigurationState(Status.CONFIGURATION_STATE_OK);
+                        .setConfigurationState(Status.CONFIGURATION_STATE_OK)
+                        .apply();
             }
 
         }