#ifndef __CAPI_CONTEXT_JOB_SCHEDULER_TYPES_INTERNAL_H__
#define __CAPI_CONTEXT_JOB_SCHEDULER_TYPES_INTERNAL_H__
-
+/* URIs */
#define CTX_SCHED_URI_PREFIX "http://tizen.org/context/"
#define CTX_SCHED_URI_BATTERY CTX_SCHED_URI_PREFIX "state/battery"
#define CTX_SCHED_URI_CHARGER CTX_SCHED_URI_PREFIX "state/charger"
#define CTX_SCHED_URI_GPS CTX_SCHED_URI_PREFIX "state/gps"
-#define CTX_SCHED_URI_NPS CTX_SCHED_URI_PREFIX "state/nps"
#define CTX_SCHED_URI_EARJACK CTX_SCHED_URI_PREFIX "state/earjack"
#define CTX_SCHED_URI_USB CTX_SCHED_URI_PREFIX "state/usb"
#define CTX_SCHED_URI_WIFI CTX_SCHED_URI_PREFIX "state/wifi"
#define CTX_SCHED_URI_CALENDAR_DB CTX_SCHED_URI_PREFIX "event/calendar_db"
#define CTX_SCHED_URI_PLACE_DB CTX_SCHED_URI_PREFIX "event/place_db"
+/* Attribute names */
+#define CTX_SCHED_ATTR_NAME_STATE "state"
+
+/* Attribute values */
+#define CTX_SCHED_ATTR_VALUE_UNDEFINED "undefined"
+#define CTX_SCHED_ATTR_VALUE_DISABLED "disabled"
+#define CTX_SCHED_ATTR_VALUE_SEARCHING "searching"
+#define CTX_SCHED_ATTR_VALUE_CONNECTED "connected"
#endif
--- /dev/null
+/*
+ * 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 <system_info.h>
+#include <runtime_info.h>
+
+#include <ContextTypes.h>
+#include <job_scheduler_types_internal.h>
+#include "../ContextPublisher.h"
+#include "../IContextObserver.h"
+
+using namespace ctx;
+
+namespace {
+ class GpsState : public ContextPublisher {
+ public:
+ GpsState(uid_t uid);
+ ~GpsState();
+
+ const char* getUri() const;
+
+ protected:
+ void read();
+ void subscribe();
+ void unsubscribe();
+
+ private:
+ void __update(int state);
+
+ static void __changedCb(runtime_info_key_e infoKey, void* userData);
+ };
+}
+
+REGISTER_PUBLISHER(CTX_SCHED_URI_GPS, GpsState)
+
+static const char* __state_to_string(int state)
+{
+ if (state == RUNTIME_INFO_GPS_STATUS_DISABLED)
+ return CTX_SCHED_ATTR_VALUE_DISABLED;
+
+ if (state == RUNTIME_INFO_GPS_STATUS_SEARCHING)
+ return CTX_SCHED_ATTR_VALUE_SEARCHING;
+
+ if (state == RUNTIME_INFO_GPS_STATUS_CONNECTED)
+ return CTX_SCHED_ATTR_VALUE_CONNECTED;
+
+ return CTX_SCHED_ATTR_VALUE_UNDEFINED;
+}
+
+GpsState::GpsState(uid_t uid)
+{
+ bool supported = false;
+ system_info_get_platform_bool("tizen.org/feature/location.gps", &supported);
+ IF_FAIL_THROW(supported, E_SUPPORT);
+}
+
+GpsState::~GpsState()
+{
+ unsubscribe();
+}
+
+const char* GpsState::getUri() const
+{
+ return CTX_SCHED_URI_GPS;
+}
+
+void GpsState::read()
+{
+ int state = RUNTIME_INFO_GPS_STATUS_DISABLED;
+ int err = runtime_info_get_value_int(RUNTIME_INFO_KEY_GPS_STATUS, &state);
+
+ if (IS_FAILED(err))
+ _E("Getting runtime information failed (%d)", err);
+
+ __data[CTX_SCHED_ATTR_NAME_STATE] = __state_to_string(state);
+}
+
+void GpsState::subscribe()
+{
+ int err = runtime_info_set_changed_cb(RUNTIME_INFO_KEY_GPS_STATUS, __changedCb, this);
+
+ if (IS_FAILED(err))
+ _E("Setting changed callback failed (%d)", err);
+}
+
+void GpsState::unsubscribe()
+{
+ runtime_info_unset_changed_cb(RUNTIME_INFO_KEY_GPS_STATUS);
+}
+
+void GpsState::__update(int state)
+{
+ __data[CTX_SCHED_ATTR_NAME_STATE] = __state_to_string(state);
+ notifyObservers();
+}
+
+void GpsState::__changedCb(runtime_info_key_e infoKey, void* userData)
+{
+ int state = RUNTIME_INFO_GPS_STATUS_DISABLED;
+ int err = runtime_info_get_value_int(RUNTIME_INFO_KEY_GPS_STATUS, &state);
+
+ if (IS_FAILED(err))
+ _E("Getting runtime information failed (%d)", err);
+
+ static_cast<GpsState*>(userData)->__update(state);
+}