context.registerParametricMethod(this, (int)(Application::enableApplication)(std::string));
context.registerParametricMethod(this, (int)(Application::getApplicationState)(std::string));
context.registerParametricMethod(this, (int)(Application::setApplicationState)(std::string, int));
- context.registerParametricMethod(this, (bool)(Application::isApplicationInstallationEnabled)(std::string));
- context.registerParametricMethod(this, (bool)(Application::isApplicationUninstallationEnabled)(std::string));
context.registerParametricMethod(this, (int)(Application::startApplication)(std::string));
context.registerParametricMethod(this, (int)(Application::stopApplication)(std::string));
context.registerParametricMethod(this, (int)(Application::wipeApplicationData)(std::string));
std::vector<std::string> Application::getInstalledPackageList()
{
try {
- return PackageManager::getInstalledPackageList(context.getPeerUid());
+ PackageManager& packman = PackageManager::instance();
+ return packman.getInstalledPackageList(context.getPeerUid());
} catch (runtime::Exception& e) {
ERROR("Failed to retrieve package info installed in the devioce");
return std::vector<std::string>();
}
}
-bool Application::isApplicationInstallationEnabled(const std::string& appid)
-{
- return true;
-}
-
-bool Application::isApplicationUninstallationEnabled(const std::string& appid)
-{
- return true;
-}
-
bool Application::isApplicationInstalled(const std::string& appid)
{
try {
int Application::installPackage(const std::string& pkgpath)
{
try {
- PackageManager::installPackage(pkgpath, context.getPeerUid());
+ PackageManager& packman = PackageManager::instance();
+ packman.installPackage(pkgpath, context.getPeerUid());
} catch (runtime::Exception& e) {
ERROR("Exception in Package Id");
return -1;
int Application::uninstallPackage(const std::string& pkgid)
{
try {
- PackageManager::uninstallPackage(pkgid, context.getPeerUid());
+ PackageManager& packman = PackageManager::instance();
+ packman.uninstallPackage(pkgid, context.getPeerUid());
} catch (runtime::Exception& e) {
ERROR("Exception in Package Id");
return -1;
launchpad.terminate(appid);
// Notify user that the app hass terminated due to the policy
}
-
- PackageManager::deactivatePackage(appid, context.getPeerUid());
+ PackageManager& packman = PackageManager::instance();
+ packman.deactivatePackage(appid, context.getPeerUid());
} catch (runtime::Exception& e) {
return -1;
}
int Application::enableApplication(const std::string& appid)
{
try {
- PackageManager::activatePackage(appid, context.getPeerUid());
+ PackageManager& packman = PackageManager::instance();
+ packman.activatePackage(appid, context.getPeerUid());
} catch (runtime::Exception& e) {
return -1;
}
int Application::wipeApplicationData(const std::string& appid)
{
try {
- PackageManager::wipePackageData(appid, context.getPeerUid());
+ PackageManager& packman = PackageManager::instance();
+ packman.wipePackageData(appid, context.getPeerUid());
} catch (runtime::Exception& e) {
- ERROR("Exception in Package Id");
+ ERROR("Exception on wiping package data");
return -1;
}
return 0;
}
- void PackageSizeCollector(pkgmgr_client* pc, const char *pkgid, const pkg_size_info_t *info, void *data)
- {
- pkg_size_info_t *i = static_cast<pkg_size_info_t*>(data);
-
- *i = *info;
- }
-
} // namespace
PackageInfo::PackageInfo(const std::string& pkgid, uid_t uid) :
return name;
}
-long long AppInfo::getCodeSize() const
+PackageManager::PackageManager() :
+ nativeHandle(nullptr)
{
- pkgmgr_client *pc = ::pkgmgr_client_new(PC_REQUEST);
- if (pc == nullptr) {
- ERROR("Error in pkgmgr_client_new");
- throw runtime::Exception("Unexpected operation");
- }
-
- pkg_size_info_t size;
- int ret = ::pkgmgr_client_usr_get_package_size_info(pc, appid.c_str(), PackageSizeCollector, &size, user);
- if (ret != PKGMGR_R_OK) {
- ::pkgmgr_client_free(pc);
- ERROR("Error in pkgmgr_client_get_package_size_info");
- throw runtime::Exception("Unexpected operation");
+ nativeHandle = ::pkgmgr_client_new(PC_REQUEST);
+ if (nativeHandle == nullptr) {
+ throw runtime::Exception("No package manager instance");
}
-
- ::pkgmgr_client_free(pc);
- return size.app_size;
}
-long long AppInfo::getDataSize() const
+PackageManager::~PackageManager()
{
- pkgmgr_client *pc = ::pkgmgr_client_new(PC_REQUEST);
- if (pc == nullptr) {
- ERROR("Error in pkgmgr_client_new");
- return -1;
- }
-
- pkg_size_info_t size;
- int ret = ::pkgmgr_client_usr_get_package_size_info(pc, appid.c_str(), PackageSizeCollector, &size, user);
- if (ret != PKGMGR_R_OK) {
- ::pkgmgr_client_free(pc);
- ERROR("Error in pkgmgr_client_get_package_size_info");
- return -1;
- }
+ ::pkgmgr_client_free(nativeHandle);
+}
- ::pkgmgr_client_free(pc);
- return size.data_size;
+PackageManager& PackageManager::instance()
+{
+ static PackageManager __instance__;
+ return __instance__;
}
PackageInfo PackageManager::getPackageInfo(const std::string& pkgid, const uid_t user)
{
PackageInfo package(pkgid, user);
- pkgmgr_client *pc = ::pkgmgr_client_new(PC_REQUEST);
- if (pc == nullptr) {
- throw runtime::Exception("Package Manager Error");
- }
-
- if (::pkgmgr_client_usr_activate(pc, package.getType().c_str(), pkgid.c_str(), user) != PKGMGR_R_OK) {
- ::pkgmgr_client_free(pc);
-
+ if (::pkgmgr_client_usr_activate(nativeHandle, package.getType().c_str(), pkgid.c_str(), user) != PKGMGR_R_OK) {
+ ERROR("Failed to activate package: " + pkgid);
throw runtime::Exception("Operation failed");
}
-
- ::pkgmgr_client_free(pc);
}
void PackageManager::deactivatePackage(const std::string& pkgid, const uid_t user)
{
PackageInfo package(pkgid, user);
- pkgmgr_client *pc = ::pkgmgr_client_new(PC_REQUEST);
- if (pc == nullptr) {
- throw runtime::Exception("Package Manager Error");
- }
-
- std::cout << "Package Type: " << package.getType() << std::endl;
- int ret = pkgmgr_client_usr_deactivate(pc, package.getType().c_str(), pkgid.c_str(), user);
+ int ret = pkgmgr_client_usr_deactivate(nativeHandle, package.getType().c_str(), pkgid.c_str(), user);
if (ret != PKGMGR_R_OK) {
- ::pkgmgr_client_free(pc);
ERROR("Failed to deactivate package: " + std::to_string(ret));
throw runtime::Exception("Operation failed");
}
-
- ::pkgmgr_client_free(pc);
}
void PackageManager::installPackage(const std::string& pkgpath, const uid_t user)
{
- pkgmgr_client *pc = ::pkgmgr_client_new(PC_REQUEST);
- if (pc == nullptr) {
- ERROR("Error in pkgmgr_client_new");
- throw runtime::Exception("Package manager exception");
- }
-
- int ret = ::pkgmgr_client_usr_install(pc, NULL, NULL, pkgpath.c_str(), NULL, PM_QUIET, PackageEventCallback, nullptr, user);
+ int ret = ::pkgmgr_client_usr_install(nativeHandle, NULL, NULL, pkgpath.c_str(), NULL, PM_QUIET, PackageEventCallback, nullptr, user);
if (ret != PKGMGR_R_OK) {
- ::pkgmgr_client_free(pc);
ERROR("Error in pkgmgr_client_install");
throw runtime::Exception("Package installation failed");
}
-
- // pkgmgr_client handle will be destroyed in the callback when package installation is completed
}
void PackageManager::uninstallPackage(const std::string& pkgid, const uid_t user)
PackageInfo pkgInfo(pkgid);
pkgtype = pkgInfo.getType();
- pkgmgr_client *pc = ::pkgmgr_client_new(PC_REQUEST);
- if (pc == nullptr) {
- throw runtime::Exception("Package manager exception");
- ERROR("Error in pkgmgr_client_new");
- }
-
- int ret = ::pkgmgr_client_usr_uninstall(pc, pkgtype.c_str(), pkgid.c_str(), PM_QUIET, PackageEventCallback, nullptr, user);
+ int ret = ::pkgmgr_client_usr_uninstall(nativeHandle, pkgtype.c_str(), pkgid.c_str(), PM_QUIET, PackageEventCallback, nullptr, user);
if (ret < PKGMGR_R_OK) {
- ::pkgmgr_client_free(pc);
ERROR("Error in pkgmgr_client_uninstall");
throw runtime::Exception("Package manager exception");
}
-
- // pkgmgr_client handle will be destroyed in the callback when package installation is completed
}
void PackageManager::wipePackageData(const std::string& pkgid, const uid_t user)
{
PackageInfo package(pkgid);
- pkgmgr_client *pc = ::pkgmgr_client_new(PC_REQUEST);
- if (pc == nullptr) {
- throw runtime::Exception("Invalid package manager");
- }
-
- int ret = ::pkgmgr_client_usr_clear_user_data(pc, package.getType().c_str(), pkgid.c_str(), PM_QUIET, user);
+ int ret = ::pkgmgr_client_usr_clear_user_data(nativeHandle, package.getType().c_str(), pkgid.c_str(), PM_QUIET, user);
if (ret != PKGMGR_R_OK) {
- ::pkgmgr_client_free(pc);
+ ERROR("Error in pkgmgr_clear_user_data");
throw runtime::Exception("Operation failed");
}
-
- ::pkgmgr_client_free(pc);
}
std::vector<std::string> PackageManager::getInstalledPackageList(const uid_t user)
std::string getPackageName() const;
std::string getPackageType() const;
std::string getVersion() const;
- long long getCodeSize() const;
- long long getDataSize() const;
private:
uid_t user;
class PackageManager {
public:
- static PackageInfo getPackageInfo(const std::string& pkgid, const uid_t user);
- static void activatePackage(const std::string& pkgid, const uid_t user);
- static void deactivatePackage(const std::string& pkgid, const uid_t user);
- static void installPackage(const std::string& pkgpath, const uid_t user);
- static void uninstallPackage(const std::string& pkgid, const uid_t user);
- static void wipePackageData(const std::string& pkgid, const uid_t user);
- static std::vector<std::string> getInstalledPackageList(const uid_t user);
+ PackageInfo getPackageInfo(const std::string& pkgid, const uid_t user);
+ void activatePackage(const std::string& pkgid, const uid_t user);
+ void deactivatePackage(const std::string& pkgid, const uid_t user);
+ void installPackage(const std::string& pkgpath, const uid_t user);
+ void uninstallPackage(const std::string& pkgid, const uid_t user);
+ void wipePackageData(const std::string& pkgid, const uid_t user);
+
+ std::vector<std::string> getInstalledPackageList(const uid_t user);
+
+ static PackageManager& instance();
+
+private:
+ PackageManager();
+ ~PackageManager();
+
+private:
+ pkgmgr_client *nativeHandle;
};
#endif // __DPM_PACKMAN_H__