Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a99328d1 authored by Rocky Fang's avatar Rocky Fang Committed by Android (Google) Code Review
Browse files

Merge "Implement onDynamicSensorDisconnected" into main

parents 5704dbd9 c971c41d
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -15,7 +15,7 @@ aconfig_declarations {

cc_aconfig_library {
    name: "sensorservice_flags_c_lib",
    aconfig_declarations: "dynamic_sensors_flags",
    aconfig_declarations: "sensorservice_flags",
    host_supported: true,
}

@@ -82,6 +82,7 @@ cc_library {
        "android.hardware.sensors@2.1",
        "android.hardware.common-V2-ndk",
        "android.hardware.common.fmq-V1-ndk",
        "server_configurable_flags",
    ],

    static_libs: [
@@ -89,6 +90,7 @@ cc_library {
        "android.hardware.sensors@1.0-convert",
        "android.hardware.sensors-V1-convert",
        "android.hardware.sensors-V2-ndk",
        "sensorservice_flags_c_lib",
    ],

    generated_headers: ["framework-cppstream-protos"],
+18 −5
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@

#include <android-base/logging.h>
#include <android/util/ProtoOutputStream.h>
#include <com_android_frameworks_sensorservice_flags.h>
#include <cutils/atomic.h>
#include <frameworks/base/core/proto/android/service/sensor_service.proto.h>
#include <hardware/sensors-base.h>
@@ -42,6 +43,7 @@

using namespace android::hardware::sensors;
using android::util::ProtoOutputStream;
namespace sensorservice_flags = com::android::frameworks::sensorservice::flags;

namespace android {
// ---------------------------------------------------------------------------
@@ -416,8 +418,15 @@ void SensorDevice::onDynamicSensorsConnected(const std::vector<sensor_t>& dynami
}

void SensorDevice::onDynamicSensorsDisconnected(
        const std::vector<int32_t>& /* dynamicSensorHandlesRemoved */) {
    // TODO: Currently dynamic sensors do not seem to be removed
        const std::vector<int32_t>& dynamicSensorHandlesRemoved) {
    if (sensorservice_flags::sensor_device_on_dynamic_sensor_disconnected()) {
        for (auto handle : dynamicSensorHandlesRemoved) {
            auto it = mConnectedDynamicSensors.find(handle);
            if (it != mConnectedDynamicSensors.end()) {
                mConnectedDynamicSensors.erase(it);
            }
        }
    }
}

void SensorDevice::writeWakeLockHandled(uint32_t count) {
@@ -483,12 +492,16 @@ status_t SensorDevice::activateLocked(void* ident, int handle, int enabled) {
    } else {
        ALOGD_IF(DEBUG_CONNECTIONS, "disable index=%zd", info.batchParams.indexOfKey(ident));

        // If a connected dynamic sensor is deactivated, remove it from the
        // dictionary.
        // TODO(b/316958439): Remove these line after
        // sensor_device_on_dynamic_sensor_disconnected is ramped up. Bounded
        // here since this function is coupled with
        // dynamic_sensors_hal_disconnect_dynamic_sensor flag. If a connected
        // dynamic sensor is deactivated, remove it from the dictionary.
        auto it = mConnectedDynamicSensors.find(handle);
        if (it != mConnectedDynamicSensors.end()) {
          mConnectedDynamicSensors.erase(it);
        }
        // End of TODO(b/316958439)

        if (info.removeBatchParamsForIdent(ident) >= 0) {
            if (info.numActiveClients() == 0) {