Change SWE app properties back to stock Android

- Changed project package name from com.android.swe.browser
back to com.android.browser along with code references to
old package name.
- Changes to AndroidManifest making it conform closer to stock
browser manifest.
- Changed app and apk name back to Browser.

Change-Id: I778ee1d1197bd50bd4a4850eef6d1d7f4ef0ad0b
diff --git a/src/com/android/browser/Preloader.java b/src/com/android/browser/Preloader.java
new file mode 100644
index 0000000..7d8c367
--- /dev/null
+++ b/src/com/android/browser/Preloader.java
@@ -0,0 +1,178 @@
+/*
+ * Copyright (C) 2011 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.
+ */
+package com.android.browser;
+
+import android.content.Context;
+import android.os.Handler;
+import android.os.Looper;
+import android.util.Log;
+import org.codeaurora.swe.WebView;
+
+import java.util.Map;
+
+/**
+ * Singleton class for handling preload requests.
+ */
+public class Preloader {
+
+    private final static String LOGTAG = "browser.preloader";
+    private final static boolean LOGD_ENABLED = com.android.browser.Browser.LOGD_ENABLED;
+
+    private static final int PRERENDER_TIMEOUT_MILLIS = 30 * 1000; // 30s
+
+    private static Preloader sInstance;
+
+    private final Context mContext;
+    private final Handler mHandler;
+    private final BrowserWebViewFactory mFactory;
+    private volatile PreloaderSession mSession;
+
+    public static void initialize(Context context) {
+        sInstance = new Preloader(context);
+    }
+
+    public static Preloader getInstance() {
+        return sInstance;
+    }
+
+    private Preloader(Context context) {
+        mContext = context.getApplicationContext();
+        mHandler = new Handler(Looper.getMainLooper());
+        mSession = null;
+        mFactory = new BrowserWebViewFactory(context);
+
+    }
+
+    private PreloaderSession getSession(String id) {
+        if (mSession == null) {
+            if (LOGD_ENABLED) Log.d(LOGTAG, "Create new preload session " + id);
+            mSession = new PreloaderSession(id);
+            WebViewTimersControl.getInstance().onPrerenderStart(
+                    mSession.getWebView());
+            return mSession;
+        } else if (mSession.mId.equals(id)) {
+            if (LOGD_ENABLED) Log.d(LOGTAG, "Returning existing preload session " + id);
+            return mSession;
+        }
+
+        if (LOGD_ENABLED) Log.d(LOGTAG, "Existing session in progress : " + mSession.mId +
+                " returning null.");
+        return null;
+    }
+
+    private PreloaderSession takeSession(String id) {
+        PreloaderSession s = null;
+        if (mSession != null && mSession.mId.equals(id)) {
+            s = mSession;
+            mSession = null;
+        }
+
+        if (s != null) {
+            s.cancelTimeout();
+        }
+
+        return s;
+    }
+
+    public void handlePreloadRequest(String id, String url, Map<String, String> headers,
+            String searchBoxQuery) {
+        PreloaderSession s = getSession(id);
+        if (s == null) {
+            if (LOGD_ENABLED) Log.d(LOGTAG, "Discarding preload request, existing"
+                    + " session in progress");
+            return;
+        }
+
+        s.touch(); // reset timer
+        PreloadedTabControl tab = s.getTabControl();
+        if (searchBoxQuery != null) {
+            tab.loadUrlIfChanged(url, headers);
+            tab.setQuery(searchBoxQuery);
+        } else {
+            tab.loadUrl(url, headers);
+        }
+    }
+
+    public void cancelSearchBoxPreload(String id) {
+        PreloaderSession s = getSession(id);
+        if (s != null) {
+            s.touch(); // reset timer
+            PreloadedTabControl tab = s.getTabControl();
+            tab.searchBoxCancel();
+        }
+    }
+
+    public void discardPreload(String id) {
+        PreloaderSession s = takeSession(id);
+        if (s != null) {
+            if (LOGD_ENABLED) Log.d(LOGTAG, "Discard preload session " + id);
+            WebViewTimersControl.getInstance().onPrerenderDone(s == null ? null : s.getWebView());
+            PreloadedTabControl t = s.getTabControl();
+            t.destroy();
+        } else {
+            if (LOGD_ENABLED) Log.d(LOGTAG, "Ignored discard request " + id);
+        }
+    }
+
+    /**
+     * Return a preloaded tab, and remove it from the preloader. This is used when the
+     * view is about to be displayed.
+     */
+    public PreloadedTabControl getPreloadedTab(String id) {
+        PreloaderSession s = takeSession(id);
+        if (LOGD_ENABLED) Log.d(LOGTAG, "Showing preload session " + id + "=" + s);
+        return s == null ? null : s.getTabControl();
+    }
+
+    private class PreloaderSession {
+        private final String mId;
+        private final PreloadedTabControl mTabControl;
+
+        private final Runnable mTimeoutTask = new Runnable(){
+            @Override
+            public void run() {
+                if (LOGD_ENABLED) Log.d(LOGTAG, "Preload session timeout " + mId);
+                discardPreload(mId);
+            }};
+
+        public PreloaderSession(String id) {
+            mId = id;
+            mTabControl = new PreloadedTabControl(
+                    new Tab(new PreloadController(mContext), mFactory.createWebView(false)));
+            touch();
+        }
+
+        public void cancelTimeout() {
+            mHandler.removeCallbacks(mTimeoutTask);
+        }
+
+        public void touch() {
+            cancelTimeout();
+            mHandler.postDelayed(mTimeoutTask, PRERENDER_TIMEOUT_MILLIS);
+        }
+
+        public PreloadedTabControl getTabControl() {
+            return mTabControl;
+        }
+
+        public WebView getWebView() {
+            Tab t = mTabControl.getTab();
+            return t == null? null : t.getWebView();
+        }
+
+    }
+
+}