Snap for 11520864 from eeb610f928e0676a906ac562e28f25649dd48634 to 24Q2-release
Change-Id: I4bdfed1c2ad1f9307789240794408657f4431817
diff --git a/DeviceLockController/tests/robolectric/src/com/android/devicelockcontroller/provision/worker/ReportDeviceProvisionStateWorkerTest.java b/DeviceLockController/tests/robolectric/src/com/android/devicelockcontroller/provision/worker/ReportDeviceProvisionStateWorkerTest.java
index aa1b854..24031b6 100644
--- a/DeviceLockController/tests/robolectric/src/com/android/devicelockcontroller/provision/worker/ReportDeviceProvisionStateWorkerTest.java
+++ b/DeviceLockController/tests/robolectric/src/com/android/devicelockcontroller/provision/worker/ReportDeviceProvisionStateWorkerTest.java
@@ -61,6 +61,7 @@
import com.google.common.util.concurrent.MoreExecutors;
import org.junit.Before;
+import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -173,6 +174,8 @@
}
@Test
+ @Ignore
+ //TODO(b/327652632): Re-enable after fixing
public void doWork_dismissibleUiState_schedulesAlarmAndSendsNotification() throws Exception {
when(mResponse.isSuccessful()).thenReturn(true);
when(mResponse.getNextClientProvisionState()).thenReturn(PROVISION_STATE_DISMISSIBLE_UI);
@@ -199,6 +202,8 @@
}
@Test
+ @Ignore
+ //TODO(b/327652632): Re-enable after fixing
public void doWork_persistentUiState_schedulesAlarmAndSendsOngoingNotification()
throws Exception {
when(mResponse.isSuccessful()).thenReturn(true);
diff --git a/service/java/com/android/server/devicelock/DeviceLockService.java b/service/java/com/android/server/devicelock/DeviceLockService.java
index 2de5408..81c3edb 100644
--- a/service/java/com/android/server/devicelock/DeviceLockService.java
+++ b/service/java/com/android/server/devicelock/DeviceLockService.java
@@ -16,18 +16,11 @@
package com.android.server.devicelock;
-import static android.provider.Settings.Secure.USER_SETUP_COMPLETE;
-
import android.annotation.NonNull;
-import android.annotation.Nullable;
-import android.content.ContentResolver;
import android.content.Context;
-import android.database.ContentObserver;
-import android.net.Uri;
import android.os.Process;
import android.os.UserHandle;
import android.os.UserManager;
-import android.provider.Settings;
import android.util.Slog;
import com.android.server.SystemService;
@@ -96,30 +89,12 @@
public void onUserUnlocked(@NonNull TargetUser user) {
Slog.d(TAG, "onUserUnlocked: " + user);
final UserHandle userHandle = user.getUserHandle();
- mImpl.onUserUnlocked(userHandle);
- // TODO(b/312521897): Add unit tests for this flow
- registerUserSetupCompleteListener(userHandle);
+ final Context userContext = getUserContext(getContext(), userHandle);
+ mImpl.onUserUnlocked(userContext, userHandle);
}
@Override
public void onUserStopping(@NonNull TargetUser user) {
Slog.d(TAG, "onUserStopping: " + user);
}
-
- private void registerUserSetupCompleteListener(UserHandle userHandle) {
- final ContentResolver contentResolver = getUserContext(getContext(), userHandle)
- .getContentResolver();
- Uri setupCompleteUri = Settings.Secure.getUriFor(USER_SETUP_COMPLETE);
- contentResolver.registerContentObserver(setupCompleteUri,
- false /* notifyForDescendants */, new ContentObserver(null /* handler */) {
- @Override
- public void onChange(boolean selfChange, @Nullable Uri uri) {
- if (setupCompleteUri.equals(uri)
- && Settings.Secure.getInt(
- contentResolver, USER_SETUP_COMPLETE, 0) != 0) {
- mImpl.onUserSetupCompleted(userHandle);
- }
- }
- });
- }
}
diff --git a/service/java/com/android/server/devicelock/DeviceLockServiceImpl.java b/service/java/com/android/server/devicelock/DeviceLockServiceImpl.java
index b68505a..643e1fb 100644
--- a/service/java/com/android/server/devicelock/DeviceLockServiceImpl.java
+++ b/service/java/com/android/server/devicelock/DeviceLockServiceImpl.java
@@ -25,6 +25,7 @@
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
import static android.devicelock.DeviceId.DEVICE_ID_TYPE_IMEI;
import static android.devicelock.DeviceId.DEVICE_ID_TYPE_MEID;
+import static android.provider.Settings.Secure.USER_SETUP_COMPLETE;
import android.Manifest;
import android.Manifest.permission;
@@ -34,6 +35,7 @@
import android.app.role.RoleManager;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
+import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
@@ -41,6 +43,7 @@
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.ServiceInfo;
+import android.database.ContentObserver;
import android.devicelock.DeviceId.DeviceIdType;
import android.devicelock.DeviceLockManager;
import android.devicelock.IDeviceLockService;
@@ -50,6 +53,7 @@
import android.devicelock.ILockUnlockDeviceCallback;
import android.devicelock.ParcelableException;
import android.net.NetworkPolicyManager;
+import android.net.Uri;
import android.os.Binder;
import android.os.Bundle;
import android.os.IBinder;
@@ -58,6 +62,7 @@
import android.os.RemoteCallback;
import android.os.RemoteException;
import android.os.UserHandle;
+import android.provider.Settings;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.util.ArrayMap;
@@ -69,6 +74,8 @@
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.List;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
/**
* Implementation of {@link android.devicelock.IDeviceLockService} binder service.
@@ -87,6 +94,7 @@
private static final int MAX_ADD_ROLE_HOLDER_TRIES = 4;
private final Context mContext;
+ private final ExecutorService mExecutorService = Executors.newCachedThreadPool();
private final RoleManager mRoleManager;
private final TelephonyManager mTelephonyManager;
@@ -303,20 +311,40 @@
});
}
- void onUserUnlocked(@NonNull UserHandle userHandle) {
- getDeviceLockControllerConnector(userHandle).onUserUnlocked(new OutcomeReceiver<>() {
- @Override
- public void onResult(Void ignored) {
- Slog.i(TAG, "User unlocked reported for: " + userHandle);
- }
+ void onUserUnlocked(@NonNull Context userContext, @NonNull UserHandle userHandle) {
+ mExecutorService.execute(() -> {
+ getDeviceLockControllerConnector(userHandle).onUserUnlocked(new OutcomeReceiver<>() {
+ @Override
+ public void onResult(Void ignored) {
+ Slog.i(TAG, "User unlocked reported for: " + userHandle);
+ }
- @Override
- public void onError(Exception ex) {
- Slog.e(TAG, "Exception reporting user unlocked for: " + userHandle, ex);
- }
+ @Override
+ public void onError(Exception ex) {
+ Slog.e(TAG, "Exception reporting user unlocked for: " + userHandle, ex);
+ }
+ });
+ // TODO(b/312521897): Add unit tests for this flow
+ registerUserSetupCompleteListener(userContext, userHandle);
});
}
+ private void registerUserSetupCompleteListener(Context userContext, UserHandle userHandle) {
+ final ContentResolver contentResolver = userContext.getContentResolver();
+ Uri setupCompleteUri = Settings.Secure.getUriFor(USER_SETUP_COMPLETE);
+ contentResolver.registerContentObserver(setupCompleteUri,
+ false /* notifyForDescendants */, new ContentObserver(null /* handler */) {
+ @Override
+ public void onChange(boolean selfChange, @Nullable Uri uri) {
+ if (setupCompleteUri.equals(uri)
+ && Settings.Secure.getInt(
+ contentResolver, USER_SETUP_COMPLETE, 0) != 0) {
+ onUserSetupCompleted(userHandle);
+ }
+ }
+ });
+ }
+
void onUserSetupCompleted(UserHandle userHandle) {
getDeviceLockControllerConnector(userHandle).onUserSetupCompleted(new OutcomeReceiver<>() {
@Override