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

Commit 71b8511d authored by Austin Borger's avatar Austin Borger Committed by Android (Google) Code Review
Browse files

Merge "Query the uid process state in opChanged instead of relying on callbacks." into main

parents f8a19b7f f2da9c7c
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -246,3 +246,13 @@ flag {
        purpose: PURPOSE_FEATURE
    }
}

flag {
    namespace: "camera_platform"
    name: "query_process_state"
    description: "In opChanged, query the process state from AM instead of relying on mUidPolicy"
    bug: "378016494"
    metadata {
        purpose: PURPOSE_BUGFIX
    }
}
+14 −6
Original line number Diff line number Diff line
@@ -4550,6 +4550,17 @@ status_t CameraService::BasicClient::notifyCameraClosing() {
    return OK;
}

int32_t CameraService::getUidProcessState(int32_t uid) {
    const auto& activityManager = getActivityManager();
    int32_t procState = ActivityManager::PROCESS_STATE_NONEXISTENT;
    if (activityManager != nullptr) {
        procState = activityManager->getUidProcessState(uid, toString16(kServiceName));
    } else {
        ALOGE("%s: getActivityManager returned nullptr.", __FUNCTION__);
    }
    return procState;
}

void CameraService::BasicClient::opChanged(int32_t op, const String16&) {
    ATRACE_CALL();
    if (mAppOpsManager == nullptr) {
@@ -4606,12 +4617,9 @@ void CameraService::BasicClient::opChanged(int32_t op, const String16&) {
                      [&](const auto& attr) {
                          uid = static_cast<uid_t>(attr.uid);
                      });
            const auto& activityManager = getActivityManager();
            if (activityManager != nullptr) {
                procState = activityManager->getUidProcessState(uid, toString16(kServiceName));
            } else {
                ALOGD("%s: getActivityManager returned nullptr.", __FUNCTION__);
            }
            procState = getUidProcessState(uid);
        } else if (flags::query_process_state()) {
            procState = getUidProcessState(getClientUid());
        } else {
            procState = sCameraService->mUidPolicy->getProcState(getClientUid());
        }
+2 −0
Original line number Diff line number Diff line
@@ -691,6 +691,8 @@ private:
        return activityManager;
    }

    static int32_t getUidProcessState(int32_t uid);

    /**
     * Typesafe version of device status, containing both the HAL-layer and the service interface-
     * layer values.