Merge "Use FalsingManager for QS user switcher" into sc-dev

This commit is contained in:
TreeHugger Robot
2021-07-10 01:26:23 +00:00
committed by Android (Google) Code Review
6 changed files with 45 additions and 12 deletions

View File

@@ -44,6 +44,7 @@ import com.android.systemui.Dependency;
import com.android.systemui.FontSizeUtils; import com.android.systemui.FontSizeUtils;
import com.android.systemui.R; import com.android.systemui.R;
import com.android.systemui.plugins.ActivityStarter; import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.plugins.FalsingManager;
import com.android.systemui.plugins.qs.DetailAdapter; import com.android.systemui.plugins.qs.DetailAdapter;
import com.android.systemui.statusbar.CommandQueue; import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.phone.NotificationsQuickSettingsContainer; import com.android.systemui.statusbar.phone.NotificationsQuickSettingsContainer;
@@ -57,6 +58,7 @@ public class QSDetail extends LinearLayout {
private final UiEventLogger mUiEventLogger = QSEvents.INSTANCE.getQsUiEventsLogger(); private final UiEventLogger mUiEventLogger = QSEvents.INSTANCE.getQsUiEventsLogger();
private ViewGroup mDetailContent; private ViewGroup mDetailContent;
private FalsingManager mFalsingManager;
protected TextView mDetailSettingsButton; protected TextView mDetailSettingsButton;
protected TextView mDetailDoneButton; protected TextView mDetailDoneButton;
@VisibleForTesting @VisibleForTesting
@@ -124,12 +126,13 @@ public class QSDetail extends LinearLayout {
/** */ /** */
public void setQsPanel(QSPanelController panelController, QuickStatusBarHeader header, public void setQsPanel(QSPanelController panelController, QuickStatusBarHeader header,
QSFooter footer) { QSFooter footer, FalsingManager falsingManager) {
mQsPanelController = panelController; mQsPanelController = panelController;
mHeader = header; mHeader = header;
mFooter = footer; mFooter = footer;
mHeader.setCallback(mQsPanelCallback); mHeader.setCallback(mQsPanelCallback);
mQsPanelController.setCallback(mQsPanelCallback); mQsPanelController.setCallback(mQsPanelCallback);
mFalsingManager = falsingManager;
} }
public void setHost(QSTileHost host) { public void setHost(QSTileHost host) {
@@ -273,6 +276,9 @@ public class QSDetail extends LinearLayout {
final Intent settingsIntent = adapter.getSettingsIntent(); final Intent settingsIntent = adapter.getSettingsIntent();
mDetailSettingsButton.setVisibility(settingsIntent != null ? VISIBLE : GONE); mDetailSettingsButton.setVisibility(settingsIntent != null ? VISIBLE : GONE);
mDetailSettingsButton.setOnClickListener(v -> { mDetailSettingsButton.setOnClickListener(v -> {
if (mFalsingManager.isFalseTap(FalsingManager.LOW_PENALTY)) {
return;
}
Dependency.get(MetricsLogger.class).action(ACTION_QS_MORE_SETTINGS, Dependency.get(MetricsLogger.class).action(ACTION_QS_MORE_SETTINGS,
adapter.getMetricsCategory()); adapter.getMetricsCategory());
mUiEventLogger.log(adapter.moreSettingsEvent()); mUiEventLogger.log(adapter.moreSettingsEvent());
@@ -280,6 +286,9 @@ public class QSDetail extends LinearLayout {
.postStartActivityDismissingKeyguard(settingsIntent, 0); .postStartActivityDismissingKeyguard(settingsIntent, 0);
}); });
mDetailDoneButton.setOnClickListener(v -> { mDetailDoneButton.setOnClickListener(v -> {
if (mFalsingManager.isFalseTap(FalsingManager.LOW_PENALTY)) {
return;
}
announceForAccessibility( announceForAccessibility(
mContext.getString(R.string.accessibility_desc_quick_settings)); mContext.getString(R.string.accessibility_desc_quick_settings));
if (!adapter.onDoneButtonClicked()) { if (!adapter.onDoneButtonClicked()) {
@@ -301,13 +310,13 @@ public class QSDetail extends LinearLayout {
mQsDetailHeaderSwitch.setVisibility(VISIBLE); mQsDetailHeaderSwitch.setVisibility(VISIBLE);
handleToggleStateChanged(toggleState, adapter.getToggleEnabled()); handleToggleStateChanged(toggleState, adapter.getToggleEnabled());
mQsDetailHeader.setClickable(true); mQsDetailHeader.setClickable(true);
mQsDetailHeader.setOnClickListener(new OnClickListener() { mQsDetailHeader.setOnClickListener(v -> {
@Override if (mFalsingManager.isFalseTap(FalsingManager.LOW_PENALTY)) {
public void onClick(View v) { return;
boolean checked = !mQsDetailHeaderSwitch.isChecked();
mQsDetailHeaderSwitch.setChecked(checked);
adapter.setToggleState(checked);
} }
boolean checked = !mQsDetailHeaderSwitch.isChecked();
mQsDetailHeaderSwitch.setChecked(checked);
adapter.setToggleState(checked);
}); });
} }
} }

View File

@@ -39,6 +39,7 @@ import androidx.annotation.VisibleForTesting;
import com.android.systemui.R; import com.android.systemui.R;
import com.android.systemui.animation.Interpolators; import com.android.systemui.animation.Interpolators;
import com.android.systemui.media.MediaHost; import com.android.systemui.media.MediaHost;
import com.android.systemui.plugins.FalsingManager;
import com.android.systemui.plugins.qs.QS; import com.android.systemui.plugins.qs.QS;
import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.qs.customize.QSCustomizerController; import com.android.systemui.qs.customize.QSCustomizerController;
@@ -67,6 +68,7 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
private final Rect mQsBounds = new Rect(); private final Rect mQsBounds = new Rect();
private final StatusBarStateController mStatusBarStateController; private final StatusBarStateController mStatusBarStateController;
private final FalsingManager mFalsingManager;
private boolean mQsExpanded; private boolean mQsExpanded;
private boolean mHeaderAnimating; private boolean mHeaderAnimating;
private boolean mStackScrollerOverscrolling; private boolean mStackScrollerOverscrolling;
@@ -133,7 +135,8 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
StatusBarStateController statusBarStateController, CommandQueue commandQueue, StatusBarStateController statusBarStateController, CommandQueue commandQueue,
QSDetailDisplayer qsDetailDisplayer, @Named(QS_PANEL) MediaHost qsMediaHost, QSDetailDisplayer qsDetailDisplayer, @Named(QS_PANEL) MediaHost qsMediaHost,
@Named(QUICK_QS_PANEL) MediaHost qqsMediaHost, @Named(QUICK_QS_PANEL) MediaHost qqsMediaHost,
QSFragmentComponent.Factory qsComponentFactory, FeatureFlags featureFlags) { QSFragmentComponent.Factory qsComponentFactory, FeatureFlags featureFlags,
FalsingManager falsingManager) {
mRemoteInputQuickSettingsDisabler = remoteInputQsDisabler; mRemoteInputQuickSettingsDisabler = remoteInputQsDisabler;
mInjectionInflater = injectionInflater; mInjectionInflater = injectionInflater;
mCommandQueue = commandQueue; mCommandQueue = commandQueue;
@@ -144,6 +147,7 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
commandQueue.observe(getLifecycle(), this); commandQueue.observe(getLifecycle(), this);
mHost = qsTileHost; mHost = qsTileHost;
mFeatureFlags = featureFlags; mFeatureFlags = featureFlags;
mFalsingManager = falsingManager;
mStatusBarStateController = statusBarStateController; mStatusBarStateController = statusBarStateController;
} }
@@ -190,7 +194,7 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
mQSContainerImplController.init(); mQSContainerImplController.init();
mContainer = mQSContainerImplController.getView(); mContainer = mQSContainerImplController.getView();
mQSDetail.setQsPanel(mQSPanelController, mHeader, mFooter); mQSDetail.setQsPanel(mQSPanelController, mHeader, mFooter, mFalsingManager);
mQSAnimator = qsFragmentComponent.getQSAnimator(); mQSAnimator = qsFragmentComponent.getQSAnimator();
mQSCustomizerController = qsFragmentComponent.getQSCustomizerController(); mQSCustomizerController = qsFragmentComponent.getQSCustomizerController();

View File

@@ -146,7 +146,7 @@ public class UserDetailView extends PseudoGridView {
@Override @Override
public void onClick(View view) { public void onClick(View view) {
if (mFalsingManager.isFalseTap(FalsingManager.MODERATE_PENALTY)) { if (mFalsingManager.isFalseTap(FalsingManager.LOW_PENALTY)) {
return; return;
} }

View File

@@ -67,6 +67,7 @@ import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.dagger.qualifiers.UiBackground; import com.android.systemui.dagger.qualifiers.UiBackground;
import com.android.systemui.plugins.ActivityStarter; import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.plugins.FalsingManager;
import com.android.systemui.plugins.qs.DetailAdapter; import com.android.systemui.plugins.qs.DetailAdapter;
import com.android.systemui.qs.QSUserSwitcherEvent; import com.android.systemui.qs.QSUserSwitcherEvent;
import com.android.systemui.qs.tiles.UserDetailView; import com.android.systemui.qs.tiles.UserDetailView;
@@ -131,6 +132,7 @@ public class UserSwitcherController implements Dumpable {
private final Executor mUiBgExecutor; private final Executor mUiBgExecutor;
private final boolean mGuestUserAutoCreated; private final boolean mGuestUserAutoCreated;
private final AtomicBoolean mGuestCreationScheduled; private final AtomicBoolean mGuestCreationScheduled;
private FalsingManager mFalsingManager;
@Inject @Inject
public UserSwitcherController(Context context, public UserSwitcherController(Context context,
@@ -139,6 +141,7 @@ public class UserSwitcherController implements Dumpable {
ActivityStarter activityStarter, ActivityStarter activityStarter,
BroadcastDispatcher broadcastDispatcher, BroadcastDispatcher broadcastDispatcher,
UiEventLogger uiEventLogger, UiEventLogger uiEventLogger,
FalsingManager falsingManager,
TelephonyListenerManager telephonyListenerManager, TelephonyListenerManager telephonyListenerManager,
IActivityTaskManager activityTaskManager, IActivityTaskManager activityTaskManager,
UserDetailAdapter userDetailAdapter, UserDetailAdapter userDetailAdapter,
@@ -148,6 +151,7 @@ public class UserSwitcherController implements Dumpable {
mTelephonyListenerManager = telephonyListenerManager; mTelephonyListenerManager = telephonyListenerManager;
mActivityTaskManager = activityTaskManager; mActivityTaskManager = activityTaskManager;
mUiEventLogger = uiEventLogger; mUiEventLogger = uiEventLogger;
mFalsingManager = falsingManager;
mGuestResumeSessionReceiver = new GuestResumeSessionReceiver(this, mUiEventLogger); mGuestResumeSessionReceiver = new GuestResumeSessionReceiver(this, mUiEventLogger);
mUserDetailAdapter = userDetailAdapter; mUserDetailAdapter = userDetailAdapter;
mUiBgExecutor = uiBgExecutor; mUiBgExecutor = uiBgExecutor;
@@ -1031,6 +1035,11 @@ public class UserSwitcherController implements Dumpable {
@Override @Override
public void onClick(DialogInterface dialog, int which) { public void onClick(DialogInterface dialog, int which) {
int penalty = which == BUTTON_NEGATIVE ? FalsingManager.NO_PENALTY
: FalsingManager.HIGH_PENALTY;
if (mFalsingManager.isFalseTap(penalty)) {
return;
}
if (which == BUTTON_NEGATIVE) { if (which == BUTTON_NEGATIVE) {
cancel(); cancel();
} else { } else {
@@ -1057,6 +1066,11 @@ public class UserSwitcherController implements Dumpable {
@Override @Override
public void onClick(DialogInterface dialog, int which) { public void onClick(DialogInterface dialog, int which) {
int penalty = which == BUTTON_NEGATIVE ? FalsingManager.NO_PENALTY
: FalsingManager.MODERATE_PENALTY;
if (mFalsingManager.isFalseTap(penalty)) {
return;
}
if (which == BUTTON_NEGATIVE) { if (which == BUTTON_NEGATIVE) {
cancel(); cancel();
} else { } else {

View File

@@ -41,6 +41,7 @@ import com.android.internal.logging.testing.UiEventLoggerFake;
import com.android.systemui.R; import com.android.systemui.R;
import com.android.systemui.SysuiTestCase; import com.android.systemui.SysuiTestCase;
import com.android.systemui.plugins.ActivityStarter; import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.plugins.FalsingManager;
import com.android.systemui.plugins.qs.DetailAdapter; import com.android.systemui.plugins.qs.DetailAdapter;
import org.junit.After; import org.junit.After;
@@ -76,7 +77,8 @@ public class QSDetailTest extends SysuiTestCase {
mQsPanelController = mock(QSPanelController.class); mQsPanelController = mock(QSPanelController.class);
mQuickHeader = mock(QuickStatusBarHeader.class); mQuickHeader = mock(QuickStatusBarHeader.class);
mQsDetail.setQsPanel(mQsPanelController, mQuickHeader, mock(QSFooter.class)); mQsDetail.setQsPanel(mQsPanelController, mQuickHeader, mock(QSFooter.class),
mock(FalsingManager.class));
mQsDetail.mClipper = mock(QSDetailClipper.class); mQsDetail.mClipper = mock(QSDetailClipper.class);
mMockDetailAdapter = mock(DetailAdapter.class); mMockDetailAdapter = mock(DetailAdapter.class);

View File

@@ -44,6 +44,7 @@ import com.android.systemui.SysuiBaseFragmentTest;
import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.dump.DumpManager; import com.android.systemui.dump.DumpManager;
import com.android.systemui.media.MediaHost; import com.android.systemui.media.MediaHost;
import com.android.systemui.plugins.FalsingManager;
import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.qs.dagger.QSFragmentComponent; import com.android.systemui.qs.dagger.QSFragmentComponent;
import com.android.systemui.qs.external.CustomTileStatePersister; import com.android.systemui.qs.external.CustomTileStatePersister;
@@ -92,6 +93,8 @@ public class QSFragmentTest extends SysuiBaseFragmentTest {
private MediaHost mQQSMediaHost; private MediaHost mQQSMediaHost;
@Mock @Mock
private FeatureFlags mFeatureFlags; private FeatureFlags mFeatureFlags;
@Mock
private FalsingManager mFalsingManager;
public QSFragmentTest() { public QSFragmentTest() {
super(QSFragment.class); super(QSFragment.class);
@@ -182,6 +185,7 @@ public class QSFragmentTest extends SysuiBaseFragmentTest {
mQSMediaHost, mQSMediaHost,
mQQSMediaHost, mQQSMediaHost,
mQsComponentFactory, mQsComponentFactory,
mFeatureFlags); mFeatureFlags,
mFalsingManager);
} }
} }