Merge "Fix deadlock between UiccController and UiccProfile"
diff --git a/TEST_MAPPING b/TEST_MAPPING
index 75b9d49..603615a 100644
--- a/TEST_MAPPING
+++ b/TEST_MAPPING
@@ -10,6 +10,46 @@
     },
     {
       "name": "CarrierAppIntegrationTestCases"
+    },
+    {
+      "name": "CtsTelephonySdk28TestCases",
+      "options": [
+        {
+          "exclude-annotation": "androidx.test.filters.FlakyTest"
+        }
+      ]
+    },
+    {
+      "name": "CtsTelephony2TestCases",
+      "options": [
+        {
+          "exclude-annotation": "androidx.test.filters.FlakyTest"
+        }
+      ]
+    },
+    {
+      "name": "CtsTelephony3TestCases",
+      "options": [
+        {
+          "exclude-annotation": "androidx.test.filters.FlakyTest"
+        }
+      ]
+    },
+    {
+      "name": "CtsSimRestrictedApisTestCases",
+      "options": [
+        {
+          "exclude-annotation": "androidx.test.filters.FlakyTest"
+        }
+      ]
+    },
+    {
+      "name": "CtsTelephonyProviderTestCases",
+      "options": [
+        {
+          "exclude-annotation": "androidx.test.filters.FlakyTest"
+        }
+      ]
     }
   ]
 }
diff --git a/src/java/com/android/internal/telephony/CarrierActionAgent.java b/src/java/com/android/internal/telephony/CarrierActionAgent.java
index a87925d..42a4f23 100644
--- a/src/java/com/android/internal/telephony/CarrierActionAgent.java
+++ b/src/java/com/android/internal/telephony/CarrierActionAgent.java
@@ -73,9 +73,9 @@
     private RegistrantList mRadioEnableRegistrants = new RegistrantList();
     private RegistrantList mDefaultNetworkReportRegistrants = new RegistrantList();
     /** local log for carrier actions */
-    private LocalLog mMeteredApnEnabledLog = new LocalLog(10);
-    private LocalLog mRadioEnabledLog = new LocalLog(10);
-    private LocalLog mReportDefaultNetworkStatusLog = new LocalLog(10);
+    private LocalLog mMeteredApnEnabledLog = new LocalLog(8);
+    private LocalLog mRadioEnabledLog = new LocalLog(8);
+    private LocalLog mReportDefaultNetworkStatusLog = new LocalLog(8);
     /** carrier actions */
     private Boolean mCarrierActionOnMeteredApnEnabled = true;
     private Boolean mCarrierActionOnRadioEnabled = true;
diff --git a/src/java/com/android/internal/telephony/CarrierPrivilegesTracker.java b/src/java/com/android/internal/telephony/CarrierPrivilegesTracker.java
index 8709047..128b919 100644
--- a/src/java/com/android/internal/telephony/CarrierPrivilegesTracker.java
+++ b/src/java/com/android/internal/telephony/CarrierPrivilegesTracker.java
@@ -218,7 +218,7 @@
         mUserManager = (UserManager) mContext.getSystemService(Context.USER_SERVICE);
         mTelephonyManager = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
         mPhone = phone;
-        mLocalLog = new LocalLog(100);
+        mLocalLog = new LocalLog(64);
 
         IntentFilter certFilter = new IntentFilter();
         certFilter.addAction(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED);
diff --git a/src/java/com/android/internal/telephony/CarrierResolver.java b/src/java/com/android/internal/telephony/CarrierResolver.java
index 794bb41..090aebf 100644
--- a/src/java/com/android/internal/telephony/CarrierResolver.java
+++ b/src/java/com/android/internal/telephony/CarrierResolver.java
@@ -106,7 +106,7 @@
     private Context mContext;
     private Phone mPhone;
     private IccRecords mIccRecords;
