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/pages.hpp b/gui/pages.hpp
new file mode 100644
index 0000000..a55211c
--- /dev/null
+++ b/gui/pages.hpp
@@ -0,0 +1,137 @@
+// pages.hpp - Base classes for page manager of GUI
+
+#ifndef _PAGES_HEADER
+#define _PAGES_HEADER
+
+typedef struct {
+    unsigned char red;
+    unsigned char green;
+    unsigned char blue;
+    unsigned char alpha;
+} COLOR;
+
+// Utility Functions
+int ConvertStrToColor(std::string str, COLOR* color);
+int gui_forceRender(void);
+int gui_changePage(std::string newPage);
+int gui_changeOverlay(std::string newPage);
+std::string gui_parse_text(string inText);
+
+class Resource;
+class ResourceManager;
+class RenderObject;
+class ActionObject;
+class InputObject;
+
+class Page
+{
+public:
+    virtual ~Page()             {}
+
+public:
+    Page(xml_node<>* page, xml_node<>* templates = NULL);
+    std::string GetName(void)   { return mName; }
+
+public:
+    virtual int Render(void);
+    virtual int Update(void);
+    virtual int NotifyTouch(TOUCH_STATE state, int x, int y);
+    virtual int NotifyKey(int key);
+	virtual int NotifyKeyboard(int key);
+	virtual int SetKeyBoardFocus(int inFocus);
+    virtual int NotifyVarChange(std::string varName, std::string value);
+    virtual void SetPageFocus(int inFocus);
+
+protected:
+    std::string mName;
+    std::vector<RenderObject*> mRenders;
+    std::vector<ActionObject*> mActions;
+	std::vector<InputObject*> mInputs;
+
+    ActionObject* mTouchStart;
+    COLOR mBackground;
+
+protected:
+    bool ProcessNode(xml_node<>* page, xml_node<>* templates = NULL, int depth = 0);
+};
+
+class PageSet
+{
+public:
+    PageSet(char* xmlFile);
+    virtual ~PageSet();
+
+public:
+    int Load(ZipArchive* package);
+
+    Page* FindPage(std::string name);
+    int SetPage(std::string page);
+	int SetOverlay(Page* page);
+    Resource* FindResource(std::string name);
+
+    // Helper routine for identifing if we're the current page
+    int IsCurrentPage(Page* page);
+
+    // These are routing routines
+    int Render(void);
+    int Update(void);
+    int NotifyTouch(TOUCH_STATE state, int x, int y);
+    int NotifyKey(int key);
+	int NotifyKeyboard(int key);
+	int SetKeyBoardFocus(int inFocus);
+    int NotifyVarChange(std::string varName, std::string value);
+
+protected:
+    int LoadPages(xml_node<>* pages, xml_node<>* templates = NULL);
+    int LoadVariables(xml_node<>* vars);
+
+protected:
+    char* mXmlFile;
+    xml_document<> mDoc;
+    ResourceManager* mResources;
+    std::vector<Page*> mPages;
+    Page* mCurrentPage;
+	Page* mOverlayPage;     // This is a special case, used for "locking" the screen
+};
+
+class PageManager
+{
+public:
+    // Used by GUI
+    static int LoadPackage(std::string name, std::string package, std::string startpage);
+    static PageSet* SelectPackage(std::string name);
+    static int ReloadPackage(std::string name, std::string package);
+    static void ReleasePackage(std::string name);
+
+    // Used for actions and pages
+    static int ChangePage(std::string name);
+	static int ChangeOverlay(std::string name);
+    static Resource* FindResource(std::string name);
+    static Resource* FindResource(std::string package, std::string name);
+
+    // Used for console-only mode - Can be reverted via ChangePage
+    static int SwitchToConsole(void);
+
+    // Helper to identify if a particular page is the active page
+    static int IsCurrentPage(Page* page);
+
+    // These are routing routines
+    static int Render(void);
+    static int Update(void);
+    static int NotifyTouch(TOUCH_STATE state, int x, int y);
+    static int NotifyKey(int key);
+	static int NotifyKeyboard(int key);
+	static int SetKeyBoardFocus(int inFocus);
+    static int NotifyVarChange(std::string varName, std::string value);
+
+protected:
+    static PageSet* FindPackage(std::string name);
+
+protected:
+    static std::map<std::string, PageSet*> mPageSets;
+    static PageSet* mCurrentSet;
+	static PageSet* mBaseSet;
+};
+
+#endif  // _PAGES_HEADER
+