Loading core/jni/android_content_res_ApkAssets.cpp +3 −3 Original line number Diff line number Diff line Loading @@ -29,7 +29,6 @@ #include "utils/Trace.h" #include "android_content_res_ApkAssets.h" #include "android_util_AssetManager_private.h" #include "core_jni_helpers.h" #include "jni.h" #include "nativehelper/ScopedUtfChars.h" Loading Loading @@ -473,7 +472,8 @@ static jlong NativeOpenXml(JNIEnv* env, jclass /*clazz*/, jlong ptr, jstring fil const auto buffer = asset->getIncFsBuffer(true /* aligned */); const size_t length = asset->getLength(); if (!buffer.convert<uint8_t>().verify(length)) { jniThrowException(env, kResourcesNotFound, kIOErrorMessage); jniThrowException(env, "java/io/FileNotFoundException", "File not fully present due to incremental installation"); return 0; } Loading core/jni/android_util_AssetManager.cpp +24 −63 Original line number Diff line number Diff line Loading @@ -43,7 +43,6 @@ #include "androidfw/ResourceUtils.h" #include "android_content_res_ApkAssets.h" #include "android_util_AssetManager_private.h" #include "core_jni_helpers.h" #include "jni.h" #include "nativehelper/JNIPlatformHelp.h" Loading Loading @@ -574,7 +573,8 @@ static jlong NativeOpenXmlAsset(JNIEnv* env, jobject /*clazz*/, jlong ptr, jint const incfs::map_ptr<void> buffer = asset->getIncFsBuffer(true /* aligned */); const size_t length = asset->getLength(); if (!buffer.convert<uint8_t>().verify(length)) { jniThrowException(env, kResourcesNotFound, kIOErrorMessage); jniThrowException(env, "java/io/FileNotFoundException", "File not fully present due to incremental installation"); return 0; } Loading Loading @@ -611,7 +611,8 @@ static jlong NativeOpenXmlAssetFd(JNIEnv* env, jobject /*clazz*/, jlong ptr, int const incfs::map_ptr<void> buffer = asset->getIncFsBuffer(true /* aligned */); const size_t length = asset->getLength(); if (!buffer.convert<uint8_t>().verify(length)) { jniThrowException(env, kResourcesNotFound, kIOErrorMessage); jniThrowException(env, "java/io/FileNotFoundException", "File not fully present due to incremental installation"); return 0; } Loading @@ -631,14 +632,12 @@ static jint NativeGetResourceValue(JNIEnv* env, jclass /*clazz*/, jlong ptr, jin auto value = assetmanager->GetResource(static_cast<uint32_t>(resid), false /*may_be_bag*/, static_cast<uint16_t>(density)); if (!value.has_value()) { ThrowIfIOError(env, value); return ApkAssetsCookieToJavaCookie(kInvalidCookie); } if (resolve_references) { auto result = assetmanager->ResolveReference(value.value()); if (!result.has_value()) { ThrowIfIOError(env, result); return ApkAssetsCookieToJavaCookie(kInvalidCookie); } } Loading @@ -650,7 +649,6 @@ static jint NativeGetResourceBagValue(JNIEnv* env, jclass /*clazz*/, jlong ptr, ScopedLock<AssetManager2> assetmanager(AssetManagerFromLong(ptr)); auto bag = assetmanager->GetBag(static_cast<uint32_t>(resid)); if (!bag.has_value()) { ThrowIfIOError(env, bag); return ApkAssetsCookieToJavaCookie(kInvalidCookie); } Loading @@ -669,7 +667,6 @@ static jint NativeGetResourceBagValue(JNIEnv* env, jclass /*clazz*/, jlong ptr, AssetManager2::SelectedValue attr_value(*bag, *entry); auto result = assetmanager->ResolveReference(attr_value); if (!result.has_value()) { ThrowIfIOError(env, result); return ApkAssetsCookieToJavaCookie(kInvalidCookie); } return CopyValue(env, attr_value, typed_value); Loading @@ -679,7 +676,6 @@ static jintArray NativeGetStyleAttributes(JNIEnv* env, jclass /*clazz*/, jlong p ScopedLock<AssetManager2> assetmanager(AssetManagerFromLong(ptr)); auto bag_result = assetmanager->GetBag(static_cast<uint32_t>(resid)); if (!bag_result.has_value()) { ThrowIfIOError(env, bag_result); return nullptr; } Loading @@ -701,7 +697,6 @@ static jobjectArray NativeGetResourceStringArray(JNIEnv* env, jclass /*clazz*/, ScopedLock<AssetManager2> assetmanager(AssetManagerFromLong(ptr)); auto bag_result = assetmanager->GetBag(static_cast<uint32_t>(resid)); if (!bag_result.has_value()) { ThrowIfIOError(env, bag_result); return nullptr; } Loading @@ -716,7 +711,6 @@ static jobjectArray NativeGetResourceStringArray(JNIEnv* env, jclass /*clazz*/, AssetManager2::SelectedValue attr_value(bag, bag->entries[i]); auto result = assetmanager->ResolveReference(attr_value); if (!result.has_value()) { ThrowIfIOError(env, result); return nullptr; } Loading @@ -724,18 +718,12 @@ static jobjectArray NativeGetResourceStringArray(JNIEnv* env, jclass /*clazz*/, const ApkAssets* apk_assets = assetmanager->GetApkAssets()[attr_value.cookie]; const ResStringPool* pool = apk_assets->GetLoadedArsc()->GetStringPool(); jstring java_string = nullptr; auto str_utf8 = pool->string8At(attr_value.data); if (UNLIKELY(ThrowIfIOError(env, str_utf8))) { return nullptr; } if (str_utf8.has_value()) { jstring java_string; if (auto str_utf8 = pool->string8At(attr_value.data); str_utf8.has_value()) { java_string = env->NewStringUTF(str_utf8->data()); } else { auto str_utf16 = pool->stringAt(attr_value.data); if (!str_utf16.has_value()) { ThrowIfIOError(env, str_utf16); return nullptr; } java_string = env->NewString(reinterpret_cast<const jchar*>(str_utf16->data()), Loading @@ -762,7 +750,6 @@ static jintArray NativeGetResourceStringArrayInfo(JNIEnv* env, jclass /*clazz*/, ScopedLock<AssetManager2> assetmanager(AssetManagerFromLong(ptr)); auto bag_result = assetmanager->GetBag(static_cast<uint32_t>(resid)); if (!bag_result.has_value()) { ThrowIfIOError(env, bag_result); return nullptr; } Loading @@ -782,7 +769,6 @@ static jintArray NativeGetResourceStringArrayInfo(JNIEnv* env, jclass /*clazz*/, auto result = assetmanager->ResolveReference(attr_value); if (!result.has_value()) { env->ReleasePrimitiveArrayCritical(array, buffer, JNI_ABORT); ThrowIfIOError(env, result); return nullptr; } Loading @@ -802,7 +788,6 @@ static jintArray NativeGetResourceIntArray(JNIEnv* env, jclass /*clazz*/, jlong ScopedLock<AssetManager2> assetmanager(AssetManagerFromLong(ptr)); auto bag_result = assetmanager->GetBag(static_cast<uint32_t>(resid)); if (!bag_result.has_value()) { ThrowIfIOError(env, bag_result); return nullptr; } Loading @@ -822,7 +807,6 @@ static jintArray NativeGetResourceIntArray(JNIEnv* env, jclass /*clazz*/, jlong auto result = assetmanager->ResolveReference(attr_value); if (!result.has_value()) { env->ReleasePrimitiveArrayCritical(array, buffer, 0); ThrowIfIOError(env, result); return nullptr; } Loading @@ -839,7 +823,6 @@ static jint NativeGetResourceArraySize(JNIEnv* env, jclass /*clazz*/, jlong ptr, ScopedLock<AssetManager2> assetmanager(AssetManagerFromLong(ptr)); auto bag = assetmanager->GetBag(static_cast<uint32_t>(resid)); if (!bag.has_value()) { ThrowIfIOError(env, bag); return -1; } return static_cast<jint>((*bag)->entry_count); Loading @@ -850,7 +833,6 @@ static jint NativeGetResourceArray(JNIEnv* env, jclass /*clazz*/, jlong ptr, jin ScopedLock<AssetManager2> assetmanager(AssetManagerFromLong(ptr)); auto bag_result = assetmanager->GetBag(static_cast<uint32_t>(resid)); if (!bag_result.has_value()) { ThrowIfIOError(env, bag_result); return -1; } Loading @@ -877,7 +859,6 @@ static jint NativeGetResourceArray(JNIEnv* env, jclass /*clazz*/, jlong ptr, jin auto result = assetmanager->ResolveReference(attr_value); if (!result.has_value()) { env->ReleasePrimitiveArrayCritical(out_data, buffer, JNI_ABORT); ThrowIfIOError(env, bag_result); return -1; } Loading Loading @@ -924,7 +905,6 @@ static jint NativeGetResourceIdentifier(JNIEnv* env, jclass /*clazz*/, jlong ptr ScopedLock<AssetManager2> assetmanager(AssetManagerFromLong(ptr)); auto resid = assetmanager->GetResourceId(name_utf8.c_str(), type, package); if (!resid.has_value()) { ThrowIfIOError(env, resid); return 0; } Loading @@ -935,7 +915,6 @@ static jstring NativeGetResourceName(JNIEnv* env, jclass /*clazz*/, jlong ptr, j ScopedLock<AssetManager2> assetmanager(AssetManagerFromLong(ptr)); auto name = assetmanager->GetResourceName(static_cast<uint32_t>(resid)); if (!name.has_value()) { ThrowIfIOError(env, name); return nullptr; } Loading @@ -947,7 +926,6 @@ static jstring NativeGetResourcePackageName(JNIEnv* env, jclass /*clazz*/, jlong ScopedLock<AssetManager2> assetmanager(AssetManagerFromLong(ptr)); auto name = assetmanager->GetResourceName(static_cast<uint32_t>(resid)); if (!name.has_value()) { ThrowIfIOError(env, name); return nullptr; } Loading @@ -961,7 +939,6 @@ static jstring NativeGetResourceTypeName(JNIEnv* env, jclass /*clazz*/, jlong pt ScopedLock<AssetManager2> assetmanager(AssetManagerFromLong(ptr)); auto name = assetmanager->GetResourceName(static_cast<uint32_t>(resid)); if (!name.has_value()) { ThrowIfIOError(env, name); return nullptr; } Loading @@ -977,7 +954,6 @@ static jstring NativeGetResourceEntryName(JNIEnv* env, jclass /*clazz*/, jlong p ScopedLock<AssetManager2> assetmanager(AssetManagerFromLong(ptr)); auto name = assetmanager->GetResourceName(static_cast<uint32_t>(resid)); if (!name.has_value()) { ThrowIfIOError(env, name); return nullptr; } Loading Loading @@ -1051,7 +1027,6 @@ static jobjectArray NativeGetSizeConfigurations(JNIEnv* env, jclass /*clazz*/, j auto configurations = assetmanager->GetResourceConfigurations(true /*exclude_system*/, false /*exclude_mipmap*/); if (!configurations.has_value()) { ThrowIfIOError(env, configurations); return nullptr; } Loading Loading @@ -1129,11 +1104,10 @@ static void NativeApplyStyle(JNIEnv* env, jclass /*clazz*/, jlong ptr, jlong the return; } auto result = ApplyStyle(theme, xml_parser, static_cast<uint32_t>(def_style_attr), static_cast<uint32_t>(def_style_resid), reinterpret_cast<uint32_t*>(attrs), attrs_len, out_values, out_indices); ApplyStyle(theme, xml_parser, static_cast<uint32_t>(def_style_attr), static_cast<uint32_t>(def_style_resid), reinterpret_cast<uint32_t*>(attrs), attrs_len, out_values, out_indices); env->ReleasePrimitiveArrayCritical(java_attrs, attrs, JNI_ABORT); ThrowIfIOError(env, result); } static jboolean NativeResolveAttrs(JNIEnv* env, jclass /*clazz*/, jlong ptr, jlong theme_ptr, Loading Loading @@ -1210,11 +1184,7 @@ static jboolean NativeResolveAttrs(JNIEnv* env, jclass /*clazz*/, jlong ptr, jlo } env->ReleasePrimitiveArrayCritical(java_attrs, attrs, JNI_ABORT); if (!result.has_value()) { ThrowIfIOError(env, result); return JNI_FALSE; } return JNI_TRUE; return result.has_value() ? JNI_TRUE : JNI_FALSE; } static jboolean NativeRetrieveAttributes(JNIEnv* env, jclass /*clazz*/, jlong ptr, Loading Loading @@ -1266,11 +1236,7 @@ static jboolean NativeRetrieveAttributes(JNIEnv* env, jclass /*clazz*/, jlong pt env->ReleasePrimitiveArrayCritical(out_java_values, out_values, 0); env->ReleasePrimitiveArrayCritical(java_attrs, attrs, JNI_ABORT); if (!result.has_value()) { ThrowIfIOError(env, result); return JNI_FALSE; } return JNI_TRUE; return result.has_value() ? JNI_TRUE : JNI_FALSE; } static jlong NativeThemeCreate(JNIEnv* /*env*/, jclass /*clazz*/, jlong ptr) { Loading @@ -1290,8 +1256,7 @@ static void NativeThemeApplyStyle(JNIEnv* env, jclass /*clazz*/, jlong ptr, jlon CHECK(theme->GetAssetManager() == &(*assetmanager)); (void) assetmanager; auto result = theme->ApplyStyle(static_cast<uint32_t>(resid), force); ThrowIfIOError(env, result); theme->ApplyStyle(static_cast<uint32_t>(resid), force); // TODO(adamlesinski): Consider surfacing exception when result is failure. // CTS currently expects no exceptions from this method. Loading @@ -1313,13 +1278,10 @@ static void NativeThemeCopy(JNIEnv* env, jclass /*clazz*/, jlong dst_asset_manag CHECK(dst_theme->GetAssetManager() == &(*dst_assetmanager)); (void) dst_assetmanager; auto result = dst_theme->SetTo(*src_theme); ThrowIfIOError(env, result); return; dst_theme->SetTo(*src_theme); } else { dst_theme->SetTo(*src_theme); } auto result = dst_theme->SetTo(*src_theme); ThrowIfIOError(env, result); } static void NativeThemeClear(JNIEnv* /*env*/, jclass /*clazz*/, jlong theme_ptr) { Loading @@ -1345,7 +1307,6 @@ static jint NativeThemeGetAttributeValue(JNIEnv* env, jclass /*clazz*/, jlong pt auto result = theme->GetAssetManager()->ResolveReference(*value); if (!result.has_value()) { ThrowIfIOError(env, result); return ApkAssetsCookieToJavaCookie(kInvalidCookie); } return CopyValue(env, *value, typed_value); Loading core/jni/android_util_AssetManager_private.hdeleted 100644 → 0 +0 −54 Original line number Diff line number Diff line /* * Copyright (C) 2008 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. */ #ifndef ANDROID_UTIL_ASSETMANAGER_PRIVATE_H #define ANDROID_UTIL_ASSETMANAGER_PRIVATE_H #include <optional> #include <androidfw/Errors.h> #include <android-base/expected.h> #include "core_jni_helpers.h" #include "jni.h" #include "nativehelper/JNIHelp.h" namespace android { constexpr const char* kResourcesNotFound = "android/content/res/Resources$NotFoundException"; constexpr const static char* kIOErrorMessage = "failed to read resources.arsc data"; template <typename T, typename E> static bool ThrowIfIOError(JNIEnv* env, const base::expected<T, E>& result) { if constexpr (std::is_same<NullOrIOError, E>::value) { if (IsIOError(result)) { jniThrowException(env, kResourcesNotFound, kIOErrorMessage); return true; } return false; } else { if (!result.has_value()) { static_assert(std::is_same<IOError, E>::value, "Unknown result error type"); jniThrowException(env, kResourcesNotFound, kIOErrorMessage); return true; } return false; } } } // namespace android #endif //ANDROID_UTIL_ASSETMANAGER_PRIVATE_H core/jni/android_util_StringBlock.cpp +2 −10 Original line number Diff line number Diff line Loading @@ -17,7 +17,6 @@ #define LOG_TAG "StringBlock" #include "android_util_AssetManager_private.h" #include "jni.h" #include <nativehelper/JNIHelp.h> #include <utils/misc.h> Loading Loading @@ -76,17 +75,12 @@ static jstring android_content_StringBlock_nativeGetString(JNIEnv* env, jobject return 0; } auto str8 = osb->string8At(idx); if (UNLIKELY(ThrowIfIOError(env, str8))) { return 0; } else if (str8.has_value()) { if (auto str8 = osb->string8At(idx); str8.has_value()) { return env->NewStringUTF(str8->data()); } auto str = osb->stringAt(idx); if (UNLIKELY(ThrowIfIOError(env, str))) { return 0; } else if (UNLIKELY(!str.has_value())) { if (UNLIKELY(!str.has_value())) { jniThrowException(env, "java/lang/IndexOutOfBoundsException", NULL); return 0; } Loading @@ -104,7 +98,6 @@ static jintArray android_content_StringBlock_nativeGetStyle(JNIEnv* env, jobject auto spans = osb->styleAt(idx); if (!spans.has_value()) { ThrowIfIOError(env, spans); return NULL; } Loading @@ -114,7 +107,6 @@ static jintArray android_content_StringBlock_nativeGetStyle(JNIEnv* env, jobject auto pos = *spans; while (true) { if (UNLIKELY(!pos)) { jniThrowException(env, kResourcesNotFound, kIOErrorMessage); return NULL; } if (pos->name.index == ResStringPool_span::END) { Loading Loading
core/jni/android_content_res_ApkAssets.cpp +3 −3 Original line number Diff line number Diff line Loading @@ -29,7 +29,6 @@ #include "utils/Trace.h" #include "android_content_res_ApkAssets.h" #include "android_util_AssetManager_private.h" #include "core_jni_helpers.h" #include "jni.h" #include "nativehelper/ScopedUtfChars.h" Loading Loading @@ -473,7 +472,8 @@ static jlong NativeOpenXml(JNIEnv* env, jclass /*clazz*/, jlong ptr, jstring fil const auto buffer = asset->getIncFsBuffer(true /* aligned */); const size_t length = asset->getLength(); if (!buffer.convert<uint8_t>().verify(length)) { jniThrowException(env, kResourcesNotFound, kIOErrorMessage); jniThrowException(env, "java/io/FileNotFoundException", "File not fully present due to incremental installation"); return 0; } Loading
core/jni/android_util_AssetManager.cpp +24 −63 Original line number Diff line number Diff line Loading @@ -43,7 +43,6 @@ #include "androidfw/ResourceUtils.h" #include "android_content_res_ApkAssets.h" #include "android_util_AssetManager_private.h" #include "core_jni_helpers.h" #include "jni.h" #include "nativehelper/JNIPlatformHelp.h" Loading Loading @@ -574,7 +573,8 @@ static jlong NativeOpenXmlAsset(JNIEnv* env, jobject /*clazz*/, jlong ptr, jint const incfs::map_ptr<void> buffer = asset->getIncFsBuffer(true /* aligned */); const size_t length = asset->getLength(); if (!buffer.convert<uint8_t>().verify(length)) { jniThrowException(env, kResourcesNotFound, kIOErrorMessage); jniThrowException(env, "java/io/FileNotFoundException", "File not fully present due to incremental installation"); return 0; } Loading Loading @@ -611,7 +611,8 @@ static jlong NativeOpenXmlAssetFd(JNIEnv* env, jobject /*clazz*/, jlong ptr, int const incfs::map_ptr<void> buffer = asset->getIncFsBuffer(true /* aligned */); const size_t length = asset->getLength(); if (!buffer.convert<uint8_t>().verify(length)) { jniThrowException(env, kResourcesNotFound, kIOErrorMessage); jniThrowException(env, "java/io/FileNotFoundException", "File not fully present due to incremental installation"); return 0; } Loading @@ -631,14 +632,12 @@ static jint NativeGetResourceValue(JNIEnv* env, jclass /*clazz*/, jlong ptr, jin auto value = assetmanager->GetResource(static_cast<uint32_t>(resid), false /*may_be_bag*/, static_cast<uint16_t>(density)); if (!value.has_value()) { ThrowIfIOError(env, value); return ApkAssetsCookieToJavaCookie(kInvalidCookie); } if (resolve_references) { auto result = assetmanager->ResolveReference(value.value()); if (!result.has_value()) { ThrowIfIOError(env, result); return ApkAssetsCookieToJavaCookie(kInvalidCookie); } } Loading @@ -650,7 +649,6 @@ static jint NativeGetResourceBagValue(JNIEnv* env, jclass /*clazz*/, jlong ptr, ScopedLock<AssetManager2> assetmanager(AssetManagerFromLong(ptr)); auto bag = assetmanager->GetBag(static_cast<uint32_t>(resid)); if (!bag.has_value()) { ThrowIfIOError(env, bag); return ApkAssetsCookieToJavaCookie(kInvalidCookie); } Loading @@ -669,7 +667,6 @@ static jint NativeGetResourceBagValue(JNIEnv* env, jclass /*clazz*/, jlong ptr, AssetManager2::SelectedValue attr_value(*bag, *entry); auto result = assetmanager->ResolveReference(attr_value); if (!result.has_value()) { ThrowIfIOError(env, result); return ApkAssetsCookieToJavaCookie(kInvalidCookie); } return CopyValue(env, attr_value, typed_value); Loading @@ -679,7 +676,6 @@ static jintArray NativeGetStyleAttributes(JNIEnv* env, jclass /*clazz*/, jlong p ScopedLock<AssetManager2> assetmanager(AssetManagerFromLong(ptr)); auto bag_result = assetmanager->GetBag(static_cast<uint32_t>(resid)); if (!bag_result.has_value()) { ThrowIfIOError(env, bag_result); return nullptr; } Loading @@ -701,7 +697,6 @@ static jobjectArray NativeGetResourceStringArray(JNIEnv* env, jclass /*clazz*/, ScopedLock<AssetManager2> assetmanager(AssetManagerFromLong(ptr)); auto bag_result = assetmanager->GetBag(static_cast<uint32_t>(resid)); if (!bag_result.has_value()) { ThrowIfIOError(env, bag_result); return nullptr; } Loading @@ -716,7 +711,6 @@ static jobjectArray NativeGetResourceStringArray(JNIEnv* env, jclass /*clazz*/, AssetManager2::SelectedValue attr_value(bag, bag->entries[i]); auto result = assetmanager->ResolveReference(attr_value); if (!result.has_value()) { ThrowIfIOError(env, result); return nullptr; } Loading @@ -724,18 +718,12 @@ static jobjectArray NativeGetResourceStringArray(JNIEnv* env, jclass /*clazz*/, const ApkAssets* apk_assets = assetmanager->GetApkAssets()[attr_value.cookie]; const ResStringPool* pool = apk_assets->GetLoadedArsc()->GetStringPool(); jstring java_string = nullptr; auto str_utf8 = pool->string8At(attr_value.data); if (UNLIKELY(ThrowIfIOError(env, str_utf8))) { return nullptr; } if (str_utf8.has_value()) { jstring java_string; if (auto str_utf8 = pool->string8At(attr_value.data); str_utf8.has_value()) { java_string = env->NewStringUTF(str_utf8->data()); } else { auto str_utf16 = pool->stringAt(attr_value.data); if (!str_utf16.has_value()) { ThrowIfIOError(env, str_utf16); return nullptr; } java_string = env->NewString(reinterpret_cast<const jchar*>(str_utf16->data()), Loading @@ -762,7 +750,6 @@ static jintArray NativeGetResourceStringArrayInfo(JNIEnv* env, jclass /*clazz*/, ScopedLock<AssetManager2> assetmanager(AssetManagerFromLong(ptr)); auto bag_result = assetmanager->GetBag(static_cast<uint32_t>(resid)); if (!bag_result.has_value()) { ThrowIfIOError(env, bag_result); return nullptr; } Loading @@ -782,7 +769,6 @@ static jintArray NativeGetResourceStringArrayInfo(JNIEnv* env, jclass /*clazz*/, auto result = assetmanager->ResolveReference(attr_value); if (!result.has_value()) { env->ReleasePrimitiveArrayCritical(array, buffer, JNI_ABORT); ThrowIfIOError(env, result); return nullptr; } Loading @@ -802,7 +788,6 @@ static jintArray NativeGetResourceIntArray(JNIEnv* env, jclass /*clazz*/, jlong ScopedLock<AssetManager2> assetmanager(AssetManagerFromLong(ptr)); auto bag_result = assetmanager->GetBag(static_cast<uint32_t>(resid)); if (!bag_result.has_value()) { ThrowIfIOError(env, bag_result); return nullptr; } Loading @@ -822,7 +807,6 @@ static jintArray NativeGetResourceIntArray(JNIEnv* env, jclass /*clazz*/, jlong auto result = assetmanager->ResolveReference(attr_value); if (!result.has_value()) { env->ReleasePrimitiveArrayCritical(array, buffer, 0); ThrowIfIOError(env, result); return nullptr; } Loading @@ -839,7 +823,6 @@ static jint NativeGetResourceArraySize(JNIEnv* env, jclass /*clazz*/, jlong ptr, ScopedLock<AssetManager2> assetmanager(AssetManagerFromLong(ptr)); auto bag = assetmanager->GetBag(static_cast<uint32_t>(resid)); if (!bag.has_value()) { ThrowIfIOError(env, bag); return -1; } return static_cast<jint>((*bag)->entry_count); Loading @@ -850,7 +833,6 @@ static jint NativeGetResourceArray(JNIEnv* env, jclass /*clazz*/, jlong ptr, jin ScopedLock<AssetManager2> assetmanager(AssetManagerFromLong(ptr)); auto bag_result = assetmanager->GetBag(static_cast<uint32_t>(resid)); if (!bag_result.has_value()) { ThrowIfIOError(env, bag_result); return -1; } Loading @@ -877,7 +859,6 @@ static jint NativeGetResourceArray(JNIEnv* env, jclass /*clazz*/, jlong ptr, jin auto result = assetmanager->ResolveReference(attr_value); if (!result.has_value()) { env->ReleasePrimitiveArrayCritical(out_data, buffer, JNI_ABORT); ThrowIfIOError(env, bag_result); return -1; } Loading Loading @@ -924,7 +905,6 @@ static jint NativeGetResourceIdentifier(JNIEnv* env, jclass /*clazz*/, jlong ptr ScopedLock<AssetManager2> assetmanager(AssetManagerFromLong(ptr)); auto resid = assetmanager->GetResourceId(name_utf8.c_str(), type, package); if (!resid.has_value()) { ThrowIfIOError(env, resid); return 0; } Loading @@ -935,7 +915,6 @@ static jstring NativeGetResourceName(JNIEnv* env, jclass /*clazz*/, jlong ptr, j ScopedLock<AssetManager2> assetmanager(AssetManagerFromLong(ptr)); auto name = assetmanager->GetResourceName(static_cast<uint32_t>(resid)); if (!name.has_value()) { ThrowIfIOError(env, name); return nullptr; } Loading @@ -947,7 +926,6 @@ static jstring NativeGetResourcePackageName(JNIEnv* env, jclass /*clazz*/, jlong ScopedLock<AssetManager2> assetmanager(AssetManagerFromLong(ptr)); auto name = assetmanager->GetResourceName(static_cast<uint32_t>(resid)); if (!name.has_value()) { ThrowIfIOError(env, name); return nullptr; } Loading @@ -961,7 +939,6 @@ static jstring NativeGetResourceTypeName(JNIEnv* env, jclass /*clazz*/, jlong pt ScopedLock<AssetManager2> assetmanager(AssetManagerFromLong(ptr)); auto name = assetmanager->GetResourceName(static_cast<uint32_t>(resid)); if (!name.has_value()) { ThrowIfIOError(env, name); return nullptr; } Loading @@ -977,7 +954,6 @@ static jstring NativeGetResourceEntryName(JNIEnv* env, jclass /*clazz*/, jlong p ScopedLock<AssetManager2> assetmanager(AssetManagerFromLong(ptr)); auto name = assetmanager->GetResourceName(static_cast<uint32_t>(resid)); if (!name.has_value()) { ThrowIfIOError(env, name); return nullptr; } Loading Loading @@ -1051,7 +1027,6 @@ static jobjectArray NativeGetSizeConfigurations(JNIEnv* env, jclass /*clazz*/, j auto configurations = assetmanager->GetResourceConfigurations(true /*exclude_system*/, false /*exclude_mipmap*/); if (!configurations.has_value()) { ThrowIfIOError(env, configurations); return nullptr; } Loading Loading @@ -1129,11 +1104,10 @@ static void NativeApplyStyle(JNIEnv* env, jclass /*clazz*/, jlong ptr, jlong the return; } auto result = ApplyStyle(theme, xml_parser, static_cast<uint32_t>(def_style_attr), static_cast<uint32_t>(def_style_resid), reinterpret_cast<uint32_t*>(attrs), attrs_len, out_values, out_indices); ApplyStyle(theme, xml_parser, static_cast<uint32_t>(def_style_attr), static_cast<uint32_t>(def_style_resid), reinterpret_cast<uint32_t*>(attrs), attrs_len, out_values, out_indices); env->ReleasePrimitiveArrayCritical(java_attrs, attrs, JNI_ABORT); ThrowIfIOError(env, result); } static jboolean NativeResolveAttrs(JNIEnv* env, jclass /*clazz*/, jlong ptr, jlong theme_ptr, Loading Loading @@ -1210,11 +1184,7 @@ static jboolean NativeResolveAttrs(JNIEnv* env, jclass /*clazz*/, jlong ptr, jlo } env->ReleasePrimitiveArrayCritical(java_attrs, attrs, JNI_ABORT); if (!result.has_value()) { ThrowIfIOError(env, result); return JNI_FALSE; } return JNI_TRUE; return result.has_value() ? JNI_TRUE : JNI_FALSE; } static jboolean NativeRetrieveAttributes(JNIEnv* env, jclass /*clazz*/, jlong ptr, Loading Loading @@ -1266,11 +1236,7 @@ static jboolean NativeRetrieveAttributes(JNIEnv* env, jclass /*clazz*/, jlong pt env->ReleasePrimitiveArrayCritical(out_java_values, out_values, 0); env->ReleasePrimitiveArrayCritical(java_attrs, attrs, JNI_ABORT); if (!result.has_value()) { ThrowIfIOError(env, result); return JNI_FALSE; } return JNI_TRUE; return result.has_value() ? JNI_TRUE : JNI_FALSE; } static jlong NativeThemeCreate(JNIEnv* /*env*/, jclass /*clazz*/, jlong ptr) { Loading @@ -1290,8 +1256,7 @@ static void NativeThemeApplyStyle(JNIEnv* env, jclass /*clazz*/, jlong ptr, jlon CHECK(theme->GetAssetManager() == &(*assetmanager)); (void) assetmanager; auto result = theme->ApplyStyle(static_cast<uint32_t>(resid), force); ThrowIfIOError(env, result); theme->ApplyStyle(static_cast<uint32_t>(resid), force); // TODO(adamlesinski): Consider surfacing exception when result is failure. // CTS currently expects no exceptions from this method. Loading @@ -1313,13 +1278,10 @@ static void NativeThemeCopy(JNIEnv* env, jclass /*clazz*/, jlong dst_asset_manag CHECK(dst_theme->GetAssetManager() == &(*dst_assetmanager)); (void) dst_assetmanager; auto result = dst_theme->SetTo(*src_theme); ThrowIfIOError(env, result); return; dst_theme->SetTo(*src_theme); } else { dst_theme->SetTo(*src_theme); } auto result = dst_theme->SetTo(*src_theme); ThrowIfIOError(env, result); } static void NativeThemeClear(JNIEnv* /*env*/, jclass /*clazz*/, jlong theme_ptr) { Loading @@ -1345,7 +1307,6 @@ static jint NativeThemeGetAttributeValue(JNIEnv* env, jclass /*clazz*/, jlong pt auto result = theme->GetAssetManager()->ResolveReference(*value); if (!result.has_value()) { ThrowIfIOError(env, result); return ApkAssetsCookieToJavaCookie(kInvalidCookie); } return CopyValue(env, *value, typed_value); Loading
core/jni/android_util_AssetManager_private.hdeleted 100644 → 0 +0 −54 Original line number Diff line number Diff line /* * Copyright (C) 2008 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. */ #ifndef ANDROID_UTIL_ASSETMANAGER_PRIVATE_H #define ANDROID_UTIL_ASSETMANAGER_PRIVATE_H #include <optional> #include <androidfw/Errors.h> #include <android-base/expected.h> #include "core_jni_helpers.h" #include "jni.h" #include "nativehelper/JNIHelp.h" namespace android { constexpr const char* kResourcesNotFound = "android/content/res/Resources$NotFoundException"; constexpr const static char* kIOErrorMessage = "failed to read resources.arsc data"; template <typename T, typename E> static bool ThrowIfIOError(JNIEnv* env, const base::expected<T, E>& result) { if constexpr (std::is_same<NullOrIOError, E>::value) { if (IsIOError(result)) { jniThrowException(env, kResourcesNotFound, kIOErrorMessage); return true; } return false; } else { if (!result.has_value()) { static_assert(std::is_same<IOError, E>::value, "Unknown result error type"); jniThrowException(env, kResourcesNotFound, kIOErrorMessage); return true; } return false; } } } // namespace android #endif //ANDROID_UTIL_ASSETMANAGER_PRIVATE_H
core/jni/android_util_StringBlock.cpp +2 −10 Original line number Diff line number Diff line Loading @@ -17,7 +17,6 @@ #define LOG_TAG "StringBlock" #include "android_util_AssetManager_private.h" #include "jni.h" #include <nativehelper/JNIHelp.h> #include <utils/misc.h> Loading Loading @@ -76,17 +75,12 @@ static jstring android_content_StringBlock_nativeGetString(JNIEnv* env, jobject return 0; } auto str8 = osb->string8At(idx); if (UNLIKELY(ThrowIfIOError(env, str8))) { return 0; } else if (str8.has_value()) { if (auto str8 = osb->string8At(idx); str8.has_value()) { return env->NewStringUTF(str8->data()); } auto str = osb->stringAt(idx); if (UNLIKELY(ThrowIfIOError(env, str))) { return 0; } else if (UNLIKELY(!str.has_value())) { if (UNLIKELY(!str.has_value())) { jniThrowException(env, "java/lang/IndexOutOfBoundsException", NULL); return 0; } Loading @@ -104,7 +98,6 @@ static jintArray android_content_StringBlock_nativeGetStyle(JNIEnv* env, jobject auto spans = osb->styleAt(idx); if (!spans.has_value()) { ThrowIfIOError(env, spans); return NULL; } Loading @@ -114,7 +107,6 @@ static jintArray android_content_StringBlock_nativeGetStyle(JNIEnv* env, jobject auto pos = *spans; while (true) { if (UNLIKELY(!pos)) { jniThrowException(env, kResourcesNotFound, kIOErrorMessage); return NULL; } if (pos->name.index == ResStringPool_span::END) { Loading