-    private final LocalLog mCarrierIdLocalLog = new LocalLog(20);
+    private final LocalLog mCarrierIdLocalLog = new LocalLog(16);
     private final TelephonyManager mTelephonyMgr;
 
     private final ContentObserver mContentObserver = new ContentObserver(this) {
diff --git a/src/java/com/android/internal/telephony/CarrierSignalAgent.java b/src/java/com/android/internal/telephony/CarrierSignalAgent.java
index 1f6385d..9be0ba5 100644
--- a/src/java/com/android/internal/telephony/CarrierSignalAgent.java
+++ b/src/java/com/android/internal/telephony/CarrierSignalAgent.java
@@ -126,7 +126,7 @@
     private static final Map<String, String> COMPAT_ACTION_TO_NEW_MAP = NEW_ACTION_TO_COMPAT_MAP
             .entrySet().stream().collect(Collectors.toMap(Map.Entry::getValue, Map.Entry::getKey));
 
-    private final LocalLog mErrorLocalLog = new LocalLog(20);
+    private final LocalLog mErrorLocalLog = new LocalLog(16);
 
     private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
         public void onReceive(Context context, Intent intent) {
diff --git a/src/java/com/android/internal/telephony/CellBroadcastServiceManager.java b/src/java/com/android/internal/telephony/CellBroadcastServiceManager.java
index 7045171..703160b 100644
--- a/src/java/com/android/internal/telephony/CellBroadcastServiceManager.java
+++ b/src/java/com/android/internal/telephony/CellBroadcastServiceManager.java
@@ -60,7 +60,7 @@
     private Phone mPhone;
     private Context mContext;
 
-    private final LocalLog mLocalLog = new LocalLog(100);
+    private final LocalLog mLocalLog = new LocalLog(64);
 
     /** New SMS cell broadcast received as an AsyncResult. */
     private static final int EVENT_NEW_GSM_SMS_CB = 0;
diff --git a/src/java/com/android/internal/telephony/DeviceStateMonitor.java b/src/java/com/android/internal/telephony/DeviceStateMonitor.java
index 0997186..0389e27 100644
--- a/src/java/com/android/internal/telephony/DeviceStateMonitor.java
+++ b/src/java/com/android/internal/telephony/DeviceStateMonitor.java
@@ -92,7 +92,7 @@
 
     private final Phone mPhone;
 
-    private final LocalLog mLocalLog = new LocalLog(100);
+    private final LocalLog mLocalLog = new LocalLog(64);
 
     private final RegistrantList mPhysicalChannelConfigRegistrants = new RegistrantList();
 
diff --git a/src/java/com/android/internal/telephony/GsmCdmaPhone.java b/src/java/com/android/internal/telephony/GsmCdmaPhone.java
index 8fdd16b..ac6339e 100644
--- a/src/java/com/android/internal/telephony/GsmCdmaPhone.java
+++ b/src/java/com/android/internal/telephony/GsmCdmaPhone.java
@@ -1678,6 +1678,16 @@
     }
 
     @Override
+    public void setRadioPowerOnForTestEmergencyCall(boolean isSelectedPhoneForEmergencyCall) {
+        mSST.clearAllRadioOffReasons();
+
+        // We don't want to have forEmergency call be true to prevent radio emergencyDial command
+        // from being called for a test emergency number because the network may not be able to
+        // find emergency routing for it and dial it do the default emergency services line.
+        setRadioPower(true, false, isSelectedPhoneForEmergencyCall, false);
+    }
+
+    @Override
     public void setRadioPower(boolean power, boolean forEmergencyCall,
             boolean isSelectedPhoneForEmergencyCall, boolean forceApply) {
         setRadioPowerForReason(power, forEmergencyCall, isSelectedPhoneForEmergencyCall, forceApply,
diff --git a/src/java/com/android/internal/telephony/IccSmsInterfaceManager.java b/src/java/com/android/internal/telephony/IccSmsInterfaceManager.java
index a1a9578..d8d092b 100644
--- a/src/java/com/android/internal/telephony/IccSmsInterfaceManager.java
+++ b/src/java/com/android/internal/telephony/IccSmsInterfaceManager.java
@@ -97,7 +97,7 @@
     public SmsDispatchersController mDispatchersController;
     private SmsPermissions mSmsPermissions;
 
-    private final LocalLog mCellBroadcastLocalLog = new LocalLog(100);
+    private final LocalLog mCellBroadcastLocalLog = new LocalLog(64);
 
     private static final class Request {
         AtomicBoolean mStatus = new AtomicBoolean(false);
diff --git a/src/java/com/android/internal/telephony/InboundSmsHandler.java b/src/java/com/android/internal/telephony/InboundSmsHandler.java
index 8f98a5f..38d7047 100644
--- a/src/java/com/android/internal/telephony/InboundSmsHandler.java
+++ b/src/java/com/android/internal/telephony/InboundSmsHandler.java
@@ -259,7 +259,7 @@
     protected TelephonyMetrics mMetrics = TelephonyMetrics.getInstance();
 
     private LocalLog mLocalLog = new LocalLog(64);
-    private LocalLog mCarrierServiceLocalLog = new LocalLog(10);
+    private LocalLog mCarrierServiceLocalLog = new LocalLog(8);
 
     PowerWhitelistManager mPowerWhitelistManager;
 
diff --git a/src/java/com/android/internal/telephony/LocaleTracker.java b/src/java/com/android/internal/telephony/LocaleTracker.java
index d3943c5..694330b 100755
--- a/src/java/com/android/internal/telephony/LocaleTracker.java
+++ b/src/java/com/android/internal/telephony/LocaleTracker.java
@@ -160,7 +160,7 @@
 
     private boolean mIsTracking = false;
 
-    private final LocalLog mLocalLog = new LocalLog(50);
+    private final LocalLog mLocalLog = new LocalLog(32);
 
     /** Broadcast receiver to get SIM card state changed event */
     private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
diff --git a/src/java/com/android/internal/telephony/PhoneInternalInterface.java b/src/java/com/android/internal/telephony/PhoneInternalInterface.java
index 1b380a5..a61954b 100644
--- a/src/java/com/android/internal/telephony/PhoneInternalInterface.java
+++ b/src/java/com/android/internal/telephony/PhoneInternalInterface.java
@@ -581,6 +581,14 @@
     }
 
     /**
+     * Sets the radio power on for a test emergency number.
+     *
+     * @param isSelectedPhoneForEmergencyCall true means this phone / modem is selected to place
+     *                                  emergency call after turning power on.
+     */
+    default void setRadioPowerOnForTestEmergencyCall(boolean isSelectedPhoneForEmergencyCall) {}
+
+    /**
      * Sets the radio power on/off state with option to specify whether it's for emergency call
      * (off is sometimes called "airplane mode"). Current state can be gotten via
      * {@link #getServiceState()}.{@link
diff --git a/src/java/com/android/internal/telephony/PhoneSwitcher.java b/src/java/com/android/internal/telephony/PhoneSwitcher.java
index 19c6021..2dd83ca 100644
--- a/src/java/com/android/internal/telephony/PhoneSwitcher.java
+++ b/src/java/com/android/internal/telephony/PhoneSwitcher.java
@@ -282,7 +282,7 @@
 
     protected RadioConfig mRadioConfig;
 
-    private final static int MAX_LOCAL_LOG_LINES = 30;
+    private static final int MAX_LOCAL_LOG_LINES = 32;
 
     // Default timeout value of network validation in millisecond.
     private final static int DEFAULT_VALIDATION_EXPIRATION_TIME = 2000;
diff --git a/src/java/com/android/internal/telephony/ServiceStateTracker.java b/src/java/com/android/internal/telephony/ServiceStateTracker.java
index 241d510..7206ee5 100755
--- a/src/java/com/android/internal/telephony/ServiceStateTracker.java
+++ b/src/java/com/android/internal/telephony/ServiceStateTracker.java
@@ -382,11 +382,11 @@
 
     private final LocaleTracker mLocaleTracker;
 
-    private final LocalLog mRoamingLog = new LocalLog(10);
-    private final LocalLog mAttachLog = new LocalLog(10);
-    private final LocalLog mPhoneTypeLog = new LocalLog(10);
-    private final LocalLog mRatLog = new LocalLog(20);
-    private final LocalLog mRadioPowerLog = new LocalLog(20);
+    private final LocalLog mRoamingLog = new LocalLog(8);
+    private final LocalLog mAttachLog = new LocalLog(8);
+    private final LocalLog mPhoneTypeLog = new LocalLog(8);
+    private final LocalLog mRatLog = new LocalLog(16);
+    private final LocalLog mRadioPowerLog = new LocalLog(16);
     private final LocalLog mCdnrLogs = new LocalLog(64);
 
     private Pattern mOperatorNameStringPattern;
@@ -642,11 +642,17 @@
      * Reference: 3GPP TS 36.104 5.4.3)
      * inclusive ranges for which the lte rsrp boost is applied */
     private ArrayList<Pair<Integer, Integer>> mEarfcnPairListForRsrpBoost = null;
-
     private int mLteRsrpBoost = 0; // offset which is reduced from the rsrp threshold
                                    // while calculating signal strength level.
-    private final Object mLteRsrpBoostLock = new Object();
-    private static final int INVALID_LTE_EARFCN = -1;
+
+    /* Ranges of NR ARFCNs (5G Absolute Radio Frequency Channel Number,
+     * Reference: 3GPP TS 38.104)
+     * inclusive ranges for which the corresponding nr rsrp boost is applied */
+    private ArrayList<Pair<Integer, Integer>> mNrarfcnRangeListForRsrpBoost = null;
+    private int[] mNrRsrpBoost;
+
+    private final Object mRsrpBoostLock = new Object();
+    private static final int INVALID_ARFCN = -1;
 
     private final List<SignalRequestRecord> mSignalRequestRecords = new ArrayList<>();
 
@@ -1086,6 +1092,14 @@
     }
 
     /**
+     * Clear all the radio off reasons. This should be done when turning radio off for genuine or
+     * test emergency calls.
+     */
+    public void clearAllRadioOffReasons() {
+        sRadioPowerOffReasons.clear();
+    }
+
+    /**
      * Turn on or off radio power.
      */
     public final void setRadioPower(boolean power) {
@@ -1107,7 +1121,7 @@
      * Turn on or off radio power with option to specify whether it's for emergency call and specify
      * a reason for setting the power state.
      * More details check {@link PhoneInternalInterface#setRadioPower(
-     * boolean, boolean, boolean, boolean, String)}.
+     * boolean, boolean, boolean, boolean, int)}.
      */
     public void setRadioPowerForReason(boolean power, boolean forEmergencyCall,
             boolean isSelectedPhoneForEmergencyCall, boolean forceApply, int reason) {
@@ -1116,7 +1130,7 @@
 
         if (power) {
             if (forEmergencyCall) {
-                sRadioPowerOffReasons.clear();
+                clearAllRadioOffReasons();
             } else {
                 sRadioPowerOffReasons.remove(reason);
             }
@@ -1199,23 +1213,6 @@
         }
     }
 
