Merge "Implement VVM Task Scheduling" into nyc-mr1-dev
diff --git a/src/com/android/phone/vvm/omtp/OmtpVvmCarrierConfigHelper.java b/src/com/android/phone/vvm/omtp/OmtpVvmCarrierConfigHelper.java
index 096c17d..04fb8e5 100644
--- a/src/com/android/phone/vvm/omtp/OmtpVvmCarrierConfigHelper.java
+++ b/src/com/android/phone/vvm/omtp/OmtpVvmCarrierConfigHelper.java
@@ -328,6 +328,13 @@
         }
     }
 
+    public boolean supportsProvisioning() {
+        if (mProtocol != null) {
+            return mProtocol.supportsProvisioning();
+        }
+        return false;
+    }
+
     public void startProvisioning(PhoneAccountHandle phone, StatusMessage message, Bundle data) {
         if (mProtocol != null) {
             mProtocol.startProvisioning(phone, this, message, data);
@@ -410,4 +417,5 @@
         }
         return defaultValue;
     }
+
 }
\ No newline at end of file
diff --git a/src/com/android/phone/vvm/omtp/protocol/VisualVoicemailProtocol.java b/src/com/android/phone/vvm/omtp/protocol/VisualVoicemailProtocol.java
index be2a77f..4ceb88b 100644
--- a/src/com/android/phone/vvm/omtp/protocol/VisualVoicemailProtocol.java
+++ b/src/com/android/phone/vvm/omtp/protocol/VisualVoicemailProtocol.java
@@ -43,6 +43,10 @@
         }
     }
 
+    public boolean supportsProvisioning() {
+        return false;
+    }
+
     public void startProvisioning(PhoneAccountHandle handle, OmtpVvmCarrierConfigHelper config,
             StatusMessage message, Bundle data) {
         // Do nothing
diff --git a/src/com/android/phone/vvm/omtp/protocol/Vvm3Protocol.java b/src/com/android/phone/vvm/omtp/protocol/Vvm3Protocol.java
index 95a8a32..d15786f 100644
--- a/src/com/android/phone/vvm/omtp/protocol/Vvm3Protocol.java
+++ b/src/com/android/phone/vvm/omtp/protocol/Vvm3Protocol.java
@@ -80,6 +80,11 @@
     }
 
     @Override
+    public boolean supportsProvisioning() {
+        return true;
+    }
+
+    @Override
     public void startProvisioning(PhoneAccountHandle phoneAccountHandle,
             OmtpVvmCarrierConfigHelper config, StatusMessage message, Bundle data) {
         VvmLog.i(TAG, "start vvm3 provisioning");
diff --git a/src/com/android/phone/vvm/omtp/sms/OmtpMessageReceiver.java b/src/com/android/phone/vvm/omtp/sms/OmtpMessageReceiver.java
index 277e882..fd7b7a6 100644
--- a/src/com/android/phone/vvm/omtp/sms/OmtpMessageReceiver.java
+++ b/src/com/android/phone/vvm/omtp/sms/OmtpMessageReceiver.java
@@ -92,8 +92,18 @@
             if (message.getProvisioningStatus().equals(OmtpConstants.SUBSCRIBER_READY)) {
                 updateSource(phone, subId, message);
             } else {
-                VvmLog.v(TAG, "Subscriber not ready, start provisioning");
-                mContext.startService(OmtpProvisioningService.getProvisionIntent(mContext, intent));
+                if (helper.supportsProvisioning()) {
+                    VvmLog.i(TAG, "Subscriber not ready, start provisioning");
+                    mContext.startService(
+                            OmtpProvisioningService.getProvisionIntent(mContext, intent));
+                } else {
+                    VvmLog.i(TAG, "Subscriber not ready but provisioning is not supported");
+                    VvmLog.i(TAG, "st=" + message.getProvisioningStatus() +
+                            ",rc=" + message.getReturnCode());
+                    // Ignore the non-ready state and attempt to use the provided info as is.
+                    // This is probably caused by not completing the new user tutorial.
+                    updateSource(phone, subId, message);
+                }
             }
         } else {
             VvmLog.e(TAG, "Unknown prefix: " + eventType);