Merge "Use FalsingManager for QS user switcher" into sc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
6061740344
@@ -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);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user