blob: 268897ef5c58f06b06ce10d142dd690a7afa7f10 [file] [log] [blame]
#include <unistd.h>
#include <algorithm>
#include <sstream>
#include "flutter/shell/platform/android/apk_asset_provider.h"
#include "lib/fxl/logging.h"
namespace blink {
APKAssetProvider::APKAssetProvider(JNIEnv* env,
jobject jassetManager,
std::string directory)
: java_asset_manager_(env, jassetManager),
directory_(std::move(directory)) {
assetManager_ = AAssetManager_fromJava(env, jassetManager);
}
APKAssetProvider::~APKAssetProvider() = default;
bool APKAssetProvider::IsValid() const {
return true;
}
bool APKAssetProvider::GetAsBuffer(const std::string& asset_name,
std::vector<uint8_t>* data) const {
std::stringstream ss;
ss << directory_.c_str() << "/" << asset_name;
AAsset* asset =
AAssetManager_open(assetManager_, ss.str().c_str(), AASSET_MODE_BUFFER);
if (!asset) {
return false;
}
uint8_t* buffer = (uint8_t*)AAsset_getBuffer(asset);
if (!buffer) {
FXL_LOG(ERROR) << "Got null trying to acquire buffer for asset:" << asset;
AAsset_close(asset);
return false;
}
data->resize(AAsset_getLength(asset));
std::copy(buffer, buffer + data->size(), data->begin());
AAsset_close(asset);
return true;
}
} // namespace blink