Merge "Add option for custom battery path" into twrp2.4
diff --git a/gui/blanktimer.cpp b/gui/blanktimer.cpp
index cf35f65..d7a6fff 100644
--- a/gui/blanktimer.cpp
+++ b/gui/blanktimer.cpp
@@ -46,7 +46,8 @@
 #include "../variables.h"
 
 blanktimer::blanktimer(void) {
-	blanked = 0;
+	setTime(0);
+	setConBlank(0);
 	orig_brightness = getBrightness();
 }
 
@@ -62,14 +63,10 @@
 	return 0;
 }
 
-void blanktimer::setBlank(int blank) {
-	pthread_mutex_lock(&blankmutex);
+void blanktimer::setConBlank(int blank) {
+	pthread_mutex_lock(&conblankmutex);
 	conblank = blank;
-	pthread_mutex_unlock(&blankmutex);
-}
-
-int blanktimer::getBlank(void) {
-	return conblank;
+	pthread_mutex_unlock(&conblankmutex);
 }
 
 void blanktimer::setTimer(void) {
@@ -84,22 +81,25 @@
 
 int  blanktimer::setClockTimer(void) {
 	timespec curTime, diff;
-	while(1) {
-		usleep(1000);
+	for(;;) {
+		usleep(1000000);
 		clock_gettime(CLOCK_MONOTONIC, &curTime);
 		diff = TWFunc::timespec_diff(btimer, curTime);
-		if (sleepTimer && diff.tv_sec > sleepTimer && conblank != 1) {
+		if (sleepTimer > 2 && diff.tv_sec > (sleepTimer - 2) && conblank == 0) {
 			orig_brightness = getBrightness();
-			setBlank(1);
+			setConBlank(1);
+			setBrightness(5);
+		}
+		if (sleepTimer && diff.tv_sec > sleepTimer && conblank < 2) {
+			setConBlank(2);
+			setBrightness(0);
 			PageManager::ChangeOverlay("lock");
 		}
-		if (conblank == 1 && blanked != 1) {
-			blanked = 1;
-			gr_fb_blank(conblank);
-			setBrightness(0);
+		if (conblank == 2 && gr_fb_blank(1) >= 0) {
+			setConBlank(3);
 		}
 	}
-	return -1;
+	return -1; //shouldn't get here
 }
 
 int blanktimer::getBrightness(void) {
@@ -124,11 +124,19 @@
 
 void blanktimer::resetTimerAndUnblank(void) {
 	setTimer();
-	if (blanked) {
-		setBrightness(orig_brightness);
-		blanked = 0;
-		setBlank(0);
-		gr_fb_blank(conblank);
-		gui_forceRender();
+	switch (conblank) {
+		case 3:
+			if (gr_fb_blank(0) < 0) {
+				LOGI("blanktimer::resetTimerAndUnblank failed to gr_fb_blank(0)\n");
+				break;
+			}
+			// No break here, we want to keep going
+		case 2:
+			gui_forceRender();
+			// No break here, we want to keep going
+		case 1:
+			setBrightness(orig_brightness);
+			setConBlank(0);
+			break;
 	}
 }
diff --git a/gui/blanktimer.hpp b/gui/blanktimer.hpp
index 4135635..2d83c4d 100644
--- a/gui/blanktimer.hpp
+++ b/gui/blanktimer.hpp
@@ -32,8 +32,7 @@
 		void setTime(int newtime);
 
 	private:
-		void setBlank(int blank);
-		int getBlank(void);
+		void setConBlank(int blank);
 		void setTimer(void);
 		timespec getTimer(void);
 		int getBrightness(void);
@@ -42,13 +41,12 @@
 		int setClockTimer(void);
 		typedef int (blanktimer::*ThreadPtr)(void);
 		typedef void* (*PThreadPtr)(void*);
-		pthread_mutex_t blankmutex;
+		pthread_mutex_t conblankmutex;
 		pthread_mutex_t timermutex;
 		int conblank;
 		timespec btimer;
 		unsigned long long sleepTimer;
 		int orig_brightness;
-		int blanked;
 };
 
 extern blanktimer blankTimer;
diff --git a/minuitwrp/graphics.c b/minuitwrp/graphics.c
index dc79db8..61a98c3 100644
--- a/minuitwrp/graphics.c
+++ b/minuitwrp/graphics.c
@@ -685,13 +685,14 @@
     return (unsigned short *) gr_mem_surface.data;
 }
 
-void gr_fb_blank(int blank)
+int gr_fb_blank(int blank)
 {
     int ret;
 
     ret = ioctl(gr_fb_fd, FBIOBLANK, blank ? FB_BLANK_POWERDOWN : FB_BLANK_UNBLANK);
     if (ret < 0)
         perror("ioctl(): blank");
+	return ret;
 }
 
 int gr_get_surface(gr_surface* surface)
diff --git a/minuitwrp/minui.h b/minuitwrp/minui.h
index d66807c..03e15bb 100644
--- a/minuitwrp/minui.h
+++ b/minuitwrp/minui.h
@@ -27,7 +27,7 @@
 int gr_fb_height(void);
 gr_pixel *gr_fb_data(void);
 void gr_flip(void);
-void gr_fb_blank(int blank);
+int gr_fb_blank(int blank);
 
 void gr_color(unsigned char r, unsigned char g, unsigned char b, unsigned char a);
 void gr_fill(int x, int y, int w, int h);