summaryrefslogtreecommitdiff
path: root/gsi_service.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'gsi_service.cpp')
-rw-r--r--gsi_service.cpp29
1 files changed, 29 insertions, 0 deletions
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 namespace android::fiemap;
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 @@ binder::Status GsiService::setGsiAshmem(const ::android::os::ParcelFileDescripto
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 @@ binder::Status GsiService::isGsiEnabled(bool* _aidl_return) {
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 @@ bool GsiService::CreateInstallStatusFile() {
PLOG(ERROR) << "write " << kDsuInstallStatusFile;
return false;
}
+ SetProperty(kGsiInstalledProp, "1");
return true;
}
@@ -904,6 +930,9 @@ bool GsiService::RemoveGsiFiles(const std::string& install_dir) {
ok = false;
}
}
+ if (ok) {
+ SetProperty(kGsiInstalledProp, "0");
+ }
return ok;
}