Loading core/java/android/widget/RemoteViewsAdapter.java +5 −0 Original line number Diff line number Diff line Loading @@ -240,6 +240,11 @@ public class RemoteViewsAdapter extends BaseAdapter implements Handler.Callback } } @Override public void onNullBinding(ComponentName name) { enqueueDeferredUnbindServiceMessage(); } @Override public void handleMessage(Message msg) { RemoteViewsAdapter adapter = mAdapter.get(); Loading packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardListener.java +7 −1 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import static com.android.systemui.flags.Flags.CLIPBOARD_MINIMIZED_LAYOUT; 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 @@ -60,6 +61,7 @@ public class ClipboardListener implements private final ClipboardToast mClipboardToast; private final ClipboardManager mClipboardManager; private final FeatureFlags mFeatureFlags; private final KeyguardManager mKeyguardManager; private final UiEventLogger mUiEventLogger; private ClipboardOverlay mClipboardOverlay; Loading @@ -69,12 +71,14 @@ public class ClipboardListener implements ClipboardToast clipboardToast, ClipboardManager clipboardManager, FeatureFlags featureFlags, KeyguardManager keyguardManager, UiEventLogger uiEventLogger) { mContext = context; mOverlayProvider = clipboardOverlayControllerProvider; mClipboardToast = clipboardToast; mClipboardManager = clipboardManager; mFeatureFlags = featureFlags; mKeyguardManager = keyguardManager; mUiEventLogger = uiEventLogger; } Loading @@ -97,7 +101,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 (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 +17 −1 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ 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; Loading Loading @@ -62,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 @@ -102,7 +105,7 @@ public class ClipboardListenerTest extends SysuiTestCase { mFeatureFlags.set(CLIPBOARD_MINIMIZED_LAYOUT, true); mClipboardListener = new ClipboardListener(getContext(), mOverlayControllerProvider, mClipboardToast, mClipboardManager, mFeatureFlags, mUiEventLogger); mClipboardToast, mClipboardManager, mFeatureFlags, mKeyguardManager, mUiEventLogger); } Loading Loading @@ -196,6 +199,19 @@ public class ClipboardListenerTest extends SysuiTestCase { verifyZeroInteractions(mOverlayControllerProvider); } @Test 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 public void test_nullClipData_showsNothing() { when(mClipboardManager.getPrimaryClip()).thenReturn(null); Loading services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java +10 −0 Original line number Diff line number Diff line Loading @@ -1863,6 +1863,11 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku mContext.unbindService(this); } @Override public void onNullBinding(ComponentName name) { mContext.unbindService(this); } @Override public void onServiceDisconnected(ComponentName name) { // Do nothing Loading Loading @@ -2003,6 +2008,11 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku mContext.unbindService(this); } @Override public void onNullBinding(ComponentName name) { mContext.unbindService(this); } @Override public void onServiceDisconnected(android.content.ComponentName name) { // Do nothing Loading services/core/java/com/android/server/pm/PackageManagerService.java +22 −7 Original line number Diff line number Diff line Loading @@ -3269,8 +3269,9 @@ public class PackageManagerService implements PackageSender, TestUtilityService // TODO(b/261957226): centralise this logic in DPM boolean isPackageDeviceAdmin(String packageName, int userId) { final IDevicePolicyManager dpm = getDevicePolicyManager(); final UserManagerInternal userManagerInternal = mInjector.getUserManagerInternal(); try { if (dpm != null) { if (dpm != null && userManagerInternal != null) { final ComponentName deviceOwnerComponentName = dpm.getDeviceOwnerComponent( /* callingUserOnly =*/ false); final String deviceOwnerPackageName = deviceOwnerComponentName == null ? null Loading @@ -3283,17 +3284,31 @@ public class PackageManagerService implements PackageSender, TestUtilityService return true; } // Does it contain a device admin for any user? int[] users; int[] allUsers = mUserManager.getUserIds(); int[] targetUsers; if (userId == UserHandle.USER_ALL) { users = mUserManager.getUserIds(); targetUsers = allUsers; } else { users = new int[]{userId}; targetUsers = new int[]{userId}; } for (int i = 0; i < users.length; ++i) { if (dpm.packageHasActiveAdmins(packageName, users[i])) { for (int i = 0; i < targetUsers.length; ++i) { if (dpm.packageHasActiveAdmins(packageName, targetUsers[i])) { return true; } if (isDeviceManagementRoleHolder(packageName, users[i])) { } // If a package is DMRH on a managed user, it should also be treated as an admin on // that user. If that package is also a system package, it should also be protected // on other users otherwise "uninstall updates" on an unmanaged user may break // management on other users because apk version is shared between all users. var packageState = snapshotComputer().getPackageStateInternal(packageName); if (packageState == null) { return false; } for (int user : packageState.isSystem() ? allUsers : targetUsers) { if (isDeviceManagementRoleHolder(packageName, user) && userManagerInternal.isUserManaged(user)) { return true; } } Loading Loading
core/java/android/widget/RemoteViewsAdapter.java +5 −0 Original line number Diff line number Diff line Loading @@ -240,6 +240,11 @@ public class RemoteViewsAdapter extends BaseAdapter implements Handler.Callback } } @Override public void onNullBinding(ComponentName name) { enqueueDeferredUnbindServiceMessage(); } @Override public void handleMessage(Message msg) { RemoteViewsAdapter adapter = mAdapter.get(); Loading
packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardListener.java +7 −1 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import static com.android.systemui.flags.Flags.CLIPBOARD_MINIMIZED_LAYOUT; 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 @@ -60,6 +61,7 @@ public class ClipboardListener implements private final ClipboardToast mClipboardToast; private final ClipboardManager mClipboardManager; private final FeatureFlags mFeatureFlags; private final KeyguardManager mKeyguardManager; private final UiEventLogger mUiEventLogger; private ClipboardOverlay mClipboardOverlay; Loading @@ -69,12 +71,14 @@ public class ClipboardListener implements ClipboardToast clipboardToast, ClipboardManager clipboardManager, FeatureFlags featureFlags, KeyguardManager keyguardManager, UiEventLogger uiEventLogger) { mContext = context; mOverlayProvider = clipboardOverlayControllerProvider; mClipboardToast = clipboardToast; mClipboardManager = clipboardManager; mFeatureFlags = featureFlags; mKeyguardManager = keyguardManager; mUiEventLogger = uiEventLogger; } Loading @@ -97,7 +101,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 (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 +17 −1 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ 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; Loading Loading @@ -62,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 @@ -102,7 +105,7 @@ public class ClipboardListenerTest extends SysuiTestCase { mFeatureFlags.set(CLIPBOARD_MINIMIZED_LAYOUT, true); mClipboardListener = new ClipboardListener(getContext(), mOverlayControllerProvider, mClipboardToast, mClipboardManager, mFeatureFlags, mUiEventLogger); mClipboardToast, mClipboardManager, mFeatureFlags, mKeyguardManager, mUiEventLogger); } Loading Loading @@ -196,6 +199,19 @@ public class ClipboardListenerTest extends SysuiTestCase { verifyZeroInteractions(mOverlayControllerProvider); } @Test 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 public void test_nullClipData_showsNothing() { when(mClipboardManager.getPrimaryClip()).thenReturn(null); Loading
services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java +10 −0 Original line number Diff line number Diff line Loading @@ -1863,6 +1863,11 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku mContext.unbindService(this); } @Override public void onNullBinding(ComponentName name) { mContext.unbindService(this); } @Override public void onServiceDisconnected(ComponentName name) { // Do nothing Loading Loading @@ -2003,6 +2008,11 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku mContext.unbindService(this); } @Override public void onNullBinding(ComponentName name) { mContext.unbindService(this); } @Override public void onServiceDisconnected(android.content.ComponentName name) { // Do nothing Loading
services/core/java/com/android/server/pm/PackageManagerService.java +22 −7 Original line number Diff line number Diff line Loading @@ -3269,8 +3269,9 @@ public class PackageManagerService implements PackageSender, TestUtilityService // TODO(b/261957226): centralise this logic in DPM boolean isPackageDeviceAdmin(String packageName, int userId) { final IDevicePolicyManager dpm = getDevicePolicyManager(); final UserManagerInternal userManagerInternal = mInjector.getUserManagerInternal(); try { if (dpm != null) { if (dpm != null && userManagerInternal != null) { final ComponentName deviceOwnerComponentName = dpm.getDeviceOwnerComponent( /* callingUserOnly =*/ false); final String deviceOwnerPackageName = deviceOwnerComponentName == null ? null Loading @@ -3283,17 +3284,31 @@ public class PackageManagerService implements PackageSender, TestUtilityService return true; } // Does it contain a device admin for any user? int[] users; int[] allUsers = mUserManager.getUserIds(); int[] targetUsers; if (userId == UserHandle.USER_ALL) { users = mUserManager.getUserIds(); targetUsers = allUsers; } else { users = new int[]{userId}; targetUsers = new int[]{userId}; } for (int i = 0; i < users.length; ++i) { if (dpm.packageHasActiveAdmins(packageName, users[i])) { for (int i = 0; i < targetUsers.length; ++i) { if (dpm.packageHasActiveAdmins(packageName, targetUsers[i])) { return true; } if (isDeviceManagementRoleHolder(packageName, users[i])) { } // If a package is DMRH on a managed user, it should also be treated as an admin on // that user. If that package is also a system package, it should also be protected // on other users otherwise "uninstall updates" on an unmanaged user may break // management on other users because apk version is shared between all users. var packageState = snapshotComputer().getPackageStateInternal(packageName); if (packageState == null) { return false; } for (int user : packageState.isSystem() ? allUsers : targetUsers) { if (isDeviceManagementRoleHolder(packageName, user) && userManagerInternal.isUserManaged(user)) { return true; } } Loading