Add to read a custum feature key.
[platform/framework/native/appfw.git] / src / system / FSys_SystemInfoImpl.cpp
index 28d20e0..8cc29b0 100644 (file)
@@ -446,39 +446,43 @@ _SystemInfoImpl::GetSysInfo(const String& key, String& value)
        {
                r = GetFromRegistry(tizenKey, value);
 
-               if(r != E_SUCCESS)
+               if(r != E_SUCCESS || value == L"ERROR")
                {
-                       int ret = 0;
-                       TapiHandle* handle = null;
-                       int time_count = 0;
-                       int status = 0;
+                       ArrayList requestMessage;
+                       ArrayList responseMessage;
 
-                       handle = tel_init(null);
-                       if(handle != null)
-                       {
-                               while(time_count < 30) //Wait 30 second.
-                               {
-                                       ret = tel_check_modem_power_status(handle, &status);
-                                       SysLog(NID_SYS, "Modem check result is %d, status is %d.", handle, status);
-                                       if(ret != TAPI_API_SUCCESS)
-                                       {
-                                               SysLogException(NID_SYS, E_SYSTEM, "It is failed to get Modem status.");
-                                               tel_deinit(handle);
-                                               return E_SYSTEM;
-                                       }
-
-                                       if(status == 0)
-                                       {
-                                               break;
-                                       }
-
-                                       usleep(1000000);
-                                       time_count++;
-                               }
-                               tel_deinit(handle);
-                       }
-                       _SystemClient* pSystemClient = _SystemClient::GetInstance();
-                       r = pSystemClient->GetValue(tizenKey, value);
+                       _CommunicationDispatcherClient* pCommunicationDispatcherClient = _CommunicationDispatcherClient::GetInstance();
+
+                       _IpcClient* pIpcClient = pCommunicationDispatcherClient->GetIpcClient();
+                       SysTryReturn(NID_SYS, pIpcClient != null, E_OUT_OF_MEMORY, r, "It is failed to create IPC instance.");
+
+                       requestMessage.Construct();
+                       responseMessage.Construct();
+
+                       String serviceId(_SYSTEM_SERVICE_ID);
+                       String commandId(L"osp.system.command.get.duid.internal");
+
+                       requestMessage.Add(serviceId);
+                       requestMessage.Add(commandId);
+
+                       unique_ptr<IoService_Request> pMsg(new (std::nothrow) IoService_Request(requestMessage, &responseMessage));
+                       SysTryReturnResult(NID_SYS, pMsg != null, E_OUT_OF_MEMORY, "It is failed to create Ipc message");
+
+                       r = pIpcClient->SendRequest(pMsg.get());
+                       SysTryReturn(NID_SYS, r == E_SUCCESS, E_SYSTEM, r, "It is failed to send ipc message. [%s]", GetErrorMessage(r));
+
+                       String* pResult = (String*)responseMessage.GetAt(_SYSTEM_RESPONSE_DATA);
+                       String* pDuid = (String*)responseMessage.GetAt(_SYSTEM_RESPONSE_DATA+1);
+
+                       SysTryReturn(NID_SYS, pResult != null, r = E_SYSTEM, r, "It is failed to receive result on IPC response message.");
+                       SysTryReturn(NID_SYS, pDuid != null, r = E_SYSTEM, r, "It is failed to receive IMEI value on IPC response message.");
+
+                       SysTryReturn(NID_SYS, *pResult != _SYSTEM_RESULT_PRIVILEGED, r = E_PRIVILEGE_DENIED, r, "It is failed to get privilege.");
+                       SysTryReturn(NID_SYS, *pResult == _SYSTEM_RESULT_OK, r = E_SYSTEM, r, "It is failed to get DUID value.");
+
+                       value = *pDuid;
+
+                       responseMessage.RemoveAll(true);
                }
        }
        else
@@ -496,10 +500,13 @@ _SystemInfoImpl::GetSysInfo(const String& key, String& value)
                        unique_ptr< char[] > systemKey(_StringConverter::CopyToCharArrayN(tKey));
                        r = GetLastResult();
                        SysTryReturn(NID_SYS, r == E_SUCCESS, E_SYSTEM, r, "[%s] StringUtil::StringToUtf8N It is failed", GetErrorMessage(r));
-                       int ret = system_info_get_platform_string(systemKey.get(), &pStringValue);
-
-                       SysTryReturnResult(NID_SYS, ret == 0, E_OBJ_NOT_FOUND, "It is failed to get system information %ls from configration file.", tizenKey.GetPointer());
 
+                       int ret = system_info_get_platform_string(systemKey.get(), &pStringValue);
+                       if (ret != SYSTEM_INFO_ERROR_NONE)
+                       {
+                               ret = system_info_get_custom_string(systemKey.get(), &pStringValue);
+                               SysTryReturnResult(NID_SYS, ret == SYSTEM_INFO_ERROR_NONE, E_OBJ_NOT_FOUND, "It is failed to get system information %ls from configration file.", tizenKey.GetPointer());
+                       }
                        r = StringUtil::Utf8ToString(pStringValue, value);
                        free(pStringValue);
                        r = E_SUCCESS;
