Add falsing check to UserDetailView

Fixes: 186244970
Test: atest SystemUITests && manual
Change-Id: I3ec305009a1a094fcb4021a5b058a4f1f6f285d3
This commit is contained in:
Dave Mankoff
2021-04-26 17:13:17 -04:00
parent aca19ed579
commit f1baf5a31d
4 changed files with 34 additions and 21 deletions

View File

@@ -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) {

View File

@@ -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<UserAvatarVie
KeyguardStateController keyguardStateController,
SysuiStatusBarStateController statusBarStateController,
DozeParameters dozeParameters,
UiEventLogger uiEventLogger) {
Provider<UserDetailView.Adapter> userDetailViewAdapterProvider) {
super(view);
if (DEBUG) Log.d(TAG, "New KeyguardQsUserSwitchController");
mContext = context;
@@ -120,8 +121,7 @@ public class KeyguardQsUserSwitchController extends ViewController<UserAvatarVie
mStatusBarStateController = statusBarStateController;
mKeyguardVisibilityHelper = new KeyguardVisibilityHelper(mView,
keyguardStateController, dozeParameters);
mUserDetailAdapter = new KeyguardUserDetailAdapter(mUserSwitcherController, mContext,
uiEventLogger);
mUserDetailAdapter = new KeyguardUserDetailAdapter(context, userDetailViewAdapterProvider);
}
@Override
@@ -304,9 +304,9 @@ public class KeyguardQsUserSwitchController extends ViewController<UserAvatarVie
}
class KeyguardUserDetailAdapter extends UserSwitcherController.UserDetailAdapter {
KeyguardUserDetailAdapter(UserSwitcherController userSwitcherController, Context context,
UiEventLogger uiEventLogger) {
super(userSwitcherController, context, uiEventLogger);
KeyguardUserDetailAdapter(Context context,
Provider<UserDetailView.Adapter> userDetailViewAdapterProvider) {
super(context, userDetailViewAdapterProvider);
}
@Override

View File

@@ -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<UserDetailView.Adapter> mUserDetailViewAdapterProvider;
UserDetailAdapter(UserSwitcherController userSwitcherController, Context context,
UiEventLogger uiEventLogger) {
mUserSwitcherController = userSwitcherController;
@Inject
UserDetailAdapter(Context context,
Provider<UserDetailView.Adapter> 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;
}

View File

@@ -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))
}