namespace systeminfo {
namespace {
+const std::string MEMORY_STATE_NORMAL = "NORMAL";
+const std::string MEMORY_STATE_WARNING = "WARNING";
const int MEMORY_TO_BYTE = 1024;
}
using namespace common;
const char* ipv6_address, void* event_ptr);
static void OnCellularNetworkValueChangedCb(keynode_t *node, void *event_ptr);
static void OnPeripheralChangedCb(keynode_t* node, void* event_ptr);
+static void OnMemoryChangedCb(keynode_t* node, void* event_ptr);
static void SimCphsValueCallback(TapiHandle *handle, int result, void *data, void *user_data);
static void SimMsisdnValueCallback(TapiHandle *handle, int result, void *data, void *user_data);
void UnregisterCellularNetworkListener();
void RegisterPeripheralListener(const SysteminfoUtilsCallback& callback);
void UnregisterPeripheralListener();
+ void RegisterMemoryListener(const SysteminfoUtilsCallback& callback);
+ void UnregisterMemoryListener();
void SetCpuInfoLoad(double load);
void SetAvailableCapacityInternal(unsigned long long capacity);
const char* ipv6_address, void* event_ptr);
void OnCellularNetworkValueCallback(keynode_t *node, void *event_ptr);
void OnPeripheralChangedCallback(keynode_t* node, void* event_ptr);
+ void OnMemoryChangedCallback(keynode_t* node, void* event_ptr);
TapiHandle* GetTapiHandle();
TapiHandle** GetTapiHandles();
SysteminfoUtilsCallback m_wifi_network_listener;
SysteminfoUtilsCallback m_cellular_network_listener;
SysteminfoUtilsCallback m_peripheral_listener;
+ SysteminfoUtilsCallback m_memory_listener;
TapiHandle *m_tapi_handles[TAPI_HANDLE_MAX+1];
//for ip change callback
m_wifi_network_listener(nullptr),
m_cellular_network_listener(nullptr),
m_peripheral_listener(nullptr),
+ m_memory_listener(nullptr),
m_connection_handle(nullptr)
{
LOGD("Entered");
UnregisterWifiNetworkListener();
UnregisterCellularNetworkListener();
UnregisterPeripheralListener();
+ UnregisterMemoryListener();
unsigned int i = 0;
while(m_tapi_handles[i]) {
}
}
+void SystemInfoListeners::RegisterMemoryListener(const SysteminfoUtilsCallback& callback)
+{
+ if (nullptr == m_memory_listener) {
+ try {
+ int value = 0;
+ if (-1 != vconf_get_int(VCONFKEY_SYSMAN_LOW_MEMORY, &value)) {
+ RegisterVconfCallback(VCONFKEY_SYSMAN_LOW_MEMORY, OnMemoryChangedCb);
+ }
+ } catch (const PlatformException& e) {
+ // empty on purpose
+ }
+ LOGD("Added callback for MEMORY");
+ m_memory_listener = callback;
+ }
+}
+
+void SystemInfoListeners::UnregisterMemoryListener()
+{
+ if (nullptr != m_memory_listener) {
+ try {
+ UnregisterVconfCallback(VCONFKEY_SYSMAN_LOW_MEMORY, OnMemoryChangedCb);
+ } catch (const PlatformException& e) {
+ // empty on purpose
+ }
+ LOGD("Removed callback for MEMORY");
+ m_memory_listener = nullptr;
+ }
+}
+
void SystemInfoListeners::SetCpuInfoLoad(double load)
{
m_cpu_load = load;
}
}
+void SystemInfoListeners::OnMemoryChangedCallback(keynode_t* /*node*/, void* /*event_ptr*/)
+{
+ if (nullptr != m_memory_listener) {
+ m_memory_listener();
+ }
+}
+
void SystemInfoListeners::InitTapiHandles()
{
LOGD("Entered");
system_info_listeners.OnPeripheralChangedCallback(node, event_ptr);
}
+void OnMemoryChangedCb(keynode_t* node, void* event_ptr)
+{
+ LOGD("");
+ system_info_listeners.OnMemoryChangedCallback(node, event_ptr);
+}
+
/////////////////////////// SysteminfoUtils ////////////////////////////////
static bool GetValueBool(const char *key) {
"DISPLAY" == property || "DEVICE_ORIENTATION" == property ||
"BUILD" == property || "LOCALE" == property || "NETWORK" == property ||
"WIFI_NETWORK" == property || "CELLULAR_NETWORK" == property ||
- "PERIPHERAL" == property) {
+ "PERIPHERAL" == property || "MEMORY" == property) {
count = DEFAULT_PROPERTY_COUNT;
} else if ("SIM" == property) {
count = sim_mgr.GetSimCount(system_info_listeners.GetTapiHandles());
ReportSim(result_obj, i);
} else if ("PERIPHERAL" == property) {
ReportPeripheral(result_obj);
+ } else if ("MEMORY" == property) {
+ ReportMemory(result_obj);
} else {
LOGD("Property with given id is not supported");
throw NotSupportedException("Property with given id is not supported");
out.insert(std::make_pair(kVideoOutputString, false));
}
+void SysteminfoUtils::ReportMemory(picojson::object& out) {
+ std::string state = MEMORY_STATE_NORMAL;
+ try {
+ int status = GetVconfInt(VCONFKEY_SYSMAN_LOW_MEMORY);
+ switch (status) {
+ case VCONFKEY_SYSMAN_LOW_MEMORY_SOFT_WARNING:
+ case VCONFKEY_SYSMAN_LOW_MEMORY_HARD_WARNING:
+ state = MEMORY_STATE_WARNING;
+ break;
+ case VCONFKEY_SYSMAN_LOW_MEMORY_NORMAL:
+ default:
+ state = MEMORY_STATE_NORMAL;
+ }
+ } catch (const PlatformException& e) {
+ // empty on purpose
+ }
+
+ out.insert(std::make_pair("state", state));
+}
+
static void CreateStorageInfo(const std::string& type, struct statfs& fs, picojson::object* out) {
out->insert(std::make_pair("type", type));
out->insert(std::make_pair("capacity", std::to_string(
system_info_listeners.UnregisterPeripheralListener();
}
+void SysteminfoUtils::RegisterMemoryListener(const SysteminfoUtilsCallback& callback)
+{
+ system_info_listeners.RegisterMemoryListener(callback);
+}
+
+void SysteminfoUtils::UnregisterMemoryListener()
+{
+ system_info_listeners.UnregisterMemoryListener();
+}
+
+
static bool CheckStringCapability(const std::string& key, std::string* value)
{
LOGD("Entered CheckStringCapability");
WIFI_NETWORK : 'WIFI_NETWORK',
CELLULAR_NETWORK : 'CELLULAR_NETWORK',
SIM : 'SIM',
- PERIPHERAL : 'PERIPHERAL'
+ PERIPHERAL : 'PERIPHERAL',
+ MEMORY : 'MEMORY'
};
//class SystemInfoDeviceCapability ////////////////////////////////////////////////////
});
}
+//class SystemInfoMemory ////////////////////////////////////////////////////
+function SystemInfoMemory(data) {
+ Object.defineProperties(this, {
+ state : {value: data.state, writable: false, enumerable: true}
+ });
+}
+
//class SystemInfo ////////////////////////////////////////////////////
var SystemInfo = function() {
};
var _cellularNetworkStr = SystemInfoPropertyId.CELLULAR_NETWORK;
var _simStr = SystemInfoPropertyId.SIM;
var _peripheralStr = SystemInfoPropertyId.PERIPHERAL;
+var _memoryStr = SystemInfoPropertyId.MEMORY;
var _nextId = 0;
}
}
+function _systeminfoMemoryListenerCallback(event) {
+ var property = _memoryStr;
+ var eventObj = JSON.parse(event);
+ var callbacks = _propertyContainer[property].callbacks;
+
+ for (var watchId in callbacks) {
+ if (callbacks.hasOwnProperty(watchId)) {
+ var listener = callbacks[watchId];
+ var propObj = !listener.isArrayType ?
+ _createProperty(property, eventObj.result.array[0]) :
+ _createPropertyArray(property, eventObj.result);
+ callbacks[watchId].callback(propObj);
+ }
+ }
+}
+
var _propertyContainer = {
'BATTERY' : {
callbacks : {},
constructor : SystemInfoPeripheral,
broadcastFunction : _systeminfoPeripheralListenerCallback,
signalLabel : 'SystemInfoPeripheralChangeBroadcast'
+ },
+ 'MEMORY' : {
+ callbacks : {},
+ constructor : SystemInfoMemory,
+ broadcastFunction : _systeminfoMemoryListenerCallback,
+ signalLabel : 'SystemInfoMemoryChangeBroadcast'
}
};
static void OnWifiNetworkChangedCallback();
static void OnCellularNetworkChangedCallback();
static void OnPeripheralChangedCallback();
+static void OnMemoryChangedCallback();
namespace {
const std::string kPropertyIdBattery = "BATTERY";
const std::string kPropertyIdCellularNetwork = "CELLULAR_NETWORK";
const std::string kPropertyIdSim = "SIM";
const std::string kPropertyIdPeripheral = "PERIPHERAL";
+const std::string kPropertyIdMemory= "MEMORY";
}
SysteminfoInstance& SysteminfoInstance::getInstance() {
LoggerW("SIM listener is not supported by Core API - ignoring");
} else if (property_name == kPropertyIdPeripheral) {
SysteminfoUtils::RegisterPeripheralListener(OnPeripheralChangedCallback);
+ } else if (property_name == kPropertyIdMemory) {
+ SysteminfoUtils::RegisterMemoryListener(OnMemoryChangedCallback);
} else {
LoggerE("Not supported property");
throw InvalidValuesException("Not supported property");
LoggerW("SIM listener is not supported by Core API - ignoring");
} else if (property_name == kPropertyIdPeripheral) {
SysteminfoUtils::UnregisterPeripheralListener();
+ } else if (property_name == kPropertyIdMemory) {
+ SysteminfoUtils::UnregisterMemoryListener();
} else {
LoggerE("Not supported property");
throw InvalidValuesException("Not supported property");
SysteminfoInstance::getInstance().PostMessage(response->serialize().c_str());
}
+void OnMemoryChangedCallback()
+{
+ LoggerD("");
+ const std::shared_ptr<picojson::value>& response =
+ std::shared_ptr<picojson::value>(new picojson::value(picojson::object()));
+ response->get<picojson::object>()["propertyId"] = picojson::value(kPropertyIdMemory);
+
+ picojson::value result = SysteminfoUtils::GetPropertyValue(kPropertyIdMemory, true);
+ ReportSuccess(result,response->get<picojson::object>());
+
+ SysteminfoInstance::getInstance().PostMessage(response->serialize().c_str());
+}
+
} // namespace systeminfo
} // namespace extension