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 8ddd4c9816cd3..2458223310cfe 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/UserDetailView.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/UserDetailView.java @@ -34,10 +34,13 @@ import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.settingslib.RestrictedLockUtils; import com.android.settingslib.drawable.CircleFramedDrawable; import com.android.systemui.R; +import com.android.systemui.plugins.FalsingManager; import com.android.systemui.qs.PseudoGridView; import com.android.systemui.qs.QSUserSwitcherEvent; import com.android.systemui.statusbar.policy.UserSwitcherController; +import javax.inject.Inject; + /** * Quick settings detail view for user switching. */ @@ -54,9 +57,9 @@ public class UserDetailView extends PseudoGridView { R.layout.qs_user_detail, parent, attach); } - public void createAndSetAdapter(UserSwitcherController controller, - UiEventLogger uiEventLogger) { - mAdapter = new Adapter(mContext, controller, uiEventLogger); + /** Set a {@link android.widget.BaseAdapter} */ + public void setAdapter(Adapter adapter) { + mAdapter = adapter; ViewGroupAdapterBridge.link(this, mAdapter); } @@ -71,13 +74,16 @@ public class UserDetailView extends PseudoGridView { protected UserSwitcherController mController; private View mCurrentUserView; private final UiEventLogger mUiEventLogger; + private final FalsingManager mFalsingManager; + @Inject public Adapter(Context context, UserSwitcherController controller, - UiEventLogger uiEventLogger) { + UiEventLogger uiEventLogger, FalsingManager falsingManager) { super(controller); mContext = context; mController = controller; mUiEventLogger = uiEventLogger; + mFalsingManager = falsingManager; } @Override @@ -140,6 +146,10 @@ public class UserDetailView extends PseudoGridView { @Override public void onClick(View view) { + if (mFalsingManager.isFalseTap(FalsingManager.MODERATE_PENALTY)) { + return; + } + UserSwitcherController.UserRecord tag = (UserSwitcherController.UserRecord) view.getTag(); if (tag.isDisabledByAdmin) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardQsUserSwitchController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardQsUserSwitchController.java index d52ea890af7ee..62b1e8a6b3143 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardQsUserSwitchController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardQsUserSwitchController.java @@ -28,7 +28,6 @@ import android.view.View; import android.view.ViewGroup; import android.view.accessibility.AccessibilityNodeInfo; -import com.android.internal.logging.UiEventLogger; import com.android.keyguard.KeyguardConstants; import com.android.keyguard.KeyguardVisibilityHelper; import com.android.keyguard.dagger.KeyguardUserSwitcherScope; @@ -37,6 +36,7 @@ import com.android.systemui.R; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.keyguard.ScreenLifecycle; import com.android.systemui.plugins.statusbar.StatusBarStateController; +import com.android.systemui.qs.tiles.UserDetailView; import com.android.systemui.statusbar.SysuiStatusBarStateController; import com.android.systemui.statusbar.notification.AnimatableProperty; import com.android.systemui.statusbar.notification.PropertyAnimator; @@ -48,6 +48,7 @@ import com.android.systemui.statusbar.phone.UserAvatarView; import com.android.systemui.util.ViewController; import javax.inject.Inject; +import javax.inject.Provider; /** * Manages the user switch on the Keyguard that is used for opening the QS user panel. @@ -108,7 +109,7 @@ public class KeyguardQsUserSwitchController extends ViewController userDetailViewAdapterProvider) { super(view); if (DEBUG) Log.d(TAG, "New KeyguardQsUserSwitchController"); mContext = context; @@ -120,8 +121,7 @@ public class KeyguardQsUserSwitchController extends ViewController userDetailViewAdapterProvider) { + super(context, userDetailViewAdapterProvider); } @Override diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.java index 1a9b9bfda1ad7..5c440173e547b 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.java @@ -78,6 +78,7 @@ import java.util.ArrayList; import java.util.List; import javax.inject.Inject; +import javax.inject.Provider; /** * Keeps a list of all users on the device for user switching. @@ -128,14 +129,14 @@ public class UserSwitcherController implements Dumpable { @Main Handler handler, ActivityStarter activityStarter, BroadcastDispatcher broadcastDispatcher, UiEventLogger uiEventLogger, TelephonyListenerManager telephonyListenerManager, - IActivityTaskManager activityTaskManager) { + IActivityTaskManager activityTaskManager, UserDetailAdapter userDetailAdapter) { mContext = context; mBroadcastDispatcher = broadcastDispatcher; mTelephonyListenerManager = telephonyListenerManager; mActivityTaskManager = activityTaskManager; mUiEventLogger = uiEventLogger; mGuestResumeSessionReceiver = new GuestResumeSessionReceiver(mUiEventLogger); - mUserDetailAdapter = new UserDetailAdapter(this, mContext, mUiEventLogger); + mUserDetailAdapter = userDetailAdapter; if (!UserManager.isGuestUserEphemeral()) { mGuestResumeSessionReceiver.register(mBroadcastDispatcher); } @@ -789,15 +790,14 @@ public class UserSwitcherController implements Dumpable { public static class UserDetailAdapter implements DetailAdapter { private final Intent USER_SETTINGS_INTENT = new Intent(Settings.ACTION_USER_SETTINGS); - private final UserSwitcherController mUserSwitcherController; private final Context mContext; - private final UiEventLogger mUiEventLogger; + private final Provider mUserDetailViewAdapterProvider; - UserDetailAdapter(UserSwitcherController userSwitcherController, Context context, - UiEventLogger uiEventLogger) { - mUserSwitcherController = userSwitcherController; + @Inject + UserDetailAdapter(Context context, + Provider userDetailViewAdapterProvider) { mContext = context; - mUiEventLogger = uiEventLogger; + mUserDetailViewAdapterProvider = userDetailViewAdapterProvider; } @Override @@ -810,7 +810,7 @@ public class UserSwitcherController implements Dumpable { UserDetailView v; if (!(convertView instanceof UserDetailView)) { v = UserDetailView.inflate(context, parent, false); - v.createAndSetAdapter(mUserSwitcherController, mUiEventLogger); + v.setAdapter(mUserDetailViewAdapterProvider.get()); } else { v = (UserDetailView) convertView; } 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 f48b3fc51e821..af75f2c661955 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 @@ -28,6 +28,7 @@ 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.classifier.FalsingManagerFake import com.android.systemui.qs.QSUserSwitcherEvent import com.android.systemui.statusbar.policy.UserSwitcherController import org.junit.Assert.assertEquals @@ -53,6 +54,7 @@ class UserDetailViewAdapterTest : SysuiTestCase() { @Mock private lateinit var mInflatedUserDetailItemView: UserDetailItemView @Mock private lateinit var mUserInfo: UserInfo @Mock private lateinit var mLayoutInflater: LayoutInflater + private var falsingManagerFake: FalsingManagerFake = FalsingManagerFake() private lateinit var adapter: UserDetailView.Adapter private lateinit var uiEventLogger: UiEventLoggerFake private lateinit var mPicture: Bitmap @@ -65,7 +67,8 @@ class UserDetailViewAdapterTest : SysuiTestCase() { mContext.addMockSystemService(Context.LAYOUT_INFLATER_SERVICE, mLayoutInflater) `when`(mLayoutInflater.inflate(anyInt(), any(ViewGroup::class.java), anyBoolean())) .thenReturn(mInflatedUserDetailItemView) - adapter = UserDetailView.Adapter(mContext, mUserSwitcherController, uiEventLogger) + adapter = UserDetailView.Adapter(mContext, mUserSwitcherController, uiEventLogger, + falsingManagerFake) mPicture = UserIcons.convertToBitmap(mContext.getDrawable(R.drawable.ic_avatar_user)) }