<?xml version="1.0" encoding="utf-8"?>
-<tizenModes xmlns="http://www.tizen.org" version="5.5">
+<tizenModes xmlns="http://www.tizen.org" version="6.0">
<mode name="btAudioConnect" type="exclusive">
<action rule="bluetooth.power">on</action>
<action rule="bluetooth.audioConnect">08:AE:D6:5E:AE:16</action>
<?xml version="1.0" encoding="utf-8"?>
-<tizenModes xmlns="http://www.tizen.org" version="5.5">
+<tizenModes xmlns="http://www.tizen.org" version="6.0">
<mode name="btOff" type="exclusive">
<action rule="bluetooth.power">off</action>
</mode>
<?xml version="1.0" encoding="utf-8"?>
-<tizenModes xmlns="http://www.tizen.org" version="5.5">
+<tizenModes xmlns="http://www.tizen.org" version="6.0">
<mode name="btOn" type="exclusive">
<action rule="bluetooth.power">on</action>
</mode>
<?xml version="1.0" encoding="utf-8"?>
-<tizenModes xmlns="http://www.tizen.org" version="5.5">
+<tizenModes xmlns="http://www.tizen.org" version="6.0">
<mode name="conflict1" type="normal">
<action ID="test" rule="test.printInt" restrict="lock">1</action>
</mode>
<?xml version="1.0" encoding="utf-8"?>
-<tizenModes xmlns="http://www.tizen.org" version="5.5">
+<tizenModes xmlns="http://www.tizen.org" version="6.0">
<mode name="conflict1" type="normal">
<action ID="test" rule="test.printInt" restrict="lock">2</action>
</mode>
<?xml version="1.0" encoding="utf-8"?>
-<tizenModes xmlns="http://www.tizen.org" version="5.5">
+<tizenModes xmlns="http://www.tizen.org" version="6.0">
<mode name="conflict3" type="exclusive">
<action ID="test" rule="test.printBool" restrict="lock">true</action>
</mode>
<?xml version="1.0" encoding="utf-8"?>
-<tizenModes xmlns="http://www.tizen.org" version="5.5">
+<tizenModes xmlns="http://www.tizen.org" version="6.0">
<mode name="ex1" type="normal">
<action ID="wifiOn" rule="wifi.power" priority="-100">on</action>
<action rule="notification.donotdisturb">on</action>
<?xml version="1.0" encoding="utf-8"?>
-<tizenModes xmlns="http://www.tizen.org" version="5.5">
+<tizenModes xmlns="http://www.tizen.org" version="6.0">
<mode name="ex2" type="exclusive">
<action ID="1" rule="vconf.db.setting.psmode" stopOnErr="true" restrict="lock" priority="-100">SETTING_PSMODE_WEARABLE</action>
<action ID="wifiOff" rule="wifi.power" restrict="lock" priority="-100">off</action>
<?xml version="1.0" encoding="utf-8"?>
-<tizenModes xmlns="http://www.tizen.org" version="5.5">
+<tizenModes xmlns="http://www.tizen.org" version="6.0">
<mode name="powerSave" type="exclusive">
<action rule="vconf.db.setting.psmode">SETTING_PSMODE_WEARABLE_ENHANCED</action>
<action rule="vconf.db.bluetooth.status">VCONFKEY_BT_STATUS_OFF</action>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<tizenModes xmlns="http://www.tizen.org" version="6.0">
+ <mode name="waterlock" type="exclusive">
+ <action rule="bluetooth.power">off</action>
+ <action ID="wifiOff" rule="wifi.power" restrict="lock" priority="-100">off</action>
+ <action ID="1" rule="vconf.db.setting.psmode" restrict="lock" priority="-100">SETTING_PSMODE_WEARABLE_ENHANCED</action>
+ <undo ID="2" rule="vconf.db.setting.psmode" restrict="lock" priority="-100">SETTING_PSMODE_WEARABLE</undo>
+ <undo ID="3" rule="media.player">/opt/usr/data/settings/Alarms/Alarms_on_call.ogg</undo>
+ </mode>
+</tizenModes>
<?xml version="1.0" encoding="utf-8"?>
-<tizenModes xmlns="http://www.tizen.org" version="5.5">
+<tizenModes xmlns="http://www.tizen.org" version="6.0">
<mode name="wifiOn" type="exclusive">
<action rule="wifi.power">on</action>
</mode>
<?xml version="1.0" encoding="UTF-8"?>
-<tizenModes xmlns="http://www.tizen.org" version="5.5">
+<tizenModes xmlns="http://www.tizen.org" version="6.0">
<actionRule>
- <rule name="sensord.changeAccuracy" type="int" since="5.5" plugin="sensor-fw">
+ <rule name="sensord.changeAccuracy" type="int" since="6.0" plugin="sensor-fw">
<conflict>sensord.exactness</conflict>
<desc>Sensor Accuracy</desc>
<domain>System</domain>
</rule>
- <rule name="sensord.exactness" type="int" since="5.5" plugin="sensor-fw">
+ <rule name="sensord.exactness" type="int" since="6.0" plugin="sensor-fw">
<conflict>sensord.changeAccuracy</conflict>
<desc>Sensor Exactness</desc>
<domain>System</domain>
</rule>
- <rule name="browser.url" type="string" since="5.5" plugin="web">
+ <rule name="browser.url" type="string" since="6.0" plugin="web">
<desc>browser</desc>
<domain>Web Framework</domain>
</rule>
- <rule name="display.nightLight" type="int" since="5.5" plugin="display">
+ <rule name="display.nightLight" type="int" since="6.0" plugin="display">
<conflict>display.autoLight</conflict>
<desc>It makes the screen color warmer.</desc>
<domain>System</domain>
</rule>
- <rule name="test.printInt" type="int" since="5.5" plugin="test">
+ <rule name="test.printInt" type="int" since="6.0" plugin="test">
<desc>It prints integerv value</desc>
<domain>System</domain>
</rule>
- <rule name="test.printBool" type="bool" since="5.5" plugin="test">
+ <rule name="test.printBool" type="bool" since="6.0" plugin="test">
<desc>It prints boolean value</desc>
<domain>System</domain>
</rule>
<?xml version="1.0" encoding="UTF-8"?>
-<tizenModes xmlns="http://www.tizen.org" version="5.5">
+<tizenModes xmlns="http://www.tizen.org" version="6.0">
<actionRule>
- <rule name="sensord.changeAccuracy" type="int" since="5.5" plugin="sensor-fw">
+ <rule name="sensord.changeAccuracy" type="int" since="6.0" plugin="sensor-fw">
<conflict>sensord.exactness</conflict>
<desc>Sensor Accuracy</desc>
<domain>System</domain>
</rule>
- <rule name="sensord.exactness" type="int" since="5.5" plugin="sensor-fw">
+ <rule name="sensord.exactness" type="int" since="6.0" plugin="sensor-fw">
<conflict>sensord.changeAccuracy</conflict>
<desc>Sensor Exactness</desc>
<domain>System</domain>
</rule>
- <rule name="browser.url" type="string" since="5.5" plugin="web">
+ <rule name="browser.url" type="string" since="6.0" plugin="web">
<desc>browser</desc>
<domain>Web Framework</domain>
</rule>
- <rule name="display.nightLight" type="int" since="5.5" plugin="display">
+ <rule name="display.nightLight" type="int" since="6.0" plugin="display">
<conflict>display.autoLight</conflict>
<desc>It makes the screen color warmer.</desc>
<domain>System</domain>
</rule>
- <rule name="test.printInt" type="int" since="5.5" plugin="test">
+ <rule name="test.printInt" type="int" since="6.0" plugin="test">
<desc>It prints integerv value</desc>
<domain>System</domain>
</rule>
- <rule name="test.printBool" type="bool" since="5.5" plugin="test">
+ <rule name="test.printBool" type="bool" since="6.0" plugin="test">
<desc>It prints boolean value</desc>
<domain>System</domain>
</rule>
<xs:element maxOccurs="unbounded" name="action">
<xs:complexType>
<xs:simpleContent>
- <xs:extension base="o:valueT">
- <xs:attribute name="ID" type="xs:string" use="optional" />
- <xs:attribute name="rule" type="xs:string" use="required" />
- <xs:attribute name="stopOnErr" type="xs:boolean" use="optional" />
- <xs:attribute name="restrict" use="optional">
- <xs:simpleType>
- <xs:restriction base="xs:string">
- <xs:enumeration value="none"/>
- <xs:enumeration value="lock"/>
- </xs:restriction>
- </xs:simpleType>
- </xs:attribute>
- <xs:attribute name="priority" type="xs:byte" use="optional" />
- <xs:attribute name="before" type="xs:string" use="optional" />
- <xs:attribute name="after" type="xs:string" use="optional" />
- </xs:extension>
+ <xs:extension base="o:actionT"/>
+ </xs:simpleContent>
+ </xs:complexType>
+ </xs:element>
+ <xs:element minOccurs="0" maxOccurs="unbounded" name="undo">
+ <xs:complexType>
+ <xs:simpleContent>
+ <xs:extension base="o:actionT"/>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:attribute name="version" type="o:versionT" use="required" />
</xs:complexType>
</xs:element>
+ <xs:complexType name="actionT">
+ <xs:simpleContent>
+ <xs:extension base="o:valueT">
+ <xs:attribute name="ID" type="xs:string" use="optional" />
+ <xs:attribute name="rule" type="xs:string" use="required" />
+ <xs:attribute name="stopOnErr" type="xs:boolean" use="optional" />
+ <xs:attribute name="restrict" use="optional">
+ <xs:simpleType>
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="none"/>
+ <xs:enumeration value="lock"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="priority" type="xs:byte" use="optional" />
+ <xs:attribute name="before" type="xs:string" use="optional" />
+ <xs:attribute name="after" type="xs:string" use="optional" />
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
<xs:simpleType name="valueT">
<xs:restriction base="xs:string">
<xs:pattern value="\S*"/>
actionList.push_back(std::shared_ptr<Action>(action));
}
+void Mode::addUndo(Action *action)
+{
+ undoList.push_back(std::shared_ptr<Action>(action));
+}
+
void Mode::setName(const std::string &data)
{
name = data;
std::list<std::shared_ptr<Action>>::iterator it;
for (it = actionList.begin(); it != actionList.end(); it++)
(*it)->undo();
+
+ for (it = undoList.begin(); it != undoList.end(); it++)
+ (*it)->applyOneShot();
}
std::list<std::shared_ptr<Action>> Mode::getActionList() const
{
return actionList;
}
+
+std::list<std::shared_ptr<Action>> Mode::getUndoList() const
+{
+ return undoList;
+}
void addAction(Action *action);
std::list<std::shared_ptr<Action>> getActionList() const;
+
+ void addUndo(Action *action);
+ std::list<std::shared_ptr<Action>> getUndoList() const;
+
int apply();
int applyOneShot();
void undo();
std::string name;
ModeType type;
std::list<std::shared_ptr<Action>> actionList;
+ std::list<std::shared_ptr<Action>> undoList;
#ifdef MDS_TEST
friend class TestParser;
#endif
const xmlChar* const ModeTag::TYPE = (xmlChar*)"type";
const xmlChar* const ModeTag::CUSTOM = (xmlChar*)"custom";
const xmlChar* const ModeTag::ACTION = (xmlChar*)"action";
+const xmlChar* const ModeTag::UNDO = (xmlChar*)"undo";
const xmlChar* const ModeTag::RULE = (xmlChar*)"rule";
const xmlChar* const ModeTag::STOP_ON_ERR = (xmlChar*)"stopOnErr";
const xmlChar* const ModeTag::RESTICT = (xmlChar*)"restrict";
static const xmlChar* const TYPE;
static const xmlChar* const CUSTOM;
static const xmlChar* const ACTION;
+ static const xmlChar* const UNDO;
static const xmlChar* const RULE;
static const xmlChar* const STOP_ON_ERR;
static const xmlChar* const RESTICT;
parseMode(node);
} else if (MDS_EQUAL == xmlStrcmp(node->name, ModeTag::ACTION)) {
parseAction(node);
+ } else if (MDS_EQUAL == xmlStrcmp(node->name, ModeTag::UNDO)) {
+ parseUndo(node);
} else {
DBG("Unhandled node : %s", node->name);
}
return xmlTagString;
}
+void ModeXMLParser::parseUndo(xmlNodePtr node)
+{
+ Action *action = parseActionInfo(node);
+ mode.addUndo(action);
+}
+
void ModeXMLParser::parseActionAttr(xmlNodePtr node, Action *action)
{
char *restictProp = (char*)xmlGetProp(node, ModeTag::RESTICT);
}
void ModeXMLParser::parseAction(xmlNodePtr node)
+{
+ Action *action = parseActionInfo(node);
+ mode.addAction(action);
+}
+
+Action *ModeXMLParser::parseActionInfo(xmlNodePtr node)
{
char *ruleProp = (char*)xmlGetProp(node, ModeTag::RULE);
if (ruleProp == NULL) {
xmlFree(nodeContent);
action->printInfo();
-
- mode.addAction(action);
+ return action;
}
void ModeXMLParser::bindPlugin(const std::string &name, Action *action)
pluginName = name.substr(0, pos);
action->setPlugin(pluginManager.getPlugin(pluginName));
}
-
std::string getXmlTagStringValue(xmlNodePtr node, const xmlChar *tag);
void parseActionAttr(xmlNodePtr node, Action *action);
void parseAction(xmlNodePtr node);
+ void parseUndo(xmlNodePtr node);
+ Action *parseActionInfo(xmlNodePtr node);
void bindPlugin(const std::string &name, Action *action);
PluginManager &pluginManager;
g_main_loop_run(loop);
EXPECT_EQ(MODES_ERROR_NONE, result);
}
+
+TEST_F(ClientTest, undoModePsMode)
+{
+ g_idle_add(undo_mode_idler, (gpointer)"waterlock");
+ g_main_loop_run(loop);
+ EXPECT_EQ(MODES_ERROR_NONE, result);
+}