From 492e985708f5c6c715e65e15caf2f7d3c696be62 Mon Sep 17 00:00:00 2001 From: Jing Ji Date: Tue, 26 Jan 2021 17:57:24 +0800 Subject: [PATCH] Fix crash issue when NetworkSelectSettings UI goes OFF and then ON When updating selected preference instance by index, since mPreferenceCategory hasn't been updated yet, and then there is a possibility that the index is over the size of preference, so this would result to Settings crash because IndexOutOfBoundsException was detected in NetworkSelectSettings. After updating the network preferences of mPreferenceCategory, update the selected preference. Test: manual - Checked that crash does not occur when NetworkSelectSettings UI goes OFF and then ON. Test: auto - Passed NetworkSelectSettingsTest. Bug: 179754915 Change-Id: Ib736fe8fdcc82c3ac01ad1828d0f2a1c24610f2b --- .../telephony/NetworkSelectSettings.java | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/com/android/settings/network/telephony/NetworkSelectSettings.java b/src/com/android/settings/network/telephony/NetworkSelectSettings.java index ff641e9851b..c8121c491be 100644 --- a/src/com/android/settings/network/telephony/NetworkSelectSettings.java +++ b/src/com/android/settings/network/telephony/NetworkSelectSettings.java @@ -343,16 +343,6 @@ public class NetworkSelectSettings extends DashboardFragment { mPreferenceCategory.getPreference(numberOfPreferences)); } - // update selected preference instance by index - for (int index = 0; index < mCellInfoList.size(); index++) { - final CellInfo cellInfo = mCellInfoList.get(index); - - if ((mSelectedPreference != null) && mSelectedPreference.isSameCell(cellInfo)) { - mSelectedPreference = (NetworkOperatorPreference) - (mPreferenceCategory.getPreference(index)); - } - } - // update the content of preference NetworkOperatorPreference connectedPref = null; for (int index = 0; index < mCellInfoList.size(); index++) { @@ -386,6 +376,16 @@ public class NetworkSelectSettings extends DashboardFragment { } } + // update selected preference instance by index + for (int index = 0; index < mCellInfoList.size(); index++) { + final CellInfo cellInfo = mCellInfoList.get(index); + + if ((mSelectedPreference != null) && mSelectedPreference.isSameCell(cellInfo)) { + mSelectedPreference = (NetworkOperatorPreference) + (mPreferenceCategory.getPreference(index)); + } + } + return connectedPref; }