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.R;
|
||||
import com.android.systemui.plugins.ActivityStarter;
|
||||
import com.android.systemui.plugins.FalsingManager;
|
||||
import com.android.systemui.plugins.qs.DetailAdapter;
|
||||
import com.android.systemui.statusbar.CommandQueue;
|
||||
import com.android.systemui.statusbar.phone.NotificationsQuickSettingsContainer;
|
||||
@@ -57,6 +58,7 @@ public class QSDetail extends LinearLayout {
|
||||
private final UiEventLogger mUiEventLogger = QSEvents.INSTANCE.getQsUiEventsLogger();
|
||||
|
||||
private ViewGroup mDetailContent;
|
||||
private FalsingManager mFalsingManager;
|
||||
protected TextView mDetailSettingsButton;
|
||||
protected TextView mDetailDoneButton;
|
||||
@VisibleForTesting
|
||||
@@ -124,12 +126,13 @@ public class QSDetail extends LinearLayout {
|
||||
|
||||
/** */
|
||||
public void setQsPanel(QSPanelController panelController, QuickStatusBarHeader header,
|
||||
QSFooter footer) {
|
||||
QSFooter footer, FalsingManager falsingManager) {
|
||||
mQsPanelController = panelController;
|
||||
mHeader = header;
|
||||
mFooter = footer;
|
||||
mHeader.setCallback(mQsPanelCallback);
|
||||
mQsPanelController.setCallback(mQsPanelCallback);
|
||||
mFalsingManager = falsingManager;
|
||||
}
|
||||
|
||||
public void setHost(QSTileHost host) {
|
||||
@@ -273,6 +276,9 @@ public class QSDetail extends LinearLayout {
|
||||
final Intent settingsIntent = adapter.getSettingsIntent();
|
||||
mDetailSettingsButton.setVisibility(settingsIntent != null ? VISIBLE : GONE);
|
||||
mDetailSettingsButton.setOnClickListener(v -> {
|
||||
if (mFalsingManager.isFalseTap(FalsingManager.LOW_PENALTY)) {
|
||||
return;
|
||||
}
|
||||
Dependency.get(MetricsLogger.class).action(ACTION_QS_MORE_SETTINGS,
|
||||
adapter.getMetricsCategory());
|
||||
mUiEventLogger.log(adapter.moreSettingsEvent());
|
||||
@@ -280,6 +286,9 @@ public class QSDetail extends LinearLayout {
|
||||
.postStartActivityDismissingKeyguard(settingsIntent, 0);
|
||||
});
|
||||
mDetailDoneButton.setOnClickListener(v -> {
|
||||
if (mFalsingManager.isFalseTap(FalsingManager.LOW_PENALTY)) {
|
||||
return;
|
||||
}
|
||||
announceForAccessibility(
|
||||
mContext.getString(R.string.accessibility_desc_quick_settings));
|
||||
if (!adapter.onDoneButtonClicked()) {
|
||||
@@ -301,13 +310,13 @@ public class QSDetail extends LinearLayout {
|
||||
mQsDetailHeaderSwitch.setVisibility(VISIBLE);
|
||||
handleToggleStateChanged(toggleState, adapter.getToggleEnabled());
|
||||
mQsDetailHeader.setClickable(true);
|
||||
mQsDetailHeader.setOnClickListener(new OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
boolean checked = !mQsDetailHeaderSwitch.isChecked();
|
||||
mQsDetailHeaderSwitch.setChecked(checked);
|
||||
adapter.setToggleState(checked);
|
||||
mQsDetailHeader.setOnClickListener(v -> {
|
||||
if (mFalsingManager.isFalseTap(FalsingManager.LOW_PENALTY)) {
|
||||
return;
|
||||
}
|
||||
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.animation.Interpolators;
|
||||
import com.android.systemui.media.MediaHost;
|
||||
import com.android.systemui.plugins.FalsingManager;
|
||||
import com.android.systemui.plugins.qs.QS;
|
||||
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
||||
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 StatusBarStateController mStatusBarStateController;
|
||||
private final FalsingManager mFalsingManager;
|
||||
private boolean mQsExpanded;
|
||||
private boolean mHeaderAnimating;
|
||||
private boolean mStackScrollerOverscrolling;
|
||||
@@ -133,7 +135,8 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
|
||||
StatusBarStateController statusBarStateController, CommandQueue commandQueue,
|
||||
QSDetailDisplayer qsDetailDisplayer, @Named(QS_PANEL) MediaHost qsMediaHost,
|
||||
@Named(QUICK_QS_PANEL) MediaHost qqsMediaHost,
|
||||
QSFragmentComponent.Factory qsComponentFactory, FeatureFlags featureFlags) {
|
||||
QSFragmentComponent.Factory qsComponentFactory, FeatureFlags featureFlags,
|
||||
FalsingManager falsingManager) {
|
||||
mRemoteInputQuickSettingsDisabler = remoteInputQsDisabler;
|
||||
mInjectionInflater = injectionInflater;
|
||||
mCommandQueue = commandQueue;
|
||||
@@ -144,6 +147,7 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
|
||||
commandQueue.observe(getLifecycle(), this);
|
||||
mHost = qsTileHost;
|
||||
mFeatureFlags = featureFlags;
|
||||
mFalsingManager = falsingManager;
|
||||
mStatusBarStateController = statusBarStateController;
|
||||
}
|
||||
|
||||
@@ -190,7 +194,7 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
|
||||
mQSContainerImplController.init();
|
||||
mContainer = mQSContainerImplController.getView();
|
||||
|
||||
mQSDetail.setQsPanel(mQSPanelController, mHeader, mFooter);
|
||||
mQSDetail.setQsPanel(mQSPanelController, mHeader, mFooter, mFalsingManager);
|
||||
mQSAnimator = qsFragmentComponent.getQSAnimator();
|
||||
|
||||
mQSCustomizerController = qsFragmentComponent.getQSCustomizerController();
|
||||
|
||||
@@ -146,7 +146,7 @@ public class UserDetailView extends PseudoGridView {
|
||||
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
if (mFalsingManager.isFalseTap(FalsingManager.MODERATE_PENALTY)) {
|
||||
if (mFalsingManager.isFalseTap(FalsingManager.LOW_PENALTY)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -67,6 +67,7 @@ import com.android.systemui.dagger.SysUISingleton;
|
||||
import com.android.systemui.dagger.qualifiers.Main;
|
||||
import com.android.systemui.dagger.qualifiers.UiBackground;
|
||||
import com.android.systemui.plugins.ActivityStarter;
|
||||
import com.android.systemui.plugins.FalsingManager;
|
||||
import com.android.systemui.plugins.qs.DetailAdapter;
|
||||
import com.android.systemui.qs.QSUserSwitcherEvent;
|
||||
import com.android.systemui.qs.tiles.UserDetailView;
|
||||
@@ -131,6 +132,7 @@ public class UserSwitcherController implements Dumpable {
|
||||
private final Executor mUiBgExecutor;
|
||||
private final boolean mGuestUserAutoCreated;
|
||||
private final AtomicBoolean mGuestCreationScheduled;
|
||||
private FalsingManager mFalsingManager;
|
||||
|
||||
@Inject
|
||||
public UserSwitcherController(Context context,
|
||||
@@ -139,6 +141,7 @@ public class UserSwitcherController implements Dumpable {
|
||||
ActivityStarter activityStarter,
|
||||
BroadcastDispatcher broadcastDispatcher,
|
||||
UiEventLogger uiEventLogger,
|
||||
FalsingManager falsingManager,
|
||||
TelephonyListenerManager telephonyListenerManager,
|
||||
IActivityTaskManager activityTaskManager,
|
||||
UserDetailAdapter userDetailAdapter,
|
||||
@@ -148,6 +151,7 @@ public class UserSwitcherController implements Dumpable {
|
||||
mTelephonyListenerManager = telephonyListenerManager;
|
||||
mActivityTaskManager = activityTaskManager;
|
||||
mUiEventLogger = uiEventLogger;
|
||||
mFalsingManager = falsingManager;
|
||||
mGuestResumeSessionReceiver = new GuestResumeSessionReceiver(this, mUiEventLogger);
|
||||
mUserDetailAdapter = userDetailAdapter;
|
||||
mUiBgExecutor = uiBgExecutor;
|
||||
@@ -1031,6 +1035,11 @@ public class UserSwitcherController implements Dumpable {
|
||||
|
||||
@Override
|
||||
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) {
|
||||
cancel();
|
||||
} else {
|
||||
@@ -1057,6 +1066,11 @@ public class UserSwitcherController implements Dumpable {
|
||||
|
||||
@Override
|
||||
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) {
|
||||
cancel();
|
||||
} else {
|
||||
|
||||
@@ -41,6 +41,7 @@ import com.android.internal.logging.testing.UiEventLoggerFake;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.SysuiTestCase;
|
||||
import com.android.systemui.plugins.ActivityStarter;
|
||||
import com.android.systemui.plugins.FalsingManager;
|
||||
import com.android.systemui.plugins.qs.DetailAdapter;
|
||||
|
||||
import org.junit.After;
|
||||
@@ -76,7 +77,8 @@ public class QSDetailTest extends SysuiTestCase {
|
||||
|
||||
mQsPanelController = mock(QSPanelController.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);
|
||||
|
||||
mMockDetailAdapter = mock(DetailAdapter.class);
|
||||
|
||||
@@ -44,6 +44,7 @@ import com.android.systemui.SysuiBaseFragmentTest;
|
||||
import com.android.systemui.broadcast.BroadcastDispatcher;
|
||||
import com.android.systemui.dump.DumpManager;
|
||||
import com.android.systemui.media.MediaHost;
|
||||
import com.android.systemui.plugins.FalsingManager;
|
||||
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
||||
import com.android.systemui.qs.dagger.QSFragmentComponent;
|
||||
import com.android.systemui.qs.external.CustomTileStatePersister;
|
||||
@@ -92,6 +93,8 @@ public class QSFragmentTest extends SysuiBaseFragmentTest {
|
||||
private MediaHost mQQSMediaHost;
|
||||
@Mock
|
||||
private FeatureFlags mFeatureFlags;
|
||||
@Mock
|
||||
private FalsingManager mFalsingManager;
|
||||
|
||||
public QSFragmentTest() {
|
||||
super(QSFragment.class);
|
||||
@@ -182,6 +185,7 @@ public class QSFragmentTest extends SysuiBaseFragmentTest {
|
||||
mQSMediaHost,
|
||||
mQQSMediaHost,
|
||||
mQsComponentFactory,
|
||||
mFeatureFlags);
|
||||
mFeatureFlags,
|
||||
mFalsingManager);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user