Add gestures to Home.

Press the Home key while in Home to enable the gestures pad.
diff --git a/res/anim/fade_in_fast.xml b/res/anim/fade_in_fast.xml
new file mode 100644
index 0000000..4fa9847
--- /dev/null
+++ b/res/anim/fade_in_fast.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<alpha xmlns:android="http://schemas.android.com/apk/res/android"
+    android:interpolator="@android:anim/accelerate_interpolator"
+
+    android:fromAlpha="0.0"
+    android:toAlpha="1.0"
+
+    android:duration="@android:integer/config_mediumAnimTime" />
diff --git a/res/anim/fade_out_fast.xml b/res/anim/fade_out_fast.xml
new file mode 100644
index 0000000..a061a6c
--- /dev/null
+++ b/res/anim/fade_out_fast.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<alpha xmlns:android="http://schemas.android.com/apk/res/android"
+    android:interpolator="@android:anim/accelerate_interpolator"
+
+    android:fromAlpha="1.0"
+    android:toAlpha="0.0"
+
+    android:duration="@android:integer/config_mediumAnimTime" />
diff --git a/res/drawable/btn_circle.xml b/res/drawable/btn_circle.xml
new file mode 100644
index 0000000..9208010
--- /dev/null
+++ b/res/drawable/btn_circle.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_window_focused="false" android:state_enabled="true"
+        android:drawable="@drawable/btn_circle_normal" />
+    <item android:state_window_focused="false" android:state_enabled="false"
+        android:drawable="@drawable/btn_circle_disable" />
+    <item android:state_pressed="true" 
+        android:drawable="@drawable/btn_circle_pressed" />
+    <item android:state_focused="true" android:state_enabled="true"
+        android:drawable="@drawable/btn_circle_selected" />
+    <item android:state_enabled="true"
+        android:drawable="@drawable/btn_circle_normal" />
+    <item android:state_focused="true"
+        android:drawable="@drawable/btn_circle_disable_focused" />
+    <item
+         android:drawable="@drawable/btn_circle_disable" />
+</selector>
diff --git a/res/drawable/btn_circle_disable.png b/res/drawable/btn_circle_disable.png
new file mode 100644
index 0000000..33b74a6
--- /dev/null
+++ b/res/drawable/btn_circle_disable.png
Binary files differ
diff --git a/res/drawable/btn_circle_disable_focused.png b/res/drawable/btn_circle_disable_focused.png
new file mode 100644
index 0000000..005ad8d
--- /dev/null
+++ b/res/drawable/btn_circle_disable_focused.png
Binary files differ
diff --git a/res/drawable/btn_circle_normal.png b/res/drawable/btn_circle_normal.png
new file mode 100644
index 0000000..fc5af1c
--- /dev/null
+++ b/res/drawable/btn_circle_normal.png
Binary files differ
diff --git a/res/drawable/btn_circle_pressed.png b/res/drawable/btn_circle_pressed.png
new file mode 100644
index 0000000..8f40afd
--- /dev/null
+++ b/res/drawable/btn_circle_pressed.png
Binary files differ
diff --git a/res/drawable/btn_circle_selected.png b/res/drawable/btn_circle_selected.png
new file mode 100644
index 0000000..c74fac2
--- /dev/null
+++ b/res/drawable/btn_circle_selected.png
Binary files differ
diff --git a/res/drawable/gestures_background.xml b/res/drawable/gestures_background.xml
new file mode 100755
index 0000000..34ec051
--- /dev/null
+++ b/res/drawable/gestures_background.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+   Copyright (C) 2009 Romain Guy
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+    android:src="@drawable/texture_paper"
+    android:tileMode="repeat" />
diff --git a/res/drawable/ic_btn_round_plus.png b/res/drawable/ic_btn_round_plus.png
new file mode 100644
index 0000000..1ec8a95
--- /dev/null
+++ b/res/drawable/ic_btn_round_plus.png
Binary files differ
diff --git a/res/drawable/texture_paper.jpg b/res/drawable/texture_paper.jpg
new file mode 100644
index 0000000..27f4fd6
--- /dev/null
+++ b/res/drawable/texture_paper.jpg
Binary files differ
diff --git a/res/layout/gestures.xml b/res/layout/gestures.xml
new file mode 100644
index 0000000..d2beaa8
--- /dev/null
+++ b/res/layout/gestures.xml
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<!-- Note: GesturesPanel is a special implementation that forces the widget
+     to be opaque for performance reasons. Make sure it visually is. -->
+<com.android.launcher.GesturesPanel
+    xmlns:android="http://schemas.android.com/apk/res/android"
+        
+    android:id="@+id/gestures_panel"
+    android:layout_width="fill_parent"
+    android:layout_height="fill_parent">
+
+    <ViewSwitcher
+        android:id="@+id/gestures_actions"
+        android:layout_width="fill_parent"
+        android:layout_height="83dip"
+        android:layout_alignParentBottom="true"
+
+        android:inAnimation="@anim/fade_in_fast"
+        android:outAnimation="@anim/fade_out_fast"
+
+        android:foregroundGravity="top|fill_horizontal"
+        android:foreground="@*android:drawable/title_bar_shadow"
+        android:background="@android:drawable/title_bar_tall">
+
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="fill_parent"
+            android:layout_gravity="center_horizontal"
+
+            android:gravity="center_vertical"
+
+            android:shadowColor="#FF000000"
+            android:shadowRadius="2.0"
+
+            android:drawablePadding="6dip"
+            android:textAppearance="?android:attr/textAppearanceLarge"
+            android:ellipsize="end"
+            android:maxLines="2"
+            android:text="@string/gestures_instructions" />
+
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="fill_parent"
+            android:layout_gravity="center_horizontal"
+
+            android:gravity="center_vertical"
+
+            android:shadowColor="#FF000000"
+            android:shadowRadius="2.0"
+
+            android:drawablePadding="6dip"
+            android:textAppearance="?android:attr/textAppearanceLarge"
+            android:ellipsize="end"
+            android:maxLines="2"
+            android:text="@string/gestures_instructions" />
+
+    </ViewSwitcher>
+
+    <android.gesture.GestureOverlayView
+        android:id="@+id/gestures_overlay"
+        android:layout_width="fill_parent"
+        android:layout_height="0dip"
+        android:layout_weight="1.0"
+        android:layout_alignParentTop="true"
+        android:layout_above="@id/gestures_actions"
+
+        android:background="@drawable/gestures_background"
+
+        android:gestureStrokeType="multiple" />
+
+    <ImageButton
+        style="@style/PlusButton"
+
+        android:id="@+id/gestures_add"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignParentRight="true"
+        android:layout_alignTop="@id/gestures_actions"
+        android:layout_marginRight="10dip"  
+        android:layout_marginTop="-22dip" />
+
+</com.android.launcher.GesturesPanel>
diff --git a/res/layout/gestures_settings.xml b/res/layout/gestures_settings.xml
new file mode 100644
index 0000000..4b1976f
--- /dev/null
+++ b/res/layout/gestures_settings.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="fill_parent"
+    android:layout_height="fill_parent">
+
+    <ListView
+        android:id="@android:id/list"
+        android:layout_width="fill_parent"
+        android:layout_height="fill_parent" />
+
+    <TextView
+        android:id="@android:id/empty"
+        android:layout_width="fill_parent"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center_vertical"
+
+        android:gravity="center_horizontal"
+
+        android:text="@string/gestures_loading"
+        android:textAppearance="?android:attr/textAppearanceMedium" />
+
+</FrameLayout>
diff --git a/res/layout/gestures_settings_item.xml b/res/layout/gestures_settings_item.xml
new file mode 100644
index 0000000..3c47cab
--- /dev/null
+++ b/res/layout/gestures_settings_item.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@android:id/text1"
+    android:layout_width="fill_parent"
+    android:layout_height="wrap_content"
+
+    android:gravity="center_vertical"
+    android:minHeight="?android:attr/listPreferredItemHeight"
+
+    android:drawablePadding="12dip"
+    android:paddingLeft="6dip"
+    android:paddingRight="2dip"
+
+    android:ellipsize="marquee"
+    android:singleLine="true"
+    android:textAppearance="?android:attr/textAppearanceLarge" />
diff --git a/res/layout/rename_folder.xml b/res/layout/rename_folder.xml
index 2c578f3..ba78995 100644
--- a/res/layout/rename_folder.xml
+++ b/res/layout/rename_folder.xml
@@ -21,6 +21,7 @@
     android:orientation="vertical">
 
     <TextView 
