Add versioned interface for 1.2 HAL changes.

Add versioned interface for IPreparedModel. Support 1.2 callbacks.
Implement 1.2 HAL interface in sample driver.

Bug: 73506513
Test: NeuralNetworksTest_static
Test: VtsHalNeuralnetworksV1_xTargetTest with 1.2 sample driver
Change-Id: I1bc7aed424ebf3fd9635b1e411ee41a853d5bc9b
Merged-In: I1bc7aed424ebf3fd9635b1e411ee41a853d5bc9b
(cherry picked from commit cce4cb4dfae7a48c3f9f53e5eff6a3e246ed54c5)
diff --git a/runtime/ExecutionBuilder.cpp b/runtime/ExecutionBuilder.cpp
index bf758ad..f6226d5 100644
--- a/runtime/ExecutionBuilder.cpp
+++ b/runtime/ExecutionBuilder.cpp
@@ -455,12 +455,15 @@
     }
 }
 
-StepExecutor::StepExecutor(const ExecutionBuilder* executionBuilder,
-                           const ModelBuilder* model,
-                           VersionedIDevice* driver, sp<IPreparedModel> preparedModel) :
-    mExecutionBuilder(executionBuilder), mModel(model),
-    mDriver(driver), mPreparedModel(preparedModel),
-    mInputs(model->inputCount()), mOutputs(model->outputCount()) {}
+StepExecutor::StepExecutor(const ExecutionBuilder* executionBuilder, const ModelBuilder* model,
+                           VersionedIDevice* driver,
+                           std::shared_ptr<VersionedIPreparedModel> preparedModel)
+    : mExecutionBuilder(executionBuilder),
+      mModel(model),
+      mDriver(driver),
+      mPreparedModel(preparedModel),
+      mInputs(model->inputCount()),
+      mOutputs(model->outputCount()) {}
 
 void StepExecutor::mapInputsAndOutputsTrivially() {
     mInputs = mExecutionBuilder->mInputs;
@@ -570,7 +573,9 @@
         // TODO: change to asynchronous later
         preparedModelCallback->wait();
         ErrorStatus prepareReturnStatus = preparedModelCallback->getStatus();
-        mPreparedModel = preparedModelCallback->getPreparedModel();
+        if (auto preparedModel = preparedModelCallback->getPreparedModel()) {
+            mPreparedModel = std::make_shared<VersionedIPreparedModel>(preparedModel);
+        }
         if (prepareReturnStatus != ErrorStatus::NONE) {
             return convertErrorStatusToResultCode(prepareReturnStatus);
         }
@@ -693,7 +698,7 @@
     NNTRACE_RT(NNTRACE_PHASE_EXECUTION, "computeOnCpu");
     CpuExecutor executor;
     int err = executor.run(model, request, modelPoolInfos, requestPoolInfos);
-    executionCallback->notify(convertResultCodeToErrorStatus(err));
+    executionCallback->notify_1_2(convertResultCodeToErrorStatus(err));
 }
 
 int StepExecutor::startComputeOnCpu(sp<ExecutionCallback>* synchronizationCallback) {