Merge "Removing OrSelf check when checking for PRIVILEGED_PHONE_STATE perm." into mnc-dev
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 3052a06..9a74a14 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -139,7 +139,7 @@
     <string name="vm_changed" msgid="380744030726254139">"ボイスメールの番号が変更されました。"</string>
     <string name="vm_change_failed" msgid="3352934863246208918">"ボイスメール番号を変更できませんでした。\nこの問題が続くようであれば携帯通信会社にお問い合わせください。"</string>
     <string name="fw_change_failed" msgid="5298103228470214665">"転送番号を変更できませんでした。\nこの問題が続くようであれば携帯通信会社にお問い合わせください。"</string>
-    <string name="fw_get_in_vm_failed" msgid="8862896836093833973">"現在の転送先番号設定の取得と保存ができませんでした。\n別の携帯通信会社に切り替えますか?"</string>
+    <string name="fw_get_in_vm_failed" msgid="8862896836093833973">"現在の転送先番号設定の取得と保存ができませんでした。\nかまわず新しい携帯通信会社に切り替えますか?"</string>
     <string name="no_change" msgid="3186040086622435212">"変更されていません。"</string>
     <string name="sum_voicemail_choose_provider" msgid="59911196126278922">"ボイスメールサービスを選択"</string>
     <string name="voicemail_default" msgid="2001233554889016880">"携帯通信会社"</string>
diff --git a/res/values-kn-rIN/strings.xml b/res/values-kn-rIN/strings.xml
index 964c89a..bd1be54 100644
--- a/res/values-kn-rIN/strings.xml
+++ b/res/values-kn-rIN/strings.xml
@@ -269,9 +269,9 @@
     <string name="enable_disable_local_weather" msgid="986967454867219114">"ಸ್ಥಳೀಯ ಹವಾಮಾನ"</string>
     <string name="local_weather_enable" msgid="6199315114382448922">"ಸ್ಥಳೀಯ ಹವಾಮಾನ ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ"</string>
     <string name="local_weather_disable" msgid="2510158089142626480">"ಸ್ಥಳೀಯ ಹವಾಮಾನ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ"</string>
-    <string name="enable_disable_atr" msgid="8339572391278872343">"ಪ್ರದೇಶ ದಟ್ಟಣೆ ವರದಿಗಳು"</string>
-    <string name="atr_enable" msgid="5541757457789181799">"ಪ್ರದೇಶ ದಟ್ಟಣೆ ವರದಿಗಳು ಸಕ್ರಿಯಗೊಂಡಿವೆ"</string>
-    <string name="atr_disable" msgid="7085558154727596455">"ಪ್ರದೇಶ ದಟ್ಟಣೆ ವರದಿಗಳು ನಿಷ್ಕ್ರಿಯಗೊಂಡಿವೆ"</string>
+    <string name="enable_disable_atr" msgid="8339572391278872343">"ಪ್ರದೇಶ ಟ್ರಾಫಿಕ್‌ ವರದಿಗಳು"</string>
+    <string name="atr_enable" msgid="5541757457789181799">"ಪ್ರದೇಶ ಟ್ರಾಫಿಕ್‌ ವರದಿಗಳು ಸಕ್ರಿಯಗೊಂಡಿವೆ"</string>
+    <string name="atr_disable" msgid="7085558154727596455">"ಪ್ರದೇಶ ಟ್ರಾಫಿಕ್‌ ವರದಿಗಳು ನಿಷ್ಕ್ರಿಯಗೊಂಡಿವೆ"</string>
     <string name="enable_disable_lafs" msgid="668189073721277199">"ಸ್ಥಳೀಯ ವಿಮಾನ ನಿಲ್ದಾಣ ಹಾರಾಟದ ವೇಳಾಪಟ್ಟಿ"</string>
     <string name="lafs_enable" msgid="2791978667205137052">"ಸ್ಥಳೀಯ ವಿಮಾನ ನಿಲ್ದಾಣದ ಹಾರಾಟ ವೇಳಾಪಟ್ಟಿಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ"</string>
     <string name="lafs_disable" msgid="2391212397725495350">"ಸ್ಥಳೀಯ ವಿಮಾನ ನಿಲ್ದಾಣದ ಹಾರಾಟ ವೇಳಾಪಟ್ಟಿಯನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ"</string>
