From 53bdd9961cd6629cfc8bbc659396a59a5c2f646a Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Tue, 2 Oct 2018 13:36:33 -0700 Subject: [PATCH] Check instance before casting Change-Id: I1917b2d8e045904145ea833abf35fa1d008fa224 Fixes: 116855783 Test: robotests --- .../SpecialAppAccessPreferenceController.java | 5 +++-- ...ecialAppAccessPreferenceControllerTest.java | 18 ++++++++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/com/android/settings/applications/SpecialAppAccessPreferenceController.java b/src/com/android/settings/applications/SpecialAppAccessPreferenceController.java index a395f9833f0..1763d84491a 100644 --- a/src/com/android/settings/applications/SpecialAppAccessPreferenceController.java +++ b/src/com/android/settings/applications/SpecialAppAccessPreferenceController.java @@ -23,6 +23,7 @@ import androidx.preference.PreferenceScreen; import com.android.settings.R; import com.android.settings.core.BasePreferenceController; import com.android.settings.datausage.AppStateDataUsageBridge; +import com.android.settings.datausage.AppStateDataUsageBridge.DataUsageState; import com.android.settings.datausage.DataSaverBackend; import com.android.settingslib.applications.ApplicationsState; import com.android.settingslib.core.lifecycle.Lifecycle; @@ -108,8 +109,8 @@ public class SpecialAppAccessPreferenceController extends BasePreferenceControll if (!ApplicationsState.FILTER_DOWNLOADED_AND_LAUNCHER.filterApp(entry)) { continue; } - if (entry.extraInfo != null && ((AppStateDataUsageBridge.DataUsageState) - entry.extraInfo).isDataSaverWhitelisted) { + if (entry.extraInfo instanceof DataUsageState + && ((DataUsageState) entry.extraInfo).isDataSaverWhitelisted) { count++; } } diff --git a/tests/robotests/src/com/android/settings/applications/SpecialAppAccessPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/SpecialAppAccessPreferenceControllerTest.java index b6429151b67..694625ef082 100644 --- a/tests/robotests/src/com/android/settings/applications/SpecialAppAccessPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/applications/SpecialAppAccessPreferenceControllerTest.java @@ -94,4 +94,22 @@ public class SpecialAppAccessPreferenceControllerTest { .isEqualTo(mContext.getResources().getQuantityString( R.plurals.special_access_summary, 1, 1)); } + + @Test + public void updateState_wrongExtraInfo_shouldNotIncludeInSummary() { + final ArrayList apps = new ArrayList<>(); + final ApplicationsState.AppEntry entry = mock(ApplicationsState.AppEntry.class); + entry.hasLauncherEntry = true; + entry.info = new ApplicationInfo(); + entry.extraInfo = new AppStateNotificationBridge.NotificationsSentState(); + apps.add(entry); + when(mSession.getAllApps()).thenReturn(apps); + + mController.displayPreference(mScreen); + mController.onExtraInfoUpdated(); + + assertThat(mPreference.getSummary()) + .isEqualTo(mContext.getResources().getQuantityString( + R.plurals.special_access_summary, 0, 0)); + } }