gui: PatternPassword: allow any N*N grid

Rather than only supporting a 3x3 grid, allow for multiple grid sizes
(using the CyanogenMod method of generating passphrases for non-3x3
grids). Also fix the detection of touches, as the old code was far too
sensitive for larger grids (and also didn't make much sense).

Change-Id: I343ef654e6d29ce0cb790a28281be7c7c9b171d9
Signed-off-by: Aleksa Sarai <cyphar@cyphar.com>
diff --git a/gui/theme/common/watch.xml b/gui/theme/common/watch.xml
index 2ed266a..382b2e1 100755
--- a/gui/theme/common/watch.xml
+++ b/gui/theme/common/watch.xml
@@ -68,6 +68,10 @@
 			<image resource="tab_3"/>
 		</style>
 
+		<style name="button_navbar">
+			<font resource="font_m" color="%text_button_color%"/>
+		</style>
+
 		<style name="console">
 			<color foreground="%text_color%" background="%background_color%" scroll="%background_color%"/>
 			<font resource="fixed"/>
@@ -167,6 +171,10 @@
 			<colors line="%fileselector_linecolor%"/>
 			<dimensions lineh="%slidervalue_lineh%" linepadding="%slidervalue_padding%" sliderw="%slidervalue_sliderw%" sliderh="%slidervalue_sliderh%"/>
 		</style>
+
+		<style name="patternpassword">
+			<size name="tw_gui_pattern_grid_size" default="3"/>
+		</style>
 	</styles>
 
 	<pages>
@@ -4780,16 +4788,27 @@
 
 			<template name="statusbar"/>
 
+			<action>
+				<action function="set">tw_gui_pattern_grid_size=3</action>
+			</action>
+
 			<text style="text_m">
 				<placement x="%col1_x_left%" y="%row1_header_y%"/>
 				<text>{@mount_hdr=Mount} &gt; {@decrypt_data_hdr=Decrypt Data}</text>
 			</text>
 
 			<text style="text_m_accent">
+				<condition var1="tw_password_fail" op="!=" var2="1"/>
 				<placement x="%center_x%" y="%row5_y%" placement="5"/>
 				<text>{@decrypt_data_enter_pattern=Enter Pattern.}</text>
 			</text>
 
+			<text style="text_m_fail">
+				<condition var1="tw_password_fail" var2="1"/>
+				<placement x="%center_x%" y="%row5_y%" placement="5"/>
+				<text>{@decryt_data_failed_pattern=Pattern failed, please try again!}</text>
+			</text>
+
 			<text style="text_m">
 				<placement x="%center_x%" y="%row10_y%" placement="5"/>
 				<text>{@back_cancel=Press back to cancel.}</text>
@@ -4797,7 +4816,6 @@
 
 			<patternpassword>
 				<placement x="%pattern_x%" y="%row2_y%" w="%pattern_size%" h="%pattern_size%"/>
-				<size name="tw_pattern_grid_size" default="3"/>
 				<dot color="%fileselector_linecolor%" activecolor="%accent_color%" radius="%pattern_dot_dia%"/>
 				<line color="%fileselector_linecolor%" width="%pattern_line_w%"/>
 				<data name="tw_crypto_password"/>
@@ -4817,6 +4835,62 @@
 					<action function="page">main</action>
 				</actions>
 			</button>
+
+			<button>
+				<condition var1="tw_gui_pattern_grid_size" var2="3"/>
+				<placement x="%center_x%" y="%navbar_btn_y%" placement="4"/>
+				<image resource="grid_less"/>
+				<action function="set">tw_gui_pattern_grid_size=3</action>
+			</button>
+
+			<button>
+				<condition var1="tw_gui_pattern_grid_size" var2="4"/>
+				<placement x="%center_x%" y="%navbar_btn_y%" placement="4"/>
+				<image resource="grid_less"/>
+				<action function="set">tw_gui_pattern_grid_size=3</action>
+			</button>
+
+			<button>
+				<condition var1="tw_gui_pattern_grid_size" var2="5"/>
+				<placement x="%center_x%" y="%navbar_btn_y%" placement="4"/>
+				<image resource="grid_less"/>
+				<action function="set">tw_gui_pattern_grid_size=4</action>
+			</button>
+
+			<button>
+				<condition var1="tw_gui_pattern_grid_size" var2="6"/>
+				<placement x="%center_x%" y="%navbar_btn_y%" placement="4"/>
+				<image resource="grid_less"/>
+				<action function="set">tw_gui_pattern_grid_size=5</action>
+			</button>
+
+			<button>
+				<condition var1="tw_gui_pattern_grid_size" var2="3"/>
+				<placement x="%console_button_x%" y="%navbar_btn_y%" placement="4"/>
+				<image resource="grid_more"/>
+				<action function="set">tw_gui_pattern_grid_size=4</action>
+			</button>
+
+			<button>
+				<condition var1="tw_gui_pattern_grid_size" var2="4"/>
+				<placement x="%console_button_x%" y="%navbar_btn_y%" placement="4"/>
+				<image resource="grid_more"/>
+				<action function="set">tw_gui_pattern_grid_size=5</action>
+			</button>
+
+			<button>
+				<condition var1="tw_gui_pattern_grid_size" var2="5"/>
+				<placement x="%console_button_x%" y="%navbar_btn_y%" placement="4"/>
+				<image resource="grid_more"/>
+				<action function="set">tw_gui_pattern_grid_size=6</action>
+			</button>
+
+			<button>
+				<condition var1="tw_gui_pattern_grid_size" var2="6"/>
+				<placement x="%console_button_x%" y="%navbar_btn_y%" placement="4"/>
+				<image resource="grid_more"/>
+				<action function="set">tw_gui_pattern_grid_size=6</action>
+			</button>
 		</page>
 
 		<page name="trydecrypt">