diff options
-rw-r--r-- | data.cpp | 11 | ||||
-rw-r--r-- | data.hpp | 1 | ||||
-rw-r--r-- | gui/action.cpp | 6 | ||||
-rw-r--r-- | gui/button.cpp | 2 | ||||
-rw-r--r-- | gui/devices/1080x1920/res/ui.xml | 41 | ||||
-rw-r--r-- | gui/keyboard.cpp | 3 | ||||
-rw-r--r-- | gui/objects.hpp | 2 | ||||
-rw-r--r-- | gui/slider.cpp | 2 | ||||
-rw-r--r-- | minuitwrp/events.c | 2 | ||||
-rw-r--r-- | minuitwrp/minui.h | 2 |
10 files changed, 70 insertions, 2 deletions
@@ -55,7 +55,7 @@ extern "C" #include "twcommon.h" #include "data.h" #include "gui/pages.h" - + #include "minuitwrp/minui.h" void gui_notifyVarChange(const char *name, const char* value); } @@ -583,6 +583,7 @@ void DataManager::SetDefaultValues() mConstValues.insert(make_pair(TW_VERSION_VAR, TW_VERSION_STR)); mValues.insert(make_pair("tw_storage_path", make_pair("/", 1))); + mValues.insert(make_pair("tw_vibrate", make_pair("80", 1))); #ifdef TW_FORCE_CPUINFO_FOR_DEVICE_ID printf("TW_FORCE_CPUINFO_FOR_DEVICE_ID := true\n"); @@ -1240,3 +1241,11 @@ extern "C" void DataManager_ReadSettingsFile(void) { return DataManager::ReadSettingsFile(); } +void DataManager::Vibrate(const string varName) +{ + int vib_value = 0; + GetValue(varName, vib_value); + if (vib_value) { + vibrate(vib_value); + } +} @@ -55,6 +55,7 @@ public: static void DumpValues(); static void update_tz_environment_variables(); + static void Vibrate(const string varName); static void SetBackupFolder(); static void SetDefaultValues(); static void Output_Version(void); // Outputs the version to a file in the TWRP folder diff --git a/gui/action.cpp b/gui/action.cpp index 5536c82b1..8539386a0 100644 --- a/gui/action.cpp +++ b/gui/action.cpp @@ -314,6 +314,7 @@ void* GUIAction::thread_start(void *cookie) void GUIAction::operation_start(const string operation_name) { + time(&Start); DataManager::SetValue(TW_ACTION_BUSY, 1); DataManager::SetValue("ui_progress", 0); DataManager::SetValue("tw_operation", operation_name); @@ -323,6 +324,7 @@ void GUIAction::operation_start(const string operation_name) void GUIAction::operation_end(const int operation_status, const int simulate) { + time_t Stop; int simulate_fail; DataManager::SetValue("ui_progress", 100); if (simulate) { @@ -344,6 +346,9 @@ void GUIAction::operation_end(const int operation_status, const int simulate) #ifndef TW_NO_SCREEN_TIMEOUT blankTimer.resetTimerAndUnblank(); #endif + time(&Stop); + if ((int) difftime(Stop, Start) > 10) + DataManager::Vibrate("tw_vibrate"); } int GUIAction::doAction(Action action, int isThreaded /* = 0 */) @@ -920,6 +925,7 @@ int GUIAction::doAction(Action action, int isThreaded /* = 0 */) else { operation_end(1, simulate); return -1; + } DataManager::SetValue(TW_BACKUP_NAME, "(Auto Generate)"); } else if (arg == "restore") { diff --git a/gui/button.cpp b/gui/button.cpp index be52c277e..ca386beed 100644 --- a/gui/button.cpp +++ b/gui/button.cpp @@ -30,6 +30,7 @@ #include <time.h> #include <unistd.h> #include <stdlib.h> +#include "../data.hpp" #include <string> @@ -280,6 +281,7 @@ int GUIButton::NotifyTouch(TOUCH_STATE state, int x, int y) } else { if (last_state == 0) { last_state = 1; + DataManager::Vibrate("tw_vibrate"); if (mButtonLabel != NULL) mButtonLabel->isHighlighted = true; if (mButtonImg != NULL) diff --git a/gui/devices/1080x1920/res/ui.xml b/gui/devices/1080x1920/res/ui.xml index beaf37325..0f61faca7 100644 --- a/gui/devices/1080x1920/res/ui.xml +++ b/gui/devices/1080x1920/res/ui.xml @@ -2456,7 +2456,16 @@ </object> <object type="button"> - <placement x="%col_center_x%" y="%row4_y%" /> + <highlight color="%highlight_color%" /> + <placement x="%col2_x%" y="%row4_y%" /> + <font resource="font" color="%button_text_color%" /> + <text>Vibration Duration</text> + <image resource="main_button" /> + <action function="page">Vibrate</action> + </object> + + <object type="button"> + <placement x="%col_x%" y="%row4_y%" /> <font resource="font" color="%button_text_color%" /> <text>Restore Defaults</text> <image resource="main_button" /> @@ -2663,6 +2672,36 @@ <object type="template" name="footer" /> </page> + <page name="Vibrate"> + <object type="template" name="header" /> + + <object type="text" color="%text_color%"> + <font resource="font" /> + <placement x="%center_x%" y="%row1_header_y%" placement="5" /> + <text>Vibration Settings :</text> + </object> + + <object type="slidervalue"> + <placement x="col1_x" y="%row4_text_y%" w="%slidervalue_w%" /> + <font resource="font" color="%text_color%" /> + <text>Vibration Value : </text> + <data variable="tw_vibrate" min="0" max="300" /> + <colors line="%slidervalue_line_clr%" slider="%slidervalue_slider_clr%" /> + </object> + + <object type="action"> + <touch key="home" /> + <action function="page">main</action> + </object> + + <object type="action"> + <touch key="back" /> + <action function="page">settings</action> + </object> + + <object type="template" name="footer" /> + </page> + <page name="advanced"> <object type="template" name="header" /> diff --git a/gui/keyboard.cpp b/gui/keyboard.cpp index 95cdbf1c8..97a980a4e 100644 --- a/gui/keyboard.cpp +++ b/gui/keyboard.cpp @@ -30,6 +30,7 @@ #include <time.h> #include <unistd.h> #include <stdlib.h> +#include "../data.hpp" #include <string> @@ -388,6 +389,7 @@ int GUIKeyboard::NotifyTouch(TOUCH_STATE state, int x, int y) switch (state) { case TOUCH_START: + DataManager::Vibrate("tw_vibrate"); if (GetSelection(x, y) == 0) { startSelection = -1; was_held = 0; @@ -419,6 +421,7 @@ int GUIKeyboard::NotifyTouch(TOUCH_STATE state, int x, int y) if (highlightRenderCount != 0) mRendered = false; highlightRenderCount = 0; + DataManager::Vibrate("tw_vibrate"); startSelection = 0; } break; diff --git a/gui/objects.hpp b/gui/objects.hpp index e7bb2a0ee..1053113bd 100644 --- a/gui/objects.hpp +++ b/gui/objects.hpp @@ -25,6 +25,7 @@ #include <vector> #include <string> #include <map> +#include <time.h> extern "C" { #ifdef HAVE_SELINUX @@ -285,6 +286,7 @@ protected: void operation_start(const string operation_name); void operation_end(const int operation_status, const int simulate); static void* command_thread(void *cookie); + time_t Start; }; class GUIConsole : public RenderObject, public ActionObject diff --git a/gui/slider.cpp b/gui/slider.cpp index b46d156f6..3908b82ab 100644 --- a/gui/slider.cpp +++ b/gui/slider.cpp @@ -15,6 +15,7 @@ #include <time.h> #include <unistd.h> #include <stdlib.h> +#include "../data.hpp" #include <string> @@ -153,6 +154,7 @@ int GUISlider::NotifyTouch(TOUCH_STATE state, int x, int y) break; case TOUCH_RELEASE: + DataManager::Vibrate("tw_button_vibrate"); if (!dragging) return 0; diff --git a/minuitwrp/events.c b/minuitwrp/events.c index 73369a2cc..aecaf8f12 100644 --- a/minuitwrp/events.c +++ b/minuitwrp/events.c @@ -106,6 +106,8 @@ int vibrate(int timeout_ms) int fd; int ret; + if (timeout_ms > 10000) timeout_ms = 1000; + fd = open(VIBRATOR_TIMEOUT_FILE, O_WRONLY); if (fd < 0) return -1; diff --git a/minuitwrp/minui.h b/minuitwrp/minui.h index 03e15bb81..5f02d4a6d 100644 --- a/minuitwrp/minui.h +++ b/minuitwrp/minui.h @@ -70,4 +70,6 @@ int ev_wait(int timeout); void ev_dispatch(void); int ev_get_input(int fd, short revents, struct input_event *ev); +int vibrate(int timeout_ms); + #endif |