blob: 42ae15ae61fa2a3c56a18135d2328fd39219f247 [file] [log] [blame]
/*
* Copyright (C) 2023 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.
*/
#pragma once
#include <android/binder_parcel.h>
#if defined(__ANDROID_VENDOR__)
#include <android/llndk-versioning.h>
#else
#if !defined(__INTRODUCED_IN_LLNDK)
#define __INTRODUCED_IN_LLNDK(level) __attribute__((annotate("introduced_in_llndk=" #level)))
#endif
#endif // __ANDROID_VENDOR__
#include <stdbool.h>
#include <stdint.h>
#include <sys/cdefs.h>
#include <sys/types.h>
__BEGIN_DECLS
/*
* A mapping from string keys to values of various types.
* See frameworks/base/core/java/android/os/PersistableBundle.java
* for the Java type than can be used in SDK APIs.
* APersistableBundle exists to be used in AIDL interfaces and seamlessly
* interact with framework services.
* frameworks/native/libs/binder/ndk/include_cpp/android/persistable_bundle_aidl.h
* contains the AIDL type used in the ndk backend of AIDL interfaces.
*/
struct APersistableBundle;
typedef struct APersistableBundle APersistableBundle;
enum {
/**
* This can be returned from functions that need to distinguish between an empty
* value and a non-existent key.
*/
APERSISTABLEBUNDLE_KEY_NOT_FOUND = -1,
/**
* This can be returned from functions that take a APersistableBundle_stringAllocator.
* This means the allocator has failed and returned a nullptr.
*/
APERSISTABLEBUNDLE_ALLOCATOR_FAILED = -2,
};
/**
* This is a user supplied allocator that allocates a buffer for the
* APersistableBundle APIs to fill in with a UTF-8 string.
* The caller that supplies this function is responsible for freeing the
* returned data.
*
* \param the required size in bytes for the allocated buffer
* \param context pointer if needed by the callback
*
* \return allocated buffer of sizeBytes for a UTF-8 string. Null if allocation failed.
*/
typedef char* _Nullable (*_Nonnull APersistableBundle_stringAllocator)(int32_t sizeBytes,
void* _Nullable context);
/**
* Create a new APersistableBundle.
*
* Available since API level 202404.
*
* \return Pointer to a new APersistableBundle
*/
APersistableBundle* _Nullable APersistableBundle_new() __INTRODUCED_IN(__ANDROID_API_V__)
__INTRODUCED_IN_LLNDK(202404);
/**
* Create a new APersistableBundle based off an existing APersistableBundle.
* This is a deep copy, so the new APersistableBundle has its own values from
* copying the original underlying PersistableBundle.
*
* Available since API level 202404.
*
* \param pBundle to duplicate
*
* \return Pointer to a new APersistableBundle
*/
APersistableBundle* _Nullable APersistableBundle_dup(const APersistableBundle* _Nonnull pBundle)
__INTRODUCED_IN(__ANDROID_API_V__) __INTRODUCED_IN_LLNDK(202404);
/**
* Delete an APersistableBundle. This must always be called when finished using
* the object.
*
* \param pBundle to delete. No-op if null.
*
* Available since API level 202404.
*/
void APersistableBundle_delete(APersistableBundle* _Nullable pBundle)
__INTRODUCED_IN(__ANDROID_API_V__) __INTRODUCED_IN_LLNDK(202404);
/**
* Check for equality of APersistableBundles.
*
* Available since API level 202404.
*
* \param lhs bundle to compare against the other param
* \param rhs bundle to compare against the other param
*
* \return true when equal, false when not
*/
bool APersistableBundle_isEqual(const APersistableBundle* _Nonnull lhs,
const APersistableBundle* _Nonnull rhs)
__INTRODUCED_IN(__ANDROID_API_V__) __INTRODUCED_IN_LLNDK(202404);
/**
* Read an APersistableBundle from an AParcel.
*
* Available since API level 202404.
*
* \param parcel to read from
* \param outPBundle bundle to write to
*
* \return STATUS_OK on success
* STATUS_BAD_VALUE if the parcel or outBuffer is null, or if there's an
* issue deserializing (eg, corrupted parcel)
* STATUS_BAD_TYPE if the parcel's current data position is not that of
* an APersistableBundle type
* STATUS_NO_MEMORY if an allocation fails
*/
binder_status_t APersistableBundle_readFromParcel(
const AParcel* _Nonnull parcel, APersistableBundle* _Nullable* _Nonnull outPBundle)
__INTRODUCED_IN(__ANDROID_API_V__) __INTRODUCED_IN_LLNDK(202404);
/**
* Write an APersistableBundle to an AParcel.
*
* Available since API level 202404.
*
* \param pBundle bundle to write to the parcel
* \param parcel to write to
*
* \return STATUS_OK on success.
* STATUS_BAD_VALUE if either pBundle or parcel is null, or if the
* APersistableBundle*
* fails to serialize (eg, internally corrupted)
* STATUS_NO_MEMORY if the parcel runs out of space to store the pBundle & is
* unable to allocate more
* STATUS_FDS_NOT_ALLOWED if the parcel does not allow storing FDs
*/
binder_status_t APersistableBundle_writeToParcel(const APersistableBundle* _Nonnull pBundle,
AParcel* _Nonnull parcel)
__INTRODUCED_IN(__ANDROID_API_V__) __INTRODUCED_IN_LLNDK(202404);
/**
* Get the size of an APersistableBundle. This is the number of mappings in the
* object.
*
* Available since API level 202404.
*
* \param pBundle to get the size of (number of mappings)
*
* \return number of mappings in the object
*/
int32_t APersistableBundle_size(const APersistableBundle* _Nonnull pBundle)
__INTRODUCED_IN(__ANDROID_API_V__) __INTRODUCED_IN_LLNDK(202404);
/**
* Erase any entries added with the provided key.
*
* Available since API level 202404.
*
* \param pBundle to operate on
* \param key for the mapping in UTF-8 to erase
*
* \return number of entries erased. Either 0 or 1.
*/
int32_t APersistableBundle_erase(APersistableBundle* _Nonnull pBundle, const char* _Nonnull key)
__INTRODUCED_IN(__ANDROID_API_V__) __INTRODUCED_IN_LLNDK(202404);
/**
* Put a boolean associated with the provided key.
* New values with the same key will overwrite existing values.
*
* \param pBundle to operate on
* \param key for the mapping in UTF-8
* \param value to put for the mapping
*
* Available since API level 202404.
*/
void APersistableBundle_putBoolean(APersistableBundle* _Nonnull pBundle, const char* _Nonnull key,
bool val) __INTRODUCED_IN(__ANDROID_API_V__)
__INTRODUCED_IN_LLNDK(202404);
/**
* Put an int32_t associated with the provided key.
* New values with the same key will overwrite existing values.
*
* \param pBundle to operate on
* \param key for the mapping in UTF-8
* \param val value to put for the mapping
*
* Available since API level 202404.
*/
void APersistableBundle_putInt(APersistableBundle* _Nonnull pBundle, const char* _Nonnull key,
int32_t val) __INTRODUCED_IN(__ANDROID_API_V__)
__INTRODUCED_IN_LLNDK(202404);
/**
* Put an int64_t associated with the provided key.
* New values with the same key will overwrite existing values.
*
* \param pBundle to operate on
* \param key for the mapping in UTF-8
* \param val value to put for the mapping
*
* Available since API level 202404.
*/
void APersistableBundle_putLong(APersistableBundle* _Nonnull pBundle, const char* _Nonnull key,
int64_t val) __INTRODUCED_IN(__ANDROID_API_V__)
__INTRODUCED_IN_LLNDK(202404);
/**
* Put a double associated with the provided key.
* New values with the same key will overwrite existing values.
*
* \param pBundle to operate on
* \param key for the mapping in UTF-8
* \param val value to put for the mapping
*
* Available since API level 202404.
*/
void APersistableBundle_putDouble(APersistableBundle* _Nonnull pBundle, const char* _Nonnull key,
double val) __INTRODUCED_IN(__ANDROID_API_V__)
__INTRODUCED_IN_LLNDK(202404);
/**
* Put a string associated with the provided key.
* New values with the same key will overwrite existing values.
* The value is copied.
*
* \param pBundle to operate on
* \param key for the mapping in UTF-8
* \param vec vector to put for the mapping
*
* Available since API level 202404.
*/
void APersistableBundle_putString(APersistableBundle* _Nonnull pBundle, const char* _Nonnull key,
const char* _Nonnull val) __INTRODUCED_IN(__ANDROID_API_V__)
__INTRODUCED_IN_LLNDK(202404);
/**
* Put a boolean vector associated with the provided key.
* New values with the same key will overwrite existing values.
* The values are copied.
*
* \param pBundle to operate on
* \param key for the mapping in UTF-8
* \param vec vector to put for the mapping
* \param num number of elements in the vector
*
* Available since API level 202404.
*/
void APersistableBundle_putBooleanVector(APersistableBundle* _Nonnull pBundle,
const char* _Nonnull key, const bool* _Nonnull vec,
int32_t num) __INTRODUCED_IN(__ANDROID_API_V__)
__INTRODUCED_IN_LLNDK(202404);
/**
* Put an int32_t vector associated with the provided key.
* New values with the same key will overwrite existing values.
* The values are copied.
*
* \param pBundle to operate on
* \param key for the mapping in UTF-8
* \param vec vector to put for the mapping
* \param num number of elements in the vector
*
* Available since API level 202404.
*/
void APersistableBundle_putIntVector(APersistableBundle* _Nonnull pBundle, const char* _Nonnull key,
const int32_t* _Nonnull vec, int32_t num)
__INTRODUCED_IN(__ANDROID_API_V__) __INTRODUCED_IN_LLNDK(202404);
/**
* Put an int64_t vector associated with the provided key.
* New values with the same key will overwrite existing values.
* The values are copied.
*
* \param pBundle to operate on
* \param key for the mapping in UTF-8
* \param vec vector to put for the mapping
* \param num number of elements in the vector
*
* Available since API level 202404.
*/
void APersistableBundle_putLongVector(APersistableBundle* _Nonnull pBundle,
const char* _Nonnull key, const int64_t* _Nonnull vec,
int32_t num) __INTRODUCED_IN(__ANDROID_API_V__)
__INTRODUCED_IN_LLNDK(202404);
/**
* Put a double vector associated with the provided key.
* New values with the same key will overwrite existing values.
* The values are copied.
*
* \param pBundle to operate on
* \param key for the mapping in UTF-8
* \param vec vector to put for the mapping
* \param num number of elements in the vector
*
* Available since API level 202404.
*/
void APersistableBundle_putDoubleVector(APersistableBundle* _Nonnull pBundle,
const char* _Nonnull key, const double* _Nonnull vec,
int32_t num) __INTRODUCED_IN(__ANDROID_API_V__)
__INTRODUCED_IN_LLNDK(202404);
/**
* Put a string vector associated with the provided key.
* New values with the same key will overwrite existing values.
* The values are copied.
*
* \param pBundle to operate on
* \param key for the mapping in UTF-8
* \param vec vector to put for the mapping
* \param num number of elements in the vector
*
* Available since API level 202404.
*/
void APersistableBundle_putStringVector(APersistableBundle* _Nonnull pBundle,
const char* _Nonnull key,
const char* _Nullable const* _Nullable vec, int32_t num)
__INTRODUCED_IN(__ANDROID_API_V__) __INTRODUCED_IN_LLNDK(202404);
/**
* Put an APersistableBundle associated with the provided key.
* New values with the same key will overwrite existing values.
* The value is deep-copied.
*
* \param pBundle to operate on
* \param key for the mapping in UTF-8
* \param val value to put for the mapping
*
* Available since API level 202404.
*/
void APersistableBundle_putPersistableBundle(APersistableBundle* _Nonnull pBundle,
const char* _Nonnull key,
const APersistableBundle* _Nonnull val)
__INTRODUCED_IN(__ANDROID_API_V__) __INTRODUCED_IN_LLNDK(202404);
/**
* Get a boolean associated with the provided key.
*
* Available since API level 202404.
*
* \param pBundle to operate on
* \param key for the mapping in UTF-8
* \param val pointer to write the value to
*
* \return true if a value exists for the provided key
*/
bool APersistableBundle_getBoolean(const APersistableBundle* _Nonnull pBundle,
const char* _Nonnull key, bool* _Nonnull val)
__INTRODUCED_IN(__ANDROID_API_V__) __INTRODUCED_IN_LLNDK(202404);
/**
* Get an int32_t associated with the provided key.
*
* Available since API level 202404.
*
* \param pBundle to operate on
* \param key for the mapping in UTF-8
* \param val pointer to write the value to
*
* \return true if a value exists for the provided key
*/
bool APersistableBundle_getInt(const APersistableBundle* _Nonnull pBundle, const char* _Nonnull key,
int32_t* _Nonnull val) __INTRODUCED_IN(__ANDROID_API_V__)
__INTRODUCED_IN_LLNDK(202404);
/**
* Get an int64_t associated with the provided key.
*
* Available since API level 202404.
*
* \param pBundle to operate on
* \param key for the mapping in UTF-8
* \param val pointer to write the value to
*
* \return true if a value exists for the provided key
*/
bool APersistableBundle_getLong(const APersistableBundle* _Nonnull pBundle,
const char* _Nonnull key, int64_t* _Nonnull val)
__INTRODUCED_IN(__ANDROID_API_V__) __INTRODUCED_IN_LLNDK(202404);
/**
* Get a double associated with the provided key.
*
* Available since API level 202404.
*
* \param pBundle to operate on
* \param key for the mapping in UTF-8
* \param val pointer to write the value to
*
* \return true if a value exists for the provided key
*/
bool APersistableBundle_getDouble(const APersistableBundle* _Nonnull pBundle,
const char* _Nonnull key, double* _Nonnull val)
__INTRODUCED_IN(__ANDROID_API_V__) __INTRODUCED_IN_LLNDK(202404);
/**
* Get a string associated with the provided key.
* The caller is responsible for freeing the returned data.
*
* Available since API level 202404.
*
* \param pBundle to operate on
* \param key for the mapping in UTF-8
* \param val pointer to write the value to in UTF-8
* \param stringAllocator function pointer to the string allocator
* \param context pointer that will be passed to the stringAllocator
*
* \return size of string in bytes associated with the provided key on success
* APERSISTABLEBUNDLE_KEY_NOT_FOUND if the key was not found
* APERSISTABLEBUNDLE_ALLOCATOR_FAILED if the provided allocator fails
*/
int32_t APersistableBundle_getString(const APersistableBundle* _Nonnull pBundle,
const char* _Nonnull key, char* _Nullable* _Nonnull val,
APersistableBundle_stringAllocator stringAllocator,
void* _Nullable context) __INTRODUCED_IN(__ANDROID_API_V__)
__INTRODUCED_IN_LLNDK(202404);
/**
* Get a boolean vector associated with the provided key and place it in the
* provided pre-allocated buffer from the user.
*
* This function returns the size in bytes of stored vector.
* The supplied buffer will be filled in based on the smaller of the supplied
* bufferSizeBytes or the actual size of the stored data.
* If the buffer is null or if the supplied bufferSizeBytes is smaller than the
* actual stored data, then not all of the stored data will be returned.
*
* Users can call this function with null buffer and 0 bufferSizeBytes to get
* the required size of the buffer to use on a subsequent call.
*
* \param pBundle to operate on
* \param key for the mapping in UTF-8
* \param buffer pointer to a pre-allocated buffer to write the values to
* \param bufferSizeBytes size of the pre-allocated buffer
*
* \return size of the stored vector in bytes. This is the required size of the
* pre-allocated user supplied buffer if all of the stored contents are desired.
* APERSISTABLEBUNDLE_KEY_NOT_FOUND if the key was not found
*/
int32_t APersistableBundle_getBooleanVector(const APersistableBundle* _Nonnull pBundle,
const char* _Nonnull key, bool* _Nullable buffer,
int32_t bufferSizeBytes)
__INTRODUCED_IN(__ANDROID_API_V__) __INTRODUCED_IN_LLNDK(202404);
/**
* Get an int32_t vector associated with the provided key and place it in the
* provided pre-allocated buffer from the user.
*
* This function returns the size in bytes of stored vector.
* The supplied buffer will be filled in based on the smaller of the supplied
* bufferSizeBytes or the actual size of the stored data.
* If the buffer is null or if the supplied bufferSizeBytes is smaller than the
* actual stored data, then not all of the stored data will be returned.
*
* Users can call this function with null buffer and 0 bufferSizeBytes to get
* the required size of the buffer to use on a subsequent call.
*
* \param pBundle to operate on
* \param key for the mapping in UTF-8
* \param buffer pointer to a pre-allocated buffer to write the values to
* \param bufferSizeBytes size of the pre-allocated buffer
*
* \return size of the stored vector in bytes. This is the required size of the
* pre-allocated user supplied buffer if all of the stored contents are desired.
* APERSISTABLEBUNDLE_KEY_NOT_FOUND if the key was not found
*/
int32_t APersistableBundle_getIntVector(const APersistableBundle* _Nonnull pBundle,
const char* _Nonnull key, int32_t* _Nullable buffer,
int32_t bufferSizeBytes) __INTRODUCED_IN(__ANDROID_API_V__)
__INTRODUCED_IN_LLNDK(202404);
/**
* Get an int64_t vector associated with the provided key and place it in the
* provided pre-allocated buffer from the user.
*
* This function returns the size in bytes of stored vector.
* The supplied buffer will be filled in based on the smaller of the supplied
* bufferSizeBytes or the actual size of the stored data.
* If the buffer is null or if the supplied bufferSizeBytes is smaller than the
* actual stored data, then not all of the stored data will be returned.
*
* Users can call this function with null buffer and 0 bufferSizeBytes to get
* the required size of the buffer to use on a subsequent call.
*
* \param pBundle to operate on
* \param key for the mapping in UTF-8
* \param buffer pointer to a pre-allocated buffer to write the values to
* \param bufferSizeBytes size of the pre-allocated buffer
*
* \return size of the stored vector in bytes. This is the required size of the
* pre-allocated user supplied buffer if all of the stored contents are desired.
* APERSISTABLEBUNDLE_KEY_NOT_FOUND if the key was not found
*/
int32_t APersistableBundle_getLongVector(const APersistableBundle* _Nonnull pBundle,
const char* _Nonnull key, int64_t* _Nullable buffer,
int32_t bufferSizeBytes) __INTRODUCED_IN(__ANDROID_API_V__)
__INTRODUCED_IN_LLNDK(202404);
/**
* Get a double vector associated with the provided key and place it in the
* provided pre-allocated buffer from the user.
*
* This function returns the size in bytes of stored vector.
* The supplied buffer will be filled in based on the smaller of the supplied
* bufferSizeBytes or the actual size of the stored data.
* If the buffer is null or if the supplied bufferSizeBytes is smaller than the
* actual stored data, then not all of the stored data will be returned.
*
* Users can call this function with null buffer and 0 bufferSizeBytes to get
* the required size of the buffer to use on a subsequent call.
*
* \param pBundle to operate on
* \param key for the mapping in UTF-8
* \param buffer pointer to a pre-allocated buffer to write the values to
* \param bufferSizeBytes size of the pre-allocated buffer
*
* \return size of the stored vector in bytes. This is the required size of the
* pre-allocated user supplied buffer if all of the stored contents are desired.
* APERSISTABLEBUNDLE_KEY_NOT_FOUND if the key was not found
*/
int32_t APersistableBundle_getDoubleVector(const APersistableBundle* _Nonnull pBundle,
const char* _Nonnull key, double* _Nullable buffer,
int32_t bufferSizeBytes)
__INTRODUCED_IN(__ANDROID_API_V__) __INTRODUCED_IN_LLNDK(202404);
/**
* Get a string vector associated with the provided key and place it in the
* provided pre-allocated buffer from the user. The user must provide an
* APersistableBundle_stringAllocator for the individual strings to be
* allocated.
* The caller is responsible for freeing the returned data.
*
* This function returns the size in bytes of stored vector.
* The supplied buffer will be filled in based on the smaller of the supplied
* bufferSizeBytes or the actual size of the stored data.
* If the buffer is null or if the supplied bufferSizeBytes is smaller than the
* actual stored data, then not all of the stored data will be returned.
*
* Users can call this function with null buffer and 0 bufferSizeBytes to get
* the required size of the buffer to use on a subsequent call.
*
* \param pBundle to operate on
* \param key for the mapping in UTF-8
* \param buffer pointer to a pre-allocated buffer to write the string pointers to
* \param bufferSizeBytes size of the pre-allocated buffer
* \param stringAllocator function pointer to the string allocator
* \param context pointer that will be passed to the stringAllocator
*
* \return size of the stored vector in bytes. This is the required size of the
* pre-allocated user supplied buffer if all of the stored contents are desired.
* 0 if no string vector exists for the provided key
* APERSISTABLEBUNDLE_KEY_NOT_FOUND if the key was not found
* APERSISTABLEBUNDLE_ALLOCATOR_FAILED if the provided allocator fails
*/
int32_t APersistableBundle_getStringVector(const APersistableBundle* _Nonnull pBundle,
const char* _Nonnull key,
char* _Nullable* _Nullable buffer,
int32_t bufferSizeBytes,
APersistableBundle_stringAllocator stringAllocator,
void* _Nullable context)
__INTRODUCED_IN(__ANDROID_API_V__) __INTRODUCED_IN_LLNDK(202404);
/**
* Get an APersistableBundle* associated with the provided key.
*
* Available since API level 202404.
*
* \param pBundle to operate on
* \param key for the mapping in UTF-8
* \param val pointer to an APersistableBundle pointer to write to point to
* a new copy of the stored APersistableBundle. The caller takes ownership of
* the new APersistableBundle and must be deleted with
* APersistableBundle_delete.
*
* \return true if a value exists for the provided key
*/
bool APersistableBundle_getPersistableBundle(const APersistableBundle* _Nonnull pBundle,
const char* _Nonnull key,
APersistableBundle* _Nullable* _Nonnull outBundle)
__INTRODUCED_IN(__ANDROID_API_V__) __INTRODUCED_IN_LLNDK(202404);
/**
* Get all of the keys associated with this specific type and place it in the
* provided pre-allocated buffer from the user. The user must provide an
* APersistableBundle_stringAllocator for the individual strings to be
* allocated.
* The caller is responsible for freeing the returned data.
*
* This function returns the size in bytes required to fit the fill list of keys.
* The supplied buffer will be filled in based on the smaller of the supplied
* bufferSizeBytes or the actual size of the stored data.
* If the buffer is null or if the supplied bufferSizeBytes is smaller than the
* actual stored data, then not all of the stored data will be returned.
*
* Users can call this function with null buffer and 0 bufferSizeBytes to get
* the required size of the buffer to use on a subsequent call.
*
* \param pBundle to operate on
* \param outKeys pointer to a pre-allocated buffer to write the UTF-8 keys to
* \param bufferSizeBytes size of the pre-allocated buffer
* \param stringAllocator function pointer to the string allocator
* \param context pointer that will be passed to the stringAllocator
*
* \return size of the buffer of keys in bytes. This is the required size of the
* pre-allocated user supplied buffer if all of the stored contents are desired.
* APERSISTABLEBUNDLE_ALLOCATOR_FAILED if the provided allocator fails
*/
int32_t APersistableBundle_getBooleanKeys(const APersistableBundle* _Nonnull pBundle,
char* _Nullable* _Nullable outKeys,
int32_t bufferSizeBytes,
APersistableBundle_stringAllocator stringAllocator,
void* _Nullable context)
__INTRODUCED_IN(__ANDROID_API_V__) __INTRODUCED_IN_LLNDK(202404);
/**
* Get all of the keys associated with this specific type and place it in the
* provided pre-allocated buffer from the user. The user must provide an
* APersistableBundle_stringAllocator for the individual strings to be
* allocated.
* The caller is responsible for freeing the returned data.
*
* This function returns the size in bytes required to fit the fill list of keys.
* The supplied buffer will be filled in based on the smaller of the supplied
* bufferSizeBytes or the actual size of the stored data.
* If the buffer is null or if the supplied bufferSizeBytes is smaller than the
* actual stored data, then not all of the stored data will be returned.
*
* Users can call this function with null buffer and 0 bufferSizeBytes to get
* the required size of the buffer to use on a subsequent call.
*
* \param pBundle to operate on
* \param outKeys pointer to a pre-allocated buffer to write the UTF-8 keys to
* \param bufferSizeBytes size of the pre-allocated buffer
* \param stringAllocator function pointer to the string allocator
* \param context pointer that will be passed to the stringAllocator
*
* \return size of the buffer of keys in bytes. This is the required size of the
* pre-allocated user supplied buffer if all of the stored contents are desired.
* APERSISTABLEBUNDLE_ALLOCATOR_FAILED if the provided allocator fails
*/
int32_t APersistableBundle_getIntKeys(const APersistableBundle* _Nonnull pBundle,
char* _Nullable* _Nullable outKeys, int32_t bufferSizeBytes,
APersistableBundle_stringAllocator stringAllocator,
void* _Nullable context) __INTRODUCED_IN(__ANDROID_API_V__)
__INTRODUCED_IN_LLNDK(202404);
/**
* Get all of the keys associated with this specific type and place it in the
* provided pre-allocated buffer from the user. The user must provide an
* APersistableBundle_stringAllocator for the individual strings to be
* allocated.
* The caller is responsible for freeing the returned data.
*
* This function returns the size in bytes required to fit the fill list of keys.
* The supplied buffer will be filled in based on the smaller of the supplied
* bufferSizeBytes or the actual size of the stored data.
* If the buffer is null or if the supplied bufferSizeBytes is smaller than the
* actual stored data, then not all of the stored data will be returned.
*
* Users can call this function with null buffer and 0 bufferSizeBytes to get
* the required size of the buffer to use on a subsequent call.
*
* \param pBundle to operate on
* \param outKeys pointer to a pre-allocated buffer to write the UTF-8 keys to
* \param bufferSizeBytes size of the pre-allocated buffer
* \param stringAllocator function pointer to the string allocator
* \param context pointer that will be passed to the stringAllocator
*
* \return size of the buffer of keys in bytes. This is the required size of the
* pre-allocated user supplied buffer if all of the stored contents are desired.
* APERSISTABLEBUNDLE_ALLOCATOR_FAILED if the provided allocator fails
*/
int32_t APersistableBundle_getLongKeys(const APersistableBundle* _Nonnull pBundle,
char* _Nullable* _Nullable outKeys, int32_t bufferSizeBytes,
APersistableBundle_stringAllocator stringAllocator,
void* _Nullable context) __INTRODUCED_IN(__ANDROID_API_V__)
__INTRODUCED_IN_LLNDK(202404);
/**
* Get all of the keys associated with this specific type and place it in the
* provided pre-allocated buffer from the user. The user must provide an
* APersistableBundle_stringAllocator for the individual strings to be
* allocated.
* The caller is responsible for freeing the returned data.
*
* This function returns the size in bytes required to fit the fill list of keys.
* The supplied buffer will be filled in based on the smaller of the supplied
* bufferSizeBytes or the actual size of the stored data.
* If the buffer is null or if the supplied bufferSizeBytes is smaller than the
* actual stored data, then not all of the stored data will be returned.
*
* Users can call this function with null buffer and 0 bufferSizeBytes to get
* the required size of the buffer to use on a subsequent call.
*
* \param pBundle to operate on
* \param outKeys pointer to a pre-allocated buffer to write the UTF-8 keys to
* \param bufferSizeBytes size of the pre-allocated buffer
* \param stringAllocator function pointer to the string allocator
* \param context pointer that will be passed to the stringAllocator
*
* \return size of the buffer of keys in bytes. This is the required size of the
* pre-allocated user supplied buffer if all of the stored contents are desired.
* APERSISTABLEBUNDLE_ALLOCATOR_FAILED if the provided allocator fails
*/
int32_t APersistableBundle_getDoubleKeys(const APersistableBundle* _Nonnull pBundle,
char* _Nullable* _Nullable outKeys,
int32_t bufferSizeBytes,
APersistableBundle_stringAllocator stringAllocator,
void* _Nullable context) __INTRODUCED_IN(__ANDROID_API_V__)
__INTRODUCED_IN_LLNDK(202404);
/**
* Get all of the keys associated with this specific type and place it in the
* provided pre-allocated buffer from the user. The user must provide an
* APersistableBundle_stringAllocator for the individual strings to be
* allocated.
* The caller is responsible for freeing the returned data.
*
* This function returns the size in bytes required to fit the fill list of keys.
* The supplied buffer will be filled in based on the smaller of the supplied
* bufferSizeBytes or the actual size of the stored data.
* If the buffer is null or if the supplied bufferSizeBytes is smaller than the
* actual stored data, then not all of the stored data will be returned.
*
* Users can call this function with null buffer and 0 bufferSizeBytes to get
* the required size of the buffer to use on a subsequent call.
*
* \param pBundle to operate on
* \param outKeys pointer to a pre-allocated buffer to write the UTF-8 keys to
* \param bufferSizeBytes size of the pre-allocated buffer
* \param stringAllocator function pointer to the string allocator
* \param context pointer that will be passed to the stringAllocator
*
* \return size of the buffer of keys in bytes. This is the required size of the
* pre-allocated user supplied buffer if all of the stored contents are desired.
* APERSISTABLEBUNDLE_ALLOCATOR_FAILED if the provided allocator fails
*/
int32_t APersistableBundle_getStringKeys(const APersistableBundle* _Nonnull pBundle,
char* _Nullable* _Nullable outKeys,
int32_t bufferSizeBytes,
APersistableBundle_stringAllocator stringAllocator,
void* _Nullable context) __INTRODUCED_IN(__ANDROID_API_V__)
__INTRODUCED_IN_LLNDK(202404);
/**
* Get all of the keys associated with this specific type and place it in the
* provided pre-allocated buffer from the user. The user must provide an
* APersistableBundle_stringAllocator for the individual strings to be
* allocated.
* The caller is responsible for freeing the returned data.
*
* This function returns the size in bytes required to fit the fill list of keys.
* The supplied buffer will be filled in based on the smaller of the supplied
* bufferSizeBytes or the actual size of the stored data.
* If the buffer is null or if the supplied bufferSizeBytes is smaller than the
* actual stored data, then not all of the stored data will be returned.
*
* Users can call this function with null buffer and 0 bufferSizeBytes to get
* the required size of the buffer to use on a subsequent call.
*
* \param pBundle to operate on
* \param outKeys pointer to a pre-allocated buffer to write the UTF-8 keys to
* \param bufferSizeBytes size of the pre-allocated buffer
* \param stringAllocator function pointer to the string allocator
* \param context pointer that will be passed to the stringAllocator
*
* \return size of the buffer of keys in bytes. This is the required size of the
* pre-allocated user supplied buffer if all of the stored contents are desired.
* APERSISTABLEBUNDLE_ALLOCATOR_FAILED if the provided allocator fails
*/
int32_t APersistableBundle_getBooleanVectorKeys(const APersistableBundle* _Nonnull pBundle,
char* _Nullable* _Nullable outKeys,
int32_t bufferSizeBytes,
APersistableBundle_stringAllocator stringAllocator,
void* _Nullable context)
__INTRODUCED_IN(__ANDROID_API_V__) __INTRODUCED_IN_LLNDK(202404);
/**
* Get all of the keys associated with this specific type and place it in the
* provided pre-allocated buffer from the user. The user must provide an
* APersistableBundle_stringAllocator for the individual strings to be
* allocated.
* The caller is responsible for freeing the returned data.
*
* This function returns the size in bytes required to fit the fill list of keys.
* The supplied buffer will be filled in based on the smaller of the supplied
* bufferSizeBytes or the actual size of the stored data.
* If the buffer is null or if the supplied bufferSizeBytes is smaller than the
* actual stored data, then not all of the stored data will be returned.
*
* Users can call this function with null buffer and 0 bufferSizeBytes to get
* the required size of the buffer to use on a subsequent call.
*
* \param pBundle to operate on
* \param outKeys pointer to a pre-allocated buffer to write the UTF-8 keys to
* \param bufferSizeBytes size of the pre-allocated buffer
* \param stringAllocator function pointer to the string allocator
* \param context pointer that will be passed to the stringAllocator
*
* \return size of the buffer of keys in bytes. This is the required size of the
* pre-allocated user supplied buffer if all of the stored contents are desired.
* APERSISTABLEBUNDLE_ALLOCATOR_FAILED if the provided allocator fails
*/
int32_t APersistableBundle_getIntVectorKeys(const APersistableBundle* _Nonnull pBundle,
char* _Nullable* _Nullable outKeys,
int32_t bufferSizeBytes,
APersistableBundle_stringAllocator stringAllocator,
void* _Nullable context)
__INTRODUCED_IN(__ANDROID_API_V__) __INTRODUCED_IN_LLNDK(202404);
/**
* Get all of the keys associated with this specific type and place it in the
* provided pre-allocated buffer from the user. The user must provide an
* APersistableBundle_stringAllocator for the individual strings to be
* allocated.
* The caller is responsible for freeing the returned data.
*
* This function returns the size in bytes required to fit the fill list of keys.
* The supplied buffer will be filled in based on the smaller of the supplied
* bufferSizeBytes or the actual size of the stored data.
* If the buffer is null or if the supplied bufferSizeBytes is smaller than the
* actual stored data, then not all of the stored data will be returned.
*
* Users can call this function with null buffer and 0 bufferSizeBytes to get
* the required size of the buffer to use on a subsequent call.
*
* \param pBundle to operate on
* \param outKeys pointer to a pre-allocated buffer to write the UTF-8 keys to
* \param bufferSizeBytes size of the pre-allocated buffer
* \param stringAllocator function pointer to the string allocator
* \param context pointer that will be passed to the stringAllocator
*
* \return size of the buffer of keys in bytes. This is the required size of the
* pre-allocated user supplied buffer if all of the stored contents are desired.
* APERSISTABLEBUNDLE_ALLOCATOR_FAILED if the provided allocator fails
*/
int32_t APersistableBundle_getLongVectorKeys(const APersistableBundle* _Nonnull pBundle,
char* _Nullable* _Nullable outKeys,
int32_t bufferSizeBytes,
APersistableBundle_stringAllocator stringAllocator,
void* _Nullable context)
__INTRODUCED_IN(__ANDROID_API_V__) __INTRODUCED_IN_LLNDK(202404);
/**
* Get all of the keys associated with this specific type and place it in the
* provided pre-allocated buffer from the user. The user must provide an
* APersistableBundle_stringAllocator for the individual strings to be
* allocated.
* The caller is responsible for freeing the returned data.
*
* This function returns the size in bytes required to fit the fill list of keys.
* The supplied buffer will be filled in based on the smaller of the supplied
* bufferSizeBytes or the actual size of the stored data.
* If the buffer is null or if the supplied bufferSizeBytes is smaller than the
* actual stored data, then not all of the stored data will be returned.
*
* Users can call this function with null buffer and 0 bufferSizeBytes to get
* the required size of the buffer to use on a subsequent call.
*
* \param pBundle to operate on
* \param outKeys pointer to a pre-allocated buffer to write the UTF-8 keys to
* \param bufferSizeBytes size of the pre-allocated buffer
* \param stringAllocator function pointer to the string allocator
* \param context pointer that will be passed to the stringAllocator
*
* \return size of the buffer of keys in bytes. This is the required size of the
* pre-allocated user supplied buffer if all of the stored contents are desired.
*/
int32_t APersistableBundle_getDoubleVectorKeys(const APersistableBundle* _Nonnull pBundle,
char* _Nullable* _Nullable outKeys,
int32_t bufferSizeBytes,
APersistableBundle_stringAllocator stringAllocator,
void* _Nullable context)
__INTRODUCED_IN(__ANDROID_API_V__) __INTRODUCED_IN_LLNDK(202404);
/**
* Get all of the keys associated with this specific type and place it in the
* provided pre-allocated buffer from the user. The user must provide an
* APersistableBundle_stringAllocator for the individual strings to be
* allocated.
* The caller is responsible for freeing the returned data.
*
* This function returns the size in bytes required to fit the fill list of keys.
* The supplied buffer will be filled in based on the smaller of the supplied
* bufferSizeBytes or the actual size of the stored data.
* If the buffer is null or if the supplied bufferSizeBytes is smaller than the
* actual stored data, then not all of the stored data will be returned.
*
* Users can call this function with null buffer and 0 bufferSizeBytes to get
* the required size of the buffer to use on a subsequent call.
*
* \param pBundle to operate on
* \param outKeys pointer to a pre-allocated buffer to write the UTF-8 keys to
* \param bufferSizeBytes size of the pre-allocated buffer
* \param stringAllocator function pointer to the string allocator
* \param context pointer that will be passed to the stringAllocator
*
* \return size of the buffer of keys in bytes. This is the required size of the
* pre-allocated user supplied buffer if all of the stored contents are desired.
* false
*/
int32_t APersistableBundle_getStringVectorKeys(const APersistableBundle* _Nonnull pBundle,
char* _Nullable* _Nullable outKeys,
int32_t bufferSizeBytes,
APersistableBundle_stringAllocator stringAllocator,
void* _Nullable context)
__INTRODUCED_IN(__ANDROID_API_V__) __INTRODUCED_IN_LLNDK(202404);
/**
* Get all of the keys associated with this specific type and place it in the
* provided pre-allocated buffer from the user. The user must provide an
* APersistableBundle_stringAllocator for the individual strings to be
* allocated.
* The caller is responsible for freeing the returned data in bytes.
*
* This function returns the size in bytes required to fit the fill list of keys.
* The supplied buffer will be filled in based on the smaller of the supplied
* bufferSizeBytes or the actual size of the stored data.
* If the buffer is null or if the supplied bufferSizeBytes is smaller than the
* actual stored data, then not all of the stored data will be returned.
*
* Users can call this function with null buffer and 0 bufferSizeBytes to get
* the required size of the buffer to use on a subsequent call.
*
* \param pBundle to operate on
* \param outKeys pointer to a pre-allocated buffer to write the UTF-8 keys to
* \param bufferSizeBytes size of the pre-allocated buffer
* \param stringAllocator function pointer to the string allocator
* \param context pointer that will be passed to the stringAllocator
*
* \return size of the buffer of keys in bytes. This is the required size of the
* pre-allocated user supplied buffer if all of the stored contents are desired.
* APERSISTABLEBUNDLE_ALLOCATOR_FAILED if the provided allocator fails
*/
int32_t APersistableBundle_getPersistableBundleKeys(
const APersistableBundle* _Nonnull pBundle, char* _Nullable* _Nullable outKeys,
int32_t bufferSizeBytes, APersistableBundle_stringAllocator stringAllocator,
void* _Nullable context) __INTRODUCED_IN(__ANDROID_API_V__) __INTRODUCED_IN_LLNDK(202404);
__END_DECLS