trigger: add the skeleton of the class ContextItem, which is used to verify event... 90/142190/3
authorMu-Woong Lee <muwoong.lee@samsung.com>
Thu, 3 Aug 2017 03:58:38 +0000 (12:58 +0900)
committerMu-Woong Lee <muwoong.lee@samsung.com>
Thu, 3 Aug 2017 07:30:07 +0000 (16:30 +0900)
Change-Id: I165bcaf612241c31699abb043249a180ab1f957a
Signed-off-by: Mu-Woong Lee <muwoong.lee@samsung.com>
src/trigger/ContextItem.cpp [new file with mode: 0644]
src/trigger/ContextItem.h [new file with mode: 0644]

diff --git a/src/trigger/ContextItem.cpp b/src/trigger/ContextItem.cpp
new file mode 100644 (file)
index 0000000..9568cae
--- /dev/null
@@ -0,0 +1,200 @@
+/*
+ * Copyright (c) 2017 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <map>
+#include <job_scheduler_types_internal.h>
+#include <context_trigger.h>
+#include "PrivilegeChecker.h"
+#include "ContextItem.h"
+
+#define URI(x)      CTX_SCHED_URI_##x
+#define NAME(x)     CTX_SCHED_ATTR_NAME_##x
+#define VALUE(x)    CTX_SCHED_ATTR_VALUE_##x
+
+ContextItem::ContextItem(int cx) :
+       __context(cx)
+{
+}
+
+bool ContextItem::allowed()
+{
+       return PrivilegeChecker::hasPrivilege(__getPrivilege());
+}
+
+bool ContextItem::isValid(ctx_sched_job_context_h jobContext)
+{
+       //TODO: Check if the context has all mandatory fields
+       return true;
+}
+
+bool ContextItem::isValid(const std::string& attribute)
+{
+       //TODO: Check if the attribute is valid for this __context
+       return true;
+}
+
+bool ContextItem::isValid(const std::string& attribute, int value)
+{
+       //TODO: Check if the attribute & value pair is valid for this __context
+       return true;
+}
+
+bool ContextItem::isValid(const std::string& attribute, const std::string& value)
+{
+       //TODO: Check if the attribute & value pair is valid for this __context
+       return true;
+}
+
+EventItem::EventItem(int event) :
+       ContextItem(event)
+{
+}
+
+bool EventItem::deprecated()
+{
+       switch (__context) {
+       case CONTEXT_TRIGGER_EVENT_TIME:
+       case CONTEXT_TRIGGER_EVENT_POWER_SAVING_MODE:
+       case CONTEXT_TRIGGER_EVENT_CALL:
+       case CONTEXT_TRIGGER_EVENT_EMAIL:
+       case CONTEXT_TRIGGER_EVENT_MESSAGE:
+               return true;
+       default:
+               return false;
+       }
+}
+
+const char* EventItem::getUri()
+{
+       static const std::map<int, const char*> uriMap = {
+               {CONTEXT_TRIGGER_EVENT_TIME,      CTX_SCHED_URI_PREFIX "event/time"},
+               {CONTEXT_TRIGGER_EVENT_BATTERY,             URI(BATTERY)},
+               {CONTEXT_TRIGGER_EVENT_CHARGER,             URI(CHARGER)},
+               {CONTEXT_TRIGGER_EVENT_GPS,                 URI(GPS)},
+               {CONTEXT_TRIGGER_EVENT_HEADPHONE,           URI(EARJACK)},
+               {CONTEXT_TRIGGER_EVENT_POWER_SAVING_MODE,   URI(POWERSAVE)},
+               {CONTEXT_TRIGGER_EVENT_USB,                 URI(USB)},
+               {CONTEXT_TRIGGER_EVENT_WIFI,                URI(WIFI)},
+               {CONTEXT_TRIGGER_EVENT_CALL,      CTX_SCHED_URI_PREFIX "state/call"},
+               {CONTEXT_TRIGGER_EVENT_EMAIL,     CTX_SCHED_URI_PREFIX "event/email"},
+               {CONTEXT_TRIGGER_EVENT_MESSAGE,   CTX_SCHED_URI_PREFIX "event/message"},
+               {CONTEXT_TRIGGER_EVENT_CONTACTS,            URI(CONTACTS_DB)},
+               {CONTEXT_TRIGGER_EVENT_ACTIVITY_STATIONARY, URI(STATIONARY)},
+               {CONTEXT_TRIGGER_EVENT_ACTIVITY_WALKING,    URI(WALKING)},
+               {CONTEXT_TRIGGER_EVENT_ACTIVITY_RUNNING,    URI(RUNNING)},
+               {CONTEXT_TRIGGER_EVENT_ACTIVITY_IN_VEHICLE, URI(IN_VEHICLE)},
+               {CONTEXT_TRIGGER_EVENT_PLACE,               URI(GEOFENCE)}
+       };
+
+       auto it = uriMap.find(__context);
+
+       if (it == uriMap.end())
+               return NULL;
+
+       return it->second;
+}
+
+const char* EventItem::__getPrivilege()
+{
+       if (CONTEXT_TRIGGER_EVENT_TIME == __context)
+               return "http://tizen.org/privilege/alarm.set";
+
+       if (CONTEXT_TRIGGER_EVENT_WIFI == __context)
+               return "http://tizen.org/privilege/network.get";
+
+       if (CONTEXT_TRIGGER_EVENT_CALL == __context)
+               return "http://tizen.org/privilege/telephony";
+
+       if (CONTEXT_TRIGGER_EVENT_MESSAGE == __context)
+               return "http://tizen.org/privilege/message.read";
+
+       if (CONTEXT_TRIGGER_EVENT_CONTACTS == __context)
+               return "http://tizen.org/privilege/contact.read";
+
+       if (CONTEXT_TRIGGER_EVENT_PLACE == __context)
+               return "http://tizen.org/privilege/location";
+
+       return NULL;
+}
+
+ConditionItem::ConditionItem(int cond) :
+       ContextItem(cond)
+{
+}
+
+bool ConditionItem::deprecated()
+{
+       switch (__context) {
+       case CONTEXT_TRIGGER_CONDITION_POWER_SAVING_MODE:
+       case CONTEXT_TRIGGER_CONDITION_CALL:
+       case CONTEXT_TRIGGER_CONDITION_APP_USE_FREQUENCY:
+       case CONTEXT_TRIGGER_CONDITION_COMMUNICATION_FREQUENCY:
+       case CONTEXT_TRIGGER_CONDITION_MUSIC_PLAYBACK_FREQUENCY:
+       case CONTEXT_TRIGGER_CONDITION_VIDEO_PLAYBACK_FREQUENCY:
+               return true;
+       default:
+               return false;
+       }
+}
+
+const char* ConditionItem::getUri()
+{
+       static const std::map<int, const char*> uriMap = {
+               {CONTEXT_TRIGGER_CONDITION_TIME,              URI(TIME)},
+               {CONTEXT_TRIGGER_CONDITION_BATTERY,           URI(BATTERY)},
+               {CONTEXT_TRIGGER_CONDITION_CHARGER,           URI(CHARGER)},
+               {CONTEXT_TRIGGER_CONDITION_GPS,               URI(GPS)},
+               {CONTEXT_TRIGGER_CONDITION_HEADPHONE,         URI(EARJACK)},
+               {CONTEXT_TRIGGER_CONDITION_POWER_SAVING_MODE, URI(POWERSAVE)},
+               {CONTEXT_TRIGGER_CONDITION_USB,               URI(USB)},
+               {CONTEXT_TRIGGER_CONDITION_WIFI,              URI(WIFI)},
+               {CONTEXT_TRIGGER_CONDITION_CALL,                     CTX_SCHED_URI_PREFIX "state/call"},
+               {CONTEXT_TRIGGER_CONDITION_APP_USE_FREQUENCY,        CTX_SCHED_URI_PREFIX "stats/app"},
+               {CONTEXT_TRIGGER_CONDITION_COMMUNICATION_FREQUENCY,  CTX_SCHED_URI_PREFIX "stats/comm"},
+               {CONTEXT_TRIGGER_CONDITION_MUSIC_PLAYBACK_FREQUENCY, CTX_SCHED_URI_PREFIX "stats/music"},
+               {CONTEXT_TRIGGER_CONDITION_VIDEO_PLAYBACK_FREQUENCY, CTX_SCHED_URI_PREFIX "stats/video"}
+       };
+
+       auto it = uriMap.find(__context);
+
+       if (it == uriMap.end())
+               return NULL;
+
+       return it->second;
+}
+
+const char* ConditionItem::__getPrivilege()
+{
+       if (CONTEXT_TRIGGER_CONDITION_WIFI == __context)
+               return "http://tizen.org/privilege/network.get";
+
+       if (CONTEXT_TRIGGER_CONDITION_CALL == __context)
+               return "http://tizen.org/privilege/telephony";
+
+       if (CONTEXT_TRIGGER_CONDITION_APP_USE_FREQUENCY == __context)
+               return "http://tizen.org/privilege/apphistory.read";
+
+       if (CONTEXT_TRIGGER_CONDITION_COMMUNICATION_FREQUENCY == __context)
+               return "http://tizen.org/privilege/callhistory.read";
+
+       if (CONTEXT_TRIGGER_CONDITION_MUSIC_PLAYBACK_FREQUENCY == __context)
+               return "http://tizen.org/privilege/mediahistory.read";
+
+       if (CONTEXT_TRIGGER_CONDITION_VIDEO_PLAYBACK_FREQUENCY == __context)
+               return "http://tizen.org/privilege/mediahistory.read";
+
+       return NULL;
+}
diff --git a/src/trigger/ContextItem.h b/src/trigger/ContextItem.h
new file mode 100644 (file)
index 0000000..088d6de
--- /dev/null
@@ -0,0 +1,71 @@
+/*
+ * Copyright (c) 2017 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __CONTEXT_TRIGGER_CONTEXT_ITEM_H__
+#define __CONTEXT_TRIGGER_CONTEXT_ITEM_H__
+
+#include <ContextTypes.h>
+#include <job_scheduler_internal.h>
+
+
+class ContextItem {
+public:
+       virtual ~ContextItem() {}
+
+       virtual bool deprecated() = 0;
+       virtual const char* getUri() = 0;
+
+       bool allowed();
+       bool isValid(ctx_sched_job_context_h jobContext);
+       bool isValid(const std::string& attribute);
+       bool isValid(const std::string& attribute, int value);
+       bool isValid(const std::string& attribute, const std::string& value);
+
+protected:
+       ContextItem(int cx);
+
+       int __context;
+
+private:
+       virtual const char* __getPrivilege() = 0;
+};
+
+
+class EventItem : public ContextItem {
+public:
+       EventItem(int event);
+
+       bool deprecated();
+       const char* getUri();
+
+private:
+       const char* __getPrivilege();
+};
+
+
+class ConditionItem : public ContextItem {
+public:
+       ConditionItem(int cond);
+
+       bool deprecated();
+       const char* getUri();
+
+private:
+       const char* __getPrivilege();
+};
+
+
+#endif /* __CONTEXT_TRIGGER_CONTEXT_ITEM_H__ */