diff --git a/res/values-ml-rIN/strings.xml b/res/values-ml-rIN/strings.xml
index d506bd1..5abee72 100644
--- a/res/values-ml-rIN/strings.xml
+++ b/res/values-ml-rIN/strings.xml
@@ -70,7 +70,7 @@
     <string name="phone_accounts_configure_account_settings" msgid="1361715069911607109">"അക്കൗണ്ട് ക്രമീകരണങ്ങൾ കോൺഫിഗർചെയ്യുക"</string>
     <string name="phone_accounts_all_calling_accounts" msgid="207619531589278471">"എല്ലാ കോളിംഗ് അക്കൗണ്ടുകളും"</string>
     <string name="phone_accounts_all_calling_accounts_summary" msgid="8594186415822657011">"ഫോൺ വിളിക്കാനാകുന്ന അക്കൗണ്ടുകൾ തിരഞ്ഞെടുക്കുക"</string>
-    <string name="wifi_calling" msgid="739018212480165598">"Wi-Fi കോളിംഗ്"</string>
+    <string name="wifi_calling" msgid="739018212480165598">"വൈഫൈ കോളിംഗ്"</string>
     <string name="connection_service_default_label" msgid="1498481943805913754">"അന്തർ നിർമ്മിത കണക്ഷൻ സേവനം"</string>
     <string name="voicemail" msgid="8693759337917898954">"വോയ്സ് മെയില്‍"</string>
     <string name="voicemail_settings_with_label" msgid="152724978380748296">"ശബ്ദമെയിൽ(<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
@@ -480,7 +480,7 @@
     <string name="ota_hfa_activation_title" msgid="2234246934160473981">"സജീവമാക്കുന്നു..."</string>
     <string name="ota_hfa_activation_dialog_message" msgid="8092479227918463415">"ഫോൺ നിങ്ങളുടെ മൊബൈൽ ഡാറ്റ സേവനം സജീവമാക്കുന്നു.\n\nഇതിന് 5 മിനിറ്റ് വരെയെടുക്കാം."</string>
     <string name="ota_skip_activation_dialog_title" msgid="2943366608272261306">"സജീവമാക്കൽ ഒഴിവാക്കണോ?"</string>
-    <string name="ota_skip_activation_dialog_message" msgid="2440770373498870550">"നിങ്ങൾ സജീവമാക്കൽ ഒഴിവാക്കുകയാണെങ്കിൽ, നിങ്ങൾക്ക് കോളുകൾ വിളിക്കാനോ മൊബൈൽ ഡാറ്റ നെറ്റ്‌വർക്കുകളിൽ കണക്റ്റുചെയ്യാനോ കഴിയില്ല (എങ്കിലും നിങ്ങൾക്ക് Wi-Fi നെറ്റ്‌വർക്കുകളിൽ കണക്റ്റുചെയ്യാം). നിങ്ങളുടെ ഫോൺ സജീവമാക്കുന്നതുവരെ, അത് ഓൺ ചെയ്യുമ്പോഴെല്ലാം സജീവമാക്കാൻ നിങ്ങളോട് ആവശ്യപ്പെടും."</string>
+    <string name="ota_skip_activation_dialog_message" msgid="2440770373498870550">"നിങ്ങൾ സജീവമാക്കൽ ഒഴിവാക്കുകയാണെങ്കിൽ, നിങ്ങൾക്ക് കോളുകൾ വിളിക്കാനോ മൊബൈൽ ഡാറ്റ നെറ്റ്‌വർക്കുകളിൽ കണക്റ്റുചെയ്യാനോ കഴിയില്ല (എങ്കിലും നിങ്ങൾക്ക് വൈഫൈ നെറ്റ്‌വർക്കുകളിൽ കണക്റ്റുചെയ്യാം). നിങ്ങളുടെ ഫോൺ സജീവമാക്കുന്നതുവരെ, അത് ഓൺ ചെയ്യുമ്പോഴെല്ലാം സജീവമാക്കാൻ നിങ്ങളോട് ആവശ്യപ്പെടും."</string>
     <string name="ota_skip_activation_dialog_skip_label" msgid="3458532775091563208">"ഒഴിവാക്കുക"</string>
     <string name="ota_activate" msgid="1368528132525626264">"സജീവമാക്കുക"</string>
     <string name="ota_title_activate_success" msgid="6570240212263372046">"ഫോൺ സജീവമാക്കി."</string>