+        android:id="@+id/label"
         android:layout_height="wrap_content"
         android:layout_width="wrap_content"
         android:text="@string/rename_folder_label"
diff --git a/res/values/colors.xml b/res/values/colors.xml
index f9cb0c5..e1b4843 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -23,6 +23,8 @@
     <color name="bubble_dark_background">#B2191919</color>
     <color name="delete_color_filter">#A5FF0000</color>
 
-    <color name="appwidget_error_color">#fccc</color>
-    <color name="snag_callout_color">#f444</color>
+    <color name="appwidget_error_color">#FCCC</color>
+    <color name="snag_callout_color">#F444</color>
+
+    <color name="gesture_color">#FFFFFF00</color>
 </resources>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 4ae6686..b802353 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -16,4 +16,6 @@
 
 <resources>
     <dimen name="search_widget_inset">19dip</dimen>
+    <dimen name="gesture_thumbnail_inset">8dip</dimen>
+    <dimen name="gesture_thumbnail_size">64dip</dimen>
 </resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 3e8cb7c..f083c98 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -94,7 +94,9 @@
     <string name="menu_search">Search</string>
     <!-- Noun, menu item used to bring down the notifications shade -->
     <string name="menu_notifications">Notifications</string>
-    <!-- Noun, menu item used to show the system settings -->    
+    <!-- Noun, menu item used to show the gestures settings -->
+    <string name="menu_gestures">Gestures</string>
+    <!-- Noun, menu item used to show the system settings -->
     <string name="menu_settings">Settings</string>
 
     <!-- Permissions: -->
