From 09b0edbdee13b64c4455c8d4e734fef7f978e9ae Mon Sep 17 00:00:00 2001 From: Bonian Chen Date: Thu, 8 Dec 2022 05:42:34 +0000 Subject: [PATCH] [Settings] Code refactor 1. Adjust test case for improving testing performance 2. Some code refactor for avoiding from NullPointerException Bug: 260540995 Test: auto and local Change-Id: I18bd474304194137166c3c03ff828abdcd58473e --- .../SimStatusPreferenceController.java | 17 +++++++++++++---- .../deviceinfo/simstatus/SlotSimStatusTest.java | 16 ++++++++++++---- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/src/com/android/settings/deviceinfo/simstatus/SimStatusPreferenceController.java b/src/com/android/settings/deviceinfo/simstatus/SimStatusPreferenceController.java index 3ea8cb46a71..b75853de788 100644 --- a/src/com/android/settings/deviceinfo/simstatus/SimStatusPreferenceController.java +++ b/src/com/android/settings/deviceinfo/simstatus/SimStatusPreferenceController.java @@ -72,6 +72,9 @@ public class SimStatusPreferenceController extends BasePreferenceController { @Override public int getAvailabilityStatus() { + if (getSimSlotIndex() == SubscriptionManager.INVALID_SIM_SLOT_INDEX) { + return UNSUPPORTED_ON_DEVICE; + } boolean isAvailable = SubscriptionUtil.isSimHardwareVisible(mContext) && mContext.getSystemService(UserManager.class).isAdminUser() && !Utils.isWifiOnly(mContext); @@ -81,7 +84,7 @@ public class SimStatusPreferenceController extends BasePreferenceController { @Override public void displayPreference(PreferenceScreen screen) { super.displayPreference(screen); - if (!SubscriptionUtil.isSimHardwareVisible(mContext)) { + if ((!SubscriptionUtil.isSimHardwareVisible(mContext)) || (mSlotSimStatus == null)) { return; } String basePreferenceKey = mSlotSimStatus.getPreferenceKey( @@ -133,17 +136,23 @@ public class SimStatusPreferenceController extends BasePreferenceController { R.string.sim_status_title); } - private CharSequence getCarrierName(int simSlot) { + private SubscriptionInfo getSubscriptionInfo(int simSlot) { final List subscriptionInfoList = mSubscriptionManager.getActiveSubscriptionInfoList(); if (subscriptionInfoList != null) { for (SubscriptionInfo info : subscriptionInfoList) { if (info.getSimSlotIndex() == simSlot) { - return info.getCarrierName(); + return info; } } } - return mContext.getText(R.string.device_info_not_available); + return null; + } + + private CharSequence getCarrierName(int simSlot) { + SubscriptionInfo subInfo = getSubscriptionInfo(simSlot); + return (subInfo != null) ? subInfo.getCarrierName() : + mContext.getText(R.string.device_info_not_available); } @VisibleForTesting diff --git a/tests/unit/src/com/android/settings/deviceinfo/simstatus/SlotSimStatusTest.java b/tests/unit/src/com/android/settings/deviceinfo/simstatus/SlotSimStatusTest.java index 71f0faf5989..4c17d1512d4 100644 --- a/tests/unit/src/com/android/settings/deviceinfo/simstatus/SlotSimStatusTest.java +++ b/tests/unit/src/com/android/settings/deviceinfo/simstatus/SlotSimStatusTest.java @@ -19,6 +19,7 @@ package com.android.settings.deviceinfo.simstatus; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.content.Context; @@ -30,17 +31,22 @@ import androidx.test.ext.junit.runners.AndroidJUnit4; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; +import org.mockito.Captor; import org.mockito.Mock; import org.mockito.MockitoAnnotations; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; +import java.util.concurrent.Executor; @RunWith(AndroidJUnit4.class) public class SlotSimStatusTest { @Mock private TelephonyManager mTelephonyManager; + @Mock + private Executor mExecutor; + @Captor + private ArgumentCaptor mRunnableCaptor; private Context mContext; @@ -65,8 +71,10 @@ public class SlotSimStatusTest { public void size_returnNumberOfPhone_whenQueryInBackgroundThread() { doReturn(2).when(mTelephonyManager).getPhoneCount(); - ExecutorService executor = Executors.newSingleThreadExecutor(); - SlotSimStatus target = new SlotSimStatus(mContext, executor); + SlotSimStatus target = new SlotSimStatus(mContext, mExecutor); + + verify(mExecutor).execute(mRunnableCaptor.capture()); + mRunnableCaptor.getValue().run(); assertEquals(new Integer(target.size()), new Integer(2)); }