@@ -540,8 +540,8 @@
     <string name="sim_description_emergency_calls" msgid="7535215397212301562">"അടിയന്തിര കോൾചെയ്യൽ മാത്രം"</string>
     <string name="sim_description_default" msgid="4778679519938775515">"SIM കാർഡ്, സ്ലോട്ട്: <xliff:g id="SLOT_ID">%s</xliff:g>"</string>
     <string name="accessibility_settings_activity_title" msgid="8562004288733103868">"പ്രവേശനക്ഷമത"</string>
-    <string name="status_hint_label_incoming_wifi_call" msgid="8772915926382037499">"ഇൻകമിംഗ് Wi-Fi കോൾ"</string>
-    <string name="status_hint_label_wifi_call" msgid="8900805254974653903">"Wi-Fi കോൾ"</string>
+    <string name="status_hint_label_incoming_wifi_call" msgid="8772915926382037499">"ഇൻകമിംഗ് വൈഫൈ കോൾ"</string>
+    <string name="status_hint_label_wifi_call" msgid="8900805254974653903">"വൈഫൈ കോൾ"</string>
     <string name="emergency_action_launch_hint" msgid="5841511849007540970">"തുറക്കുന്നതിന് വീണ്ടും സ്‌പർശിക്കുക"</string>
     <string name="message_decode_error" msgid="3456481534066924855">"സന്ദേശം ഡീകോഡുചെയ്യുമ്പോൾ ഒരു പിശകുണ്ടായി."</string>
     <string name="callFailed_cdma_activation" msgid="2307989779233262164">"ഒരു SIM കാർഡ് നിങ്ങളുടെ സേവനം സജീവമാക്കി, ഫോണിന്റെ റോമിംഗ് ശേഷികൾ അപ്‌ഡേറ്റ് ചെയ്തു."</string>
diff --git a/res/values-sq-rAL/strings.xml b/res/values-sq-rAL/strings.xml
index cc9cd02..a72b176 100644
--- a/res/values-sq-rAL/strings.xml
+++ b/res/values-sq-rAL/strings.xml
@@ -326,19 +326,19 @@
     <string name="cdma_activate_device" msgid="3793805892364814518">"Aktivizo"</string>
     <string name="cdma_lte_data_service" msgid="4255018217292548962">"Konfiguro shërbimin e të dhënave"</string>
     <string name="carrier_settings_title" msgid="9028166176523012300">"Cilësimet e operatorit"</string>
-    <string name="fdn" msgid="7878832555095183202">"Numrat e telefonave fiks"</string>
-    <string name="fdn_with_label" msgid="187084204115493366">"Numrat e telefonave fiks (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
+    <string name="fdn" msgid="7878832555095183202">"Numrat me telefonim të përzgjedhur"</string>
+    <string name="fdn_with_label" msgid="187084204115493366">"Numrat me telefonim të përzgjedhur (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="manage_fdn_list" msgid="8777755791892122369">"Lista e FDN-ve"</string>
-    <string name="fdn_list_with_label" msgid="7437232552210469217">"Lista e FDN-ve (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
-    <string name="fdn_activation" msgid="2156479741307463576">"Aktivizimi FDN"</string>
-    <string name="fdn_enabled" msgid="5238109009915521240">"Numrat e telefonave fiks u aktivizuan"</string>
-    <string name="fdn_disabled" msgid="4700049736675368279">"Numrat e telefonave fiks u çaktivizuan"</string>
+    <string name="fdn_list_with_label" msgid="7437232552210469217">"Lista e FDN-së (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
+    <string name="fdn_activation" msgid="2156479741307463576">"Aktivizimi i FDN-së"</string>
+    <string name="fdn_enabled" msgid="5238109009915521240">"Numrat me telefonim të përzgjedhur u aktivizuan"</string>
+    <string name="fdn_disabled" msgid="4700049736675368279">"Numrat me telefonim të përzgjedhur u çaktivizuan"</string>
     <string name="enable_fdn" msgid="3740191529180493851">"Aktivizo FDN-në"</string>
     <string name="disable_fdn" msgid="7944020890722540616">"Çaktivizo FDN-në"</string>
     <string name="change_pin2" msgid="2153563695382176676">"Ndrysho PIN2-shin"</string>
     <string name="enable_fdn_ok" msgid="7215588870329688132">"Çaktivizo FDN-në"</string>
     <string name="disable_fdn_ok" msgid="5727046928930740173">"Aktivizo FDN-në"</string>
