Loading packages/SystemUI/aconfig/systemui.aconfig +10 −0 Original line number Diff line number Diff line Loading @@ -499,3 +499,13 @@ flag { purpose: PURPOSE_BUGFIX } } flag { name: "clipboard_noninteractive_on_lockscreen" namespace: "systemui" description: "Prevents the interactive clipboard UI from appearing when device is locked" bug: "317048495" metadata { purpose: PURPOSE_BUGFIX } } packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardListener.java +8 −1 Original line number Diff line number Diff line Loading @@ -18,12 +18,14 @@ package com.android.systemui.clipboardoverlay; import static android.content.ClipDescription.CLASSIFICATION_COMPLETE; import static com.android.systemui.Flags.clipboardNoninteractiveOnLockscreen; import static com.android.systemui.clipboardoverlay.ClipboardOverlayEvent.CLIPBOARD_OVERLAY_ENTERED; import static com.android.systemui.clipboardoverlay.ClipboardOverlayEvent.CLIPBOARD_OVERLAY_UPDATED; import static com.android.systemui.clipboardoverlay.ClipboardOverlayEvent.CLIPBOARD_TOAST_SHOWN; import static com.google.android.setupcompat.util.WizardManagerHelper.SETTINGS_SECURE_USER_SETUP_COMPLETE; import android.app.KeyguardManager; import android.content.ClipData; import android.content.ClipboardManager; import android.content.Context; Loading Loading @@ -57,6 +59,7 @@ public class ClipboardListener implements private final Provider<ClipboardOverlayController> mOverlayProvider; private final ClipboardToast mClipboardToast; private final ClipboardManager mClipboardManager; private final KeyguardManager mKeyguardManager; private final UiEventLogger mUiEventLogger; private ClipboardOverlay mClipboardOverlay; Loading @@ -65,11 +68,13 @@ public class ClipboardListener implements Provider<ClipboardOverlayController> clipboardOverlayControllerProvider, ClipboardToast clipboardToast, ClipboardManager clipboardManager, KeyguardManager keyguardManager, UiEventLogger uiEventLogger) { mContext = context; mOverlayProvider = clipboardOverlayControllerProvider; mClipboardToast = clipboardToast; mClipboardManager = clipboardManager; mKeyguardManager = keyguardManager; mUiEventLogger = uiEventLogger; } Loading @@ -92,7 +97,9 @@ public class ClipboardListener implements return; } if (!isUserSetupComplete() // user should not access intents from this state // user should not access intents before setup or while device is locked if ((clipboardNoninteractiveOnLockscreen() && mKeyguardManager.isDeviceLocked()) || !isUserSetupComplete() || clipData == null // shouldn't happen, but just in case || clipData.getItemCount() == 0) { if (shouldShowToast(clipData)) { Loading packages/SystemUI/tests/src/com/android/systemui/clipboardoverlay/ClipboardListenerTest.java +35 −1 Original line number Diff line number Diff line Loading @@ -27,16 +27,20 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyZeroInteractions; import static org.mockito.Mockito.when; import android.app.KeyguardManager; import android.content.ClipData; import android.content.ClipDescription; import android.content.ClipboardManager; import android.os.PersistableBundle; import android.platform.test.annotations.DisableFlags; import android.platform.test.annotations.EnableFlags; import android.provider.Settings; import androidx.test.filters.SmallTest; import androidx.test.runner.AndroidJUnit4; import com.android.internal.logging.UiEventLogger; import com.android.systemui.Flags; import com.android.systemui.SysuiTestCase; import org.junit.Before; Loading @@ -59,6 +63,8 @@ public class ClipboardListenerTest extends SysuiTestCase { @Mock private ClipboardManager mClipboardManager; @Mock private KeyguardManager mKeyguardManager; @Mock private ClipboardOverlayController mOverlayController; @Mock private ClipboardToast mClipboardToast; Loading Loading @@ -96,7 +102,7 @@ public class ClipboardListenerTest extends SysuiTestCase { when(mClipboardManager.getPrimaryClipSource()).thenReturn(mSampleSource); mClipboardListener = new ClipboardListener(getContext(), mOverlayControllerProvider, mClipboardToast, mClipboardManager, mUiEventLogger); mClipboardToast, mClipboardManager, mKeyguardManager, mUiEventLogger); } Loading Loading @@ -190,6 +196,34 @@ public class ClipboardListenerTest extends SysuiTestCase { verifyZeroInteractions(mOverlayControllerProvider); } @Test @EnableFlags(Flags.FLAG_CLIPBOARD_NONINTERACTIVE_ON_LOCKSCREEN) public void test_deviceLocked_showsToast() { when(mKeyguardManager.isDeviceLocked()).thenReturn(true); mClipboardListener.start(); mClipboardListener.onPrimaryClipChanged(); verify(mUiEventLogger, times(1)).log( ClipboardOverlayEvent.CLIPBOARD_TOAST_SHOWN, 0, mSampleSource); verify(mClipboardToast, times(1)).showCopiedToast(); verifyZeroInteractions(mOverlayControllerProvider); } @Test @DisableFlags(Flags.FLAG_CLIPBOARD_NONINTERACTIVE_ON_LOCKSCREEN) public void test_deviceLocked_legacyBehavior_showsInteractiveUI() { when(mKeyguardManager.isDeviceLocked()).thenReturn(true); mClipboardListener.start(); mClipboardListener.onPrimaryClipChanged(); verify(mUiEventLogger, times(1)).log( ClipboardOverlayEvent.CLIPBOARD_OVERLAY_ENTERED, 0, mSampleSource); verify(mOverlayController).setClipData(mSampleClipData, mSampleSource); verifyZeroInteractions(mClipboardToast); } @Test public void test_nullClipData_showsNothing() { when(mClipboardManager.getPrimaryClip()).thenReturn(null); Loading Loading
packages/SystemUI/aconfig/systemui.aconfig +10 −0 Original line number Diff line number Diff line Loading @@ -499,3 +499,13 @@ flag { purpose: PURPOSE_BUGFIX } } flag { name: "clipboard_noninteractive_on_lockscreen" namespace: "systemui" description: "Prevents the interactive clipboard UI from appearing when device is locked" bug: "317048495" metadata { purpose: PURPOSE_BUGFIX } }
packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardListener.java +8 −1 Original line number Diff line number Diff line Loading @@ -18,12 +18,14 @@ package com.android.systemui.clipboardoverlay; import static android.content.ClipDescription.CLASSIFICATION_COMPLETE; import static com.android.systemui.Flags.clipboardNoninteractiveOnLockscreen; import static com.android.systemui.clipboardoverlay.ClipboardOverlayEvent.CLIPBOARD_OVERLAY_ENTERED; import static com.android.systemui.clipboardoverlay.ClipboardOverlayEvent.CLIPBOARD_OVERLAY_UPDATED; import static com.android.systemui.clipboardoverlay.ClipboardOverlayEvent.CLIPBOARD_TOAST_SHOWN; import static com.google.android.setupcompat.util.WizardManagerHelper.SETTINGS_SECURE_USER_SETUP_COMPLETE; import android.app.KeyguardManager; import android.content.ClipData; import android.content.ClipboardManager; import android.content.Context; Loading Loading @@ -57,6 +59,7 @@ public class ClipboardListener implements private final Provider<ClipboardOverlayController> mOverlayProvider; private final ClipboardToast mClipboardToast; private final ClipboardManager mClipboardManager; private final KeyguardManager mKeyguardManager; private final UiEventLogger mUiEventLogger; private ClipboardOverlay mClipboardOverlay; Loading @@ -65,11 +68,13 @@ public class ClipboardListener implements Provider<ClipboardOverlayController> clipboardOverlayControllerProvider, ClipboardToast clipboardToast, ClipboardManager clipboardManager, KeyguardManager keyguardManager, UiEventLogger uiEventLogger) { mContext = context; mOverlayProvider = clipboardOverlayControllerProvider; mClipboardToast = clipboardToast; mClipboardManager = clipboardManager; mKeyguardManager = keyguardManager; mUiEventLogger = uiEventLogger; } Loading @@ -92,7 +97,9 @@ public class ClipboardListener implements return; } if (!isUserSetupComplete() // user should not access intents from this state // user should not access intents before setup or while device is locked if ((clipboardNoninteractiveOnLockscreen() && mKeyguardManager.isDeviceLocked()) || !isUserSetupComplete() || clipData == null // shouldn't happen, but just in case || clipData.getItemCount() == 0) { if (shouldShowToast(clipData)) { Loading
packages/SystemUI/tests/src/com/android/systemui/clipboardoverlay/ClipboardListenerTest.java +35 −1 Original line number Diff line number Diff line Loading @@ -27,16 +27,20 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyZeroInteractions; import static org.mockito.Mockito.when; import android.app.KeyguardManager; import android.content.ClipData; import android.content.ClipDescription; import android.content.ClipboardManager; import android.os.PersistableBundle; import android.platform.test.annotations.DisableFlags; import android.platform.test.annotations.EnableFlags; import android.provider.Settings; import androidx.test.filters.SmallTest; import androidx.test.runner.AndroidJUnit4; import com.android.internal.logging.UiEventLogger; import com.android.systemui.Flags; import com.android.systemui.SysuiTestCase; import org.junit.Before; Loading @@ -59,6 +63,8 @@ public class ClipboardListenerTest extends SysuiTestCase { @Mock private ClipboardManager mClipboardManager; @Mock private KeyguardManager mKeyguardManager; @Mock private ClipboardOverlayController mOverlayController; @Mock private ClipboardToast mClipboardToast; Loading Loading @@ -96,7 +102,7 @@ public class ClipboardListenerTest extends SysuiTestCase { when(mClipboardManager.getPrimaryClipSource()).thenReturn(mSampleSource); mClipboardListener = new ClipboardListener(getContext(), mOverlayControllerProvider, mClipboardToast, mClipboardManager, mUiEventLogger); mClipboardToast, mClipboardManager, mKeyguardManager, mUiEventLogger); } Loading Loading @@ -190,6 +196,34 @@ public class ClipboardListenerTest extends SysuiTestCase { verifyZeroInteractions(mOverlayControllerProvider); } @Test @EnableFlags(Flags.FLAG_CLIPBOARD_NONINTERACTIVE_ON_LOCKSCREEN) public void test_deviceLocked_showsToast() { when(mKeyguardManager.isDeviceLocked()).thenReturn(true); mClipboardListener.start(); mClipboardListener.onPrimaryClipChanged(); verify(mUiEventLogger, times(1)).log( ClipboardOverlayEvent.CLIPBOARD_TOAST_SHOWN, 0, mSampleSource); verify(mClipboardToast, times(1)).showCopiedToast(); verifyZeroInteractions(mOverlayControllerProvider); } @Test @DisableFlags(Flags.FLAG_CLIPBOARD_NONINTERACTIVE_ON_LOCKSCREEN) public void test_deviceLocked_legacyBehavior_showsInteractiveUI() { when(mKeyguardManager.isDeviceLocked()).thenReturn(true); mClipboardListener.start(); mClipboardListener.onPrimaryClipChanged(); verify(mUiEventLogger, times(1)).log( ClipboardOverlayEvent.CLIPBOARD_OVERLAY_ENTERED, 0, mSampleSource); verify(mOverlayController).setClipData(mSampleClipData, mSampleSource); verifyZeroInteractions(mClipboardToast); } @Test public void test_nullClipData_showsNothing() { when(mClipboardManager.getPrimaryClip()).thenReturn(null); Loading