Allow subclassing Launcher

Changes included:

- Make Launcher not final

- Add some new methods as hooks for subclasses

- Allow Launcher to intercept Workspace touch events

Change-Id: I9a2b628c853394a3b237a384336e1b9e5c2382ec
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index be83ee0..f7b6c5a 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -115,7 +115,7 @@
 /**
  * Default launcher application.
  */
-public final class Launcher extends Activity
+public class Launcher extends Activity
         implements View.OnClickListener, OnLongClickListener, LauncherModel.Callbacks,
                    View.OnTouchListener {
     static final String TAG = "Launcher";
@@ -564,6 +564,10 @@
         }
     }
 
+    public LayoutInflater getInflater() {
+        return mInflater;
+    }
+
     public DragLayer getDragLayer() {
         return mDragLayer;
     }
@@ -1430,7 +1434,7 @@
         return mModel;
     }
 
-    void closeSystemDialogs() {
+    public void closeSystemDialogs() {
         getWindow().closeAllPanels();
 
         // Whatever we were doing is hereby canceled.
@@ -1629,14 +1633,20 @@
             sourceBounds = mSearchDropTargetBar.getSearchBarBounds();
         }
 
+        startSearch(initialQuery, selectInitialQuery,
+                appSearchData, sourceBounds);
+    }
+
+    public void startSearch(String initialQuery,
+            boolean selectInitialQuery, Bundle appSearchData, Rect sourceBounds) {
         startGlobalSearch(initialQuery, selectInitialQuery,
-            appSearchData, sourceBounds);
+                appSearchData, sourceBounds);
     }
 
     /**
      * Starts the global search activity. This code is a copied from SearchManager
      */
-    public void startGlobalSearch(String initialQuery,
+    private void startGlobalSearch(String initialQuery,
             boolean selectInitialQuery, Bundle appSearchData, Rect sourceBounds) {
         final SearchManager searchManager =
             (SearchManager) getSystemService(Context.SEARCH_SERVICE);
@@ -2060,6 +2070,10 @@
     public void onClickVoiceButton(View v) {
         v.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY);
 
+        startVoice();
+    }
+
+    public void startVoice() {
         try {
             final SearchManager searchManager =
                     (SearchManager) getSystemService(Context.SEARCH_SERVICE);
@@ -2883,6 +2897,11 @@
         // Send an accessibility event to announce the context change
         getWindow().getDecorView()
                 .sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED);
+
+        onWorkspaceShown();
+    }
+
+    public void onWorkspaceShown() {
     }
 
     void showAllApps(boolean animated) {