Tweak change voicemail PIN UI

b/31442531 Able to submit a mismatch pin during Voicemail PIN change
PIN mismatch was not checked when pressing the next button on the IME.
Fixed.

b/30818616 VVM Change PIN UI is cropped when Font size is set to large
Removed the bottom padding of the container. The container already
tries to take as much as vertical space as it can, and this will free
up some space for the EditText when the font is large.

b/31224822 Cannot activate VVM after entering wrong PIN a few times
The "change PIN" setting will now only appear after there are
successful activation records.

b/31065311 "Change PIN" for Voicemail is available when VVM is disabled
The "enabled" status was not rechecked when the activity is resumed.
Fixed.

- Deleted voicemail_dialog_change_pin.xml
  This is the layout for the old change PIN UI, no longer used.
- Removed VisualVoicemailSettingsUtil.isEnabled(Phone phone)
  PhoneAccountHandle cached in VoicemailSettingsActivity, no longer
  needed this overload.

Change-Id: I3f649cbd4131d5f0262c7d5b8cc2297e4dfb579d
Fixes: 31442531
Fixes: 30818616
Fixes: 31224822
Fixes: 31065311
diff --git a/res/layout/voicemail_change_pin.xml b/res/layout/voicemail_change_pin.xml
index ba0d823..b0db64b 100644
--- a/res/layout/voicemail_change_pin.xml
+++ b/res/layout/voicemail_change_pin.xml
@@ -28,7 +28,9 @@
     android:layout_height="0dp"
     android:layout_weight="1"
     android:orientation="vertical"
-    android:padding="48dp">
+    android:paddingTop="48dp"
+    android:paddingStart="48dp"
+    android:paddingEnd="48dp">
     <TextView
       android:id="@+id/headerText"
       android:layout_width="match_parent"
diff --git a/res/layout/voicemail_dialog_change_pin.xml b/res/layout/voicemail_dialog_change_pin.xml
deleted file mode 100644
index a5cfa80..0000000
--- a/res/layout/voicemail_dialog_change_pin.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-  android:layout_width="match_parent"
-  android:layout_height="match_parent"
-  android:orientation="vertical"
-  android:padding="?android:attr/dialogPreferredPadding">
-
-    <TextView
-      android:id="@+id/vm_old_pin_label"
-      android:layout_width="match_parent"
-      android:layout_height="wrap_content"
-      android:text="@string/vm_change_pin_old_pin"
-      android:labelFor="@+id/vm_old_pin"/>
-
-    <EditText android:id="@id/vm_old_pin"
-      android:layout_width="match_parent"
-      android:layout_height="wrap_content"
-      android:textColor="?android:attr/textColorSecondary"
-      android:inputType="numberPassword"/>
-
-    <TextView
-      android:layout_width="match_parent"
-      android:layout_height="wrap_content"
-      android:text="@string/vm_change_pin_new_pin"
-      android:labelFor="@+id/vm_new_pin"/>
-
-    <EditText android:id="@id/vm_new_pin"
-      android:layout_width="match_parent"
-      android:layout_height="wrap_content"
-      android:textColor="?android:attr/textColorSecondary"
-      android:inputType="numberPassword"/>
-
-</LinearLayout>
\ No newline at end of file
diff --git a/src/com/android/phone/settings/VisualVoicemailSettingsUtil.java b/src/com/android/phone/settings/VisualVoicemailSettingsUtil.java
index b556aa1..22fb70e 100644
--- a/src/com/android/phone/settings/VisualVoicemailSettingsUtil.java
+++ b/src/com/android/phone/settings/VisualVoicemailSettingsUtil.java
@@ -17,8 +17,6 @@
 
 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;
@@ -67,11 +65,6 @@
                 PhoneAccountHandleConverter.toSubId(phoneAccount)).isEnabledByDefault();
     }
 
