Return UNAVAILABLE status from all important DL methods.

In case of inhandled Java exceptions.

Bug: 182214420
Test: atest PackageManagerShellCommandTest PackageManagerShellCommandIncrementalTest IncrementalServiceTest PackageManagerServiceTest ChecksumsTest
Change-Id: I4fab494145cef1f9b723587f6d72ea60e084cf91
diff --git a/libdataloader/DataLoaderConnector.cpp b/libdataloader/DataLoaderConnector.cpp
index aa6ad22..d90851f 100644
--- a/libdataloader/DataLoaderConnector.cpp
+++ b/libdataloader/DataLoaderConnector.cpp
@@ -209,6 +209,17 @@
     return ids;
 }
 
+bool checkAndClearJavaException(JNIEnv* env, std::string_view method) {
+    if (!env->ExceptionCheck()) {
+        return false;
+    }
+
+    LOG(ERROR) << "Java exception during DataLoader::" << method;
+    env->ExceptionDescribe();
+    env->ExceptionClear();
+    return true;
+}
+
 bool reportStatusViaCallback(JNIEnv* env, jobject listener, jint storageId, jint status) {
     if (listener == nullptr) {
         ALOGE("No listener object to talk to IncrementalService. "
@@ -400,9 +411,6 @@
         CHECK(mDataLoader);
         bool result = !mDataLoader->onPrepareImage ||
                 mDataLoader->onPrepareImage(mDataLoader, addedFiles.data(), addedFiles.size());
-        if (checkAndClearJavaException(__func__)) {
-            result = false;
-        }
         return result;
     }
 
@@ -532,15 +540,7 @@
 
     bool checkAndClearJavaException(std::string_view method) const {
         JNIEnv* env = GetOrAttachJNIEnvironment(mJvm);
-
-        if (!env->ExceptionCheck()) {
-            return false;
-        }
-
-        LOG(ERROR) << "Java exception during DataLoader::" << method;
-        env->ExceptionDescribe();
-        env->ExceptionClear();
-        return true;
+        return ::checkAndClearJavaException(env, method);
     }
 
     const UniqueControl& control() const { return mControl; }
@@ -1014,6 +1014,12 @@
     bool result = dataLoaderConnector->onPrepareImage(addedFilesPair.ndkFiles());
 
     const auto& jni = jniIds(env);
+
+    if (checkAndClearJavaException(env, "onPrepareImage")) {
+        reportStatusViaCallback(env, listener, storageId, jni.constants.DATA_LOADER_UNAVAILABLE);
+        return false;
+    }
+
     reportStatusViaCallback(env, listener, storageId,
                             result ? jni.constants.DATA_LOADER_IMAGE_READY
                                    : jni.constants.DATA_LOADER_IMAGE_NOT_READY);