From 56966ce8f5100b17283fdaf9eacc4b98a05ba4a6 Mon Sep 17 00:00:00 2001 From: Julia Reynolds Date: Wed, 19 Sep 2018 12:23:41 -0400 Subject: [PATCH] Add checks before casting entry.extraInfo. Test: make, flash Change-Id: I1a9d6a51b1f236e711fdb49d9c2f795e7023cfce Fixes: 113309404 --- .../ManageApplications.java | 6 +++-- .../ManageApplicationsTest.java | 22 +++++++++++++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/src/com/android/settings/applications/manageapplications/ManageApplications.java b/src/com/android/settings/applications/manageapplications/ManageApplications.java index eb258ac2ad8..35c6d1c4796 100644 --- a/src/com/android/settings/applications/manageapplications/ManageApplications.java +++ b/src/com/android/settings/applications/manageapplications/ManageApplications.java @@ -1335,7 +1335,8 @@ public class ManageApplications extends InstrumentedFragment private void updateSummary(ApplicationViewHolder holder, AppEntry entry) { switch (mManageApplications.mListType) { case LIST_TYPE_NOTIFICATION: - if (entry.extraInfo != null) { + if (entry.extraInfo != null + && entry.extraInfo instanceof NotificationsSentState) { holder.setSummary(AppStateNotificationBridge.getSummary(mContext, (NotificationsSentState) entry.extraInfo, (mLastSortMode == R.id.sort_order_recent_notification))); @@ -1384,7 +1385,8 @@ public class ManageApplications extends InstrumentedFragment .getSwitchOnClickListener(entry), AppStateNotificationBridge.enableSwitch(entry), AppStateNotificationBridge.checkSwitch(entry)); - if (entry.extraInfo != null) { + if (entry.extraInfo != null + && entry.extraInfo instanceof NotificationsSentState) { holder.setSummary(AppStateNotificationBridge.getSummary(mContext, (NotificationsSentState) entry.extraInfo, (mLastSortMode == R.id.sort_order_recent_notification))); diff --git a/tests/robotests/src/com/android/settings/applications/manageapplications/ManageApplicationsTest.java b/tests/robotests/src/com/android/settings/applications/manageapplications/ManageApplicationsTest.java index da88e543f55..c9ab7c0ebc9 100644 --- a/tests/robotests/src/com/android/settings/applications/manageapplications/ManageApplicationsTest.java +++ b/tests/robotests/src/com/android/settings/applications/manageapplications/ManageApplicationsTest.java @@ -281,6 +281,28 @@ public class ManageApplicationsTest { verify(adapter).notifyDataSetChanged(); } + @Test + public void applicationsAdapter_onBindViewHolder_notifications_wrongExtraInfo() { + when(mUserManager.getProfileIdsWithDisabled(anyInt())).thenReturn(new int[]{}); + ReflectionHelpers.setField(mFragment, "mUserManager", mUserManager); + mFragment.mListType = LIST_TYPE_NOTIFICATION; + ApplicationViewHolder holder = mock(ApplicationViewHolder.class); + ReflectionHelpers.setField(holder, "itemView", mock(View.class)); + ManageApplications.ApplicationsAdapter adapter = + new ManageApplications.ApplicationsAdapter(mState, + mFragment, mock(AppFilterItem.class), + mock(Bundle.class)); + final ArrayList appList = new ArrayList<>(); + final ApplicationsState.AppEntry appEntry = mock(ApplicationsState.AppEntry.class); + appEntry.info = mock(ApplicationInfo.class); + appEntry.extraInfo = mock(AppFilterItem.class); + appList.add(appEntry); + ReflectionHelpers.setField(adapter, "mEntries", appList); + + adapter.onBindViewHolder(holder, 0); + // no crash? yay! + } + @Test public void applicationsAdapter_onBindViewHolder_updateSwitch_notifications() { when(mUserManager.getProfileIdsWithDisabled(anyInt())).thenReturn(new int[]{});