From 8b0ac8fc8e5216ea96c761c076d018e8c88c38a4 Mon Sep 17 00:00:00 2001 From: Ben Murdoch Date: Thu, 9 Jul 2020 19:35:59 +0100 Subject: Fix crashes in UserDetailViewAdapterTest. ag/12048551 exposed some issues running these tests with mocks. 1. Once UserDetailItemView was created from the mocked convertView, it returned null from getResources. Fix by calling getResources through Context instead. 2. CircleFramedDrawable needs a real bitmap to work. Using a mock ended up in a native crash somewhere in libhwui. Bug: 160794744 Test: atest UserDetailViewAdapterTest Change-Id: I85a84dbd454ebb1627e4ded21e6708c7fedac11c --- .../SystemUI/src/com/android/systemui/qs/tiles/UserDetailView.java | 3 ++- .../android/systemui/statusbar/policy/KeyguardUserSwitcher.java | 3 ++- .../src/com/android/systemui/qs/tiles/UserDetailViewAdapterTest.kt | 7 +++++-- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/UserDetailView.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/UserDetailView.java index 2ef693467d27..201ed9c9ebec 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/UserDetailView.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/UserDetailView.java @@ -100,7 +100,8 @@ public class UserDetailView extends PseudoGridView { if (item.picture == null) { v.bind(name, getDrawable(mContext, item).mutate(), item.resolveId()); } else { - int avatarSize = (int) v.getResources().getDimension(R.dimen.qs_framed_avatar_size); + int avatarSize = + (int) mContext.getResources().getDimension(R.dimen.qs_framed_avatar_size); Drawable drawable = new CircleFramedDrawable(item.picture, avatarSize); drawable.setColorFilter( item.isSwitchToEnabled ? null : getDisabledUserAvatarColorFilter()); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardUserSwitcher.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardUserSwitcher.java index 5ec5ec662164..f52a6e0191a1 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardUserSwitcher.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardUserSwitcher.java @@ -288,7 +288,8 @@ public class KeyguardUserSwitcher { if (item.picture == null) { v.bind(name, getDrawable(mContext, item).mutate(), item.resolveId()); } else { - int avatarSize = (int) v.getResources().getDimension(R.dimen.kg_framed_avatar_size); + int avatarSize = + (int) mContext.getResources().getDimension(R.dimen.kg_framed_avatar_size); Drawable drawable = new CircleFramedDrawable(item.picture, avatarSize); drawable.setColorFilter( item.isSwitchToEnabled ? null : getDisabledUserAvatarColorFilter()); diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/UserDetailViewAdapterTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/UserDetailViewAdapterTest.kt index 6d6a4d8f6b7d..f48b3fc51e82 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/UserDetailViewAdapterTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/UserDetailViewAdapterTest.kt @@ -25,6 +25,8 @@ import android.view.View import android.view.ViewGroup import androidx.test.filters.SmallTest import com.android.internal.logging.testing.UiEventLoggerFake +import com.android.internal.util.UserIcons +import com.android.systemui.R import com.android.systemui.SysuiTestCase import com.android.systemui.qs.QSUserSwitcherEvent import com.android.systemui.statusbar.policy.UserSwitcherController @@ -50,10 +52,10 @@ class UserDetailViewAdapterTest : SysuiTestCase() { @Mock private lateinit var mOtherView: View @Mock private lateinit var mInflatedUserDetailItemView: UserDetailItemView @Mock private lateinit var mUserInfo: UserInfo - @Mock private lateinit var mPicture: Bitmap @Mock private lateinit var mLayoutInflater: LayoutInflater private lateinit var adapter: UserDetailView.Adapter private lateinit var uiEventLogger: UiEventLoggerFake + private lateinit var mPicture: Bitmap @Before fun setUp() { @@ -64,6 +66,7 @@ class UserDetailViewAdapterTest : SysuiTestCase() { `when`(mLayoutInflater.inflate(anyInt(), any(ViewGroup::class.java), anyBoolean())) .thenReturn(mInflatedUserDetailItemView) adapter = UserDetailView.Adapter(mContext, mUserSwitcherController, uiEventLogger) + mPicture = UserIcons.convertToBitmap(mContext.getDrawable(R.drawable.ic_avatar_user)) } private fun clickableTest( @@ -141,4 +144,4 @@ class UserDetailViewAdapterTest : SysuiTestCase() { false /* isAddUser */, false /* isRestricted */, true /* isSwitchToEnabled */) -} \ No newline at end of file +} -- cgit v1.2.3-59-g8ed1b