From b27221d6b75d0e5f9e006e551aed7c1cef38ae87 Mon Sep 17 00:00:00 2001
From: Piotr Kosko
Date: Fri, 11 Sep 2015 15:02:24 +0200
Subject: [PATCH] [Systeminfo] Added filtering of cellular network listeners
calls
[Feature] When only single-property cellular network listener is registered,
it should only react to changes of default (first) SIM card. Changes of others should be ignored.
[Verification] Code compiles without errors.
Feature was checked in chrome console and changes of second sim are ignored.
TCT passrate on web-tct_2.4_r41 is 100%.
Change-Id: I6134f84615986724488cba0ba13fc7fec84d1be9
Signed-off-by: Piotr Kosko
---
src/systeminfo/systeminfo_api.js | 8 ++++++++
src/systeminfo/systeminfo_manager.cc | 31 ++++++++++++++++++++++++++-----
src/systeminfo/systeminfo_manager.h | 6 ++++--
3 files changed, 38 insertions(+), 7 deletions(-)
diff --git a/src/systeminfo/systeminfo_api.js b/src/systeminfo/systeminfo_api.js
index babcfe0..17ce10f 100644
--- a/src/systeminfo/systeminfo_api.js
+++ b/src/systeminfo/systeminfo_api.js
@@ -21,6 +21,9 @@ var T_ = xwalk.utils.type;
var Converter_ = xwalk.utils.converter;
var native_ = new xwalk.utils.NativeManager(extension);
+// index of default property for sim-related callbacks
+var defaultListenerIndex = 0;
+
//enumeration SystemInfoPropertyId ////////////////////////////////////////////////////
var SystemInfoPropertyId = {
BATTERY : 'BATTERY',
@@ -1000,6 +1003,11 @@ function _systeminfoCellularNetworkListenerCallback(eventObj) {
for (var watchId in callbacks) {
if (callbacks.hasOwnProperty(watchId)) {
var listener = callbacks[watchId];
+ if (!listener.isArrayType && eventObj.changedPropertyIndex != defaultListenerIndex) {
+ // if this is not arrayListener, ignore events of non-default SIM
+ return;
+ }
+
var propObj = !listener.isArrayType ?
_createProperty(property, eventObj.result.array[0]) :
_createPropertyArray(property, eventObj.result);
diff --git a/src/systeminfo/systeminfo_manager.cc b/src/systeminfo/systeminfo_manager.cc
index 6da6e5a..cbee4d8 100644
--- a/src/systeminfo/systeminfo_manager.cc
+++ b/src/systeminfo/systeminfo_manager.cc
@@ -47,9 +47,12 @@ namespace {
const int kDefaultPropertyCount = 1;
const int BASE_GATHERING_INTERVAL = 100;
const double kPropertyWatcherTime = 1;
+// index of default property for sim-related callbacks
+const int kDefaultListenerIndex = 0;
const std::string kPropertyIdString = "propertyId";
const std::string kListenerIdString = "listenerId";
+const std::string kChangedPropertyIndexString = "changedPropertyIndex";
const std::string kListenerConstValue = "SysteminfoCommonListenerLabel";
const std::string kPropertyIdBattery = "BATTERY";
@@ -184,7 +187,7 @@ static void OnNetworkValueChangedCb(const char* ipv4_address,
static void OnCellularNetworkValueChangedCb(keynode_t *node, void *event_ptr) {
LoggerD("Enter");
SysteminfoManager* manager = static_cast(event_ptr);
- manager->CallListenerCallback(kPropertyIdCellularNetwork);
+ manager->CallListenerCallback(kPropertyIdCellularNetwork, kDefaultListenerIndex);
}
static void OnTapiValueChangedCb(TapiHandle *handle, const char *noti_id,
@@ -192,7 +195,9 @@ static void OnTapiValueChangedCb(TapiHandle *handle, const char *noti_id,
LoggerD("Enter");
LoggerD("Changed key: %s", noti_id);
SysteminfoManager* manager = static_cast(user_data);
- manager->CallListenerCallback(kPropertyIdCellularNetwork);
+ int index = manager->GetChangedTapiIndex(handle);
+ LoggerD("Changed SIM index is: %d", index);
+ manager->CallListenerCallback(kPropertyIdCellularNetwork, index);
}
static void OnPeripheralChangedCb(keynode_t* node, void* event_ptr) {
@@ -1244,6 +1249,17 @@ TapiHandle** SysteminfoManager::GetTapiHandles() {
return tapi_handles_;
}
+int SysteminfoManager::GetChangedTapiIndex(TapiHandle* tapi) {
+ LoggerD("Enter");
+ TapiHandle** handles = GetTapiHandles();
+ for (int i = 0; i < sim_count_; ++i) {
+ if (handles[i] == tapi) {
+ return i;
+ }
+ }
+ return -1;
+}
+
void SysteminfoManager::InitCameraTypes() {
LoggerD("Enter");
bool supported = false;
@@ -1295,19 +1311,24 @@ bool SysteminfoManager::IsListenerRegistered(const std::string& property_id) {
}
void SysteminfoManager::PostListenerResponse(const std::string& property_id,
- const picojson::value& result) {
+ const picojson::value& result,
+ int property_index) {
LoggerD("Entered");
const std::shared_ptr& response =
std::shared_ptr(new picojson::value(picojson::object()));
response->get()[kPropertyIdString] = picojson::value(property_id);
response->get()[kListenerIdString] = picojson::value(kListenerConstValue);
+ // Added pushing index of property to handle only default for signle-property listeners in js
+ response->get()[kChangedPropertyIndexString] =
+ picojson::value(static_cast(property_index));
ReportSuccess(result,response->get());
Instance::PostMessage(instance_, response->serialize().c_str());
}
-void SysteminfoManager::CallListenerCallback(const std::string& property_id) {
+void SysteminfoManager::CallListenerCallback(const std::string& property_id,
+ int property_index) {
LoggerD("Enter");
if(IsListenerRegistered(property_id)) {
LoggerD("listener for %s property is registered, calling it", property_id.c_str());
@@ -1316,7 +1337,7 @@ void SysteminfoManager::CallListenerCallback(const std::string& property_id) {
PlatformResult ret = GetPropertiesManager().GetPropertyValue(
property_id, true, &result);
if (ret.IsSuccess()) {
- PostListenerResponse(property_id, result);
+ PostListenerResponse(property_id, result, property_index);
}
} else {
LoggerD("listener for %s property is not registered, ignoring", property_id.c_str());
diff --git a/src/systeminfo/systeminfo_manager.h b/src/systeminfo/systeminfo_manager.h
index 4c85f69..298f1e8 100644
--- a/src/systeminfo/systeminfo_manager.h
+++ b/src/systeminfo/systeminfo_manager.h
@@ -57,6 +57,7 @@ class SysteminfoManager {
int GetSensorHandle();
TapiHandle* GetTapiHandle();
TapiHandle** GetTapiHandles();
+ int GetChangedTapiIndex(TapiHandle* tapi);
common::PlatformResult GetConnectionHandle(connection_h& handle);
SysteminfoInstance* GetInstance() { return instance_;};
@@ -69,11 +70,12 @@ class SysteminfoManager {
int GetCameraTypesCount();
bool IsListenerRegistered(const std::string& property_id);
- void CallListenerCallback(const std::string& property_id);
+ void CallListenerCallback(const std::string& property_id, int property_index = 0);
void CallCpuListenerCallback();
void CallStorageListenerCallback();
private:
- void PostListenerResponse(const std::string& property_id, const picojson::value& result);
+ void PostListenerResponse(const std::string& property_id, const picojson::value& result,
+ int property_index = 0);
common::PlatformResult ConnectSensor(int* result);
void DisconnectSensor(int handle_orientation);
void InitTapiHandles();
--
2.7.4