@@ -551,7 +558,7 @@ _SystemInfoImpl::GetSysInfo(const String& key, int& value)
        else
        {
                r = GetFromRegistry(tizenKey, value);
-               if(r != E_SUCCESS)
+               if(r != E_SUCCESS || tizenKey == _SCREEN_WIDTH || tizenKey == _SCREEN_HEIGHT || tizenKey == _SCREEN_DPI)
                {
                        int ret = 0;
                        String tKey;
@@ -563,9 +570,14 @@ _SystemInfoImpl::GetSysInfo(const String& key, int& value)
                        unique_ptr< char[] > systemKey(_StringConverter::CopyToCharArrayN(tKey));
                        r = GetLastResult(); 
                        SysTryReturn(NID_SYS, r == E_SUCCESS, E_SYSTEM, r, "[%s] StringUtil::StringToUtf8N It is failed", GetErrorMessage(r));
-                       ret = system_info_get_platform_int(systemKey.get(), &value);
 
-                       SysTryReturnResult(NID_SYS, ret == 0, E_OBJ_NOT_FOUND, "It is failed to get system information %ls from configration file.", tizenKey.GetPointer());
+                       ret = system_info_get_platform_int(systemKey.get(), &value);
+                       if (ret != SYSTEM_INFO_ERROR_NONE)
+                       {
+                               ret = system_info_get_custom_int(systemKey.get(), &value);
+                               SysTryReturnResult(NID_SYS, ret == SYSTEM_INFO_ERROR_NONE, E_OBJ_NOT_FOUND,
+                                       "It is failed to get system information %ls from configration file.", tizenKey.GetPointer());
+                       }
                        r = E_SUCCESS;
                }
        }
@@ -625,7 +637,23 @@ _SystemInfoImpl::GetSysInfo(const String& key, bool& value)
 
                bool supported = false;
                int ret = system_info_get_platform_bool(systemKey.get(), &supported);
-               SysTryReturnResult(NID_SYS, ret == 0, E_OBJ_NOT_FOUND, "It is failed to get system information %ls from configration file.", tizenKey.GetPointer());
+               if(ret != SYSTEM_INFO_ERROR_NONE)
+               {
+                       ret = system_info_get_custom_bool(systemKey.get(), &supported);
+                       if (ret != SYSTEM_INFO_ERROR_NONE)
+                       {
+                               String screenKey(L"http://tizen.org/feature/screen.size");
+                               String requiredKey;
+                               tizenKey.SubString(0, screenKey.GetLength(), requiredKey);
+
+                               if(requiredKey == screenKey)
+                               {
+                                       value = false;
+                               }
+                       }
+               }
+
+               SysTryReturnResult(NID_SYS, ret == SYSTEM_INFO_ERROR_NONE, E_OBJ_NOT_FOUND, "It is failed to get system information %ls from configration file.", tizenKey.GetPointer());
                value = supported;
                r = E_SUCCESS;
        }
@@ -670,9 +698,9 @@ _SystemInfoImpl::GetPlatformVersion(String& platformVersion)
                unique_ptr< char[] > systemKey(_StringConverter::CopyToCharArrayN(tKey));
                r = GetLastResult();
                SysTryReturn(NID_SYS, r == E_SUCCESS, E_SYSTEM, r, "[%s] StringUtil::StringToUtf8N It is failed", GetErrorMessage(r));
-               int ret = system_info_get_platform_string(systemKey.get(), &pStringValue);
 
-               SysTryReturnResult(NID_SYS, ret == 0, E_OBJ_NOT_FOUND, "It is failed to get system information %ls from configration file.", tizenKey.GetPointer());
+               int ret = system_info_get_platform_string(systemKey.get(), &pStringValue);
+               SysTryReturnResult(NID_SYS, ret == SYSTEM_INFO_ERROR_NONE, E_OBJ_NOT_FOUND, "It is failed to get system information %ls from configration file.", tizenKey.GetPointer());
 
                r = StringUtil::Utf8ToString(pStringValue, platformVersion);
                free(pStringValue);
@@ -700,9 +728,9 @@ _SystemInfoImpl::GetBuildInfo(String& buildInfo)
                unique_ptr< char[] > systemKey(_StringConverter::CopyToCharArrayN(tKey));
                r = GetLastResult();
                SysTryReturn(NID_SYS, r == E_SUCCESS, E_SYSTEM, r, "[%s] StringUtil::StringToUtf8N It is failed", GetErrorMessage(r));
-               int ret = system_info_get_platform_string(systemKey.get(), &pStringValue);
 
-               SysTryReturnResult(NID_SYS, ret == 0, E_OBJ_NOT_FOUND, "It is failed to get system information %ls from configration file.", tizenKey.GetPointer());
+               int ret = system_info_get_platform_string(systemKey.get(), &pStringValue);
+               SysTryReturnResult(NID_SYS, ret == SYSTEM_INFO_ERROR_NONE, E_OBJ_NOT_FOUND, "It is failed to get system information %ls from configration file.", tizenKey.GetPointer());
 
                r = StringUtil::Utf8ToString(pStringValue, buildInfo);
                free(pStringValue);