@@ -123,4 +125,31 @@
     <!-- Text to show user in place of a gadget when we can't display it properly -->
     <string name="gadget_error_text">Problem loading widget</string>
 
+    <!-- Gestures: -->
+    <skip />
+
+    <!-- Message displayed when the user enters gestures mode and is asked to draw a gesture -->
+    <string name="gestures_instructions">Draw a gesture to get started</string>
+    <!-- Message displayed when the gesture entered by the user cannot be recognized -->
+    <string name="gestures_unknown">Unknown gesture</string>
+    <!-- Message displayed when the user has successfully created a new gesture -->
+    <string name="gestures_created">Added gesture "%s"</string>
+    <!-- Message displayed when the user could not create a new gesture -->
+    <string name="gestures_failed">Gesture could not be created</string>
+    <!-- Message displayed when the user opens the gestures settings screen -->
+    <string name="gestures_loading">Loading gestures...</string>
+    <!-- Message displayed when the user has no gestures -->
+    <string name="gestures_empty">No gestures defined</string>
+    <!-- Title of the screen used to view/manage gestures -->
+    <string name="gestures_activity">Gestures</string>
+    <!-- Noun, menu item used to rename a gesture -->
+    <string name="gestures_rename">Rename</string>
+    <!-- Noun, menu item used to remove a gesture -->
+    <string name="gestures_delete">Delete</string>
+    <!-- Message displayed when a gesture is successfully deleted -->
+    <string name="gestures_delete_success">Gesture deleted</string>
+    <!-- Title of dialog box -->
+    <string name="gestures_rename_title">Rename gesture</string>
+    <!-- Label of gesture name field in Rename gesture dialog box -->
+    <string name="gestures_rename_label">Gesture name</string>
 </resources>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 9b06d26..5319bb0 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -60,4 +60,10 @@
         <item name="android:paddingLeft">10dip</item>
         <item name="android:paddingRight">10dip</item>
     </style>
+
+    <style name="PlusButton">
+        <item name="android:background">@drawable/btn_circle</item>
+        <item name="android:src">@drawable/ic_btn_round_plus</item>
+    </style>
+
 </resources>