Merge "Rename ProximityCallback to ProximityUpdateCallback"

This commit is contained in:
Daniel Kim
2022-02-17 06:37:02 +00:00
committed by Android (Google) Code Review
7 changed files with 79 additions and 71 deletions

View File

@@ -10848,7 +10848,7 @@ package android.service.attention {
method @Nullable public final android.os.IBinder onBind(@NonNull android.content.Intent);
method public abstract void onCancelAttentionCheck(@NonNull android.service.attention.AttentionService.AttentionCallback);
method public abstract void onCheckAttention(@NonNull android.service.attention.AttentionService.AttentionCallback);
method public void onStartProximityUpdates(@NonNull android.service.attention.AttentionService.ProximityCallback);
method public void onStartProximityUpdates(@NonNull android.service.attention.AttentionService.ProximityUpdateCallback);
method public void onStopProximityUpdates();
field public static final int ATTENTION_FAILURE_CAMERA_PERMISSION_ABSENT = 6; // 0x6
field public static final int ATTENTION_FAILURE_CANCELLED = 3; // 0x3
@@ -10866,7 +10866,7 @@ package android.service.attention {
method public void onSuccess(int, long);
}
public static final class AttentionService.ProximityCallback {
public static final class AttentionService.ProximityUpdateCallback {
method public void onProximityUpdate(double);
}

View File

@@ -49,21 +49,19 @@ public abstract class AttentionManagerInternal {
/**
* Requests the continuous updates of proximity signal via the provided callback,
* until the given callback is unregistered. Currently, AttentionManagerService only
* anticipates one client and updates one client at a time. If a new client wants to
* onboard to receiving Proximity updates, please make a feature request to make proximity
* feature multi-client before depending on this feature.
* anticipates one client and updates one client at a time.
*
* @param callback a callback that receives the proximity updates
* @return {@code true} if the registration should succeed.
*/
public abstract boolean onStartProximityUpdates(ProximityCallbackInternal callback);
public abstract boolean onStartProximityUpdates(ProximityUpdateCallbackInternal callback);
/**
* Requests to stop providing continuous updates until the callback is registered.
*
* @param callback a callback that was used in {@link #onStartProximityUpdates}
*/
public abstract void onStopProximityUpdates(ProximityCallbackInternal callback);
public abstract void onStopProximityUpdates(ProximityUpdateCallbackInternal callback);
/** Internal interface for attention callback. */
public abstract static class AttentionCallbackInternal {
@@ -85,7 +83,7 @@ public abstract class AttentionManagerInternal {
}
/** Internal interface for proximity callback. */
public abstract static class ProximityCallbackInternal {
public abstract static class ProximityUpdateCallbackInternal {
/**
* @param distance the estimated distance of the user (in meter)
* The distance will be PROXIMITY_UNKNOWN if the proximity sensing was inconclusive.

View File

@@ -128,9 +128,9 @@ public abstract class AttentionService extends Service {
/** {@inheritDoc} */
@Override
public void onStartProximityUpdates(IProximityCallback callback) {
public void onStartProximityUpdates(IProximityUpdateCallback callback) {
Objects.requireNonNull(callback);
AttentionService.this.onStartProximityUpdates(new ProximityCallback(callback));
AttentionService.this.onStartProximityUpdates(new ProximityUpdateCallback(callback));
}
@@ -166,11 +166,11 @@ public abstract class AttentionService extends Service {
/**
* Requests the continuous updates of proximity signal via the provided callback,
* until the given callback is unregistered.
* until {@link #onStopProximityUpdates} is called.
*
* @param callback the callback to return the result to
*/
public void onStartProximityUpdates(@NonNull ProximityCallback callback) {
public void onStartProximityUpdates(@NonNull ProximityUpdateCallback callback) {
Slog.w(LOG_TAG, "Override this method.");
}
@@ -213,22 +213,24 @@ public abstract class AttentionService extends Service {
}
}
/** Callbacks for ProximityCallback results. */
public static final class ProximityCallback {
@NonNull private final WeakReference<IProximityCallback> mCallback;
/** Callbacks for ProximityUpdateCallback results. */
public static final class ProximityUpdateCallback {
@NonNull private final WeakReference<IProximityUpdateCallback> mCallback;
private ProximityCallback(@NonNull IProximityCallback callback) {
private ProximityUpdateCallback(@NonNull IProximityUpdateCallback callback) {
mCallback = new WeakReference<>(callback);
}
/**
* @param distance the estimated distance of the user (in meter)
* The distance will be PROXIMITY_UNKNOWN if the proximity sensing was inconclusive.
*
* The distance will be {@link #PROXIMITY_UNKNOWN} if the proximity sensing
* was inconclusive.
*/
public void onProximityUpdate(double distance) {
try {
mCallback.get().onProximityUpdate(distance);
if (mCallback.get() != null) {
mCallback.get().onProximityUpdate(distance);
}
} catch (RemoteException e) {
e.rethrowFromSystemServer();
}

View File

@@ -17,7 +17,7 @@
package android.service.attention;
import android.service.attention.IAttentionCallback;
import android.service.attention.IProximityCallback;
import android.service.attention.IProximityUpdateCallback;
/**
* Interface for a concrete implementation to provide to the AttentionManagerService.
@@ -27,6 +27,6 @@ import android.service.attention.IProximityCallback;
oneway interface IAttentionService {
void checkAttention(IAttentionCallback callback);
void cancelAttentionCheck(IAttentionCallback callback);
void onStartProximityUpdates(IProximityCallback callback);
void onStartProximityUpdates(IProximityUpdateCallback callback);
void onStopProximityUpdates();
}

View File

@@ -5,6 +5,6 @@ package android.service.attention;
*
* @hide
*/
oneway interface IProximityCallback {
oneway interface IProximityUpdateCallback {
void onProximityUpdate(double distance);
}

View File

@@ -30,7 +30,7 @@ import android.annotation.Nullable;
import android.app.ActivityThread;
import android.attention.AttentionManagerInternal;
import android.attention.AttentionManagerInternal.AttentionCallbackInternal;
import android.attention.AttentionManagerInternal.ProximityCallbackInternal;
import android.attention.AttentionManagerInternal.ProximityUpdateCallbackInternal;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
@@ -59,7 +59,7 @@ import android.service.attention.AttentionService.AttentionFailureCodes;
import android.service.attention.AttentionService.AttentionSuccessCodes;
import android.service.attention.IAttentionCallback;
import android.service.attention.IAttentionService;
import android.service.attention.IProximityCallback;
import android.service.attention.IProximityUpdateCallback;
import android.text.TextUtils;
import android.util.Slog;
@@ -336,7 +336,7 @@ public class AttentionManagerService extends SystemService {
* @return {@code true} if the framework was able to dispatch the request
*/
@VisibleForTesting
boolean onStartProximityUpdates(ProximityCallbackInternal callbackInternal) {
boolean onStartProximityUpdates(ProximityUpdateCallbackInternal callbackInternal) {
Objects.requireNonNull(callbackInternal);
if (!mIsServiceEnabled) {
Slog.w(LOG_TAG, "Trying to call onProximityUpdate() on an unsupported device.");
@@ -385,7 +385,7 @@ public class AttentionManagerService extends SystemService {
/** Cancels the specified proximity registration. */
@VisibleForTesting
void onStopProximityUpdates(ProximityCallbackInternal callbackInternal) {
void onStopProximityUpdates(ProximityUpdateCallbackInternal callbackInternal) {
synchronized (mLock) {
if (mCurrentProximityUpdate == null
|| !mCurrentProximityUpdate.mCallbackInternal.equals(callbackInternal)
@@ -506,12 +506,12 @@ public class AttentionManagerService extends SystemService {
@Override
public boolean onStartProximityUpdates(
ProximityCallbackInternal callback) {
ProximityUpdateCallbackInternal callback) {
return AttentionManagerService.this.onStartProximityUpdates(callback);
}
@Override
public void onStopProximityUpdates(ProximityCallbackInternal callback) {
public void onStopProximityUpdates(ProximityUpdateCallbackInternal callback) {
AttentionManagerService.this.onStopProximityUpdates(callback);
}
}
@@ -635,13 +635,13 @@ public class AttentionManagerService extends SystemService {
@VisibleForTesting
final class ProximityUpdate {
private final ProximityCallbackInternal mCallbackInternal;
private final IProximityCallback mIProximityCallback;
private final ProximityUpdateCallbackInternal mCallbackInternal;
private final IProximityUpdateCallback mIProximityUpdateCallback;
private boolean mStartedUpdates;
ProximityUpdate(ProximityCallbackInternal callbackInternal) {
ProximityUpdate(ProximityUpdateCallbackInternal callbackInternal) {
mCallbackInternal = callbackInternal;
mIProximityCallback = new IProximityCallback.Stub() {
mIProximityUpdateCallback = new IProximityUpdateCallback.Stub() {
@Override
public void onProximityUpdate(double distance) {
synchronized (mLock) {
@@ -664,7 +664,7 @@ public class AttentionManagerService extends SystemService {
return false;
}
try {
mService.onStartProximityUpdates(mIProximityCallback);
mService.onStartProximityUpdates(mIProximityUpdateCallback);
mStartedUpdates = true;
} catch (RemoteException e) {
Slog.e(LOG_TAG, "Cannot call into the AttentionService", e);
@@ -758,7 +758,8 @@ public class AttentionManagerService extends SystemService {
if (mCurrentProximityUpdate != null && mCurrentProximityUpdate.mStartedUpdates) {
if (mService != null) {
try {
mService.onStartProximityUpdates(mCurrentProximityUpdate.mIProximityCallback);
mService.onStartProximityUpdates(
mCurrentProximityUpdate.mIProximityUpdateCallback);
} catch (RemoteException e) {
Slog.e(LOG_TAG, "Cannot call into the AttentionService", e);
}
@@ -913,7 +914,7 @@ public class AttentionManagerService extends SystemService {
}
}
class TestableProximityCallbackInternal extends ProximityCallbackInternal {
class TestableProximityUpdateCallbackInternal extends ProximityUpdateCallbackInternal {
private double mLastCallbackCode = PROXIMITY_UNKNOWN;
@Override
@@ -932,8 +933,8 @@ public class AttentionManagerService extends SystemService {
final TestableAttentionCallbackInternal mTestableAttentionCallback =
new TestableAttentionCallbackInternal();
final TestableProximityCallbackInternal mTestableProximityCallback =
new TestableProximityCallbackInternal();
final TestableProximityUpdateCallbackInternal mTestableProximityUpdateCallback =
new TestableProximityUpdateCallbackInternal();
@Override
public int onCommand(@Nullable final String cmd) {
@@ -964,8 +965,8 @@ public class AttentionManagerService extends SystemService {
return cmdClearTestableAttentionService();
case "getLastTestCallbackCode":
return cmdGetLastTestCallbackCode();
case "getLastTestProximityCallbackCode":
return cmdGetLastTestProximityCallbackCode();
case "getLastTestProximityUpdateCallbackCode":
return cmdGetLastTestProximityUpdateCallbackCode();
default:
return handleDefaultCommands(cmd);
}
@@ -990,7 +991,7 @@ public class AttentionManagerService extends SystemService {
private int cmdClearTestableAttentionService() {
sTestAttentionServicePackage = "";
mTestableAttentionCallback.reset();
mTestableProximityCallback.reset();
mTestableProximityUpdateCallback.reset();
resetStates();
return 0;
}
@@ -1011,14 +1012,14 @@ public class AttentionManagerService extends SystemService {
private int cmdCallOnStartProximityUpdates() {
final PrintWriter out = getOutPrintWriter();
boolean calledSuccessfully = onStartProximityUpdates(mTestableProximityCallback);
boolean calledSuccessfully = onStartProximityUpdates(mTestableProximityUpdateCallback);
out.println(calledSuccessfully ? "true" : "false");
return 0;
}
private int cmdCallOnStopProximityUpdates() {
final PrintWriter out = getOutPrintWriter();
onStopProximityUpdates(mTestableProximityCallback);
onStopProximityUpdates(mTestableProximityUpdateCallback);
out.println("true");
return 0;
}
@@ -1036,9 +1037,9 @@ public class AttentionManagerService extends SystemService {
return 0;
}
private int cmdGetLastTestProximityCallbackCode() {
private int cmdGetLastTestProximityUpdateCallbackCode() {
final PrintWriter out = getOutPrintWriter();
out.println(mTestableProximityCallback.getLastCallbackCode());
out.println(mTestableProximityUpdateCallback.getLastCallbackCode());
return 0;
}
@@ -1081,7 +1082,7 @@ public class AttentionManagerService extends SystemService {
out.println(
" := true, if the request was successfully dispatched to the service "
+ "implementation."
+ " (to see the result, call getLastTestProximityCallbackCode)");
+ " (to see the result, call getLastTestProximityUpdateCallbackCode)");
out.println(" := false, otherwise");
out.println(" call onStopProximityUpdates: Cancels proximity updates");
out.println(" getLastTestCallbackCode");
@@ -1089,7 +1090,7 @@ public class AttentionManagerService extends SystemService {
out.println(
" := An integer, representing the last callback code received from the "
+ "bounded implementation. If none, it will return -1");
out.println(" getLastTestProximityCallbackCode");
out.println(" getLastTestProximityUpdateCallbackCode");
out.println(" ---returns:");
out.println(
" := A double, representing the last proximity value received from the "

View File

@@ -37,7 +37,7 @@ import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.mockito.Mockito.verifyZeroInteractions;
import android.attention.AttentionManagerInternal.AttentionCallbackInternal;
import android.attention.AttentionManagerInternal.ProximityCallbackInternal;
import android.attention.AttentionManagerInternal.ProximityUpdateCallbackInternal;
import android.content.ComponentName;
import android.content.Context;
import android.os.IBinder;
@@ -48,7 +48,7 @@ import android.os.RemoteException;
import android.provider.DeviceConfig;
import android.service.attention.IAttentionCallback;
import android.service.attention.IAttentionService;
import android.service.attention.IProximityCallback;
import android.service.attention.IProximityUpdateCallback;
import androidx.test.filters.SmallTest;
@@ -85,7 +85,7 @@ public class AttentionManagerServiceTest {
@Mock
Context mContext;
@Mock
private ProximityCallbackInternal mMockProximityCallbackInternal;
private ProximityUpdateCallbackInternal mMockProximityUpdateCallbackInternal;
@Before
public void setUp() throws RemoteException {
@@ -119,7 +119,8 @@ public class AttentionManagerServiceTest {
public void testRegisterProximityUpdates_returnFalseWhenServiceDisabled() {
mSpyAttentionManager.mIsServiceEnabled = false;
assertThat(mSpyAttentionManager.onStartProximityUpdates(mMockProximityCallbackInternal))
assertThat(mSpyAttentionManager.onStartProximityUpdates(
mMockProximityUpdateCallbackInternal))
.isFalse();
}
@@ -128,7 +129,8 @@ public class AttentionManagerServiceTest {
mSpyAttentionManager.mIsServiceEnabled = true;
doReturn(false).when(mSpyAttentionManager).isServiceAvailable();
assertThat(mSpyAttentionManager.onStartProximityUpdates(mMockProximityCallbackInternal))
assertThat(mSpyAttentionManager.onStartProximityUpdates(
mMockProximityUpdateCallbackInternal))
.isFalse();
}
@@ -139,7 +141,8 @@ public class AttentionManagerServiceTest {
doReturn(true).when(mSpyAttentionManager).isServiceAvailable();
doReturn(false).when(mMockIPowerManager).isInteractive();
assertThat(mSpyAttentionManager.onStartProximityUpdates(mMockProximityCallbackInternal))
assertThat(mSpyAttentionManager.onStartProximityUpdates(
mMockProximityUpdateCallbackInternal))
.isFalse();
}
@@ -149,9 +152,10 @@ public class AttentionManagerServiceTest {
doReturn(true).when(mSpyAttentionManager).isServiceAvailable();
doReturn(true).when(mMockIPowerManager).isInteractive();
assertThat(mSpyAttentionManager.onStartProximityUpdates(mMockProximityCallbackInternal))
assertThat(mSpyAttentionManager.onStartProximityUpdates(
mMockProximityUpdateCallbackInternal))
.isTrue();
verify(mMockProximityCallbackInternal, times(1))
verify(mMockProximityUpdateCallbackInternal, times(1))
.onProximityUpdate(PROXIMITY_SUCCESS_STATE);
}
@@ -161,21 +165,23 @@ public class AttentionManagerServiceTest {
doReturn(true).when(mSpyAttentionManager).isServiceAvailable();
doReturn(true).when(mMockIPowerManager).isInteractive();
assertThat(mSpyAttentionManager.onStartProximityUpdates(mMockProximityCallbackInternal))
assertThat(mSpyAttentionManager.onStartProximityUpdates(
mMockProximityUpdateCallbackInternal))
.isTrue();
ProximityUpdate prevProximityUpdate = mSpyAttentionManager.mCurrentProximityUpdate;
assertThat(mSpyAttentionManager.onStartProximityUpdates(mMockProximityCallbackInternal))
assertThat(mSpyAttentionManager.onStartProximityUpdates(
mMockProximityUpdateCallbackInternal))
.isTrue();
assertThat(mSpyAttentionManager.mCurrentProximityUpdate).isEqualTo(prevProximityUpdate);
verify(mMockProximityCallbackInternal, times(1))
verify(mMockProximityUpdateCallbackInternal, times(1))
.onProximityUpdate(PROXIMITY_SUCCESS_STATE);
}
@Test
public void testUnregisterProximityUpdates_noCrashWhenNoCallbackIsRegistered() {
mSpyAttentionManager.onStopProximityUpdates(mMockProximityCallbackInternal);
verifyZeroInteractions(mMockProximityCallbackInternal);
mSpyAttentionManager.onStopProximityUpdates(mMockProximityUpdateCallbackInternal);
verifyZeroInteractions(mMockProximityUpdateCallbackInternal);
}
@Test
@@ -184,11 +190,11 @@ public class AttentionManagerServiceTest {
mSpyAttentionManager.mIsServiceEnabled = true;
doReturn(true).when(mSpyAttentionManager).isServiceAvailable();
doReturn(true).when(mMockIPowerManager).isInteractive();
mSpyAttentionManager.onStartProximityUpdates(mMockProximityCallbackInternal);
verify(mMockProximityCallbackInternal, times(1))
mSpyAttentionManager.onStartProximityUpdates(mMockProximityUpdateCallbackInternal);
verify(mMockProximityUpdateCallbackInternal, times(1))
.onProximityUpdate(PROXIMITY_SUCCESS_STATE);
ProximityCallbackInternal mismatchedCallback = new ProximityCallbackInternal() {
ProximityUpdateCallbackInternal mismatchedCallback = new ProximityUpdateCallbackInternal() {
@Override
public void onProximityUpdate(double distance) {
fail("Callback shouldn't have responded.");
@@ -196,7 +202,7 @@ public class AttentionManagerServiceTest {
};
mSpyAttentionManager.onStopProximityUpdates(mismatchedCallback);
verifyNoMoreInteractions(mMockProximityCallbackInternal);
verifyNoMoreInteractions(mMockProximityUpdateCallbackInternal);
}
@Test
@@ -205,8 +211,8 @@ public class AttentionManagerServiceTest {
mSpyAttentionManager.mIsServiceEnabled = true;
doReturn(true).when(mSpyAttentionManager).isServiceAvailable();
doReturn(true).when(mMockIPowerManager).isInteractive();
mSpyAttentionManager.onStartProximityUpdates(mMockProximityCallbackInternal);
mSpyAttentionManager.onStopProximityUpdates(mMockProximityCallbackInternal);
mSpyAttentionManager.onStartProximityUpdates(mMockProximityUpdateCallbackInternal);
mSpyAttentionManager.onStopProximityUpdates(mMockProximityUpdateCallbackInternal);
assertThat(mSpyAttentionManager.mCurrentProximityUpdate).isNull();
}
@@ -217,14 +223,14 @@ public class AttentionManagerServiceTest {
mSpyAttentionManager.mIsServiceEnabled = true;
doReturn(true).when(mSpyAttentionManager).isServiceAvailable();
doReturn(true).when(mMockIPowerManager).isInteractive();
mSpyAttentionManager.onStartProximityUpdates(mMockProximityCallbackInternal);
verify(mMockProximityCallbackInternal, times(1))
mSpyAttentionManager.onStartProximityUpdates(mMockProximityUpdateCallbackInternal);
verify(mMockProximityUpdateCallbackInternal, times(1))
.onProximityUpdate(PROXIMITY_SUCCESS_STATE);
// Attention Service unregisters the proximity update twice in a row.
mSpyAttentionManager.onStopProximityUpdates(mMockProximityCallbackInternal);
mSpyAttentionManager.onStopProximityUpdates(mMockProximityCallbackInternal);
verifyNoMoreInteractions(mMockProximityCallbackInternal);
mSpyAttentionManager.onStopProximityUpdates(mMockProximityUpdateCallbackInternal);
mSpyAttentionManager.onStopProximityUpdates(mMockProximityUpdateCallbackInternal);
verifyNoMoreInteractions(mMockProximityUpdateCallbackInternal);
}
@Test
@@ -337,7 +343,8 @@ public class AttentionManagerServiceTest {
public void cancelAttentionCheck(IAttentionCallback callback) {
}
public void onStartProximityUpdates(IProximityCallback callback) throws RemoteException {
public void onStartProximityUpdates(IProximityUpdateCallback callback)
throws RemoteException {
callback.onProximityUpdate(PROXIMITY_SUCCESS_STATE);
}