%if "%{?profile}" == "wearable"
%define appfw_feature_background_management 1
+%define tizen_feature_charger_status 1
%else
%if "%{?profile}" == "mobile"
%define appfw_feature_background_management 1
+%define tizen_feature_charger_status 0
%else
%if "%{?profile}" == "tv"
%define appfw_feature_background_management 0
+%define tizen_feature_charger_status 0
%endif
%endif
%endif
_APPFW_FEATURE_BACKGROUND_MANAGEMENT=ON
%endif
+%if 0%{?tizen_feature_charger_status}
+_TIZEN_FEATURE_CHARGER_STATUS=ON
+%endif
+
%cmake . \
-D_WITH_WAYLAND:BOOL=${_WITH_WAYLAND} \
-D_WITH_X11:BOOL=${_WITH_X11} \
-D_APPFW_FEATURE_BACKGROUND_MANAGEMENT:BOOL=${_APPFW_FEATURE_BACKGROUND_MANAGEMENT} \
+ -D_TIZEN_FEATURE_CHARGER_STATUS:BOOL=${_TIZEN_FEATURE_CHARGER_STATUS} \
-DENABLE_GTK=OFF
make %{?_smp_mflags}
void *cbdata;
int cb_set;
int sensord_started;
+#ifdef TIZEN_FEATURE_CHARGER_STATUS
+ int charger_status;
+#endif
struct ui_wm_rotate* wm_rotate;
};
rot.lock = 0;
}
+#ifdef TIZEN_FEATURE_CHARGER_STATUS
+static void __charger_status_changed_cb(keynode_t *keynode, void *user_data)
+{
+ rot.charger_status = vconf_keynode_get_int(keynode);
+ if (rot.charger_status)
+ appcore_resume_rotation_cb();
+ else
+ appcore_pause_rotation_cb();
+ _DBG("charger status(%d)", rot.charger_status);
+}
+#endif
+
+static int __connect_sensor(void)
+{
+ sensor_t sensor;
+ int handle;
+
+ sensor = sensord_get_sensor(AUTO_ROTATION_SENSOR);
+ handle = sensord_connect(sensor);
+ if (handle < 0) {
+ _ERR("Failed to connect sensor");
+ return -1;
+ }
+
+ return handle;
+}
+
EXPORT_API int appcore_set_rotation_cb(int (*cb) (void *evnet_info, enum appcore_rm, void *),
void *data)
{
else {
bool r;
int handle;
- sensor_t sensor = sensord_get_sensor(AUTO_ROTATION_SENSOR);
if (cb == NULL) {
errno = EINVAL;
return -1;
}
- handle = sensord_connect(sensor);
+ rot.callback = cb;
+ rot.cbdata = data;
+
+#ifdef TIZEN_FEATURE_CHARGER_STATUS
+ vconf_get_int(VCONFKEY_SYSMAN_CHARGER_STATUS,
+ &rot.charger_status);
+ vconf_notify_key_changed(VCONFKEY_SYSMAN_CHARGER_STATUS,
+ __charger_status_changed_cb, NULL);
+ if (!rot.charger_status) {
+ _DBG("charger status(%d)", rot.charger_status);
+ rot.handle = -1;
+ return 0;
+ }
+#endif
+
+ handle = __connect_sensor();
if (handle < 0) {
_ERR("sensord_connect failed: %d", handle);
+ rot.callback = NULL;
+ rot.cbdata = NULL;
+ rot.cb_set = 0;
return -1;
}
if (!r) {
_ERR("sensord_register_event failed");
sensord_disconnect(handle);
+ rot.callback = NULL;
+ rot.cbdata = NULL;
+ rot.cb_set = 0;
return -1;
}
-
rot.cb_set = 1;
- rot.callback = cb;
- rot.cbdata = data;
r = sensord_start(handle, 0);
if (!r) {
_retv_if(rot.callback == NULL, 0);
+#ifdef TIZEN_FEATURE_CHARGER_STATUS
+ vconf_ignore_key_changed(VCONFKEY_SYSMAN_CHARGER_STATUS,
+ __charger_status_changed_cb);
+#endif
+
__del_rotlock();
if (rot.cb_set) {
}
rot.sensord_started = 0;
}
+
+ if (rot.handle >= 0) {
+ r = sensord_disconnect(rot.handle);
+ if (!r) {
+ _ERR("Failed to disconnect sensor. err(%d)", r);
+ return -1;
+ }
+ rot.handle = -1;
+ }
}
return 0;
_retv_if(rot.callback == NULL, 0);
_DBG("[APP %d] appcore_resume_rotation_cb is called", getpid());
+ if (rot.handle < 0) {
+ r = __connect_sensor();
+ if (r < 0) {
+ _ERR("Failed to connect sensor");
+ return -1;
+ }
+ rot.handle = r;
+ }
+
if (rot.cb_set == 0) {
r = sensord_register_event(rot.handle,
AUTO_ROTATION_CHANGE_STATE_EVENT,
SENSOR_INTERVAL_NORMAL, 0, __changed_cb, rot.cbdata);
if (!r) {
_ERR("sensord_register_event failed");
+ sensord_disconnect(rot.handle);
+ rot.handle = -1;
return -1;
}
rot.cb_set = 1;
if (!r)
_ERR("sensord_unregister_event failed");
rot.cb_set = 0;
+ sensord_disconnect(rot.handle);
+ rot.handle = -1;
return -1;
}
rot.sensord_started = 1;