-    public static boolean isEnabled(Phone phone) {
-        return isEnabled(phone.getContext(),
-                PhoneUtils.makePstnPhoneAccountHandle(phone));
-    }
-
     /**
      * Whether the client enabled status is explicitly set by user or by default(Whether carrier VVM
      * app is installed). This is used to determine whether to disable the client when the carrier
diff --git a/src/com/android/phone/settings/VoicemailChangePinActivity.java b/src/com/android/phone/settings/VoicemailChangePinActivity.java
index 8027dc1..52c97a7 100644
--- a/src/com/android/phone/settings/VoicemailChangePinActivity.java
+++ b/src/com/android/phone/settings/VoicemailChangePinActivity.java
@@ -437,6 +437,9 @@
     }
 
     public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
+      if (!mNextButton.isEnabled()) {
+        return true;
+      }
         // Check if this was the result of hitting the enter or "done" key
         if (actionId == EditorInfo.IME_NULL
                 || actionId == EditorInfo.IME_ACTION_DONE
diff --git a/src/com/android/phone/settings/VoicemailSettingsActivity.java b/src/com/android/phone/settings/VoicemailSettingsActivity.java
index 92e1b5f..35d9a1c 100644
--- a/src/com/android/phone/settings/VoicemailSettingsActivity.java
+++ b/src/com/android/phone/settings/VoicemailSettingsActivity.java
@@ -45,7 +45,9 @@
 import com.android.phone.PhoneUtils;
 import com.android.phone.R;
 import com.android.phone.SubscriptionInfoHelper;
+import com.android.phone.vvm.omtp.OmtpConstants;
 import com.android.phone.vvm.omtp.OmtpVvmCarrierConfigHelper;
+import com.android.phone.vvm.omtp.VisualVoicemailPreferences;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -193,6 +195,7 @@
 
     private boolean mForeground;
     private Phone mPhone;
+    private PhoneAccountHandle mPhoneAccountHandle;
     private SubscriptionInfoHelper mSubscriptionInfoHelper;
     private OmtpVvmCarrierConfigHelper mOmtpVvmCarrierConfigHelper;
 
@@ -221,6 +224,7 @@
         mSubscriptionInfoHelper.setActionBarTitle(
                 getActionBar(), getResources(), R.string.voicemail_settings_with_label);
         mPhone = mSubscriptionInfoHelper.getPhone();
+        mPhoneAccountHandle = PhoneUtils.makePstnPhoneAccountHandle(mPhone);
         mOmtpVvmCarrierConfigHelper = new OmtpVvmCarrierConfigHelper(
                 mPhone.getContext(), mPhone.getSubId());
     }
@@ -265,13 +269,12 @@
 
         mVoicemailChangePinPreference = findPreference(
                 getResources().getString(R.string.voicemail_change_pin_key));
-        PhoneAccountHandle phoneAccountHandle = PhoneUtils.makePstnPhoneAccountHandle(mPhone);
         Intent changePinIntent = new Intent(new Intent(this, VoicemailChangePinActivity.class));
         changePinIntent.putExtra(VoicemailChangePinActivity.EXTRA_PHONE_ACCOUNT_HANDLE,
-                phoneAccountHandle);
+                mPhoneAccountHandle);
 
         mVoicemailChangePinPreference.setIntent(changePinIntent);
-        if (VoicemailChangePinActivity.isDefaultOldPinSet(this, phoneAccountHandle)) {
+        if (VoicemailChangePinActivity.isDefaultOldPinSet(this, mPhoneAccountHandle)) {
             mVoicemailChangePinPreference.setTitle(R.string.voicemail_set_pin_dialog_title);
         } else {
             mVoicemailChangePinPreference.setTitle(R.string.voicemail_change_pin_dialog_title);
@@ -280,7 +283,10 @@
         if (mOmtpVvmCarrierConfigHelper.isValid()) {
             mVoicemailVisualVoicemail.setOnPreferenceChangeListener(this);
             mVoicemailVisualVoicemail.setChecked(
-                    VisualVoicemailSettingsUtil.isEnabled(mPhone));
+                    VisualVoicemailSettingsUtil.isEnabled(this, mPhoneAccountHandle));
+            if (!isVisualVoicemailActivated()) {
+                prefSet.removePreference(mVoicemailChangePinPreference);
+            }
         } else {
             prefSet.removePreference(mVoicemailVisualVoicemail);
             prefSet.removePreference(mVoicemailChangePinPreference);
@@ -406,11 +412,10 @@
                     mPhone, Boolean.TRUE.equals(objValue));
         } else if (preference.getKey().equals(mVoicemailVisualVoicemail.getKey())) {
             boolean isEnabled = (boolean) objValue;
-            PhoneAccountHandle handle = PhoneUtils.makePstnPhoneAccountHandle(mPhone);
             VisualVoicemailSettingsUtil
-                    .setEnabled(mPhone.getContext(), handle, isEnabled);
+                    .setEnabled(mPhone.getContext(), mPhoneAccountHandle, isEnabled);
             PreferenceScreen prefSet = getPreferenceScreen();
-            if (isEnabled) {
+            if (isVisualVoicemailActivated()) {
                 prefSet.addPreference(mVoicemailChangePinPreference);
             } else {
                 prefSet.removePreference(mVoicemailChangePinPreference);
@@ -1150,6 +1155,16 @@
         return true;
     }
 
+    private boolean isVisualVoicemailActivated() {
+        if (!VisualVoicemailSettingsUtil.isEnabled(this, mPhoneAccountHandle)) {
+            return false;
+        }
+        VisualVoicemailPreferences preferences = new VisualVoicemailPreferences(this,
+                mPhoneAccountHandle);
+        return preferences.getString(OmtpConstants.SERVER_ADDRESS, null) != null;
+
+    }
+
     private static void log(String msg) {
         Log.d(LOG_TAG, msg);
     }