TWRP-ify AOSP code

Pull in most TWRP sources
Stub out partition management code
Make it compile -- probably will not boot
Kind of a mess but have to start somewhere
diff --git a/gui/slider.cpp b/gui/slider.cpp
new file mode 100644
index 0000000..95962c0
--- /dev/null
+++ b/gui/slider.cpp
@@ -0,0 +1,171 @@
+// slider.cpp - GUISlider object
+// Pulled & ported from https://raw.github.com/agrabren/RecoverWin/master/gui/slider.cpp
+
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <fcntl.h>
+#include <sys/reboot.h>
+#include <sys/stat.h>
+#include <sys/time.h>
+#include <sys/mman.h>
+#include <sys/types.h>
+#include <sys/ioctl.h>
+#include <time.h>
+#include <unistd.h>
+#include <stdlib.h>
+
+#include <string>
+
+extern "C" {
+#include "../common.h"
+#include "../minuitwrp/minui.h"
+#include "../recovery_ui.h"
+}
+
+#include "rapidxml.hpp"
+#include "objects.hpp"
+
+GUISlider::GUISlider(xml_node<>* node)
+{
+    xml_attribute<>* attr;
+    xml_node<>* child;
+
+    sAction = NULL;
+    sSlider = NULL;
+    sSliderUsed = NULL;
+    sTouch = NULL;
+    sTouchW = 20;
+
+    if (!node)
+    {
+        LOGE("GUISlider created without XML node\n");
+        return;
+    }
+
+    child = node->first_node("resource");
+    if (child)
+    {
+        attr = child->first_attribute("base");
+        if (attr)
+            sSlider = PageManager::FindResource(attr->value());
+
+        attr = child->first_attribute("used");
+        if (attr)
+            sSliderUsed = PageManager::FindResource(attr->value());
+
+        attr = child->first_attribute("touch");
+        if (attr)
+            sTouch = PageManager::FindResource(attr->value());
+    }
+
+    // Load the placement
+	LoadPlacement(node->first_node("placement"), &mRenderX, &mRenderY);
+
+    if (sSlider && sSlider->GetResource())
+    {
+		mRenderW = gr_get_width(sSlider->GetResource());
+        mRenderH = gr_get_height(sSlider->GetResource());
+    }
+    if (sTouch && sTouch->GetResource())
+    {
+        sTouchW = gr_get_width(sTouch->GetResource());  // Width of the "touch image" that follows the touch (arrow)
+        sTouchH = gr_get_height(sTouch->GetResource()); // Height of the "touch image" that follows the touch (arrow)
+    }
+
+    //LOGI("mRenderW: %i mTouchW: %i\n", mRenderW, mTouchW);
+	mActionX = mRenderX;
+    mActionY = mRenderY;
+    mActionW = mRenderW;
+    mActionH = mRenderH;
+
+    sAction = new GUIAction(node);
+
+    sCurTouchX = mRenderX;
+    sUpdate = 1;
+
+    return;
+}
+
+GUISlider::~GUISlider()
+{
+    delete sAction;
+}
+
+int GUISlider::Render(void)
+{
+    if (!sSlider || !sSlider->GetResource())       return -1;
+
+    // Draw the slider
+    gr_blit(sSlider->GetResource(), 0, 0, mRenderW, mRenderH, mRenderX, mRenderY);
+
+    // Draw the used
+    if (sSliderUsed && sSliderUsed->GetResource() && sCurTouchX > mRenderX)
+    {
+        gr_blit(sSliderUsed->GetResource(), 0, 0, sCurTouchX - mRenderX, mRenderH, mRenderX, mRenderY);
+    }
+
+    // Draw the touch icon
+    if (sTouch && sTouch->GetResource())
+    {
+        gr_blit(sTouch->GetResource(), 0, 0, sTouchW, sTouchH, sCurTouchX, (mRenderY + ((mRenderH - sTouchH) / 2)));
+    }
+
+    sUpdate = 0;
+    return 0;
+}
+
+int GUISlider::Update(void)
+{
+    if (sUpdate)    return 2;
+    return 0;
+}
+
+int GUISlider::NotifyTouch(TOUCH_STATE state, int x, int y)
+{
+    static bool dragging = false;
+
+	switch (state)
+    {
+    case TOUCH_START:
+        if (x >= mRenderX && x <= mRenderX + sTouchW && 
+            y >= mRenderY && y <= mRenderY + mRenderH)
+        {
+            sCurTouchX = x - (sTouchW / 2);
+            if (sCurTouchX < mRenderX)  sCurTouchX = mRenderX;
+            dragging = true;
+        }
+        break;
+
+    case TOUCH_DRAG:
+        if (!dragging)  return 0;
+        if (y < mRenderY - sTouchH || y > mRenderY + (sTouchH * 2))
+        {
+            sCurTouchX = mRenderX;
+            dragging = false;
+            sUpdate = 1;
+            break;
+        }
+        sCurTouchX = x - (sTouchW / 2);
+        if (sCurTouchX < mRenderX)                          sCurTouchX = mRenderX;
+        if (sCurTouchX > mRenderX + mRenderW - sTouchW)     sCurTouchX = mRenderX + mRenderW - sTouchW;
+        sUpdate = 1;
+        break;
+
+    case TOUCH_RELEASE:
+        if (!dragging)  return 0;
+        if (sCurTouchX >= mRenderX + mRenderW - sTouchW)
+        {
+            sAction->doActions();
+        }
+        sCurTouchX = mRenderX;
+        dragging = false;
+        sUpdate = 1;
+	case TOUCH_REPEAT:
+	case TOUCH_HOLD:
+        break;
+    }
+    return 0;
+}
+