Loading packages/SystemUI/src/com/android/systemui/qs/QSDetail.java +16 −7 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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 Loading Loading @@ -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) { Loading Loading @@ -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()); Loading @@ -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()) { Loading @@ -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) { mQsDetailHeader.setOnClickListener(v -> { if (mFalsingManager.isFalseTap(FalsingManager.LOW_PENALTY)) { return; } boolean checked = !mQsDetailHeaderSwitch.isChecked(); mQsDetailHeaderSwitch.setChecked(checked); adapter.setToggleState(checked); } }); } } Loading packages/SystemUI/src/com/android/systemui/qs/QSFragment.java +6 −2 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; Loading @@ -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; } Loading Loading @@ -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(); Loading packages/SystemUI/src/com/android/systemui/qs/tiles/UserDetailView.java +1 −1 Original line number Diff line number Diff line Loading @@ -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; } Loading packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.java +14 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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, Loading @@ -139,6 +141,7 @@ public class UserSwitcherController implements Dumpable { ActivityStarter activityStarter, BroadcastDispatcher broadcastDispatcher, UiEventLogger uiEventLogger, FalsingManager falsingManager, TelephonyListenerManager telephonyListenerManager, IActivityTaskManager activityTaskManager, UserDetailAdapter userDetailAdapter, Loading @@ -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; Loading Loading @@ -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 { Loading @@ -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 { Loading packages/SystemUI/tests/src/com/android/systemui/qs/QSDetailTest.java +3 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); Loading Loading
packages/SystemUI/src/com/android/systemui/qs/QSDetail.java +16 −7 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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 Loading Loading @@ -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) { Loading Loading @@ -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()); Loading @@ -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()) { Loading @@ -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) { mQsDetailHeader.setOnClickListener(v -> { if (mFalsingManager.isFalseTap(FalsingManager.LOW_PENALTY)) { return; } boolean checked = !mQsDetailHeaderSwitch.isChecked(); mQsDetailHeaderSwitch.setChecked(checked); adapter.setToggleState(checked); } }); } } Loading
packages/SystemUI/src/com/android/systemui/qs/QSFragment.java +6 −2 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; Loading @@ -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; } Loading Loading @@ -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(); Loading
packages/SystemUI/src/com/android/systemui/qs/tiles/UserDetailView.java +1 −1 Original line number Diff line number Diff line Loading @@ -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; } Loading
packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.java +14 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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, Loading @@ -139,6 +141,7 @@ public class UserSwitcherController implements Dumpable { ActivityStarter activityStarter, BroadcastDispatcher broadcastDispatcher, UiEventLogger uiEventLogger, FalsingManager falsingManager, TelephonyListenerManager telephonyListenerManager, IActivityTaskManager activityTaskManager, UserDetailAdapter userDetailAdapter, Loading @@ -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; Loading Loading @@ -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 { Loading @@ -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 { Loading
packages/SystemUI/tests/src/com/android/systemui/qs/QSDetailTest.java +3 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); Loading