From 2122a9c58ebbe7601f3a0b5f1ce02950147339c3 Mon Sep 17 00:00:00 2001 From: Yahav Nussbaum <yahav@google.com> Date: Tue, 16 Jan 2024 11:54:55 +0000 Subject: [PATCH] Add Powered Off Finding operations to NearbyService Interface only change, without actual use of the HAL API. Bug: 307898240 Test: atest NearbyUnitTests Change-Id: I00772535a8f9247794ff59e465ed2b5af19576b4 --- .../java/android/nearby/INearbyManager.aidl | 9 +++- .../nearby/PoweredOffFindingEphemeralId.aidl | 26 ++++++++++++ .../android/server/nearby/NearbyService.java | 30 ++++++++++++++ .../managers/BluetoothFinderManager.java | 41 +++++++++++++++++++ 4 files changed, 105 insertions(+), 1 deletion(-) create mode 100644 nearby/framework/java/android/nearby/PoweredOffFindingEphemeralId.aidl create mode 100644 nearby/service/java/com/android/server/nearby/managers/BluetoothFinderManager.java diff --git a/nearby/framework/java/android/nearby/INearbyManager.aidl b/nearby/framework/java/android/nearby/INearbyManager.aidl index 7af271ecf2..21ae0ac6cc 100644 --- a/nearby/framework/java/android/nearby/INearbyManager.aidl +++ b/nearby/framework/java/android/nearby/INearbyManager.aidl @@ -20,6 +20,7 @@ import android.nearby.IBroadcastListener; import android.nearby.IScanListener; import android.nearby.BroadcastRequestParcelable; import android.nearby.ScanRequest; +import android.nearby.PoweredOffFindingEphemeralId; import android.nearby.aidl.IOffloadCallback; /** @@ -40,4 +41,10 @@ interface INearbyManager { void stopBroadcast(in IBroadcastListener callback, String packageName, @nullable String attributionTag); void queryOffloadCapability(in IOffloadCallback callback) ; -} \ No newline at end of file + + void setPoweredOffFindingEphemeralIds(in List<PoweredOffFindingEphemeralId> eids); + + void setPoweredOffModeEnabled(boolean enabled); + + boolean getPoweredOffModeEnabled(); +} diff --git a/nearby/framework/java/android/nearby/PoweredOffFindingEphemeralId.aidl b/nearby/framework/java/android/nearby/PoweredOffFindingEphemeralId.aidl new file mode 100644 index 0000000000..9f4bfef6df --- /dev/null +++ b/nearby/framework/java/android/nearby/PoweredOffFindingEphemeralId.aidl @@ -0,0 +1,26 @@ +/* + * Copyright (C) 2024, The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.nearby; + +/** + * Find My Device network ephemeral ID for powered off finding. + * + * @hide + */ +parcelable PoweredOffFindingEphemeralId { + byte[20] bytes; +} diff --git a/nearby/service/java/com/android/server/nearby/NearbyService.java b/nearby/service/java/com/android/server/nearby/NearbyService.java index 3c183ec22c..1575f0776a 100644 --- a/nearby/service/java/com/android/server/nearby/NearbyService.java +++ b/nearby/service/java/com/android/server/nearby/NearbyService.java @@ -35,12 +35,14 @@ import android.nearby.IBroadcastListener; import android.nearby.INearbyManager; import android.nearby.IScanListener; import android.nearby.NearbyManager; +import android.nearby.PoweredOffFindingEphemeralId; import android.nearby.ScanRequest; import android.nearby.aidl.IOffloadCallback; import android.util.Log; import com.android.internal.annotations.VisibleForTesting; import com.android.server.nearby.injector.Injector; +import com.android.server.nearby.managers.BluetoothFinderManager; import com.android.server.nearby.managers.BroadcastProviderManager; import com.android.server.nearby.managers.DiscoveryManager; import com.android.server.nearby.managers.DiscoveryProviderManager; @@ -50,6 +52,8 @@ import com.android.server.nearby.util.identity.CallerIdentity; import com.android.server.nearby.util.permissions.BroadcastPermissions; import com.android.server.nearby.util.permissions.DiscoveryPermissions; +import java.util.List; + /** Service implementing nearby functionality. */ public class NearbyService extends INearbyManager.Stub { public static final String TAG = "NearbyService"; @@ -79,6 +83,7 @@ public class NearbyService extends INearbyManager.Stub { }; private final DiscoveryManager mDiscoveryProviderManager; private final BroadcastProviderManager mBroadcastProviderManager; + private final BluetoothFinderManager mBluetoothFinderManager; public NearbyService(Context context) { mContext = context; @@ -90,6 +95,7 @@ public class NearbyService extends INearbyManager.Stub { mNearbyConfiguration.refactorDiscoveryManager() ? new DiscoveryProviderManager(context, mInjector) : new DiscoveryProviderManagerLegacy(context, mInjector); + mBluetoothFinderManager = new BluetoothFinderManager(); } @VisibleForTesting @@ -148,6 +154,30 @@ public class NearbyService extends INearbyManager.Stub { mDiscoveryProviderManager.queryOffloadCapability(callback); } + @Override + public void setPoweredOffFindingEphemeralIds(List<PoweredOffFindingEphemeralId> eids) { + // Permissions check + enforceBluetoothPrivilegedPermission(mContext); + + mBluetoothFinderManager.sendEids(eids); + } + + @Override + public void setPoweredOffModeEnabled(boolean enabled) { + // Permissions check + enforceBluetoothPrivilegedPermission(mContext); + + mBluetoothFinderManager.setPoweredOffFinderMode(enabled); + } + + @Override + public boolean getPoweredOffModeEnabled() { + // Permissions check + enforceBluetoothPrivilegedPermission(mContext); + + return mBluetoothFinderManager.getPoweredOffFinderMode(); + } + /** * Called by the service initializer. * diff --git a/nearby/service/java/com/android/server/nearby/managers/BluetoothFinderManager.java b/nearby/service/java/com/android/server/nearby/managers/BluetoothFinderManager.java new file mode 100644 index 0000000000..63ff516ce5 --- /dev/null +++ b/nearby/service/java/com/android/server/nearby/managers/BluetoothFinderManager.java @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2024 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.server.nearby.managers; + +import android.nearby.PoweredOffFindingEphemeralId; + +import java.util.List; + +/** Connects to {@link IBluetoothFinder} HAL and invokes its API. */ +// A placeholder implementation until the HAL API can be used. +public class BluetoothFinderManager { + + private boolean mPoweredOffFindingModeEnabled = false; + + /** An empty implementation of the corresponding HAL API call. */ + public void sendEids(List<PoweredOffFindingEphemeralId> eids) {} + + /** A placeholder implementation of the corresponding HAL API call. */ + public void setPoweredOffFinderMode(boolean enable) { + mPoweredOffFindingModeEnabled = enable; + } + + /** A placeholder implementation of the corresponding HAL API call. */ + public boolean getPoweredOffFinderMode() { + return mPoweredOffFindingModeEnabled; + } +} -- GitLab