Merge "Fix binder error about non-oneway biometric calls" into sc-v2-dev

This commit is contained in:
Ilya Matyukhin
2021-11-06 02:31:49 +00:00
committed by Android (Google) Code Review
4 changed files with 36 additions and 12 deletions

View File

@@ -22,6 +22,7 @@ import android.content.Context;
import android.hardware.biometrics.face.IFace; import android.hardware.biometrics.face.IFace;
import android.hardware.biometrics.face.ISession; import android.hardware.biometrics.face.ISession;
import android.hardware.biometrics.face.ISessionCallback; import android.hardware.biometrics.face.ISessionCallback;
import android.os.Binder;
import android.os.IBinder; import android.os.IBinder;
import android.os.RemoteException; import android.os.RemoteException;
import android.util.Slog; import android.util.Slog;
@@ -52,6 +53,7 @@ public class FaceStartUserClient extends StartUserClient<IFace, ISession> {
try { try {
final ISession newSession = getFreshDaemon().createSession(getSensorId(), final ISession newSession = getFreshDaemon().createSession(getSensorId(),
getTargetUserId(), mSessionCallback); getTargetUserId(), mSessionCallback);
Binder.allowBlocking(newSession.asBinder());
mUserStartedCallback.onUserStarted(getTargetUserId(), newSession); mUserStartedCallback.onUserStarted(getTargetUserId(), newSession);
getCallback().onClientFinished(this, true /* success */); getCallback().onClientFinished(this, true /* success */);
} catch (RemoteException e) { } catch (RemoteException e) {

View File

@@ -22,6 +22,7 @@ import android.content.Context;
import android.hardware.biometrics.fingerprint.IFingerprint; import android.hardware.biometrics.fingerprint.IFingerprint;
import android.hardware.biometrics.fingerprint.ISession; import android.hardware.biometrics.fingerprint.ISession;
import android.hardware.biometrics.fingerprint.ISessionCallback; import android.hardware.biometrics.fingerprint.ISessionCallback;
import android.os.Binder;
import android.os.IBinder; import android.os.IBinder;
import android.os.RemoteException; import android.os.RemoteException;
import android.util.Slog; import android.util.Slog;
@@ -53,6 +54,7 @@ public class FingerprintStartUserClient extends StartUserClient<IFingerprint, IS
try { try {
final ISession newSession = getFreshDaemon().createSession(getSensorId(), final ISession newSession = getFreshDaemon().createSession(getSensorId(),
getTargetUserId(), mSessionCallback); getTargetUserId(), mSessionCallback);
Binder.allowBlocking(newSession.asBinder());
mUserStartedCallback.onUserStarted(getTargetUserId(), newSession); mUserStartedCallback.onUserStarted(getTargetUserId(), newSession);
getCallback().onClientFinished(this, true /* success */); getCallback().onClientFinished(this, true /* success */);
} catch (RemoteException e) { } catch (RemoteException e) {

View File

@@ -19,13 +19,17 @@ package com.android.server.biometrics.sensors.face.aidl;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull; import static org.junit.Assert.assertNull;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import android.content.Context; import android.content.Context;
import android.hardware.biometrics.common.CommonProps; import android.hardware.biometrics.common.CommonProps;
import android.hardware.biometrics.face.IFace; import android.hardware.biometrics.face.IFace;
import android.hardware.biometrics.face.ISession;
import android.hardware.biometrics.face.SensorProps; import android.hardware.biometrics.face.SensorProps;
import android.os.RemoteException;
import android.os.UserManager; import android.os.UserManager;
import android.platform.test.annotations.Presubmit; import android.platform.test.annotations.Presubmit;
@@ -33,7 +37,6 @@ import androidx.annotation.NonNull;
import androidx.test.InstrumentationRegistry; import androidx.test.InstrumentationRegistry;
import androidx.test.filters.SmallTest; import androidx.test.filters.SmallTest;
import com.android.server.biometrics.sensors.BaseClientMonitor;
import com.android.server.biometrics.sensors.BiometricScheduler; import com.android.server.biometrics.sensors.BiometricScheduler;
import com.android.server.biometrics.sensors.HalClientMonitor; import com.android.server.biometrics.sensors.HalClientMonitor;
import com.android.server.biometrics.sensors.LockoutResetDispatcher; import com.android.server.biometrics.sensors.LockoutResetDispatcher;
@@ -55,6 +58,8 @@ public class FaceProviderTest {
private Context mContext; private Context mContext;
@Mock @Mock
private UserManager mUserManager; private UserManager mUserManager;
@Mock
private IFace mDaemon;
private SensorProps[] mSensorProps; private SensorProps[] mSensorProps;
private LockoutResetDispatcher mLockoutResetDispatcher; private LockoutResetDispatcher mLockoutResetDispatcher;
@@ -65,11 +70,12 @@ public class FaceProviderTest {
} }
@Before @Before
public void setUp() { public void setUp() throws RemoteException {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager); when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager);
when(mUserManager.getAliveUsers()).thenReturn(new ArrayList<>()); when(mUserManager.getAliveUsers()).thenReturn(new ArrayList<>());
when(mDaemon.createSession(anyInt(), anyInt(), any())).thenReturn(mock(ISession.class));
final SensorProps sensor1 = new SensorProps(); final SensorProps sensor1 = new SensorProps();
sensor1.commonProps = new CommonProps(); sensor1.commonProps = new CommonProps();
@@ -78,11 +84,11 @@ public class FaceProviderTest {
sensor2.commonProps = new CommonProps(); sensor2.commonProps = new CommonProps();
sensor2.commonProps.sensorId = 1; sensor2.commonProps.sensorId = 1;
mSensorProps = new SensorProps[] {sensor1, sensor2}; mSensorProps = new SensorProps[]{sensor1, sensor2};
mLockoutResetDispatcher = new LockoutResetDispatcher(mContext); mLockoutResetDispatcher = new LockoutResetDispatcher(mContext);
mFaceProvider = new TestableFaceProvider(mContext, mSensorProps, TAG, mFaceProvider = new TestableFaceProvider(mDaemon, mContext, mSensorProps, TAG,
mLockoutResetDispatcher); mLockoutResetDispatcher);
} }
@@ -127,17 +133,20 @@ public class FaceProviderTest {
} }
private static class TestableFaceProvider extends FaceProvider { private static class TestableFaceProvider extends FaceProvider {
public TestableFaceProvider(@NonNull Context context, private final IFace mDaemon;
TestableFaceProvider(@NonNull IFace daemon,
@NonNull Context context,
@NonNull SensorProps[] props, @NonNull SensorProps[] props,
@NonNull String halInstanceName, @NonNull String halInstanceName,
@NonNull LockoutResetDispatcher lockoutResetDispatcher) { @NonNull LockoutResetDispatcher lockoutResetDispatcher) {
super(context, props, halInstanceName, lockoutResetDispatcher); super(context, props, halInstanceName, lockoutResetDispatcher);
mDaemon = daemon;
} }
@Override @Override
synchronized IFace getHalInstance() { synchronized IFace getHalInstance() {
return mock(IFace.class); return mDaemon;
} }
} }
} }

View File

@@ -19,6 +19,7 @@ package com.android.server.biometrics.sensors.fingerprint.aidl;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull; import static org.junit.Assert.assertNull;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.anyInt; import static org.mockito.Mockito.anyInt;
import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
@@ -28,8 +29,10 @@ import android.content.res.Resources;
import android.content.res.TypedArray; import android.content.res.TypedArray;
import android.hardware.biometrics.common.CommonProps; import android.hardware.biometrics.common.CommonProps;
import android.hardware.biometrics.fingerprint.IFingerprint; import android.hardware.biometrics.fingerprint.IFingerprint;
import android.hardware.biometrics.fingerprint.ISession;
import android.hardware.biometrics.fingerprint.SensorLocation; import android.hardware.biometrics.fingerprint.SensorLocation;
import android.hardware.biometrics.fingerprint.SensorProps; import android.hardware.biometrics.fingerprint.SensorProps;
import android.os.RemoteException;
import android.os.UserManager; import android.os.UserManager;
import android.platform.test.annotations.Presubmit; import android.platform.test.annotations.Presubmit;
@@ -63,6 +66,8 @@ public class FingerprintProviderTest {
@Mock @Mock
private UserManager mUserManager; private UserManager mUserManager;
@Mock @Mock
private IFingerprint mDaemon;
@Mock
private GestureAvailabilityDispatcher mGestureAvailabilityDispatcher; private GestureAvailabilityDispatcher mGestureAvailabilityDispatcher;
@Mock @Mock
private FingerprintStateCallback mFingerprintStateCallback; private FingerprintStateCallback mFingerprintStateCallback;
@@ -76,13 +81,14 @@ public class FingerprintProviderTest {
} }
@Before @Before
public void setUp() { public void setUp() throws RemoteException {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
when(mContext.getResources()).thenReturn(mResources); when(mContext.getResources()).thenReturn(mResources);
when(mResources.obtainTypedArray(anyInt())).thenReturn(mock(TypedArray.class)); when(mResources.obtainTypedArray(anyInt())).thenReturn(mock(TypedArray.class));
when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager); when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager);
when(mUserManager.getAliveUsers()).thenReturn(new ArrayList<>()); when(mUserManager.getAliveUsers()).thenReturn(new ArrayList<>());
when(mDaemon.createSession(anyInt(), anyInt(), any())).thenReturn(mock(ISession.class));
final SensorProps sensor1 = new SensorProps(); final SensorProps sensor1 = new SensorProps();
sensor1.commonProps = new CommonProps(); sensor1.commonProps = new CommonProps();
@@ -97,8 +103,9 @@ public class FingerprintProviderTest {
mLockoutResetDispatcher = new LockoutResetDispatcher(mContext); mLockoutResetDispatcher = new LockoutResetDispatcher(mContext);
mFingerprintProvider = new TestableFingerprintProvider(mContext, mFingerprintStateCallback, mFingerprintProvider = new TestableFingerprintProvider(mDaemon, mContext,
mSensorProps, TAG, mLockoutResetDispatcher, mGestureAvailabilityDispatcher); mFingerprintStateCallback, mSensorProps, TAG, mLockoutResetDispatcher,
mGestureAvailabilityDispatcher);
} }
@SuppressWarnings("rawtypes") @SuppressWarnings("rawtypes")
@@ -142,7 +149,10 @@ public class FingerprintProviderTest {
} }
private static class TestableFingerprintProvider extends FingerprintProvider { private static class TestableFingerprintProvider extends FingerprintProvider {
public TestableFingerprintProvider(@NonNull Context context, private final IFingerprint mDaemon;
TestableFingerprintProvider(@NonNull IFingerprint daemon,
@NonNull Context context,
@NonNull FingerprintStateCallback fingerprintStateCallback, @NonNull FingerprintStateCallback fingerprintStateCallback,
@NonNull SensorProps[] props, @NonNull SensorProps[] props,
@NonNull String halInstanceName, @NonNull String halInstanceName,
@@ -150,11 +160,12 @@ public class FingerprintProviderTest {
@NonNull GestureAvailabilityDispatcher gestureAvailabilityDispatcher) { @NonNull GestureAvailabilityDispatcher gestureAvailabilityDispatcher) {
super(context, fingerprintStateCallback, props, halInstanceName, lockoutResetDispatcher, super(context, fingerprintStateCallback, props, halInstanceName, lockoutResetDispatcher,
gestureAvailabilityDispatcher); gestureAvailabilityDispatcher);
mDaemon = daemon;
} }
@Override @Override
synchronized IFingerprint getHalInstance() { synchronized IFingerprint getHalInstance() {
return mock(IFingerprint.class); return mDaemon;
} }
} }
} }