Add isGsiEnabled to GsiService

In order to re-enable the Gsi from framework, we need a method to
query the current enable status.

Bug: 125079548
Test: use the status command
Change-Id: Ia6c0ae12e2e6613f112a241d2cf5733f8bf22984
diff --git a/aidl/android/gsi/IGsiService.aidl b/aidl/android/gsi/IGsiService.aidl
index 0665223..8a0201d 100644
--- a/aidl/android/gsi/IGsiService.aidl
+++ b/aidl/android/gsi/IGsiService.aidl
@@ -92,6 +92,11 @@
     int setGsiBootable(boolean oneShot);
 
     /**
+     * @return              True if Gsi is enabled
+     */
+    boolean isGsiEnabled();
+
+    /**
      * Cancel an in-progress GSI install.
      */
     boolean cancelGsiInstall();
diff --git a/gsi_service.cpp b/gsi_service.cpp
index ec5f584..4984597 100644
--- a/gsi_service.cpp
+++ b/gsi_service.cpp
@@ -198,6 +198,18 @@
     return binder::Status::ok();
 }
 
+binder::Status GsiService::isGsiEnabled(bool* _aidl_return) {
+    ENFORCE_SYSTEM_OR_SHELL;
+    std::lock_guard<std::mutex> guard(main_lock_);
+    std::string boot_key;
+    if (!GetInstallStatus(&boot_key)) {
+        *_aidl_return = false;
+    } else {
+        *_aidl_return = (boot_key == kInstallStatusOk);
+    }
+    return binder::Status::ok();
+}
+
 binder::Status GsiService::removeGsiInstall(bool* _aidl_return) {
     ENFORCE_SYSTEM_OR_SHELL;
     std::lock_guard<std::mutex> guard(main_lock_);
diff --git a/gsi_service.h b/gsi_service.h
index f3cbad0..01326b5 100644
--- a/gsi_service.h
+++ b/gsi_service.h
@@ -49,6 +49,7 @@
                                             bool* _aidl_return) override;
     binder::Status cancelGsiInstall(bool* _aidl_return) override;
     binder::Status setGsiBootable(bool oneShot, int* _aidl_return) override;
+    binder::Status isGsiEnabled(bool* _aidl_return) override;
     binder::Status removeGsiInstall(bool* _aidl_return) override;
     binder::Status disableGsiInstall(bool* _aidl_return) override;
     binder::Status isGsiRunning(bool* _aidl_return) override;
diff --git a/gsi_tool.cpp b/gsi_tool.cpp
index df2fcd5..a9a6920 100644
--- a/gsi_tool.cpp
+++ b/gsi_tool.cpp
@@ -342,7 +342,6 @@
         return EX_SOFTWARE;
     } else if (running) {
         std::cout << "running" << std::endl;
-        return 0;
     }
     bool installed;
     status = gsid->isGsiInstalled(&installed);
@@ -351,9 +350,17 @@
         return EX_SOFTWARE;
     } else if (installed) {
         std::cout << "installed" << std::endl;
-        return 0;
     }
-    std::cout << "normal" << std::endl;
+    bool enabled;
+    status = gsid->isGsiEnabled(&enabled);
+    if (!status.isOk()) {
+        std::cerr << status.exceptionMessage().string() << std::endl;
+        return EX_SOFTWARE;
+    } else if (running || installed) {
+        std::cout << (enabled ? "enabled" : "disabled") << std::endl;
+    } else {
+        std::cout << "normal" << std::endl;
+    }
     return 0;
 }