Set the default theme as current theme when the current theme uninstalled 60/237560/1
authorSangyoon Jang <jeremy.jang@samsung.com>
Wed, 1 Jul 2020 08:41:07 +0000 (17:41 +0900)
committerSangyoon Jang <jeremy.jang@samsung.com>
Wed, 1 Jul 2020 08:41:32 +0000 (17:41 +0900)
Change-Id: I9c644a059ff5b4d11b17fddf8eb7f693406bbec5
Signed-off-by: Sangyoon Jang <jeremy.jang@samsung.com>
src/theme_provider/package_event_request_handler.cc

index dee1be9..da2e262 100644 (file)
@@ -7,6 +7,7 @@
 #include <bundle_cpp.h>
 
 #include "theme/dbus/command.h"
+#include "theme/dbus/request_broker.h"
 #include "theme/loader/theme_info.h"
 #include "theme/utils/logging.h"
 #include "theme_provider/theme_info_proxy.h"
@@ -59,7 +60,32 @@ bool PackageEventRequestHandler::UpdateTheme(const loader::ThemeInfo& theme) {
 
 bool PackageEventRequestHandler::UninstallTheme(
     const loader::ThemeInfo& theme) {
-  return proxy_->RemoveTheme(theme.GetId());
+  bool cur_uninstalled = false;
+  auto cur = proxy_->GetLoadedTheme();
+  if (cur) {
+    if (cur->GetId() == theme.GetId())
+      cur_uninstalled = true;
+  }
+
+  if (!proxy_->RemoveTheme(theme.GetId()))
+    return false;
+
+  if (cur_uninstalled) {
+    auto default_theme = proxy_->GetDefaultTheme();
+    if (default_theme) {
+      if (!proxy_->SetCurrentTheme(default_theme->GetId())) {
+        LOG(ERROR) << "Failed to set default theme as current theme";
+        // return true, we removed theme successfully anyway
+        return true;
+      }
+      // send a signal the current theme changed as default theme
+      if (!dbus::RequestBroker::GetInst().EmitSignal("changed",
+          dbus::Command::CHANGED, default_theme->Serialize()))
+        LOG(ERROR) << "Failed to send theme changed signal";
+    }
+  }
+
+  return true;
 }
 
 }  // namespace provider