-    <string name="sum_fdn" msgid="1959399454900272878">"Menaxho numrat e telefonave fiks"</string>
+    <string name="sum_fdn" msgid="1959399454900272878">"Menaxho numrat me telefonim të përzgjedhur"</string>
     <string name="sum_fdn_change_pin" msgid="6666549734792827932">"Ndrysho PIN-in për qasje te FDN-ja"</string>
     <string name="sum_fdn_manage_list" msgid="8431088265332628316">"Menaxho listën e numrave të telefonit"</string>
     <string name="voice_privacy" msgid="3776841382844614716">"Privatësia e zërit"</string>
diff --git a/src/com/android/phone/PhoneInterfaceManager.java b/src/com/android/phone/PhoneInterfaceManager.java
index 3488820..8273e1e 100644
--- a/src/com/android/phone/PhoneInterfaceManager.java
+++ b/src/com/android/phone/PhoneInterfaceManager.java
@@ -1799,13 +1799,19 @@
     }
 
     /**
-     * Returns the data network type
+     * Returns the data network type.
+     * Legacy call, permission-free.
      *
      * @Deprecated to be removed Q3 2013 use {@link #getDataNetworkType}.
      */
     @Override
-    public int getNetworkType(String callingPackage) {
-        return getNetworkTypeForSubscriber(getDefaultSubscription(), callingPackage);
+    public int getNetworkType() {
+        final Phone phone = getPhone(getDefaultSubscription());
+        if (phone != null) {
+            return phone.getServiceState().getDataNetworkType();
+        } else {
+            return TelephonyManager.NETWORK_TYPE_UNKNOWN;
+        }
     }
 
     /**
@@ -1816,6 +1822,7 @@
         if (!canReadPhoneState(callingPackage, "getNetworkTypeForSubscriber")) {
             return TelephonyManager.NETWORK_TYPE_UNKNOWN;
         }
+
         final Phone phone = getPhone(subId);
         if (phone != null) {
             return phone.getServiceState().getDataNetworkType();
@@ -1850,18 +1857,14 @@
     }
 
     /**
-     * Returns the data network type
-     */
-    @Override
-    public int getVoiceNetworkType() {
-        return getVoiceNetworkTypeForSubscriber(getDefaultSubscription());
-    }
-
-    /**
      * Returns the Voice network type for a subId
      */
     @Override
-    public int getVoiceNetworkTypeForSubscriber(int subId) {
+    public int getVoiceNetworkTypeForSubscriber(int subId, String callingPackage) {
+        if (!canReadPhoneState(callingPackage, "getDataNetworkTypeForSubscriber")) {
+            return TelephonyManager.NETWORK_TYPE_UNKNOWN;
+        }
+
         final Phone phone = getPhone(subId);
         if (phone != null) {
             return phone.getServiceState().getVoiceNetworkType();
diff --git a/src/com/android/phone/vvm/omtp/sync/VvmPhoneStateListener.java b/src/com/android/phone/VvmPhoneStateListener.java
similarity index 70%
rename from src/com/android/phone/vvm/omtp/sync/VvmPhoneStateListener.java
rename to src/com/android/phone/VvmPhoneStateListener.java
index 84449d7..d2d84b2 100644
--- a/src/com/android/phone/vvm/omtp/sync/VvmPhoneStateListener.java
+++ b/src/com/android/phone/VvmPhoneStateListener.java
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License
  */
-package com.android.phone.vvm.omtp.sync;
+package com.android.phone;
 
 import android.content.Context;
 import android.content.Intent;
@@ -22,8 +22,10 @@
 import android.telephony.PhoneStateListener;
 import android.telephony.ServiceState;
 
-import com.android.phone.PhoneUtils;
 import com.android.phone.vvm.omtp.OmtpVvmCarrierConfigHelper;
+import com.android.phone.vvm.omtp.sync.OmtpVvmSourceManager;
+import com.android.phone.vvm.omtp.sync.OmtpVvmSyncService;
+import com.android.phone.vvm.omtp.sync.VoicemailStatusQueryHelper;
 
 /**
  * Check if service is lost and indicate this in the voicemail status.
@@ -49,15 +51,22 @@
                             VoicemailContract.Status.CONFIGURATION_STATE_OK,
                             VoicemailContract.Status.DATA_CHANNEL_STATE_OK,
                             VoicemailContract.Status.NOTIFICATION_CHANNEL_STATE_OK);
-                    // Run a full sync in case something was missed while signal was down.
-                    Intent serviceIntent = OmtpVvmSyncService.getSyncIntent(
-                            mContext, OmtpVvmSyncService.SYNC_FULL_SYNC, mPhoneAccount,
-                            true /* firstAttempt */);
-                    mContext.startService(serviceIntent);
+                    PhoneGlobals.getInstance().notificationMgr.updateMwi(
+                            PhoneUtils.getSubIdForPhoneAccountHandle(mPhoneAccount), false);
                 }
             }
 
-            if (!OmtpVvmSourceManager.getInstance(mContext).isVvmSourceRegistered(mPhoneAccount)) {
+            if (OmtpVvmSourceManager.getInstance(mContext).isVvmSourceRegistered(mPhoneAccount)) {
+                // If the source is already registered, run a full sync in case something was missed
+                // while signal was down.
+                Intent serviceIntent = OmtpVvmSyncService.getSyncIntent(
+                        mContext, OmtpVvmSyncService.SYNC_FULL_SYNC, mPhoneAccount,
+                        true /* firstAttempt */);
+                mContext.startService(serviceIntent);
+            } else {
+                // Otherwise initiate an activation because this means that an OMTP source was
+                // recognized but either the activation text was not successfully sent or a response
+                // was not received.
                 OmtpVvmCarrierConfigHelper carrierConfigHelper = new OmtpVvmCarrierConfigHelper(
                         mContext, PhoneUtils.getSubIdForPhoneAccountHandle(mPhoneAccount));
                 carrierConfigHelper.startActivation();
diff --git a/src/com/android/phone/settings/VoicemailSettingsActivity.java b/src/com/android/phone/settings/VoicemailSettingsActivity.java
index fdc5bf3..bb8c6fe 100644
--- a/src/com/android/phone/settings/VoicemailSettingsActivity.java
+++ b/src/com/android/phone/settings/VoicemailSettingsActivity.java
@@ -392,6 +392,7 @@
             boolean isEnabled = (Boolean) objValue;
             VisualVoicemailSettingsUtil.setVisualVoicemailEnabled(mPhone, isEnabled, true);
             if (isEnabled) {
+                OmtpVvmSourceManager.getInstance(mPhone.getContext()).addPhoneStateListener(mPhone);
                 mOmtpVvmCarrierConfigHelper.startActivation();
             } else {
                 OmtpVvmSourceManager.getInstance(mPhone.getContext()).removeSource(mPhone);
diff --git a/src/com/android/phone/vvm/omtp/sync/OmtpVvmSourceManager.java b/src/com/android/phone/vvm/omtp/sync/OmtpVvmSourceManager.java
index 63e9fee..286dde3 100644
--- a/src/com/android/phone/vvm/omtp/sync/OmtpVvmSourceManager.java
+++ b/src/com/android/phone/vvm/omtp/sync/OmtpVvmSourceManager.java
@@ -24,6 +24,7 @@
 
 import com.android.internal.telephony.Phone;
 import com.android.phone.PhoneUtils;
+import com.android.phone.VvmPhoneStateListener;
 
 import java.util.HashMap;
 import java.util.HashSet;
@@ -104,6 +105,10 @@
         OmtpVvmSyncService.cancelAllRetries(mContext, phoneAccount);
     }
 
+    public void addPhoneStateListener(Phone phone) {
+        addPhoneStateListener(PhoneUtils.makePstnPhoneAccountHandle(phone));
+    }
+
     public void addPhoneStateListener(PhoneAccountHandle phoneAccount) {
         if (!mPhoneStateListenerMap.containsKey(phoneAccount)) {
             VvmPhoneStateListener phoneStateListener = new VvmPhoneStateListener(mContext,
diff --git a/src/com/android/services/telephony/TelephonyConnectionService.java b/src/com/android/services/telephony/TelephonyConnectionService.java
index 72c9b07..5848135 100644
--- a/src/com/android/services/telephony/TelephonyConnectionService.java
+++ b/src/com/android/services/telephony/TelephonyConnectionService.java
@@ -171,7 +171,7 @@
             }
         }
 
-        boolean isEmergencyNumber = PhoneNumberUtils.isPotentialEmergencyNumber(number);
+        boolean isEmergencyNumber = PhoneNumberUtils.isLocalEmergencyNumber(this, number);
 
         // Get the right phone object from the account data passed in.
         final Phone phone = getPhoneForAccount(request.getAccountHandle(), isEmergencyNumber);