Provide oneway method for methods required by system_server
Bug: 149790245
Bug: 149716497
Test: adb shell am start-activity \
-n com.android.dynsystem/com.android.dynsystem.VerificationActivity \
-a android.os.image.action.START_INSTALL \
-d file:///storage/emulated/0/Download/system.raw.gz \
--el KEY_SYSTEM_SIZE $(du -b system.raw|cut -f1) \
--el KEY_USERDATA_SIZE 8589934592
Change-Id: I472566bd84591422ef67c9838b9c94a0a6f1e8aa
diff --git a/gsi_service.cpp b/gsi_service.cpp
index 3705c5b..77db54b 100644
--- a/gsi_service.cpp
+++ b/gsi_service.cpp
@@ -33,6 +33,7 @@
#include <android-base/errors.h>
#include <android-base/file.h>
#include <android-base/logging.h>
+#include <android-base/properties.h>
#include <android-base/stringprintf.h>
#include <android-base/strings.h>
#include <android/gsi/BnImageService.h>
@@ -57,6 +58,7 @@
using android::base::ReadFileToString;
using android::base::ReadFullyAtOffset;
using android::base::RemoveFileIfExists;
+using android::base::SetProperty;
using android::base::StringPrintf;
using android::base::unique_fd;
using android::base::WriteStringToFd;
@@ -278,6 +280,18 @@
return binder::Status::ok();
}
+binder::Status GsiService::enableGsiAsync(bool one_shot, const std::string& dsuSlot,
+ const sp<IGsiServiceCallback>& resultCallback) {
+ int result;
+ auto status = enableGsi(one_shot, dsuSlot, &result);
+ if (!status.isOk()) {
+ LOG(ERROR) << "Could not enableGsi: " << status.exceptionMessage().string();
+ result = IGsiService::INSTALL_ERROR_GENERIC;
+ }
+ resultCallback->onResult(result);
+ return binder::Status::ok();
+}
+
binder::Status GsiService::enableGsi(bool one_shot, const std::string& dsuSlot, int* _aidl_return) {
std::lock_guard<std::mutex> guard(parent_->lock());
@@ -317,6 +331,17 @@
return binder::Status::ok();
}
+binder::Status GsiService::removeGsiAsync(const sp<IGsiServiceCallback>& resultCallback) {
+ bool result;
+ auto status = removeGsi(&result);
+ if (!status.isOk()) {
+ LOG(ERROR) << "Could not removeGsi: " << status.exceptionMessage().string();
+ result = IGsiService::INSTALL_ERROR_GENERIC;
+ }
+ resultCallback->onResult(result);
+ return binder::Status::ok();
+}
+
binder::Status GsiService::removeGsi(bool* _aidl_return) {
ENFORCE_SYSTEM_OR_SHELL;
std::lock_guard<std::mutex> guard(parent_->lock());
@@ -474,6 +499,7 @@
PLOG(ERROR) << "write " << kDsuInstallStatusFile;
return false;
}
+ SetProperty(kGsiInstalledProp, "1");
return true;
}
@@ -904,6 +930,9 @@
ok = false;
}
}
+ if (ok) {
+ SetProperty(kGsiInstalledProp, "0");
+ }
return ok;
}