-    private int getLteEarfcn(CellIdentity cellIdentity) {
-        int lteEarfcn = INVALID_LTE_EARFCN;
-        if (cellIdentity != null) {
-            switch (cellIdentity.getType()) {
-                case CellInfoType.LTE: {
-                    lteEarfcn = ((CellIdentityLte) cellIdentity).getEarfcn();
-                    break;
-                }
-                default: {
-                    break;
-                }
-            }
-        }
-
-        return lteEarfcn;
-    }
-
     @Override
     public void handleMessage(Message msg) {
         AsyncResult ar;
@@ -2440,8 +2437,7 @@
                     mNewSS.setDataRoamingFromRegistration(isDataRoaming);
                 }
 
-                updateServiceStateLteEarfcnBoost(mNewSS,
-                        getLteEarfcn(networkRegState.getCellIdentity()));
+                updateServiceStateArfcnRsrpBoost(mNewSS, networkRegState.getCellIdentity());
                 break;
             }
 
@@ -5072,19 +5068,21 @@
     /**
      * Checks if the provided earfcn falls withing the range of earfcns.
      *
-     * return true if earfcn falls within the provided range; false otherwise.
+     * return int index in earfcnPairList if earfcn falls within the provided range; -1 otherwise.
      */
-    private boolean containsEarfcnInEarfcnRange(ArrayList<Pair<Integer, Integer>> earfcnPairList,
+    private int containsEarfcnInEarfcnRange(ArrayList<Pair<Integer, Integer>> earfcnPairList,
             int earfcn) {
+        int index = 0;
         if (earfcnPairList != null) {
             for (Pair<Integer, Integer> earfcnPair : earfcnPairList) {
                 if ((earfcn >= earfcnPair.first) && (earfcn <= earfcnPair.second)) {
-                    return true;
+                    return index;
                 }
+                index++;
             }
         }
 
-        return false;
+        return -1;
     }
 
     /**
@@ -5145,7 +5143,7 @@
         mEriManager.loadEriFile();
         mCdnr.updateEfForEri(getOperatorNameFromEri());
 
-        updateLteEarfcnLists(config);
+        updateArfcnLists(config);
         updateReportingCriteria(config);
         updateOperatorNamePattern(config);
         mCdnr.updateEfFromCarrierConfig(config);
@@ -5156,13 +5154,29 @@
         pollStateInternal(false);
     }
 
-    private void updateLteEarfcnLists(PersistableBundle config) {
-        synchronized (mLteRsrpBoostLock) {
+    private void updateArfcnLists(PersistableBundle config) {
+        synchronized (mRsrpBoostLock) {
             mLteRsrpBoost = config.getInt(CarrierConfigManager.KEY_LTE_EARFCNS_RSRP_BOOST_INT, 0);
             String[] earfcnsStringArrayForRsrpBoost = config.getStringArray(
                     CarrierConfigManager.KEY_BOOSTED_LTE_EARFCNS_STRING_ARRAY);
             mEarfcnPairListForRsrpBoost = convertEarfcnStringArrayToPairList(
                     earfcnsStringArrayForRsrpBoost);
+
+            mNrRsrpBoost = config.getIntArray(
+                    CarrierConfigManager.KEY_NRARFCNS_RSRP_BOOST_INT_ARRAY);
+            String[] nrarfcnsStringArrayForRsrpBoost = config.getStringArray(
+                    CarrierConfigManager.KEY_BOOSTED_NRARFCNS_STRING_ARRAY);
+            mNrarfcnRangeListForRsrpBoost = convertEarfcnStringArrayToPairList(
+                    nrarfcnsStringArrayForRsrpBoost);
+
+            if ((mNrRsrpBoost == null && mNrarfcnRangeListForRsrpBoost != null)
+                    || (mNrRsrpBoost != null && mNrarfcnRangeListForRsrpBoost == null)
+                    || (mNrRsrpBoost != null && mNrarfcnRangeListForRsrpBoost != null
+                    && mNrRsrpBoost.length != mNrarfcnRangeListForRsrpBoost.size())) {
+                loge("Invalid parameters for NR RSRP boost");
+                mNrRsrpBoost = null;
+                mNrarfcnRangeListForRsrpBoost = null;
+            }
         }
     }
 
@@ -5212,15 +5226,36 @@
         }
     }
 
-    private void updateServiceStateLteEarfcnBoost(ServiceState serviceState, int lteEarfcn) {
-        synchronized (mLteRsrpBoostLock) {
-            if ((lteEarfcn != INVALID_LTE_EARFCN)
-                    && containsEarfcnInEarfcnRange(mEarfcnPairListForRsrpBoost, lteEarfcn)) {
-                serviceState.setLteEarfcnRsrpBoost(mLteRsrpBoost);
-            } else {
-                serviceState.setLteEarfcnRsrpBoost(0);
+    private void updateServiceStateArfcnRsrpBoost(ServiceState serviceState,
+            CellIdentity cellIdentity) {
+        int rsrpBoost = 0;
+        int arfcn;
+
+        synchronized (mRsrpBoostLock) {
+            switch (cellIdentity.getType()) {
+                case CellInfo.TYPE_LTE:
+                    arfcn = ((CellIdentityLte) cellIdentity).getEarfcn();
+                    if (arfcn != INVALID_ARFCN
+                            && containsEarfcnInEarfcnRange(mEarfcnPairListForRsrpBoost,
+                            arfcn) != -1) {
+                        rsrpBoost = mLteRsrpBoost;
+                    }
+                    break;
+                case CellInfo.TYPE_NR:
+                    arfcn = ((CellIdentityNr) cellIdentity).getNrarfcn();
+                    if (arfcn != INVALID_ARFCN) {
+                        int index = containsEarfcnInEarfcnRange(mNrarfcnRangeListForRsrpBoost,
+                                arfcn);
+                        if (index != -1) {
+                            rsrpBoost = mNrRsrpBoost[index];
+                        }
+                    }
+                    break;
+                default:
+                    break;
             }
         }
+        serviceState.setArfcnRsrpBoost(rsrpBoost);
     }
 
     /**
@@ -5469,11 +5504,12 @@
         }
     }
 
-    private void dumpEarfcnPairList(PrintWriter pw) {
-        pw.print(" mEarfcnPairListForRsrpBoost={");
-        if (mEarfcnPairListForRsrpBoost != null) {
-            int i = mEarfcnPairListForRsrpBoost.size();
-            for (Pair<Integer, Integer> earfcnPair : mEarfcnPairListForRsrpBoost) {
+    private void dumpEarfcnPairList(PrintWriter pw, ArrayList<Pair<Integer, Integer>> pairList,
+            String name) {
+        pw.print(" " + name + "={");
+        if (pairList != null) {
+            int i = pairList.size();
+            for (Pair<Integer, Integer> earfcnPair : pairList) {
                 pw.print("(");
                 pw.print(earfcnPair.first);
                 pw.print(",");
@@ -5570,9 +5606,11 @@
         pw.println(" mDeviceShuttingDown=" + mDeviceShuttingDown);
         pw.println(" mSpnUpdatePending=" + mSpnUpdatePending);
         pw.println(" mLteRsrpBoost=" + mLteRsrpBoost);
+        pw.println(" mNrRsrpBoost=" + Arrays.toString(mNrRsrpBoost));
         pw.println(" mCellInfoMinIntervalMs=" + mCellInfoMinIntervalMs);
         pw.println(" mEriManager=" + mEriManager);
-        dumpEarfcnPairList(pw);
+        dumpEarfcnPairList(pw, mEarfcnPairListForRsrpBoost, "mEarfcnPairListForRsrpBoost");
+        dumpEarfcnPairList(pw, mNrarfcnRangeListForRsrpBoost, "mNrarfcnRangeListForRsrpBoost");
 
         mLocaleTracker.dump(fd, pw, args);
         IndentingPrintWriter ipw = new IndentingPrintWriter(pw, "    ");
diff --git a/src/java/com/android/internal/telephony/SimActivationTracker.java b/src/java/com/android/internal/telephony/SimActivationTracker.java
index 2daf858..80d23e8 100644
--- a/src/java/com/android/internal/telephony/SimActivationTracker.java
+++ b/src/java/com/android/internal/telephony/SimActivationTracker.java
@@ -64,8 +64,8 @@
      * @see android.telephony.TelephonyManager#SIM_ACTIVATION_STATE_RESTRICTED
      */
     private int mDataActivationState;
-    private final LocalLog mVoiceActivationStateLog = new LocalLog(10);
-    private final LocalLog mDataActivationStateLog = new LocalLog(10);
+    private final LocalLog mVoiceActivationStateLog = new LocalLog(8);
+    private final LocalLog mDataActivationStateLog = new LocalLog(8);
     private final BroadcastReceiver mReceiver;
 
     public SimActivationTracker(Phone phone) {
diff --git a/src/java/com/android/internal/telephony/SubscriptionController.java b/src/java/com/android/internal/telephony/SubscriptionController.java
index 7012c1b..1480c8c 100644
--- a/src/java/com/android/internal/telephony/SubscriptionController.java
+++ b/src/java/com/android/internal/telephony/SubscriptionController.java
@@ -119,7 +119,7 @@
     private static final int DEPRECATED_SETTING = -1;
     private static final ParcelUuid INVALID_GROUP_UUID =
             ParcelUuid.fromString(CarrierConfigManager.REMOVE_GROUP_UUID_STRING);
-    private final LocalLog mLocalLog = new LocalLog(200);
+    private final LocalLog mLocalLog = new LocalLog(128);
     private static final int SUB_ID_FOUND = 1;
     private static final int NO_ENTRY_FOR_SLOT_INDEX = -1;
     private static final int SUB_ID_NOT_IN_SLOT = -2;
diff --git a/src/java/com/android/internal/telephony/dataconnection/ApnContext.java b/src/java/com/android/internal/telephony/dataconnection/ApnContext.java
index 9084a87..d9c24e6 100644
--- a/src/java/com/android/internal/telephony/dataconnection/ApnContext.java
+++ b/src/java/com/android/internal/telephony/dataconnection/ApnContext.java
@@ -394,9 +394,9 @@
         }
     }
 
