diff --git a/core/api/system-current.txt b/core/api/system-current.txt index 01e2414fa6da5..586b5c882b66e 100644 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -10732,7 +10732,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 @@ -10750,7 +10750,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); } diff --git a/core/java/android/attention/AttentionManagerInternal.java b/core/java/android/attention/AttentionManagerInternal.java index 4e00da1b8c10f..47bec618cfd9c 100644 --- a/core/java/android/attention/AttentionManagerInternal.java +++ b/core/java/android/attention/AttentionManagerInternal.java @@ -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. diff --git a/core/java/android/service/attention/AttentionService.java b/core/java/android/service/attention/AttentionService.java index f5c59b597c3ae..462ac142ce77c 100644 --- a/core/java/android/service/attention/AttentionService.java +++ b/core/java/android/service/attention/AttentionService.java @@ -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 mCallback; + /** Callbacks for ProximityUpdateCallback results. */ + public static final class ProximityUpdateCallback { + @NonNull private final WeakReference 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(); } diff --git a/core/java/android/service/attention/IAttentionService.aidl b/core/java/android/service/attention/IAttentionService.aidl index 8bb881ba1708d..e3ce114c54413 100644 --- a/core/java/android/service/attention/IAttentionService.aidl +++ b/core/java/android/service/attention/IAttentionService.aidl @@ -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(); } \ No newline at end of file diff --git a/core/java/android/service/attention/IProximityCallback.aidl b/core/java/android/service/attention/IProximityUpdateCallback.aidl similarity index 77% rename from core/java/android/service/attention/IProximityCallback.aidl rename to core/java/android/service/attention/IProximityUpdateCallback.aidl index 9ecf9bc28e84d..26daa5cb93ae4 100644 --- a/core/java/android/service/attention/IProximityCallback.aidl +++ b/core/java/android/service/attention/IProximityUpdateCallback.aidl @@ -5,6 +5,6 @@ package android.service.attention; * * @hide */ -oneway interface IProximityCallback { +oneway interface IProximityUpdateCallback { void onProximityUpdate(double distance); } diff --git a/services/core/java/com/android/server/attention/AttentionManagerService.java b/services/core/java/com/android/server/attention/AttentionManagerService.java index d2fa386ad6baf..567d1aef32724 100644 --- a/services/core/java/com/android/server/attention/AttentionManagerService.java +++ b/services/core/java/com/android/server/attention/AttentionManagerService.java @@ -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 " diff --git a/services/tests/servicestests/src/com/android/server/attention/AttentionManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/attention/AttentionManagerServiceTest.java index 3890d4d006e23..897b91e65c850 100644 --- a/services/tests/servicestests/src/com/android/server/attention/AttentionManagerServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/attention/AttentionManagerServiceTest.java @@ -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); }