Fix deadlock between UiccController and UiccProfile

Bug: 192003927
Test: manual
Change-Id: I3eb0fdee38a17b66d744c84278c05391c7397c6a
Merged-In: I1f46b5e1cf5b76ac674eacd09ee9352bb8ba9291
diff --git a/src/java/com/android/internal/telephony/uicc/UiccProfile.java b/src/java/com/android/internal/telephony/uicc/UiccProfile.java
index be8cebb..1492620 100644
--- a/src/java/com/android/internal/telephony/uicc/UiccProfile.java
+++ b/src/java/com/android/internal/telephony/uicc/UiccProfile.java
@@ -121,6 +121,7 @@
     private RegistrantList mOperatorBrandOverrideRegistrants = new RegistrantList();
 
     private final int mPhoneId;
+    private final PinStorage mPinStorage;
 
     private static final int EVENT_RADIO_OFF_OR_UNAVAILABLE = 1;
     private static final int EVENT_ICC_LOCKED = 2;
@@ -280,7 +281,7 @@
                         // An error occurred during automatic PIN verification. At this point,
                         // clear the cache and propagate the state.
                         loge("An error occurred during internal PIN verification");
-                        UiccController.getInstance().getPinStorage().clearPin(mPhoneId);
+                        mPinStorage.clearPin(mPhoneId);
                         updateExternalState();
                     } else {
                         log("Internal PIN verification was successful!");
@@ -320,6 +321,7 @@
             // for RadioConfig<1.2 eid is not known when the EuiccCard is constructed
             ((EuiccCard) mUiccCard).registerForEidReady(mHandler, EVENT_EID_READY, null);
         }
+        mPinStorage = UiccController.getInstance().getPinStorage();
 
         update(c, ci, ics);
         ci.registerForOffOrNotAvailable(mHandler, EVENT_RADIO_OFF_OR_UNAVAILABLE, null);
@@ -625,7 +627,7 @@
                 // If the PIN code is required and an available cached PIN is available, intercept
                 // the update of external state and perform an internal PIN verification.
                 if (lockedState == IccCardConstants.State.PIN_REQUIRED) {
-                    String pin = UiccController.getInstance().getPinStorage().getPin(mPhoneId);
+                    String pin = mPinStorage.getPin(mPhoneId);
                     if (!pin.isEmpty()) {
                         log("PIN_REQUIRED[" + mPhoneId + "] - Cache present");
                         mCi.supplyIccPin(pin, mHandler.obtainMessage(EVENT_SUPPLY_ICC_PIN_DONE));