-    private final LocalLog mLocalLog = new LocalLog(150);
+    private final LocalLog mLocalLog = new LocalLog(128);
     private final ArraySet<NetworkRequest> mNetworkRequests = new ArraySet<>();
-    private final LocalLog mStateLocalLog = new LocalLog(50);
+    private final LocalLog mStateLocalLog = new LocalLog(32);
 
     public void requestLog(String str) {
         synchronized (mLocalLog) {
diff --git a/src/java/com/android/internal/telephony/dataconnection/DataConnection.java b/src/java/com/android/internal/telephony/dataconnection/DataConnection.java
index 0551086..9598cdb 100644
--- a/src/java/com/android/internal/telephony/dataconnection/DataConnection.java
+++ b/src/java/com/android/internal/telephony/dataconnection/DataConnection.java
@@ -213,7 +213,7 @@
 
     private final String mTagSuffix;
 
-    private final LocalLog mHandoverLocalLog = new LocalLog(100);
+    private final LocalLog mHandoverLocalLog = new LocalLog(64);
 
     private int[] mAdministratorUids = new int[0];
 
diff --git a/src/java/com/android/internal/telephony/dataconnection/DataEnabledSettings.java b/src/java/com/android/internal/telephony/dataconnection/DataEnabledSettings.java
index 734dfff..92ddf54 100644
--- a/src/java/com/android/internal/telephony/dataconnection/DataEnabledSettings.java
+++ b/src/java/com/android/internal/telephony/dataconnection/DataEnabledSettings.java
@@ -135,7 +135,7 @@
     private final RegistrantList mOverallDataEnabledOverrideChangedRegistrants =
             new RegistrantList();
 
-    private final LocalLog mSettingChangeLocalLog = new LocalLog(50);
+    private final LocalLog mSettingChangeLocalLog = new LocalLog(32);
 
     private DataEnabledOverride mDataEnabledOverride;
 
diff --git a/src/java/com/android/internal/telephony/dataconnection/DcNetworkAgent.java b/src/java/com/android/internal/telephony/dataconnection/DcNetworkAgent.java
index 9a2cebf..37784be 100644
--- a/src/java/com/android/internal/telephony/dataconnection/DcNetworkAgent.java
+++ b/src/java/com/android/internal/telephony/dataconnection/DcNetworkAgent.java
@@ -37,7 +37,6 @@
 import android.telephony.NetworkRegistrationInfo;
 import android.telephony.ServiceState;
 import android.telephony.TelephonyManager;
-import android.telephony.data.NrQosSessionAttributes;
 import android.telephony.data.QosBearerSession;
 import android.util.ArrayMap;
 import android.util.LocalLog;
@@ -90,7 +89,7 @@
 
     private DataConnection mDataConnection;
 
-    private final LocalLog mNetCapsLocalLog = new LocalLog(50);
+    private final LocalLog mNetCapsLocalLog = new LocalLog(32);
 
     // For interface duplicate detection. Key is the net id, value is the interface name in string.
     private static Map<Integer, String> sInterfaceNames = new ArrayMap<>();
diff --git a/src/java/com/android/internal/telephony/dataconnection/DcTracker.java b/src/java/com/android/internal/telephony/dataconnection/DcTracker.java
index d528ae0..0f027d5 100644
--- a/src/java/com/android/internal/telephony/dataconnection/DcTracker.java
+++ b/src/java/com/android/internal/telephony/dataconnection/DcTracker.java
@@ -336,8 +336,8 @@
 
     private AsyncChannel mReplyAc = new AsyncChannel();
 
-    private final LocalLog mDataRoamingLeakageLog = new LocalLog(50);
-    private final LocalLog mApnSettingsInitializationLog = new LocalLog(50);
+    private final LocalLog mDataRoamingLeakageLog = new LocalLog(32);
+    private final LocalLog mApnSettingsInitializationLog = new LocalLog(32);
 
     /* 5G connection reevaluation watchdog alarm constants */
     private long mWatchdogTimeMs = 1000 * 60 * 60;
diff --git a/src/java/com/android/internal/telephony/dataconnection/TelephonyNetworkFactory.java b/src/java/com/android/internal/telephony/dataconnection/TelephonyNetworkFactory.java
index df3f0f1..313ab9f 100644
--- a/src/java/com/android/internal/telephony/dataconnection/TelephonyNetworkFactory.java
+++ b/src/java/com/android/internal/telephony/dataconnection/TelephonyNetworkFactory.java
@@ -52,7 +52,7 @@
     public final String LOG_TAG;
     protected static final boolean DBG = true;
 
-    private static final int REQUEST_LOG_SIZE = 40;
+    private static final int REQUEST_LOG_SIZE = 32;
 
     private static final int ACTION_NO_OP   = 0;
     private static final int ACTION_REQUEST = 1;
diff --git a/src/java/com/android/internal/telephony/dataconnection/TransportManager.java b/src/java/com/android/internal/telephony/dataconnection/TransportManager.java
index ff11425..54f7d75 100644
--- a/src/java/com/android/internal/telephony/dataconnection/TransportManager.java
+++ b/src/java/com/android/internal/telephony/dataconnection/TransportManager.java
@@ -151,7 +151,7 @@
 
     private final Phone mPhone;
 
-    private final LocalLog mLocalLog = new LocalLog(100);
+    private final LocalLog mLocalLog = new LocalLog(64);
 
     /** The available transports. Must be one or more of AccessNetworkConstants.TransportType.XXX */
     private final int[] mAvailableTransports;
diff --git a/src/java/com/android/internal/telephony/emergency/EmergencyNumberTracker.java b/src/java/com/android/internal/telephony/emergency/EmergencyNumberTracker.java
index c66dc5d..cb53832 100644
--- a/src/java/com/android/internal/telephony/emergency/EmergencyNumberTracker.java
+++ b/src/java/com/android/internal/telephony/emergency/EmergencyNumberTracker.java
@@ -112,11 +112,11 @@
     private List<EmergencyNumber> mEmergencyNumberListFromTestMode = new ArrayList<>();
     private List<EmergencyNumber> mEmergencyNumberList = new ArrayList<>();
 
-    private final LocalLog mEmergencyNumberListDatabaseLocalLog = new LocalLog(20);
-    private final LocalLog mEmergencyNumberListRadioLocalLog = new LocalLog(20);
-    private final LocalLog mEmergencyNumberListPrefixLocalLog = new LocalLog(20);
-    private final LocalLog mEmergencyNumberListTestModeLocalLog = new LocalLog(20);
-    private final LocalLog mEmergencyNumberListLocalLog = new LocalLog(20);
+    private final LocalLog mEmergencyNumberListDatabaseLocalLog = new LocalLog(16);
+    private final LocalLog mEmergencyNumberListRadioLocalLog = new LocalLog(16);
+    private final LocalLog mEmergencyNumberListPrefixLocalLog = new LocalLog(16);
+    private final LocalLog mEmergencyNumberListTestModeLocalLog = new LocalLog(16);
+    private final LocalLog mEmergencyNumberListLocalLog = new LocalLog(16);
 
     /** Event indicating the update for the emergency number list from the radio. */
     private static final int EVENT_UNSOL_EMERGENCY_NUMBER_LIST = 1;
diff --git a/src/java/com/android/internal/telephony/ims/ImsResolver.java b/src/java/com/android/internal/telephony/ims/ImsResolver.java
index 0fae251..2a9fc7c 100644
--- a/src/java/com/android/internal/telephony/ims/ImsResolver.java
+++ b/src/java/com/android/internal/telephony/ims/ImsResolver.java
@@ -433,7 +433,7 @@
     // should only be accessed from handler
     private Map<Integer, String> mDeviceServices;
     // Persistent Logging
-    private final LocalLog mEventLog = new LocalLog(50);
+    private final LocalLog mEventLog = new LocalLog(32);
 
     private boolean mBootCompletedHandlerRan = false;
 
diff --git a/src/java/com/android/internal/telephony/ims/ImsServiceController.java b/src/java/com/android/internal/telephony/ims/ImsServiceController.java
index 82122db..b4002fb 100644
--- a/src/java/com/android/internal/telephony/ims/ImsServiceController.java
+++ b/src/java/com/android/internal/telephony/ims/ImsServiceController.java
@@ -241,7 +241,7 @@
     private ImsServiceConnection mImsServiceConnection;
     // Only added or removed, never accessed on purpose.
     private Set<ImsFeatureStatusCallback> mFeatureStatusCallbacks = new HashSet<>();
-    private final LocalLog mLocalLog = new LocalLog(10);
+    private final LocalLog mLocalLog = new LocalLog(8);
 
     protected final Object mLock = new Object();
     protected final Context mContext;
diff --git a/src/java/com/android/internal/telephony/imsphone/ImsPhone.java b/src/java/com/android/internal/telephony/imsphone/ImsPhone.java
index 209646d..410fbdb 100644
--- a/src/java/com/android/internal/telephony/imsphone/ImsPhone.java
+++ b/src/java/com/android/internal/telephony/imsphone/ImsPhone.java
@@ -267,7 +267,7 @@
 
     private final RegistrantList mSilentRedialRegistrants = new RegistrantList();
 
-    private final LocalLog mRegLocalLog = new LocalLog(100);
+    private final LocalLog mRegLocalLog = new LocalLog(64);
     private TelephonyMetrics mMetrics;
 
     // The helper class to receive and store the MmTel registration status updated.
diff --git a/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java b/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java
index 08db74e..b28d866 100755
--- a/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java
+++ b/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java
@@ -902,9 +902,9 @@
     private final FeatureConnector<ImsManager> mImsManagerConnector;
 
     // Used exclusively for IMS Registration related events for logging.
-    private final LocalLog mRegLocalLog = new LocalLog(100);
+    private final LocalLog mRegLocalLog = new LocalLog(64);
     // Used for important operational related events for logging.
-    private final LocalLog mOperationLocalLog = new LocalLog(100);
+    private final LocalLog mOperationLocalLog = new LocalLog(64);
 
     //***** Events
 
diff --git a/src/java/com/android/internal/telephony/nitz/TimeServiceHelperImpl.java b/src/java/com/android/internal/telephony/nitz/TimeServiceHelperImpl.java
index 7f85786..6fa77f0 100644
--- a/src/java/com/android/internal/telephony/nitz/TimeServiceHelperImpl.java
+++ b/src/java/com/android/internal/telephony/nitz/TimeServiceHelperImpl.java
@@ -43,8 +43,8 @@
     private final TimeDetector mTimeDetector;
     private final TimeZoneDetector mTimeZoneDetector;
 
-    private final LocalLog mTimeZoneLog = new LocalLog(30, false /* mUseLocalTimestamps */);
-    private final LocalLog mTimeLog = new LocalLog(30, false /* mUseLocalTimestamps */);
+    private final LocalLog mTimeZoneLog = new LocalLog(32, false /* mUseLocalTimestamps */);
+    private final LocalLog mTimeLog = new LocalLog(32, false /* mUseLocalTimestamps */);
 
     /**
      * Records the last time zone suggestion made. Used to avoid sending duplicate suggestions to
diff --git a/src/java/com/android/internal/telephony/uicc/UiccCarrierPrivilegeRules.java b/src/java/com/android/internal/telephony/uicc/UiccCarrierPrivilegeRules.java
index 1d7808c..0d905fd 100644
--- a/src/java/com/android/internal/telephony/uicc/UiccCarrierPrivilegeRules.java
+++ b/src/java/com/android/internal/telephony/uicc/UiccCarrierPrivilegeRules.java
@@ -196,7 +196,7 @@
     @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
     private Message mLoadedCallback;
     // LocalLog buffer to hold important status messages for debugging.
-    private LocalLog mStatusMessage = new LocalLog(100);
+    private LocalLog mStatusMessage = new LocalLog(64);
     private int mChannelId; // Channel Id for communicating with UICC.
     private int mRetryCount;  // Number of retries for open logical channel.
     private boolean mCheckedRules = false;  // Flag that used to mark whether get rules from ARA-D.
diff --git a/src/java/com/android/internal/telephony/uicc/UiccController.java b/src/java/com/android/internal/telephony/uicc/UiccController.java
index 03deb24..d278dd6 100644
--- a/src/java/com/android/internal/telephony/uicc/UiccController.java
+++ b/src/java/com/android/internal/telephony/uicc/UiccController.java
@@ -197,7 +197,7 @@
     private final PinStorage mPinStorage;
 
     // LocalLog buffer to hold important SIM related events for debugging
-    private static LocalLog sLocalLog = new LocalLog(TelephonyUtils.IS_DEBUGGABLE ? 250 : 100);
+    private static LocalLog sLocalLog = new LocalLog(TelephonyUtils.IS_DEBUGGABLE ? 256 : 64);
 
     /**
      * API to make UiccController singleton if not already created.
diff --git a/tests/telephonytests/src/com/android/internal/telephony/CellSignalStrengthNrTest.java b/tests/telephonytests/src/com/android/internal/telephony/CellSignalStrengthNrTest.java
index 31b6c0e..a294471 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/CellSignalStrengthNrTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/CellSignalStrengthNrTest.java
@@ -18,17 +18,23 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.doReturn;
+
 import android.hardware.radio.V1_6.NrSignalStrength;
 import android.os.Parcel;
 import android.telephony.CellInfo;
 import android.telephony.CellSignalStrength;
 import android.telephony.CellSignalStrengthNr;
-import android.test.AndroidTestCase;
+import android.telephony.ServiceState;
 
 import com.google.common.collect.BoundType;
 import com.google.common.collect.Range;
 
+import org.junit.After;
+import org.junit.Before;
 import org.junit.Test;
+import org.mockito.Mock;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -36,7 +42,7 @@
 import java.util.List;
 import java.util.stream.Collectors;
 
-public class CellSignalStrengthNrTest extends AndroidTestCase {
+public class CellSignalStrengthNrTest extends TelephonyTest {
     private static final int CSIRSRP = -123;
     private static final int CSIRSRQ = -11;
     private static final int ANOTHER_CSIRSRP = -111;
@@ -51,6 +57,19 @@
     private static final int SSRSRQ = -13;
     private static final int SSSINR = 32;
 
+    @Mock
+    ServiceState mSS;
+
+    @Before
+    public void setUp() throws Exception {
+        super.setUp(this.getClass().getSimpleName());
+    }
+
+    @After
+    public void tearDown() throws Exception {
+        super.tearDown();
+    }
+
     private List<Integer> getCsiCqiList() {
         return CSICQI_REPORT.stream()
                 .map(cqi -> new Integer(Byte.toUnsignedInt(cqi)))
@@ -220,4 +239,19 @@
         assertThat(anotherCss.getSsRsrq()).isEqualTo(SSRSRQ);
         assertThat(anotherCss.getSsSinr()).isEqualTo(SSSINR);
     }
+
+    @Test
+    public void testLevel() {
+        CellSignalStrengthNr css = new CellSignalStrengthNr(CSIRSRP, CSIRSRQ, CSISINR, SSRSRP,
+                SSRSRQ, SSSINR);
+
+        // No keys in the bundle - should use RSRP and default levels.
+        css.updateLevel(null, null);
+        assertEquals(0 /* NONE or UNKNOWN */, css.getLevel());
+
+        doReturn(10).when(mSS).getArfcnRsrpBoost();
+        // Add rsrp boost and level should change to 1 - POOR
+        css.updateLevel(null, mSS);
+        assertEquals(1 /* MODERATE */, css.getLevel());
+    }
 }
diff --git a/tests/telephonytests/src/com/android/internal/telephony/GsmCdmaPhoneTest.java b/tests/telephonytests/src/com/android/internal/telephony/GsmCdmaPhoneTest.java
index 190c331..e6e105c 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/GsmCdmaPhoneTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/GsmCdmaPhoneTest.java
@@ -1414,6 +1414,19 @@
 
     @Test
     @SmallTest
+    public void testSetRadioPowerOnForTestEmergencyCall() {
+        mPhoneUT.setRadioPower(false);
+        verify(mSST).setRadioPowerForReason(false, false, false, false,
+                Phone.RADIO_POWER_REASON_USER);
+
+        mPhoneUT.setRadioPowerOnForTestEmergencyCall(false);
+        verify(mSST).clearAllRadioOffReasons();
+        verify(mSST).setRadioPowerForReason(eq(true), eq(false), anyBoolean(), eq(false),
+                eq(Phone.RADIO_POWER_REASON_USER));
+    }
+
+    @Test
+    @SmallTest
     public void testReapplyUiccApplicationEnablementRetry() throws Exception {
         mPhoneUT.mCi = mMockCi;
         // Set SIM to be present, with a fake iccId, and notify enablement being false.