@@ -730,9 +758,9 @@ _SystemInfoImpl::GetNativeApiVersion(String& nativeApiVersion)
                unique_ptr< char[] > systemKey(_StringConverter::CopyToCharArrayN(tKey));
                r = GetLastResult();
                SysTryReturn(NID_SYS, r == E_SUCCESS, E_SYSTEM, r, "[%s] StringUtil::StringToUtf8N It is failed", GetErrorMessage(r));
-               int ret = system_info_get_platform_string(systemKey.get(), &pStringValue);
 
-               SysTryReturnResult(NID_SYS, ret == 0, E_OBJ_NOT_FOUND, "It is failed to get system information %ls from configration file.", tizenKey.GetPointer());
+               int ret = system_info_get_platform_string(systemKey.get(), &pStringValue);
+               SysTryReturnResult(NID_SYS, ret == SYSTEM_INFO_ERROR_NONE, E_OBJ_NOT_FOUND, "It is failed to get system information %ls from configration file.", tizenKey.GetPointer());
 
                r = StringUtil::Utf8ToString(pStringValue, nativeApiVersion);
                free(pStringValue);
@@ -760,9 +788,9 @@ _SystemInfoImpl::GetWebApiVersion(String& webApiVersion)
                unique_ptr< char[] > systemKey(_StringConverter::CopyToCharArrayN(tKey));
                r = GetLastResult();
                SysTryReturn(NID_SYS, r == E_SUCCESS, E_SYSTEM, r, "[%s] StringUtil::StringToUtf8N It is failed", GetErrorMessage(r));
-               int ret = system_info_get_platform_string(systemKey.get(), &pStringValue);
 
-               SysTryReturnResult(NID_SYS, ret == 0, E_OBJ_NOT_FOUND, "It is failed to get system information %ls from configration file.", tizenKey.GetPointer());
+               int ret = system_info_get_platform_string(systemKey.get(), &pStringValue);
+               SysTryReturnResult(NID_SYS, ret == SYSTEM_INFO_ERROR_NONE, E_OBJ_NOT_FOUND, "It is failed to get system information %ls from configration file.", tizenKey.GetPointer());
 
                r = StringUtil::Utf8ToString(pStringValue, webApiVersion);
                free(pStringValue);
@@ -837,8 +865,6 @@ _SystemInfoImpl::GetImei(String& imei)
        SysTryReturn(NID_SYS, *pResult == _SYSTEM_RESULT_OK, r = E_SYSTEM, r, "It is failed to get IMEI value.");
 
        imei = *pImei;
-
-CATCH:
        responseMessage.RemoveAll(true);
 
        return r;
@@ -855,7 +881,7 @@ _SystemInfoImpl::GetFromRegistry(const String& key, String& value)
        SysTryReturnResult(NID_SYS, r == E_SUCCESS , r, " RegistryImpl construct is failed");
 
        r = _reg.GetValue(_SYSTEM_INFO_SESSION, key, valStr);
-       SysTryReturnResult(NID_SYS, r == E_SUCCESS , r, " Registry GetValue is failed");
+       SysTryReturnResult(NID_SYS, r == E_SUCCESS , r, " Registry GetValue is failed, %ls", key.GetPointer());
 
        if(valStr == L"true" || valStr == L"false")
        {
@@ -880,8 +906,7 @@ _SystemInfoImpl::GetFromRegistry(const String& key, int& value)
        SysTryReturnResult(NID_SYS, r == E_SUCCESS, r, " RegistryImpl construct is failed");
 
        r = _reg.GetValue(_SYSTEM_INFO_SESSION, key, valStr);
-       SysTryReturnResult(NID_SYS, r == E_SUCCESS, r, " Registry GetValue is failed");
-       SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, " Registry GetValue is failed");
+       SysTryReturnResult(NID_SYS, r == E_SUCCESS, r, " Registry GetValue is failed, %ls", key.GetPointer());
        r = Integer::Parse(valStr, value);
        SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_OBJ_NOT_FOUND, " Integer::Parse() is failed");
        return E_SUCCESS;
@@ -898,8 +923,7 @@ _SystemInfoImpl::GetFromRegistry(const String& key, bool& value)
        SysTryReturnResult(NID_SYS, r == E_SUCCESS, r, " RegistryImpl construct is failed");
 
        r = _reg.GetValue(_SYSTEM_INFO_SESSION, key, valStr);
-       SysTryReturnResult(NID_SYS, r == E_SUCCESS, r, " Registry GetValue is failed");
-       SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, " Registry GetValue is failed");
+       SysTryReturnResult(NID_SYS, r == E_SUCCESS, r, " Registry GetValue is failed, [%ls]", key.GetPointer());
        if(valStr == L"true")
        {
                value = true;