Merge "Pause the WebCore thread watchdog at the right time."
diff --git a/core/java/android/webkit/CookieManager.java b/core/java/android/webkit/CookieManager.java
index 2997c1a..825436f 100644
--- a/core/java/android/webkit/CookieManager.java
+++ b/core/java/android/webkit/CookieManager.java
@@ -16,27 +16,20 @@
 
 package android.webkit;
 
-import android.net.ParseException;
 import android.net.WebAddress;
-import android.os.AsyncTask;
-import android.util.Log;
-
 
 /**
  * Manages the cookies used by an application's {@link WebView} instances.
  * Cookies are manipulated according to RFC2109.
  */
 public class CookieManager {
-
-    private static CookieManager sRef;
-
-    private static final String LOGTAG = "webkit";
-
-    private int mPendingCookieOperations = 0;
-
-    private CookieManager() {
+    /**
+     * @hide Only for use by WebViewProvider implementations
+     */
+    protected CookieManager() {
     }
 
+    @Override
     protected Object clone() throws CloneNotSupportedException {
         throw new CloneNotSupportedException("doesn't implement Cloneable");
     }
@@ -46,14 +39,11 @@
      * before the application instantiates a {@link WebView} instance,
      * {@link CookieSyncManager#createInstance(Context)} must be called
      * first.
-     * 
+     *
      * @return The singleton CookieManager instance
      */
     public static synchronized CookieManager getInstance() {
-        if (sRef == null) {
-            sRef = new CookieManager();
-        }
-        return sRef;
+        return WebViewFactory.getProvider().getCookieManager();
     }
 
     /**
@@ -63,7 +53,7 @@
      *               cookies
      */
     public synchronized void setAcceptCookie(boolean accept) {
-        nativeSetAcceptCookie(accept);
+        throw new MustOverrideException();
     }
 
     /**
@@ -72,39 +62,20 @@
      * @return True if {@link WebView} instances send and accept cookies
      */
     public synchronized boolean acceptCookie() {
-        return nativeAcceptCookie();
+        throw new MustOverrideException();
     }
 
-    /**
+     /**
      * Sets a cookie for the given URL. Any existing cookie with the same host,
      * path and name will be replaced with the new cookie. The cookie being set
      * must not have expired and must not be a session cookie, otherwise it
      * will be ignored.
      * @param url The URL for which the cookie is set
-     * @param value The cookie as a string, using the format of the
-     *              'Set-Cookie' HTTP response header
+     * @param value The cookie as a string, using the format of the 'Set-Cookie'
+     *              HTTP response header
      */
     public void setCookie(String url, String value) {
-        setCookie(url, value, false);
-    }
-
-    /**
-     * See {@link setCookie(String, String)}
-     * @param url The URL for which the cookie is set
-     * @param value The value of the cookie, as a string, using the format of
-     *              the 'Set-Cookie' HTTP response header
-     * @param privateBrowsing Whether to use the private browsing cookie jar
-     */
-    void setCookie(String url, String value, boolean privateBrowsing) {
-        WebAddress uri;
-        try {
-            uri = new WebAddress(url);
-        } catch (ParseException ex) {
-            Log.e(LOGTAG, "Bad address: " + url);
-            return;
-        }
-
-        nativeSetCookie(uri.toString(), value, privateBrowsing);
+        throw new MustOverrideException();
     }
 
     /**
@@ -114,11 +85,11 @@
      *               HTTP request header
      */
     public String getCookie(String url) {
-        return getCookie(url, false);
+        throw new MustOverrideException();
     }
 
     /**
-     * See {@link getCookie(String)}
+     * See {@link #getCookie(String)}
      * @param url The URL for which the cookies are requested
      * @param privateBrowsing Whether to use the private browsing cookie jar
      * @return value The cookies as a string, using the format of the 'Cookie'
@@ -126,15 +97,7 @@
      * @hide Used by Browser, no intention to publish.
      */
     public String getCookie(String url, boolean privateBrowsing) {
-        WebAddress uri;
-        try {
-            uri = new WebAddress(url);
-        } catch (ParseException ex) {
-            Log.e(LOGTAG, "Bad address: " + url);
-            return null;
-        }
-
-        return nativeGetCookie(uri.toString(), privateBrowsing);
+        throw new MustOverrideException();
     }
 
     /**
@@ -146,32 +109,7 @@
      * @hide Used by RequestHandle, no intention to publish.
      */
     public synchronized String getCookie(WebAddress uri) {
-        return nativeGetCookie(uri.toString(), false);
-    }
-
-    /**
-     * Waits for pending operations to completed.
-     */
-    void waitForCookieOperationsToComplete() {
-        // Note that this function is applicable for both the java
-        // and native http stacks, and works correctly with either.
-        synchronized (this) {
-            while (mPendingCookieOperations > 0) {
-                try {
-                    wait();
-                } catch (InterruptedException e) { }
-            }
-        }
-    }
-
-    private synchronized void signalCookieOperationsComplete() {
-        mPendingCookieOperations--;
-        assert mPendingCookieOperations > -1;
-        notify();
-    }
-
-    private synchronized void signalCookieOperationsStart() {
-        mPendingCookieOperations++;
+        throw new MustOverrideException();
     }
 
     /**
@@ -179,21 +117,14 @@
      * date.
      */
     public void removeSessionCookie() {
-        signalCookieOperationsStart();
-        new AsyncTask<Void, Void, Void>() {
-            protected Void doInBackground(Void... none) {
-                nativeRemoveSessionCookie();
-                signalCookieOperationsComplete();
-                return null;
-            }
-        }.execute();
+        throw new MustOverrideException();
     }
 
     /**
      * Removes all cookies.
      */
     public void removeAllCookie() {
-        nativeRemoveAllCookie();
+        throw new MustOverrideException();
     }
 
     /**
@@ -201,32 +132,32 @@
      * @return True if there are stored cookies.
      */
     public synchronized boolean hasCookies() {
-        return hasCookies(false);
+        throw new MustOverrideException();
     }
 
     /**
-     * See {@link hasCookies()}.
+     * See {@link #hasCookies()}.
      * @param privateBrowsing Whether to use the private browsing cookie jar
      * @hide Used by Browser, no intention to publish.
      */
     public synchronized boolean hasCookies(boolean privateBrowsing) {
-        return nativeHasCookies(privateBrowsing);
+        throw new MustOverrideException();
     }
 
     /**
      * Removes all expired cookies.
      */
     public void removeExpiredCookie() {
-        nativeRemoveExpiredCookie();
+        throw new MustOverrideException();
     }
 
     /**
-     * Package level api, called from CookieSyncManager
-     *
      * Flush all cookies managed by the Chrome HTTP stack to flash.
+     *
+     * @hide Package level api, called from CookieSyncManager
      */
-    void flushCookieStore() {
-        nativeFlushCookieStore();
+    protected void flushCookieStore() {
+        throw new MustOverrideException();
     }
 
     /**
@@ -236,7 +167,7 @@
      *         file scheme URLs
      */
     public static boolean allowFileSchemeCookies() {
-        return nativeAcceptFileSchemeCookies();
+        throw new MustOverrideException();
     }
 
     /**
@@ -250,19 +181,6 @@
      * {@link WebView} or CookieManager instance has been created.
      */
     public static void setAcceptFileSchemeCookies(boolean accept) {
-        nativeSetAcceptFileSchemeCookies(accept);
+        throw new MustOverrideException();
     }
-
-    // Native functions
-    private static native boolean nativeAcceptCookie();
-    private static native String nativeGetCookie(String url, boolean privateBrowsing);
-    private static native boolean nativeHasCookies(boolean privateBrowsing);
-    private static native void nativeRemoveAllCookie();
-    private static native void nativeRemoveExpiredCookie();
-    private static native void nativeRemoveSessionCookie();
-    private static native void nativeSetAcceptCookie(boolean accept);
-    private static native void nativeSetCookie(String url, String value, boolean privateBrowsing);
-    private static native void nativeFlushCookieStore();
-    private static native boolean nativeAcceptFileSchemeCookies();
-    private static native void nativeSetAcceptFileSchemeCookies(boolean accept);
 }
diff --git a/core/java/android/webkit/CookieManagerClassic.java b/core/java/android/webkit/CookieManagerClassic.java
new file mode 100644
index 0000000..f1aebcf
--- /dev/null
+++ b/core/java/android/webkit/CookieManagerClassic.java
@@ -0,0 +1,198 @@
+/*
+ * Copyright (C) 2012 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 android.webkit;
+
+import android.net.ParseException;
+import android.net.WebAddress;
+import android.os.AsyncTask;
+import android.util.Log;
+
+class CookieManagerClassic extends CookieManager {
+
+    private static CookieManagerClassic sRef;
+
+    private static final String LOGTAG = "webkit";
+
+    private int mPendingCookieOperations = 0;
+
+    private CookieManagerClassic() {
+    }
+
+    public static synchronized CookieManagerClassic getInstance() {
+        if (sRef == null) {
+            sRef = new CookieManagerClassic();
+        }
+        return sRef;
+    }
+
+    @Override
+    public synchronized void setAcceptCookie(boolean accept) {
+        nativeSetAcceptCookie(accept);
+    }
+
+    @Override
+    public synchronized boolean acceptCookie() {
+        return nativeAcceptCookie();
+    }
+
+    @Override
+    public void setCookie(String url, String value) {
+        setCookie(url, value, false);
+    }
+
+    /**
+     * See {@link #setCookie(String, String)}
+     * @param url The URL for which the cookie is set
+     * @param value The value of the cookie, as a string, using the format of
+     *              the 'Set-Cookie' HTTP response header
+     * @param privateBrowsing Whether to use the private browsing cookie jar
+     */
+    void setCookie(String url, String value, boolean privateBrowsing) {
+        WebAddress uri;
+        try {
+            uri = new WebAddress(url);
+        } catch (ParseException ex) {
+            Log.e(LOGTAG, "Bad address: " + url);
+            return;
+        }
+
+        nativeSetCookie(uri.toString(), value, privateBrowsing);
+    }
+
+    @Override
+    public String getCookie(String url) {
+        return getCookie(url, false);
+    }
+
+    @Override
+    public String getCookie(String url, boolean privateBrowsing) {
+        WebAddress uri;
+        try {
+            uri = new WebAddress(url);
+        } catch (ParseException ex) {
+            Log.e(LOGTAG, "Bad address: " + url);
+            return null;
+        }
+
+        return nativeGetCookie(uri.toString(), privateBrowsing);
+    }
+
+    @Override
+    public synchronized String getCookie(WebAddress uri) {
+        return nativeGetCookie(uri.toString(), false);
+    }
+
+    /**
+     * Waits for pending operations to completed.
+     */
+    void waitForCookieOperationsToComplete() {
+        // Note that this function is applicable for both the java
+        // and native http stacks, and works correctly with either.
+        synchronized (this) {
+            while (mPendingCookieOperations > 0) {
+                try {
+                    wait();
+                } catch (InterruptedException e) { }
+            }
+        }
+    }
+
+    private synchronized void signalCookieOperationsComplete() {
+        mPendingCookieOperations--;
+        assert mPendingCookieOperations > -1;
+        notify();
+    }
+
+    private synchronized void signalCookieOperationsStart() {
+        mPendingCookieOperations++;
+    }
+
+    @Override
+    public void removeSessionCookie() {
+        signalCookieOperationsStart();
+        new AsyncTask<Void, Void, Void>() {
+            @Override
+            protected Void doInBackground(Void... none) {
+                nativeRemoveSessionCookie();
+                signalCookieOperationsComplete();
+                return null;
+            }
+        }.execute();
+    }
+
+    @Override
+    public void removeAllCookie() {
+        nativeRemoveAllCookie();
+    }
+
+    @Override
+    public synchronized boolean hasCookies() {
+        return hasCookies(false);
+    }
+
+    @Override
+    public synchronized boolean hasCookies(boolean privateBrowsing) {
+        return nativeHasCookies(privateBrowsing);
+    }
+
+    @Override
+    public void removeExpiredCookie() {
+        nativeRemoveExpiredCookie();
+    }
+
+    @Override
+    protected void flushCookieStore() {
+        nativeFlushCookieStore();
+    }
+
+    /**
+     * Gets whether the application's {@link WebView} instances send and accept
+     * cookies for file scheme URLs.
+     * @return True if {@link WebView} instances send and accept cookies for
+     *         file scheme URLs
+     */
+    public static boolean allowFileSchemeCookies() {
+        return nativeAcceptFileSchemeCookies();
+    }
+
+    /**
+     * Sets whether the application's {@link WebView} instances should send and
+     * accept cookies for file scheme URLs.
+     * Use of cookies with file scheme URLs is potentially insecure. Do not use
+     * this feature unless you can be sure that no unintentional sharing of
+     * cookie data can take place.
+     * <p>
+     * Note that calls to this method will have no effect if made after a
+     * {@link WebView} or CookieManager instance has been created.
+     */
+    public static void setAcceptFileSchemeCookies(boolean accept) {
+        nativeSetAcceptFileSchemeCookies(accept);
+    }
+
+    // Native functions
+    private static native boolean nativeAcceptCookie();
+    private static native String nativeGetCookie(String url, boolean privateBrowsing);
+    private static native boolean nativeHasCookies(boolean privateBrowsing);
+    private static native void nativeRemoveAllCookie();
+    private static native void nativeRemoveExpiredCookie();
+    private static native void nativeRemoveSessionCookie();
+    private static native void nativeSetAcceptCookie(boolean accept);
+    private static native void nativeSetCookie(String url, String value, boolean privateBrowsing);
+    private static native void nativeFlushCookieStore();
+    private static native boolean nativeAcceptFileSchemeCookies();
+    private static native void nativeSetAcceptFileSchemeCookies(boolean accept);
+}
diff --git a/core/java/android/webkit/GeolocationPermissions.java b/core/java/android/webkit/GeolocationPermissions.java
index a916884..cd5c9d1 100755
--- a/core/java/android/webkit/GeolocationPermissions.java
+++ b/core/java/android/webkit/GeolocationPermissions.java
@@ -16,13 +16,7 @@
 
 package android.webkit;
 
-import android.os.Handler;
-import android.os.Message;
-
-import java.util.HashMap;
-import java.util.Map;
 import java.util.Set;
-import java.util.Vector;
 
 /**
  * This class is used to manage permissions for the WebView's Geolocation
@@ -44,9 +38,6 @@
  * The methods of this class can be used to modify and interrogate the stored
  * Geolocation permissions at any time.
  */
-// This class is the Java counterpart of the WebKit C++ GeolocationPermissions
-// class. It simply marshals calls from the UI thread to the WebKit thread.
-//
 // Within WebKit, Geolocation permissions may be applied either temporarily
 // (for the duration of the page) or permanently. This class deals only with
 // permanent permissions.
@@ -68,144 +59,12 @@
         public void invoke(String origin, boolean allow, boolean retain);
     };
 
-    // Global instance
-    private static GeolocationPermissions sInstance;
-
-    private Handler mHandler;
-    private Handler mUIHandler;
-
-    // A queue to store messages until the handler is ready.
-    private Vector<Message> mQueuedMessages;
-
-    // Message ids
-    static final int GET_ORIGINS = 0;
-    static final int GET_ALLOWED = 1;
-    static final int CLEAR = 2;
-    static final int ALLOW = 3;
-    static final int CLEAR_ALL = 4;
-
-    // Message ids on the UI thread
-    static final int RETURN_ORIGINS = 0;
-    static final int RETURN_ALLOWED = 1;
-
-    private static final String ORIGINS = "origins";
-    private static final String ORIGIN = "origin";
-    private static final String CALLBACK = "callback";
-    private static final String ALLOWED = "allowed";
-
     /**
      * Get the singleton instance of this class.
      * @return The singleton {@link GeolocationPermissions} instance.
      */
     public static GeolocationPermissions getInstance() {
-      if (sInstance == null) {
-          sInstance = new GeolocationPermissions();
-      }
-      return sInstance;
-    }
-
-    /**
-     * Creates the UI message handler. Must be called on the UI thread.
-     * @hide
-     */
-    public void createUIHandler() {
-        if (mUIHandler == null) {
-            mUIHandler = new Handler() {
-                @Override
-                public void handleMessage(Message msg) {
-                    // Runs on the UI thread.
-                    switch (msg.what) {
-                        case RETURN_ORIGINS: {
-                            Map values = (Map) msg.obj;
-                            Set<String> origins = (Set<String>) values.get(ORIGINS);
-                            ValueCallback<Set<String> > callback = (ValueCallback<Set<String> >) values.get(CALLBACK);
-                            callback.onReceiveValue(origins);
-                        } break;
-                        case RETURN_ALLOWED: {
-                            Map values = (Map) msg.obj;
-                            Boolean allowed = (Boolean) values.get(ALLOWED);
-                            ValueCallback<Boolean> callback = (ValueCallback<Boolean>) values.get(CALLBACK);
-                            callback.onReceiveValue(allowed);
-                        } break;
-                    }
-                }
-            };
-        }
-    }
-
-    /**
-     * Creates the message handler. Must be called on the WebKit thread.
-     * @hide
-     */
-    public synchronized void createHandler() {
-        if (mHandler == null) {
-            mHandler = new Handler() {
-                @Override
-                public void handleMessage(Message msg) {
-                    // Runs on the WebKit thread.
-                    switch (msg.what) {
-                        case GET_ORIGINS: {
-                            Set origins = nativeGetOrigins();
-                            ValueCallback callback = (ValueCallback) msg.obj;
-                            Map values = new HashMap<String, Object>();
-                            values.put(CALLBACK, callback);
-                            values.put(ORIGINS, origins);
-                            postUIMessage(Message.obtain(null, RETURN_ORIGINS, values));
-                            } break;
-                        case GET_ALLOWED: {
-                            Map values = (Map) msg.obj;
-                            String origin = (String) values.get(ORIGIN);
-                            ValueCallback callback = (ValueCallback) values.get(CALLBACK);
-                            boolean allowed = nativeGetAllowed(origin);
-                            Map retValues = new HashMap<String, Object>();
-                            retValues.put(CALLBACK, callback);
-                            retValues.put(ALLOWED, Boolean.valueOf(allowed));
-                            postUIMessage(Message.obtain(null, RETURN_ALLOWED, retValues));
-                            } break;
-                        case CLEAR:
-                            nativeClear((String) msg.obj);
-                            break;
-                        case ALLOW:
-                            nativeAllow((String) msg.obj);
-                            break;
-                        case CLEAR_ALL:
-                            nativeClearAll();
-                            break;
-                    }
-                }
-            };
-
-            // Handle the queued messages
-            if (mQueuedMessages != null) {
-                while (!mQueuedMessages.isEmpty()) {
-                    mHandler.sendMessage(mQueuedMessages.remove(0));
-                }
-                mQueuedMessages = null;
-            }
-        }
-    }
-
-    /**
-     * Utility function to send a message to our handler.
-     */
-    private synchronized void postMessage(Message msg) {
-        if (mHandler == null) {
-            if (mQueuedMessages == null) {
-                mQueuedMessages = new Vector<Message>();
-            }
-            mQueuedMessages.add(msg);
-        } else {
-            mHandler.sendMessage(msg);
-        }
-    }
-
-    /**
-     * Utility function to send a message to the handler on the UI thread
-     */
-    private void postUIMessage(Message msg) {
-        if (mUIHandler != null) {
-            mUIHandler.sendMessage(msg);
-        }
+      return WebViewFactory.getProvider().getGeolocationPermissions();
     }
 
     /**
@@ -222,14 +81,7 @@
     // (Database, Geolocation etc) do so, it's safe to match up origins based
     // on this string.
     public void getOrigins(ValueCallback<Set<String> > callback) {
-        if (callback != null) {
-            if (WebViewCore.THREAD_NAME.equals(Thread.currentThread().getName())) {
-                Set origins = nativeGetOrigins();
-                callback.onReceiveValue(origins);
-            } else {
-                postMessage(Message.obtain(null, GET_ORIGINS, callback));
-            }
-        }
+        // Must be a no-op for backward compatibility: see the hidden constructor for reason.
     }
 
     /**
@@ -243,54 +95,30 @@
      *                 Geolocation API.
      */
     public void getAllowed(String origin, ValueCallback<Boolean> callback) {
-        if (callback == null) {
-            return;
-        }
-        if (origin == null) {
-            callback.onReceiveValue(null);
-            return;
-        }
-        if (WebViewCore.THREAD_NAME.equals(Thread.currentThread().getName())) {
-            boolean allowed = nativeGetAllowed(origin);
-            callback.onReceiveValue(Boolean.valueOf(allowed));
-        } else {
-            Map values = new HashMap<String, Object>();
-            values.put(ORIGIN, origin);
-            values.put(CALLBACK, callback);
-            postMessage(Message.obtain(null, GET_ALLOWED, values));
-        }
+        // Must be a no-op for backward compatibility: see the hidden constructor for reason.
     }
 
     /**
      * Clear the Geolocation permission state for the specified origin.
      * @param origin The origin for which Geolocation permissions are cleared.
      */
-    // This method may be called before the WebKit
-    // thread has intialized the message handler. Messages will be queued until
-    // this time.
     public void clear(String origin) {
-        // Called on the UI thread.
-        postMessage(Message.obtain(null, CLEAR, origin));
+        // Must be a no-op for backward compatibility: see the hidden constructor for reason.
     }
 
     /**
      * Allow the specified origin to use the Geolocation API.
      * @param origin The origin for which Geolocation API use is allowed.
      */
-    // This method may be called before the WebKit
-    // thread has intialized the message handler. Messages will be queued until
-    // this time.
     public void allow(String origin) {
-        // Called on the UI thread.
-        postMessage(Message.obtain(null, ALLOW, origin));
+        // Must be a no-op for backward compatibility: see the hidden constructor for reason.
     }
 
     /**
      * Clear the Geolocation permission state for all origins.
      */
     public void clearAll() {
-        // Called on the UI thread.
-        postMessage(Message.obtain(null, CLEAR_ALL));
+        // Must be a no-op for backward compatibility: see the hidden constructor for reason.
     }
 
     /**
@@ -299,14 +127,7 @@
      * Note this constructor was erroneously public and published in SDK levels prior to 16, but
      * applications using it would receive a non-functional instance of this class (there was no
      * way to call createHandler() and createUIHandler(), so it would not work).
-     * @hide
+     * @hide Only for use by WebViewProvider implementations
      */
     public GeolocationPermissions() {}
-
-    // Native functions, run on the WebKit thread.
-    private static native Set nativeGetOrigins();
-    private static native boolean nativeGetAllowed(String origin);
-    private static native void nativeClear(String origin);
-    private static native void nativeAllow(String origin);
-    private static native void nativeClearAll();
 }
diff --git a/core/java/android/webkit/GeolocationPermissionsClassic.java b/core/java/android/webkit/GeolocationPermissionsClassic.java
new file mode 100755
index 0000000..8a9df39
--- /dev/null
+++ b/core/java/android/webkit/GeolocationPermissionsClassic.java
@@ -0,0 +1,234 @@
+/*
+ * Copyright (C) 2012 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 android.webkit;
+
+import android.os.Handler;
+import android.os.Message;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+import java.util.Vector;
+
+// This class is the Java counterpart of the WebKit C++ GeolocationPermissions
+// class. It simply marshals calls from the UI thread to the WebKit thread.
+final class GeolocationPermissionsClassic extends GeolocationPermissions {
+    private Handler mHandler;
+    private Handler mUIHandler;
+
+    // A queue to store messages until the handler is ready.
+    private Vector<Message> mQueuedMessages;
+
+    // Message ids
+    static final int GET_ORIGINS = 0;
+    static final int GET_ALLOWED = 1;
+    static final int CLEAR = 2;
+    static final int ALLOW = 3;
+    static final int CLEAR_ALL = 4;
+
+    // Message ids on the UI thread
+    static final int RETURN_ORIGINS = 0;
+    static final int RETURN_ALLOWED = 1;
+
+    private static final String ORIGINS = "origins";
+    private static final String ORIGIN = "origin";
+    private static final String CALLBACK = "callback";
+    private static final String ALLOWED = "allowed";
+
+    // Global instance
+    private static GeolocationPermissionsClassic sInstance;
+
+    public static GeolocationPermissionsClassic getInstance() {
+        if (sInstance == null) {
+            sInstance = new GeolocationPermissionsClassic();
+        }
+        return sInstance;
+      }
+
+    /**
+     * Creates the UI message handler. Must be called on the UI thread.
+     * @hide
+     */
+    public void createUIHandler() {
+        if (mUIHandler == null) {
+            mUIHandler = new Handler() {
+                @Override
+                public void handleMessage(Message msg) {
+                    // Runs on the UI thread.
+                    switch (msg.what) {
+                        case RETURN_ORIGINS: {
+                            Map values = (Map) msg.obj;
+                            Set<String> origins = (Set<String>) values.get(ORIGINS);
+                            ValueCallback<Set<String> > callback = (ValueCallback<Set<String> >) values.get(CALLBACK);
+                            callback.onReceiveValue(origins);
+                        } break;
+                        case RETURN_ALLOWED: {
+                            Map values = (Map) msg.obj;
+                            Boolean allowed = (Boolean) values.get(ALLOWED);
+                            ValueCallback<Boolean> callback = (ValueCallback<Boolean>) values.get(CALLBACK);
+                            callback.onReceiveValue(allowed);
+                        } break;
+                    }
+                }
+            };
+        }
+    }
+
+    /**
+     * Creates the message handler. Must be called on the WebKit thread.
+     * @hide
+     */
+    public synchronized void createHandler() {
+        if (mHandler == null) {
+            mHandler = new Handler() {
+                @Override
+                public void handleMessage(Message msg) {
+                    // Runs on the WebKit thread.
+                    switch (msg.what) {
+                        case GET_ORIGINS: {
+                            Set origins = nativeGetOrigins();
+                            ValueCallback callback = (ValueCallback) msg.obj;
+                            Map values = new HashMap<String, Object>();
+                            values.put(CALLBACK, callback);
+                            values.put(ORIGINS, origins);
+                            postUIMessage(Message.obtain(null, RETURN_ORIGINS, values));
+                            } break;
+                        case GET_ALLOWED: {
+                            Map values = (Map) msg.obj;
+                            String origin = (String) values.get(ORIGIN);
+                            ValueCallback callback = (ValueCallback) values.get(CALLBACK);
+                            boolean allowed = nativeGetAllowed(origin);
+                            Map retValues = new HashMap<String, Object>();
+                            retValues.put(CALLBACK, callback);
+                            retValues.put(ALLOWED, Boolean.valueOf(allowed));
+                            postUIMessage(Message.obtain(null, RETURN_ALLOWED, retValues));
+                            } break;
+                        case CLEAR:
+                            nativeClear((String) msg.obj);
+                            break;
+                        case ALLOW:
+                            nativeAllow((String) msg.obj);
+                            break;
+                        case CLEAR_ALL:
+                            nativeClearAll();
+                            break;
+                    }
+                }
+            };
+
+            // Handle the queued messages
+            if (mQueuedMessages != null) {
+                while (!mQueuedMessages.isEmpty()) {
+                    mHandler.sendMessage(mQueuedMessages.remove(0));
+                }
+                mQueuedMessages = null;
+            }
+        }
+    }
+
+    /**
+     * Utility function to send a message to our handler.
+     */
+    private synchronized void postMessage(Message msg) {
+        if (mHandler == null) {
+            if (mQueuedMessages == null) {
+                mQueuedMessages = new Vector<Message>();
+            }
+            mQueuedMessages.add(msg);
+        } else {
+            mHandler.sendMessage(msg);
+        }
+    }
+
+    /**
+     * Utility function to send a message to the handler on the UI thread
+     */
+    private void postUIMessage(Message msg) {
+        if (mUIHandler != null) {
+            mUIHandler.sendMessage(msg);
+        }
+    }
+
+    // Note that we represent the origins as strings. These are created using
+    // WebCore::SecurityOrigin::toString(). As long as all 'HTML 5 modules'
+    // (Database, Geolocation etc) do so, it's safe to match up origins based
+    // on this string.
+    @Override
+    public void getOrigins(ValueCallback<Set<String> > callback) {
+        if (callback != null) {
+            if (WebViewCore.THREAD_NAME.equals(Thread.currentThread().getName())) {
+                Set origins = nativeGetOrigins();
+                callback.onReceiveValue(origins);
+            } else {
+                postMessage(Message.obtain(null, GET_ORIGINS, callback));
+            }
+        }
+    }
+
+    @Override
+    public void getAllowed(String origin, ValueCallback<Boolean> callback) {
+        if (callback == null) {
+            return;
+        }
+        if (origin == null) {
+            callback.onReceiveValue(null);
+            return;
+        }
+        if (WebViewCore.THREAD_NAME.equals(Thread.currentThread().getName())) {
+            boolean allowed = nativeGetAllowed(origin);
+            callback.onReceiveValue(Boolean.valueOf(allowed));
+        } else {
+            Map values = new HashMap<String, Object>();
+            values.put(ORIGIN, origin);
+            values.put(CALLBACK, callback);
+            postMessage(Message.obtain(null, GET_ALLOWED, values));
+        }
+    }
+
+    // This method may be called before the WebKit
+    // thread has intialized the message handler. Messages will be queued until
+    // this time.
+    @Override
+    public void clear(String origin) {
+        // Called on the UI thread.
+        postMessage(Message.obtain(null, CLEAR, origin));
+    }
+
+    // This method may be called before the WebKit
+    // thread has intialized the message handler. Messages will be queued until
+    // this time.
+    @Override
+    public void allow(String origin) {
+        // Called on the UI thread.
+        postMessage(Message.obtain(null, ALLOW, origin));
+    }
+
+    @Override
+    public void clearAll() {
+        // Called on the UI thread.
+        postMessage(Message.obtain(null, CLEAR_ALL));
+    }
+
+    GeolocationPermissionsClassic() {}
+
+    // Native functions, run on the WebKit thread.
+    private static native Set nativeGetOrigins();
+    private static native boolean nativeGetAllowed(String origin);
+    private static native void nativeClear(String origin);
+    private static native void nativeAllow(String origin);
+    private static native void nativeClearAll();
+}
diff --git a/core/java/android/webkit/MustOverrideException.java b/core/java/android/webkit/MustOverrideException.java
new file mode 100644
index 0000000..0643bf0
--- /dev/null
+++ b/core/java/android/webkit/MustOverrideException.java
@@ -0,0 +1,25 @@
+/*
+ * Copyright (C) 2012 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 android.webkit;
+
+// TODO: Remove MustOverrideException and make all methods throwing it abstract instead;
+// needs API file update.
+class MustOverrideException extends RuntimeException {
+    MustOverrideException() {
+        super("abstract function called: must be overriden!");
+    }
+}
\ No newline at end of file
diff --git a/core/java/android/webkit/WebIconDatabase.java b/core/java/android/webkit/WebIconDatabase.java
index 9299b71..99f20ff 100644
--- a/core/java/android/webkit/WebIconDatabase.java
+++ b/core/java/android/webkit/WebIconDatabase.java
@@ -17,16 +17,7 @@
 package android.webkit;
 
 import android.content.ContentResolver;
-import android.database.Cursor;
 import android.graphics.Bitmap;
-import android.os.Handler;
-import android.os.Message;
-import android.provider.Browser;
-import android.util.Log;
-
-import java.io.File;
-import java.util.HashMap;
-import java.util.Vector;
 
 /**
  * Functions for manipulating the icon database used by WebView.
@@ -36,149 +27,6 @@
  * single object.
  */
 public class WebIconDatabase {
-    private static final String LOGTAG = "WebIconDatabase";
-    // Global instance of a WebIconDatabase
-    private static WebIconDatabase sIconDatabase;
-    // EventHandler for handling messages before and after the WebCore thread is
-    // ready.
-    private final EventHandler mEventHandler = new EventHandler();
-
-    // Class to handle messages before WebCore is ready
-    private static class EventHandler extends Handler {
-        // Message ids
-        static final int OPEN         = 0;
-        static final int CLOSE        = 1;
-        static final int REMOVE_ALL   = 2;
-        static final int REQUEST_ICON = 3;
-        static final int RETAIN_ICON  = 4;
-        static final int RELEASE_ICON = 5;
-        static final int BULK_REQUEST_ICON = 6;
-        // Message for dispatching icon request results
-        private static final int ICON_RESULT = 10;
-        // Actual handler that runs in WebCore thread
-        private Handler mHandler;
-        // Vector of messages before the WebCore thread is ready
-        private Vector<Message> mMessages = new Vector<Message>();
-        // Class to handle a result dispatch
-        private class IconResult {
-            private final String mUrl;
-            private final Bitmap mIcon;
-            private final IconListener mListener;
-            IconResult(String url, Bitmap icon, IconListener l) {
-                mUrl = url;
-                mIcon = icon;
-                mListener = l;
-            }
-            void dispatch() {
-                mListener.onReceivedIcon(mUrl, mIcon);
-            }
-        }
-
-        @Override
-        public void handleMessage(Message msg) {
-            // Note: This is the message handler for the UI thread.
-            switch (msg.what) {
-                case ICON_RESULT:
-                    ((IconResult) msg.obj).dispatch();
-                    break;
-            }
-        }
-
-        // Called by WebCore thread to create the actual handler
-        private synchronized void createHandler() {
-            if (mHandler == null) {
-                mHandler = new Handler() {
-                    @Override
-                    public void handleMessage(Message msg) {
-                        // Note: This is the message handler for the WebCore
-                        // thread.
-                        switch (msg.what) {
-                            case OPEN:
-                                nativeOpen((String) msg.obj);
-                                break;
-
-                            case CLOSE:
-                                nativeClose();
-                                break;
-
-                            case REMOVE_ALL:
-                                nativeRemoveAllIcons();
-                                break;
-
-                            case REQUEST_ICON:
-                                IconListener l = (IconListener) msg.obj;
-                                String url = msg.getData().getString("url");
-                                requestIconAndSendResult(url, l);
-                                break;
-
-                            case BULK_REQUEST_ICON:
-                                bulkRequestIcons(msg);
-                                break;
-
-                            case RETAIN_ICON:
-                                nativeRetainIconForPageUrl((String) msg.obj);
-                                break;
-
-                            case RELEASE_ICON:
-                                nativeReleaseIconForPageUrl((String) msg.obj);
-                                break;
-                        }
-                    }
-                };
-                // Transfer all pending messages
-                for (int size = mMessages.size(); size > 0; size--) {
-                    mHandler.sendMessage(mMessages.remove(0));
-                }
-                mMessages = null;
-            }
-        }
-
-        private synchronized boolean hasHandler() {
-            return mHandler != null;
-        }
-
-        private synchronized void postMessage(Message msg) {
-            if (mMessages != null) {
-                mMessages.add(msg);
-            } else {
-                mHandler.sendMessage(msg);
-            }
-        }
-
-        private void bulkRequestIcons(Message msg) {
-            HashMap map = (HashMap) msg.obj;
-            IconListener listener = (IconListener) map.get("listener");
-            ContentResolver cr = (ContentResolver) map.get("contentResolver");
-            String where = (String) map.get("where");
-
-            Cursor c = null;
-            try {
-                c = cr.query(
-                        Browser.BOOKMARKS_URI,
-                        new String[] { Browser.BookmarkColumns.URL },
-                        where, null, null);
-                if (c.moveToFirst()) {
-                    do {
-                        String url = c.getString(0);
-                        requestIconAndSendResult(url, listener);
-                    } while (c.moveToNext());
-                }
-            } catch (IllegalStateException e) {
-                Log.e(LOGTAG, "BulkRequestIcons", e);
-            } finally {
-                if (c != null) c.close();
-            }
-        }
-
-        private void requestIconAndSendResult(String url, IconListener listener) {
-            Bitmap icon = nativeIconForPageUrl(url);
-            if (icon != null) {
-                sendMessage(obtainMessage(ICON_RESULT,
-                            new IconResult(url, icon, listener)));
-            }
-        }
-    }
-
     /**
      * Interface for receiving icons from the database.
      */
@@ -197,31 +45,21 @@
      * @param path The directory path where the icon database will be stored.
      */
     public void open(String path) {
-        if (path != null) {
-            // Make the directories and parents if they don't exist
-            File db = new File(path);
-            if (!db.exists()) {
-                db.mkdirs();
-            }
-            mEventHandler.postMessage(
-                    Message.obtain(null, EventHandler.OPEN, db.getAbsolutePath()));
-        }
+        throw new MustOverrideException();
     }
 
     /**
      * Close the shared instance of the icon database.
      */
     public void close() {
-        mEventHandler.postMessage(
-                Message.obtain(null, EventHandler.CLOSE));
+        throw new MustOverrideException();
     }
 
     /**
      * Removes all the icons in the database.
      */
     public void removeAllIcons() {
-        mEventHandler.postMessage(
-                Message.obtain(null, EventHandler.REMOVE_ALL));
+        throw new MustOverrideException();
     }
 
     /**
@@ -231,36 +69,14 @@
      * @param listener An implementation on IconListener to receive the result.
      */
     public void requestIconForPageUrl(String url, IconListener listener) {
-        if (listener == null || url == null) {
-            return;
-        }
-        Message msg = Message.obtain(null, EventHandler.REQUEST_ICON, listener);
-        msg.getData().putString("url", url);
-        mEventHandler.postMessage(msg);
+        throw new MustOverrideException();
     }
 
     /** {@hide}
      */
     public void bulkRequestIconForPageUrl(ContentResolver cr, String where,
             IconListener listener) {
-        if (listener == null) {
-            return;
-        }
-
-        // Special case situation: we don't want to add this message to the
-        // queue if there is no handler because we may never have a real
-        // handler to service the messages and the cursor will never get
-        // closed.
-        if (mEventHandler.hasHandler()) {
-            // Don't use Bundle as it is parcelable.
-            HashMap<String, Object> map = new HashMap<String, Object>();
-            map.put("contentResolver", cr);
-            map.put("where", where);
-            map.put("listener", listener);
-            Message msg =
-                    Message.obtain(null, EventHandler.BULK_REQUEST_ICON, map);
-            mEventHandler.postMessage(msg);
-        }
+        throw new MustOverrideException();
     }
 
     /**
@@ -268,10 +84,7 @@
      * @param url The page's url.
      */
     public void retainIconForPageUrl(String url) {
-        if (url != null) {
-            mEventHandler.postMessage(
-                    Message.obtain(null, EventHandler.RETAIN_ICON, url));
-        }
+        throw new MustOverrideException();
     }
 
     /**
@@ -279,10 +92,7 @@
      * @param url The page's url.
      */
     public void releaseIconForPageUrl(String url) {
-        if (url != null) {
-            mEventHandler.postMessage(
-                    Message.obtain(null, EventHandler.RELEASE_ICON, url));
-        }
+        throw new MustOverrideException();
     }
 
     /**
@@ -293,30 +103,11 @@
      */
     public static WebIconDatabase getInstance() {
         // XXX: Must be created in the UI thread.
-        if (sIconDatabase == null) {
-            sIconDatabase = new WebIconDatabase();
-        }
-        return sIconDatabase;
+        return WebViewFactory.getProvider().getWebIconDatabase();
     }
 
     /**
-     * Create the internal handler and transfer all pending messages.
-     * XXX: Called by WebCore thread only!
+     * @hide Only for use by WebViewProvider implementations
      */
-    /*package*/ void createHandler() {
-        mEventHandler.createHandler();
-    }
-
-    /**
-     * Private constructor to avoid anyone else creating an instance.
-     */
-    private WebIconDatabase() {}
-
-    // Native functions
-    private static native void nativeOpen(String path);
-    private static native void nativeClose();
-    private static native void nativeRemoveAllIcons();
-    private static native Bitmap nativeIconForPageUrl(String url);
-    private static native void nativeRetainIconForPageUrl(String url);
-    private static native void nativeReleaseIconForPageUrl(String url);
+    protected WebIconDatabase() {}
 }
diff --git a/core/java/android/webkit/WebIconDatabaseClassic.java b/core/java/android/webkit/WebIconDatabaseClassic.java
new file mode 100644
index 0000000..d6c4c33
--- /dev/null
+++ b/core/java/android/webkit/WebIconDatabaseClassic.java
@@ -0,0 +1,289 @@
+/*
+ * Copyright (C) 2012 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 android.webkit;
+
+import android.content.ContentResolver;
+import android.database.Cursor;
+import android.graphics.Bitmap;
+import android.os.Handler;
+import android.os.Message;
+import android.provider.Browser;
+import android.util.Log;
+
+import java.io.File;
+import java.util.HashMap;
+import java.util.Vector;
+
+class WebIconDatabaseClassic extends WebIconDatabase {
+    private static final String LOGTAG = "WebIconDatabase";
+    // Global instance of a WebIconDatabase
+    private static WebIconDatabaseClassic sIconDatabase;
+    // EventHandler for handling messages before and after the WebCore thread is
+    // ready.
+    private final EventHandler mEventHandler = new EventHandler();
+
+    // Class to handle messages before WebCore is ready
+    private static class EventHandler extends Handler {
+        // Message ids
+        static final int OPEN         = 0;
+        static final int CLOSE        = 1;
+        static final int REMOVE_ALL   = 2;
+        static final int REQUEST_ICON = 3;
+        static final int RETAIN_ICON  = 4;
+        static final int RELEASE_ICON = 5;
+        static final int BULK_REQUEST_ICON = 6;
+        // Message for dispatching icon request results
+        private static final int ICON_RESULT = 10;
+        // Actual handler that runs in WebCore thread
+        private Handler mHandler;
+        // Vector of messages before the WebCore thread is ready
+        private Vector<Message> mMessages = new Vector<Message>();
+        // Class to handle a result dispatch
+        private class IconResult {
+            private final String mUrl;
+            private final Bitmap mIcon;
+            private final IconListener mListener;
+            IconResult(String url, Bitmap icon, IconListener l) {
+                mUrl = url;
+                mIcon = icon;
+                mListener = l;
+            }
+            void dispatch() {
+                mListener.onReceivedIcon(mUrl, mIcon);
+            }
+        }
+
+        @Override
+        public void handleMessage(Message msg) {
+            // Note: This is the message handler for the UI thread.
+            switch (msg.what) {
+                case ICON_RESULT:
+                    ((IconResult) msg.obj).dispatch();
+                    break;
+            }
+        }
+
+        // Called by WebCore thread to create the actual handler
+        private synchronized void createHandler() {
+            if (mHandler == null) {
+                mHandler = new Handler() {
+                    @Override
+                    public void handleMessage(Message msg) {
+                        // Note: This is the message handler for the WebCore
+                        // thread.
+                        switch (msg.what) {
+                            case OPEN:
+                                nativeOpen((String) msg.obj);
+                                break;
+
+                            case CLOSE:
+                                nativeClose();
+                                break;
+
+                            case REMOVE_ALL:
+                                nativeRemoveAllIcons();
+                                break;
+
+                            case REQUEST_ICON:
+                                IconListener l = (IconListener) msg.obj;
+                                String url = msg.getData().getString("url");
+                                requestIconAndSendResult(url, l);
+                                break;
+
+                            case BULK_REQUEST_ICON:
+                                bulkRequestIcons(msg);
+                                break;
+
+                            case RETAIN_ICON:
+                                nativeRetainIconForPageUrl((String) msg.obj);
+                                break;
+
+                            case RELEASE_ICON:
+                                nativeReleaseIconForPageUrl((String) msg.obj);
+                                break;
+                        }
+                    }
+                };
+                // Transfer all pending messages
+                for (int size = mMessages.size(); size > 0; size--) {
+                    mHandler.sendMessage(mMessages.remove(0));
+                }
+                mMessages = null;
+            }
+        }
+
+        private synchronized boolean hasHandler() {
+            return mHandler != null;
+        }
+
+        private synchronized void postMessage(Message msg) {
+            if (mMessages != null) {
+                mMessages.add(msg);
+            } else {
+                mHandler.sendMessage(msg);
+            }
+        }
+
+        private void bulkRequestIcons(Message msg) {
+            HashMap map = (HashMap) msg.obj;
+            IconListener listener = (IconListener) map.get("listener");
+            ContentResolver cr = (ContentResolver) map.get("contentResolver");
+            String where = (String) map.get("where");
+
+            Cursor c = null;
+            try {
+                c = cr.query(
+                        Browser.BOOKMARKS_URI,
+                        new String[] { Browser.BookmarkColumns.URL },
+                        where, null, null);
+                if (c.moveToFirst()) {
+                    do {
+                        String url = c.getString(0);
+                        requestIconAndSendResult(url, listener);
+                    } while (c.moveToNext());
+                }
+            } catch (IllegalStateException e) {
+                Log.e(LOGTAG, "BulkRequestIcons", e);
+            } finally {
+                if (c != null) c.close();
+            }
+        }
+
+        private void requestIconAndSendResult(String url, IconListener listener) {
+            Bitmap icon = nativeIconForPageUrl(url);
+            if (icon != null) {
+                sendMessage(obtainMessage(ICON_RESULT,
+                            new IconResult(url, icon, listener)));
+            }
+        }
+    }
+
+    @Override
+    public void open(String path) {
+        if (path != null) {
+            // Make the directories and parents if they don't exist
+            File db = new File(path);
+            if (!db.exists()) {
+                db.mkdirs();
+            }
+            mEventHandler.postMessage(
+                    Message.obtain(null, EventHandler.OPEN, db.getAbsolutePath()));
+        }
+    }
+
+    @Override
+    public void close() {
+        mEventHandler.postMessage(
+                Message.obtain(null, EventHandler.CLOSE));
+    }
+
+    @Override
+    public void removeAllIcons() {
+        mEventHandler.postMessage(
+                Message.obtain(null, EventHandler.REMOVE_ALL));
+    }
+
+    /**
+     * Request the Bitmap representing the icon for the given page
+     * url. If the icon exists, the listener will be called with the result.
+     * @param url The page's url.
+     * @param listener An implementation on IconListener to receive the result.
+     */
+    public void requestIconForPageUrl(String url, IconListener listener) {
+        if (listener == null || url == null) {
+            return;
+        }
+        Message msg = Message.obtain(null, EventHandler.REQUEST_ICON, listener);
+        msg.getData().putString("url", url);
+        mEventHandler.postMessage(msg);
+    }
+
+    /** {@hide}
+     */
+    public void bulkRequestIconForPageUrl(ContentResolver cr, String where,
+            IconListener listener) {
+        if (listener == null) {
+            return;
+        }
+
+        // Special case situation: we don't want to add this message to the
+        // queue if there is no handler because we may never have a real
+        // handler to service the messages and the cursor will never get
+        // closed.
+        if (mEventHandler.hasHandler()) {
+            // Don't use Bundle as it is parcelable.
+            HashMap<String, Object> map = new HashMap<String, Object>();
+            map.put("contentResolver", cr);
+            map.put("where", where);
+            map.put("listener", listener);
+            Message msg =
+                    Message.obtain(null, EventHandler.BULK_REQUEST_ICON, map);
+            mEventHandler.postMessage(msg);
+        }
+    }
+
+    @Override
+    public void retainIconForPageUrl(String url) {
+        if (url != null) {
+            mEventHandler.postMessage(
+                    Message.obtain(null, EventHandler.RETAIN_ICON, url));
+        }
+    }
+
+    @Override
+    public void releaseIconForPageUrl(String url) {
+        if (url != null) {
+            mEventHandler.postMessage(
+                    Message.obtain(null, EventHandler.RELEASE_ICON, url));
+        }
+    }
+
+    /**
+     * Get the global instance of WebIconDatabase.
+     * @return A single instance of WebIconDatabase. It will be the same
+     *         instance for the current process each time this method is
+     *         called.
+     */
+    public static WebIconDatabaseClassic getInstance() {
+        // XXX: Must be created in the UI thread.
+        if (sIconDatabase == null) {
+            sIconDatabase = new WebIconDatabaseClassic();
+        }
+        return sIconDatabase;
+    }
+
+    /**
+     * Create the internal handler and transfer all pending messages.
+     * XXX: Called by WebCore thread only!
+     */
+    /*package*/ void createHandler() {
+        mEventHandler.createHandler();
+    }
+
+    /**
+     * Private constructor to avoid anyone else creating an instance.
+     */
+    private WebIconDatabaseClassic() {}
+
+    // Native functions
+    private static native void nativeOpen(String path);
+    private static native void nativeClose();
+    private static native void nativeRemoveAllIcons();
+    private static native Bitmap nativeIconForPageUrl(String url);
+    private static native void nativeRetainIconForPageUrl(String url);
+    private static native void nativeReleaseIconForPageUrl(String url);
+}
diff --git a/core/java/android/webkit/WebSettings.java b/core/java/android/webkit/WebSettings.java
index 4cd828e..1bbf00f 100644
--- a/core/java/android/webkit/WebSettings.java
+++ b/core/java/android/webkit/WebSettings.java
@@ -27,18 +27,10 @@
  * been destroyed, any method call on WebSettings will throw an
  * IllegalStateException.
  */
-// This is (effectively) an abstract base class; concrete WebViewProviders must
+// This is an abstract base class: concrete WebViewProviders must
 // create a class derived from this, and return an instance of it in the
 // WebViewProvider.getWebSettingsProvider() method implementation.
 public abstract class WebSettings {
-    // TODO: Remove MustOverrideException and make all methods throwing it abstract instead;
-    // needs API file update.
-    private static class MustOverrideException extends RuntimeException {
-        MustOverrideException() {
-            super("abstract function called: must be overriden!");
-        }
-    }
-
     /**
      * Enum for controlling the layout of html.
      * NORMAL means no rendering changes.
diff --git a/core/java/android/webkit/WebStorage.java b/core/java/android/webkit/WebStorage.java
index 041791b..c46d161 100644
--- a/core/java/android/webkit/WebStorage.java
+++ b/core/java/android/webkit/WebStorage.java
@@ -16,13 +16,7 @@
 
 package android.webkit;
 
-import android.os.Handler;
-import android.os.Message;
-
-import java.util.Collection;
-import java.util.HashMap;
 import java.util.Map;
-import java.util.Set;
 
 /**
  * This class is used to manage the JavaScript storage APIs provided by the
@@ -56,34 +50,6 @@
         public void updateQuota(long newQuota);
     };
 
-    // Global instance of a WebStorage
-    private static WebStorage sWebStorage;
-
-    // Message ids
-    static final int UPDATE = 0;
-    static final int SET_QUOTA_ORIGIN = 1;
-    static final int DELETE_ORIGIN = 2;
-    static final int DELETE_ALL = 3;
-    static final int GET_ORIGINS = 4;
-    static final int GET_USAGE_ORIGIN = 5;
-    static final int GET_QUOTA_ORIGIN = 6;
-
-    // Message ids on the UI thread
-    static final int RETURN_ORIGINS = 0;
-    static final int RETURN_USAGE_ORIGIN = 1;
-    static final int RETURN_QUOTA_ORIGIN = 2;
-
-    private static final String ORIGINS = "origins";
-    private static final String ORIGIN = "origin";
-    private static final String CALLBACK = "callback";
-    private static final String USAGE = "usage";
-    private static final String QUOTA = "quota";
-
-    private Map <String, Origin> mOrigins;
-
-    private Handler mHandler = null;
-    private Handler mUIHandler = null;
-
     /**
      * This class encapsulates information about the amount of storage
      * currently used by an origin for the JavaScript storage APIs.
@@ -94,18 +60,21 @@
         private long mQuota = 0;
         private long mUsage = 0;
 
-        private Origin(String origin, long quota, long usage) {
+        /** @hide */
+        protected Origin(String origin, long quota, long usage) {
             mOrigin = origin;
             mQuota = quota;
             mUsage = usage;
         }
 
-        private Origin(String origin, long quota) {
+        /** @hide */
+        protected Origin(String origin, long quota) {
             mOrigin = origin;
             mQuota = quota;
         }
 
-        private Origin(String origin) {
+        /** @hide */
+        protected Origin(String origin) {
             mOrigin = origin;
         }
 
@@ -142,114 +111,6 @@
         }
     }
 
-    /**
-     * Message handler, UI side
-     * @hide
-     */
-    public void createUIHandler() {
-        if (mUIHandler == null) {
-            mUIHandler = new Handler() {
-                @Override
-                public void handleMessage(Message msg) {
-                    switch (msg.what) {
-                        case RETURN_ORIGINS: {
-                            Map values = (Map) msg.obj;
-                            Map origins = (Map) values.get(ORIGINS);
-                            ValueCallback<Map> callback = (ValueCallback<Map>) values.get(CALLBACK);
-                            callback.onReceiveValue(origins);
-                            } break;
-
-                        case RETURN_USAGE_ORIGIN: {
-                            Map values = (Map) msg.obj;
-                            ValueCallback<Long> callback = (ValueCallback<Long>) values.get(CALLBACK);
-                            callback.onReceiveValue((Long)values.get(USAGE));
-                            } break;
-
-                        case RETURN_QUOTA_ORIGIN: {
-                            Map values = (Map) msg.obj;
-                            ValueCallback<Long> callback = (ValueCallback<Long>) values.get(CALLBACK);
-                            callback.onReceiveValue((Long)values.get(QUOTA));
-                            } break;
-                    }
-                }
-            };
-        }
-    }
-
-    /**
-     * Message handler, WebCore side
-     * @hide
-     */
-    public synchronized void createHandler() {
-        if (mHandler == null) {
-            mHandler = new Handler() {
-                @Override
-                public void handleMessage(Message msg) {
-                    switch (msg.what) {
-                        case SET_QUOTA_ORIGIN: {
-                            Origin website = (Origin) msg.obj;
-                            nativeSetQuotaForOrigin(website.getOrigin(),
-                                                    website.getQuota());
-                            } break;
-
-                        case DELETE_ORIGIN: {
-                            Origin website = (Origin) msg.obj;
-                            nativeDeleteOrigin(website.getOrigin());
-                            } break;
-
-                        case DELETE_ALL:
-                            nativeDeleteAllData();
-                            break;
-
-                        case GET_ORIGINS: {
-                            syncValues();
-                            ValueCallback callback = (ValueCallback) msg.obj;
-                            Map origins = new HashMap(mOrigins);
-                            Map values = new HashMap<String, Object>();
-                            values.put(CALLBACK, callback);
-                            values.put(ORIGINS, origins);
-                            postUIMessage(Message.obtain(null, RETURN_ORIGINS, values));
-                            } break;
-
-                        case GET_USAGE_ORIGIN: {
-                            syncValues();
-                            Map values = (Map) msg.obj;
-                            String origin = (String) values.get(ORIGIN);
-                            ValueCallback callback = (ValueCallback) values.get(CALLBACK);
-                            Origin website = mOrigins.get(origin);
-                            Map retValues = new HashMap<String, Object>();
-                            retValues.put(CALLBACK, callback);
-                            if (website != null) {
-                                long usage = website.getUsage();
-                                retValues.put(USAGE, new Long(usage));
-                            }
-                            postUIMessage(Message.obtain(null, RETURN_USAGE_ORIGIN, retValues));
-                            } break;
-
-                        case GET_QUOTA_ORIGIN: {
-                            syncValues();
-                            Map values = (Map) msg.obj;
-                            String origin = (String) values.get(ORIGIN);
-                            ValueCallback callback = (ValueCallback) values.get(CALLBACK);
-                            Origin website = mOrigins.get(origin);
-                            Map retValues = new HashMap<String, Object>();
-                            retValues.put(CALLBACK, callback);
-                            if (website != null) {
-                                long quota = website.getQuota();
-                                retValues.put(QUOTA, new Long(quota));
-                            }
-                            postUIMessage(Message.obtain(null, RETURN_QUOTA_ORIGIN, retValues));
-                            } break;
-
-                        case UPDATE:
-                            syncValues();
-                            break;
-                    }
-                }
-            };
-        }
-    }
-
     /*
      * When calling getOrigins(), getUsageForOrigin() and getQuotaForOrigin(),
      * we need to get the values from WebCore, but we cannot block while doing so
@@ -270,26 +131,7 @@
      * representation of the origin to a {@link WebStorage.Origin} object.
      */
     public void getOrigins(ValueCallback<Map> callback) {
-        if (callback != null) {
-            if (WebViewCore.THREAD_NAME.equals(Thread.currentThread().getName())) {
-                syncValues();
-                callback.onReceiveValue(mOrigins);
-            } else {
-                postMessage(Message.obtain(null, GET_ORIGINS, callback));
-            }
-        }
-    }
-
-    /**
-     * Returns a list of origins having a database
-     * should only be called from WebViewCore.
-     */
-    Collection<Origin> getOriginsSync() {
-        if (WebViewCore.THREAD_NAME.equals(Thread.currentThread().getName())) {
-            update();
-            return mOrigins.values();
-        }
-        return null;
+        // Must be a no-op for backward compatibility: see the hidden constructor for reason.
     }
 
     /**
@@ -300,23 +142,7 @@
      * a {@link ValueCallback}.
      */
     public void getUsageForOrigin(String origin, ValueCallback<Long> callback) {
-        if (callback == null) {
-            return;
-        }
-        if (origin == null) {
-            callback.onReceiveValue(null);
-            return;
-        }
-        if (WebViewCore.THREAD_NAME.equals(Thread.currentThread().getName())) {
-            syncValues();
-            Origin website = mOrigins.get(origin);
-            callback.onReceiveValue(new Long(website.getUsage()));
-        } else {
-            HashMap values = new HashMap<String, Object>();
-            values.put(ORIGIN, origin);
-            values.put(CALLBACK, callback);
-            postMessage(Message.obtain(null, GET_USAGE_ORIGIN, values));
-        }
+        // Must be a no-op for backward compatibility: see the hidden constructor for reason.
     }
 
     /**
@@ -327,23 +153,7 @@
      * enforced on a per-origin basis for the Application Cache API.
      */
     public void getQuotaForOrigin(String origin, ValueCallback<Long> callback) {
-        if (callback == null) {
-            return;
-        }
-        if (origin == null) {
-            callback.onReceiveValue(null);
-            return;
-        }
-        if (WebViewCore.THREAD_NAME.equals(Thread.currentThread().getName())) {
-            syncValues();
-            Origin website = mOrigins.get(origin);
-            callback.onReceiveValue(new Long(website.getUsage()));
-        } else {
-            HashMap values = new HashMap<String, Object>();
-            values.put(ORIGIN, origin);
-            values.put(CALLBACK, callback);
-            postMessage(Message.obtain(null, GET_QUOTA_ORIGIN, values));
-        }
+        // Must be a no-op for backward compatibility: see the hidden constructor for reason.
     }
 
     /**
@@ -353,14 +163,7 @@
      * for the Application Cache API.
      */
     public void setQuotaForOrigin(String origin, long quota) {
-        if (origin != null) {
-            if (WebViewCore.THREAD_NAME.equals(Thread.currentThread().getName())) {
-                nativeSetQuotaForOrigin(origin, quota);
-            } else {
-                postMessage(Message.obtain(null, SET_QUOTA_ORIGIN,
-                    new Origin(origin, quota)));
-            }
-        }
+        // Must be a no-op for backward compatibility: see the hidden constructor for reason.
     }
 
     /**
@@ -369,14 +172,7 @@
      * its string representation.
      */
     public void deleteOrigin(String origin) {
-        if (origin != null) {
-            if (WebViewCore.THREAD_NAME.equals(Thread.currentThread().getName())) {
-                nativeDeleteOrigin(origin);
-            } else {
-                postMessage(Message.obtain(null, DELETE_ORIGIN,
-                    new Origin(origin)));
-            }
-        }
+        // Must be a no-op for backward compatibility: see the hidden constructor for reason.
     }
 
     /**
@@ -385,38 +181,7 @@
      * Storage APIs.
      */
     public void deleteAllData() {
-        if (WebViewCore.THREAD_NAME.equals(Thread.currentThread().getName())) {
-            nativeDeleteAllData();
-        } else {
-            postMessage(Message.obtain(null, DELETE_ALL));
-        }
-    }
-
-    /**
-     * Sets the maximum size of the ApplicationCache.
-     * This should only ever be called on the WebKit thread.
-     * @hide
-     */
-    public void setAppCacheMaximumSize(long size) {
-        nativeSetAppCacheMaximumSize(size);
-    }
-
-    /**
-     * Utility function to send a message to our handler
-     */
-    private synchronized void postMessage(Message msg) {
-        if (mHandler != null) {
-            mHandler.sendMessage(msg);
-        }
-    }
-
-    /**
-     * Utility function to send a message to the handler on the UI thread
-     */
-    private void postUIMessage(Message msg) {
-        if (mUIHandler != null) {
-            mUIHandler.sendMessage(msg);
-        }
+        // Must be a no-op for backward compatibility: see the hidden constructor for reason.
     }
 
     /**
@@ -424,37 +189,7 @@
      * @return The singleton {@link WebStorage} instance.
      */
     public static WebStorage getInstance() {
-      if (sWebStorage == null) {
-          sWebStorage = new WebStorage();
-      }
-      return sWebStorage;
-    }
-
-    /**
-     * @hide
-     * Post a Sync request
-     */
-    public void update() {
-        if (WebViewCore.THREAD_NAME.equals(Thread.currentThread().getName())) {
-            syncValues();
-        } else {
-            postMessage(Message.obtain(null, UPDATE));
-        }
-    }
-
-    /**
-     * Run on the WebCore thread
-     * set the local values with the current ones
-     */
-    private void syncValues() {
-        Set<String> tmp = nativeGetOrigins();
-        mOrigins = new HashMap<String, Origin>();
-        for (String origin : tmp) {
-            Origin website = new Origin(origin,
-                                 nativeGetQuotaForOrigin(origin),
-                                 nativeGetUsageForOrigin(origin));
-            mOrigins.put(origin, website);
-        }
+      return WebViewFactory.getProvider().getWebStorage();
     }
 
     /**
@@ -466,13 +201,4 @@
      * @hide
      */
     public WebStorage() {}
-
-    // Native functions
-    private static native Set nativeGetOrigins();
-    private static native long nativeGetUsageForOrigin(String origin);
-    private static native long nativeGetQuotaForOrigin(String origin);
-    private static native void nativeSetQuotaForOrigin(String origin, long quota);
-    private static native void nativeDeleteOrigin(String origin);
-    private static native void nativeDeleteAllData();
-    private static native void nativeSetAppCacheMaximumSize(long size);
 }
diff --git a/core/java/android/webkit/WebStorageClassic.java b/core/java/android/webkit/WebStorageClassic.java
new file mode 100644
index 0000000..62de5e6
--- /dev/null
+++ b/core/java/android/webkit/WebStorageClassic.java
@@ -0,0 +1,352 @@
+/*
+ * Copyright (C) 2012 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 android.webkit;
+
+import android.os.Handler;
+import android.os.Message;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+/** @hide */
+public class WebStorageClassic extends WebStorage {
+    // Global instance of a WebStorage
+    private static WebStorageClassic sWebStorage;
+
+    // Message ids
+    static final int UPDATE = 0;
+    static final int SET_QUOTA_ORIGIN = 1;
+    static final int DELETE_ORIGIN = 2;
+    static final int DELETE_ALL = 3;
+    static final int GET_ORIGINS = 4;
+    static final int GET_USAGE_ORIGIN = 5;
+    static final int GET_QUOTA_ORIGIN = 6;
+
+    // Message ids on the UI thread
+    static final int RETURN_ORIGINS = 0;
+    static final int RETURN_USAGE_ORIGIN = 1;
+    static final int RETURN_QUOTA_ORIGIN = 2;
+
+    private static final String ORIGINS = "origins";
+    private static final String ORIGIN = "origin";
+    private static final String CALLBACK = "callback";
+    private static final String USAGE = "usage";
+    private static final String QUOTA = "quota";
+
+    private Map <String, Origin> mOrigins;
+
+    private Handler mHandler = null;
+    private Handler mUIHandler = null;
+
+    /**
+     * @hide
+     * Message handler, UI side
+     * @hide
+     */
+    public void createUIHandler() {
+        if (mUIHandler == null) {
+            mUIHandler = new Handler() {
+                @Override
+                public void handleMessage(Message msg) {
+                    switch (msg.what) {
+                        case RETURN_ORIGINS: {
+                            Map values = (Map) msg.obj;
+                            Map origins = (Map) values.get(ORIGINS);
+                            ValueCallback<Map> callback = (ValueCallback<Map>) values.get(CALLBACK);
+                            callback.onReceiveValue(origins);
+                            } break;
+
+                        case RETURN_USAGE_ORIGIN: {
+                            Map values = (Map) msg.obj;
+                            ValueCallback<Long> callback = (ValueCallback<Long>) values.get(CALLBACK);
+                            callback.onReceiveValue((Long)values.get(USAGE));
+                            } break;
+
+                        case RETURN_QUOTA_ORIGIN: {
+                            Map values = (Map) msg.obj;
+                            ValueCallback<Long> callback = (ValueCallback<Long>) values.get(CALLBACK);
+                            callback.onReceiveValue((Long)values.get(QUOTA));
+                            } break;
+                    }
+                }
+            };
+        }
+    }
+
+    /**
+     * Message handler, WebCore side
+     * @hide
+     */
+    public synchronized void createHandler() {
+        if (mHandler == null) {
+            mHandler = new Handler() {
+                @Override
+                public void handleMessage(Message msg) {
+                    switch (msg.what) {
+                        case SET_QUOTA_ORIGIN: {
+                            Origin website = (Origin) msg.obj;
+                            nativeSetQuotaForOrigin(website.getOrigin(),
+                                                    website.getQuota());
+                            } break;
+
+                        case DELETE_ORIGIN: {
+                            Origin website = (Origin) msg.obj;
+                            nativeDeleteOrigin(website.getOrigin());
+                            } break;
+
+                        case DELETE_ALL:
+                            nativeDeleteAllData();
+                            break;
+
+                        case GET_ORIGINS: {
+                            syncValues();
+                            ValueCallback callback = (ValueCallback) msg.obj;
+                            Map origins = new HashMap(mOrigins);
+                            Map values = new HashMap<String, Object>();
+                            values.put(CALLBACK, callback);
+                            values.put(ORIGINS, origins);
+                            postUIMessage(Message.obtain(null, RETURN_ORIGINS, values));
+                            } break;
+
+                        case GET_USAGE_ORIGIN: {
+                            syncValues();
+                            Map values = (Map) msg.obj;
+                            String origin = (String) values.get(ORIGIN);
+                            ValueCallback callback = (ValueCallback) values.get(CALLBACK);
+                            Origin website = mOrigins.get(origin);
+                            Map retValues = new HashMap<String, Object>();
+                            retValues.put(CALLBACK, callback);
+                            if (website != null) {
+                                long usage = website.getUsage();
+                                retValues.put(USAGE, new Long(usage));
+                            }
+                            postUIMessage(Message.obtain(null, RETURN_USAGE_ORIGIN, retValues));
+                            } break;
+
+                        case GET_QUOTA_ORIGIN: {
+                            syncValues();
+                            Map values = (Map) msg.obj;
+                            String origin = (String) values.get(ORIGIN);
+                            ValueCallback callback = (ValueCallback) values.get(CALLBACK);
+                            Origin website = mOrigins.get(origin);
+                            Map retValues = new HashMap<String, Object>();
+                            retValues.put(CALLBACK, callback);
+                            if (website != null) {
+                                long quota = website.getQuota();
+                                retValues.put(QUOTA, new Long(quota));
+                            }
+                            postUIMessage(Message.obtain(null, RETURN_QUOTA_ORIGIN, retValues));
+                            } break;
+
+                        case UPDATE:
+                            syncValues();
+                            break;
+                    }
+                }
+            };
+        }
+    }
+
+    /*
+     * When calling getOrigins(), getUsageForOrigin() and getQuotaForOrigin(),
+     * we need to get the values from WebCore, but we cannot block while doing so
+     * as we used to do, as this could result in a full deadlock (other WebCore
+     * messages received while we are still blocked here, see http://b/2127737).
+     *
+     * We have to do everything asynchronously, by providing a callback function.
+     * We post a message on the WebCore thread (mHandler) that will get the result
+     * from WebCore, and we post it back on the UI thread (using mUIHandler).
+     * We can then use the callback function to return the value.
+     */
+
+    @Override
+    public void getOrigins(ValueCallback<Map> callback) {
+        if (callback != null) {
+            if (WebViewCore.THREAD_NAME.equals(Thread.currentThread().getName())) {
+                syncValues();
+                callback.onReceiveValue(mOrigins);
+            } else {
+                postMessage(Message.obtain(null, GET_ORIGINS, callback));
+            }
+        }
+    }
+
+    /**
+     * Returns a list of origins having a database
+     * should only be called from WebViewCore.
+     */
+    Collection<Origin> getOriginsSync() {
+        if (WebViewCore.THREAD_NAME.equals(Thread.currentThread().getName())) {
+            update();
+            return mOrigins.values();
+        }
+        return null;
+    }
+
+    @Override
+    public void getUsageForOrigin(String origin, ValueCallback<Long> callback) {
+        if (callback == null) {
+            return;
+        }
+        if (origin == null) {
+            callback.onReceiveValue(null);
+            return;
+        }
+        if (WebViewCore.THREAD_NAME.equals(Thread.currentThread().getName())) {
+            syncValues();
+            Origin website = mOrigins.get(origin);
+            callback.onReceiveValue(new Long(website.getUsage()));
+        } else {
+            HashMap values = new HashMap<String, Object>();
+            values.put(ORIGIN, origin);
+            values.put(CALLBACK, callback);
+            postMessage(Message.obtain(null, GET_USAGE_ORIGIN, values));
+        }
+    }
+
+    @Override
+    public void getQuotaForOrigin(String origin, ValueCallback<Long> callback) {
+        if (callback == null) {
+            return;
+        }
+        if (origin == null) {
+            callback.onReceiveValue(null);
+            return;
+        }
+        if (WebViewCore.THREAD_NAME.equals(Thread.currentThread().getName())) {
+            syncValues();
+            Origin website = mOrigins.get(origin);
+            callback.onReceiveValue(new Long(website.getUsage()));
+        } else {
+            HashMap values = new HashMap<String, Object>();
+            values.put(ORIGIN, origin);
+            values.put(CALLBACK, callback);
+            postMessage(Message.obtain(null, GET_QUOTA_ORIGIN, values));
+        }
+    }
+
+    @Override
+    public void setQuotaForOrigin(String origin, long quota) {
+        if (origin != null) {
+            if (WebViewCore.THREAD_NAME.equals(Thread.currentThread().getName())) {
+                nativeSetQuotaForOrigin(origin, quota);
+            } else {
+                postMessage(Message.obtain(null, SET_QUOTA_ORIGIN,
+                    new Origin(origin, quota)));
+            }
+        }
+    }
+
+    @Override
+    public void deleteOrigin(String origin) {
+        if (origin != null) {
+            if (WebViewCore.THREAD_NAME.equals(Thread.currentThread().getName())) {
+                nativeDeleteOrigin(origin);
+            } else {
+                postMessage(Message.obtain(null, DELETE_ORIGIN,
+                    new Origin(origin)));
+            }
+        }
+    }
+
+    @Override
+    public void deleteAllData() {
+        if (WebViewCore.THREAD_NAME.equals(Thread.currentThread().getName())) {
+            nativeDeleteAllData();
+        } else {
+            postMessage(Message.obtain(null, DELETE_ALL));
+        }
+    }
+
+    /**
+     * Sets the maximum size of the ApplicationCache.
+     * This should only ever be called on the WebKit thread.
+     * Not part of the base-class API: this is only used by dump render tree.
+     */
+    public void setAppCacheMaximumSize(long size) {
+        nativeSetAppCacheMaximumSize(size);
+    }
+
+    /**
+     * Utility function to send a message to our handler
+     */
+    private synchronized void postMessage(Message msg) {
+        if (mHandler != null) {
+            mHandler.sendMessage(msg);
+        }
+    }
+
+    /**
+     * Utility function to send a message to the handler on the UI thread
+     */
+    private void postUIMessage(Message msg) {
+        if (mUIHandler != null) {
+            mUIHandler.sendMessage(msg);
+        }
+    }
+
+    /**
+     * Get the singleton instance of this class.
+     * @return The singleton {@link WebStorage} instance.
+     */
+    public static WebStorageClassic getInstance() {
+      if (sWebStorage == null) {
+          sWebStorage = new WebStorageClassic();
+      }
+      return sWebStorage;
+    }
+
+    /**
+     * @hide
+     * Post a Sync request
+     */
+    public void update() {
+        if (WebViewCore.THREAD_NAME.equals(Thread.currentThread().getName())) {
+            syncValues();
+        } else {
+            postMessage(Message.obtain(null, UPDATE));
+        }
+    }
+
+    /**
+     * Run on the WebCore thread
+     * set the local values with the current ones
+     */
+    private void syncValues() {
+        Set<String> tmp = nativeGetOrigins();
+        mOrigins = new HashMap<String, Origin>();
+        for (String origin : tmp) {
+            Origin website = new Origin(origin,
+                                 nativeGetQuotaForOrigin(origin),
+                                 nativeGetUsageForOrigin(origin));
+            mOrigins.put(origin, website);
+        }
+    }
+
+    WebStorageClassic() {}
+
+    // Native functions
+    private static native Set nativeGetOrigins();
+    private static native long nativeGetUsageForOrigin(String origin);
+    private static native long nativeGetQuotaForOrigin(String origin);
+    private static native void nativeSetQuotaForOrigin(String origin, long quota);
+    private static native void nativeDeleteOrigin(String origin);
+    private static native void nativeDeleteAllData();
+    private static native void nativeSetAppCacheMaximumSize(long size);
+}
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java
index bd10cca..f848430 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -268,12 +268,7 @@
         implements ViewTreeObserver.OnGlobalFocusChangeListener,
         ViewGroup.OnHierarchyChangeListener {
 
-    // Default Provider factory class name.
-    private static final String DEFAULT_WEB_VIEW_FACTORY = "android.webkit.WebViewClassic$Factory";
-
     private static final String LOGTAG = "webview_proxy";
-    // TODO: flip DEBUG to always be disabled.
-    private static final boolean DEBUG = true;
 
     /**
      *  Transportation object for returning WebView across thread boundaries.
@@ -1702,16 +1697,11 @@
     // Private internal stuff
     //-------------------------------------------------------------------------
 
-    // Cache the factory both for efficiency, and ensure any one process gets all webviews from the
-    // same provider.
-    private static WebViewFactoryProvider sProviderFactory;
-
     private WebViewProvider mProvider;
 
     private void ensureProviderCreated() {
         checkThread();
         if (mProvider == null) {
-            if (DEBUG) Log.v(LOGTAG, "instantiating webview provider instance");
             // As this can get called during the base class constructor chain, pass the minimum
             // number of dependencies here; the rest are deferred to init().
             mProvider = getFactory().createWebView(this, new PrivateAccess());
@@ -1722,30 +1712,7 @@
         // For now the main purpose of this function (and the factory abstration) is to keep
         // us honest and minimize usage of WebViewClassic internals when binding the proxy.
         checkThread();
-        if (sProviderFactory != null) return sProviderFactory;
-
-        sProviderFactory = getFactoryByName(DEFAULT_WEB_VIEW_FACTORY);
-        if (sProviderFactory == null) {
-            if (DEBUG) Log.v (LOGTAG, "Falling back to explicit linkage");
-            sProviderFactory = new WebViewClassic.Factory();
-        }
-        return sProviderFactory;
-    }
-
-    private static WebViewFactoryProvider getFactoryByName(String providerName) {
-        try {
-            if (DEBUG) Log.v(LOGTAG, "attempt to load class " + providerName);
-            Class<?> c = Class.forName(providerName);
-            if (DEBUG) Log.v(LOGTAG, "instantiating factory");
-            return (WebViewFactoryProvider) c.newInstance();
-        } catch (ClassNotFoundException e) {
-            Log.e(LOGTAG, "error loading " + providerName, e);
-        } catch (IllegalAccessException e) {
-            Log.e(LOGTAG, "error loading " + providerName, e);
-        } catch (InstantiationException e) {
-            Log.e(LOGTAG, "error loading " + providerName, e);
-        }
-        return null;
+        return WebViewFactory.getProvider();
     }
 
     private static void checkThread() {
diff --git a/core/java/android/webkit/WebViewClassic.java b/core/java/android/webkit/WebViewClassic.java
index 2793081..3bd9960 100644
--- a/core/java/android/webkit/WebViewClassic.java
+++ b/core/java/android/webkit/WebViewClassic.java
@@ -1459,14 +1459,6 @@
 
     static class Factory implements WebViewFactoryProvider,  WebViewFactoryProvider.Statics {
         @Override
-        public WebViewProvider createWebView(WebView webView, WebView.PrivateAccess privateAccess) {
-            return new WebViewClassic(webView, privateAccess);
-        }
-
-        @Override
-        public Statics getStatics() { return this; }
-
-        @Override
         public String findAddress(String addr) {
             return WebViewClassic.findAddress(addr);
         }
@@ -1479,6 +1471,33 @@
             }
         }
 
+        @Override
+        public Statics getStatics() { return this; }
+
+        @Override
+        public WebViewProvider createWebView(WebView webView, WebView.PrivateAccess privateAccess) {
+            return new WebViewClassic(webView, privateAccess);
+        }
+
+        @Override
+        public GeolocationPermissions getGeolocationPermissions() {
+            return GeolocationPermissionsClassic.getInstance();
+        }
+
+        @Override
+        public CookieManager getCookieManager() {
+            return CookieManagerClassic.getInstance();
+        }
+
+        @Override
+        public WebIconDatabase getWebIconDatabase() {
+            return WebIconDatabaseClassic.getInstance();
+        }
+
+        @Override
+        public WebStorage getWebStorage() {
+            return WebStorageClassic.getInstance();
+        }
     }
 
     private void onHandleUiEvent(MotionEvent event, int eventType, int flags) {
diff --git a/core/java/android/webkit/WebViewCore.java b/core/java/android/webkit/WebViewCore.java
index 0565ed7..75141fd 100644
--- a/core/java/android/webkit/WebViewCore.java
+++ b/core/java/android/webkit/WebViewCore.java
@@ -189,10 +189,10 @@
         // The WebIconDatabase needs to be initialized within the UI thread so
         // just request the instance here.
         WebIconDatabase.getInstance();
-        // Create the WebStorage singleton and the UI handler
-        WebStorage.getInstance().createUIHandler();
+        // Create the WebStorageClassic singleton and the UI handler
+        WebStorageClassic.getInstance().createUIHandler();
         // Create the UI handler for GeolocationPermissions
-        GeolocationPermissions.getInstance().createUIHandler();
+        GeolocationPermissionsClassic.getInstance().createUIHandler();
 
         // Get the memory class of the current device. V8 will use these values
         // to GC more effectively.
@@ -227,11 +227,11 @@
         // Sync the native settings and also create the WebCore thread handler.
         mSettings.syncSettingsAndCreateHandler(mBrowserFrame);
         // Create the handler and transfer messages for the IconDatabase
-        WebIconDatabase.getInstance().createHandler();
-        // Create the handler for WebStorage
-        WebStorage.getInstance().createHandler();
+        WebIconDatabaseClassic.getInstance().createHandler();
+        // Create the handler for WebStorageClassic
+        WebStorageClassic.getInstance().createHandler();
         // Create the handler for GeolocationPermissions.
-        GeolocationPermissions.getInstance().createHandler();
+        GeolocationPermissionsClassic.getInstance().createHandler();
         // The transferMessages call will transfer all pending messages to the
         // WebCore thread handler.
         mEventHub.transferMessages();
@@ -1308,20 +1308,20 @@
                             break;
 
                         case LOAD_URL: {
-                            CookieManager.getInstance().waitForCookieOperationsToComplete();
+                            CookieManagerClassic.getInstance().waitForCookieOperationsToComplete();
                             GetUrlData param = (GetUrlData) msg.obj;
                             loadUrl(param.mUrl, param.mExtraHeaders);
                             break;
                         }
 
                         case POST_URL: {
-                            CookieManager.getInstance().waitForCookieOperationsToComplete();
+                            CookieManagerClassic.getInstance().waitForCookieOperationsToComplete();
                             PostUrlData param = (PostUrlData) msg.obj;
                             mBrowserFrame.postUrl(param.mUrl, param.mPostData);
                             break;
                         }
                         case LOAD_DATA:
-                            CookieManager.getInstance().waitForCookieOperationsToComplete();
+                            CookieManagerClassic.getInstance().waitForCookieOperationsToComplete();
                             BaseUrlData loadParams = (BaseUrlData) msg.obj;
                             String baseUrl = loadParams.mBaseUrl;
                             if (baseUrl != null) {
@@ -2129,7 +2129,7 @@
     // Utility method for exceededDatabaseQuota and reachedMaxAppCacheSize
     // callbacks. Computes the sum of database quota for all origins.
     private long getUsedQuota() {
-        WebStorage webStorage = WebStorage.getInstance();
+        WebStorageClassic webStorage = WebStorageClassic.getInstance();
         Collection<WebStorage.Origin> origins = webStorage.getOriginsSync();
 
         if (origins == null) {
diff --git a/core/java/android/webkit/WebViewFactory.java b/core/java/android/webkit/WebViewFactory.java
new file mode 100644
index 0000000..73ae910
--- /dev/null
+++ b/core/java/android/webkit/WebViewFactory.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2012 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 android.webkit;
+
+import android.util.Log;
+
+/**
+ * Top level factory, used creating all the main WebView implementation classes.
+ */
+class WebViewFactory {
+    // Default Provider factory class name.
+    private static final String DEFAULT_WEB_VIEW_FACTORY = "android.webkit.WebViewClassic$Factory";
+
+    private static final String LOGTAG = "WebViewFactory";
+
+    private static final boolean DEBUG = false;
+
+    // Cache the factory both for efficiency, and ensure any one process gets all webviews from the
+    // same provider.
+    private static WebViewFactoryProvider sProviderInstance;
+
+    static synchronized WebViewFactoryProvider getProvider() {
+        // For now the main purpose of this function (and the factory abstraction) is to keep
+        // us honest and minimize usage of WebViewClassic internals when binding the proxy.
+        if (sProviderInstance != null) return sProviderInstance;
+
+        sProviderInstance = getFactoryByName(DEFAULT_WEB_VIEW_FACTORY);
+        if (sProviderInstance == null) {
+            if (DEBUG) Log.v(LOGTAG, "Falling back to explicit linkage");
+            sProviderInstance = new WebViewClassic.Factory();
+        }
+        return sProviderInstance;
+    }
+
+    private static WebViewFactoryProvider getFactoryByName(String providerName) {
+        try {
+            if (DEBUG) Log.v(LOGTAG, "attempt to load class " + providerName);
+            Class<?> c = Class.forName(providerName);
+            if (DEBUG) Log.v(LOGTAG, "instantiating factory");
+            return (WebViewFactoryProvider) c.newInstance();
+        } catch (ClassNotFoundException e) {
+            Log.e(LOGTAG, "error loading " + providerName, e);
+        } catch (IllegalAccessException e) {
+            Log.e(LOGTAG, "error loading " + providerName, e);
+        } catch (InstantiationException e) {
+            Log.e(LOGTAG, "error loading " + providerName, e);
+        }
+        return null;
+    }
+}
diff --git a/core/java/android/webkit/WebViewFactoryProvider.java b/core/java/android/webkit/WebViewFactoryProvider.java
index 22bf0bf..a832b0a 100644
--- a/core/java/android/webkit/WebViewFactoryProvider.java
+++ b/core/java/android/webkit/WebViewFactoryProvider.java
@@ -23,18 +23,6 @@
  * @hide
  */
 public interface WebViewFactoryProvider {
-
-    /**
-     * Construct a new WebView provider.
-     * @param webView the WebView instance bound to this implementation instance. Note it will not
-     * necessarily be fully constructed at the point of this call: defer real initialization to
-     * WebViewProvider.init().
-     * @param privateAccess provides access into WebView internal methods.
-     */
-    WebViewProvider createWebView(WebView webView, WebView.PrivateAccess privateAccess);
-
-    Statics getStatics();
-
     /**
      * This Interface provides glue for implementing the backend of WebView static methods which
      * cannot be implemented in-situ in the proxy class.
@@ -53,4 +41,43 @@
          */
         void setPlatformNotificationsEnabled(boolean enable);
     }
+
+    Statics getStatics();
+
+    /**
+     * Construct a new WebViewProvider.
+     * @param webView the WebView instance bound to this implementation instance. Note it will not
+     * necessarily be fully constructed at the point of this call: defer real initialization to
+     * WebViewProvider.init().
+     * @param privateAccess provides access into WebView internal methods.
+     */
+    WebViewProvider createWebView(WebView webView, WebView.PrivateAccess privateAccess);
+
+    /**
+     * Gets the singleton GeolocationPermissions instance for this WebView implementation. The
+     * implementation must return the same instance on subsequent calls.
+     * @return the single GeolocationPermissions instance.
+     */
+    GeolocationPermissions getGeolocationPermissions();
+
+    /**
+     * Gets the singleton CookieManager instance for this WebView implementation. The
+     * implementation must return the same instance on subsequent calls.
+     * @return the singleton CookieManager instance.
+     */
+    CookieManager getCookieManager();
+
+    /**
+     * Gets the singleton WebIconDatabase instance for this WebView implementation. The
+     * implementation must return the same instance on subsequent calls.
+     * @return the singleton WebIconDatabase instance.
+     */
+    WebIconDatabase getWebIconDatabase();
+
+    /**
+     * Gets the singleton WebStorage instance for this WebView implementation. The
+     * implementation must return the same instance on subsequent calls.
+     * @return the singleton WebStorage instance.
+     */
+    WebStorage getWebStorage();
 }
diff --git a/core/res/res/layout-sw600dp/status_bar_latest_event_ticker.xml b/core/res/res/layout-sw720dp/status_bar_latest_event_ticker.xml
similarity index 100%
rename from core/res/res/layout-sw600dp/status_bar_latest_event_ticker.xml
rename to core/res/res/layout-sw720dp/status_bar_latest_event_ticker.xml
diff --git a/core/res/res/layout-sw600dp/status_bar_latest_event_ticker_large_icon.xml b/core/res/res/layout-sw720dp/status_bar_latest_event_ticker_large_icon.xml
similarity index 100%
rename from core/res/res/layout-sw600dp/status_bar_latest_event_ticker_large_icon.xml
rename to core/res/res/layout-sw720dp/status_bar_latest_event_ticker_large_icon.xml
diff --git a/core/res/res/values-large/dimens.xml b/core/res/res/values-large/dimens.xml
index 4f49135..864675a 100644
--- a/core/res/res/values-large/dimens.xml
+++ b/core/res/res/values-large/dimens.xml
@@ -17,13 +17,6 @@
 */
 -->
 <resources>
-    <!-- Height of the status bar -->
-    <dimen name="status_bar_height">48dip</dimen>
-    <!-- Width and height of a single notification icon in the status bar -->
-    <dimen name="status_bar_icon_size">32dip</dimen>
-    <!-- Size of the giant number (unread count) in the notifications -->
-    <dimen name="status_bar_content_number_size">48sp</dimen>
-
     <!-- Default height of a key in the password keyboard for alpha -->
     <dimen name="password_keyboard_key_height_alpha">75dip</dimen>
     <!-- Default height of a key in the password keyboard for numeric -->
diff --git a/core/res/res/values-sw600dp/dimens.xml b/core/res/res/values-sw600dp/dimens.xml
index 13acdd6..4514760 100644
--- a/core/res/res/values-sw600dp/dimens.xml
+++ b/core/res/res/values-sw600dp/dimens.xml
@@ -18,13 +18,6 @@
 */
 -->
 <resources>
-    <!-- Height of the status bar -->
-    <dimen name="status_bar_height">48dip</dimen>
-    <!-- Width and height of a single notification icon in the status bar -->
-    <dimen name="status_bar_icon_size">24dip</dimen>
-    <!-- Size of the giant number (unread count) in the notifications -->
-    <dimen name="status_bar_content_number_size">48sp</dimen>
-
     <!-- The maximum number of action buttons that should be permitted within
          an action bar/action mode. This will be used to determine how many
          showAsAction="ifRoom" items can fit. "always" items can override this. -->
@@ -82,5 +75,8 @@
          (the screen is in landscape). This may be either a fraction or a dimension.-->
     <item type="dimen" name="dialog_fixed_height_minor">90%</item>
 
+    <!-- Height of the bottom navigation bar in portrait; on sw600dp devices
+         this is a bit taller -->
+    <dimen name="navigation_bar_height_portrait">56dp</dimen>
 </resources>
 
diff --git a/packages/SystemUI/res/values-sw600dp/config.xml b/core/res/res/values-sw720dp/dimens.xml
similarity index 60%
rename from packages/SystemUI/res/values-sw600dp/config.xml
rename to core/res/res/values-sw720dp/dimens.xml
index 24185a4f..cac5aab 100644
--- a/packages/SystemUI/res/values-sw600dp/config.xml
+++ b/core/res/res/values-sw720dp/dimens.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-/*
-** Copyright 2011, The Android Open Source Project
+**
+** Copyright 2012, 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.
@@ -16,13 +16,10 @@
 ** limitations under the License.
 */
 -->
-
 <resources>
-    <!-- Whether we're using the tablet-optimized recents interface (we use this
-     value at runtime for some things) -->
-    <bool name="config_recents_interface_for_tablets">true</bool>
-
-    <!-- Whether recents thumbnails should stretch in both x and y to fill their
-     ImageView -->
-    <bool name="config_recents_thumbnail_image_fits_to_xy">true</bool>
+    <!-- Height of the bottom navigation bar in portrait; on sw720dp devices
+         this is the same as the height in landscape -->
+    <dimen name="navigation_bar_height_portrait">@dimen/navigation_bar_height</dimen>
 </resources>
+
+
diff --git a/core/res/res/values/dimens.xml b/core/res/res/values/dimens.xml
index ef80160..392116f 100644
--- a/core/res/res/values/dimens.xml
+++ b/core/res/res/values/dimens.xml
@@ -34,16 +34,22 @@
     <dimen name="status_bar_height">25dip</dimen>
     <!-- Height of the bottom navigation / system bar. -->
     <dimen name="navigation_bar_height">48dp</dimen>
+    <!-- Height of the bottom navigation bar in portrait -->
+    <dimen name="navigation_bar_height_portrait">@dimen/navigation_bar_height</dimen>
     <!-- Width of the navigation bar when it is placed vertically on the screen -->
     <dimen name="navigation_bar_width">42dp</dimen>
     <!-- Height of notification icons in the status bar -->
     <dimen name="status_bar_icon_size">24dip</dimen>
     <!-- Size of the giant number (unread count) in the notifications -->
     <dimen name="status_bar_content_number_size">48sp</dimen>
+    <!-- Height of the system bar (combined status & navigation); used by
+         SystemUI internally, not respected by the window manager. -->
+    <dimen name="system_bar_height">@dimen/navigation_bar_height</dimen>
     <!-- Height of notification icons in the system bar -->
     <dimen name="system_bar_icon_size">32dip</dimen>
     <!-- Margin at the edge of the screen to ignore touch events for in the windowshade. -->
     <dimen name="status_bar_edge_ignore">5dp</dimen>
+
     <!-- Size of the fastscroll hint letter -->
     <dimen name="fastscroll_overlay_size">104dp</dimen>
     <!-- Width of the fastscroll thumb -->
@@ -221,5 +227,4 @@
          action bar tabs from becoming too wide on a wide screen when only
          a few are present. -->
     <dimen name="action_bar_stacked_tab_max_width">180dp</dimen>
-
 </resources>
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_ime_default.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/ic_sysbar_ime_default.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_ime_default.png
rename to packages/SystemUI/res/drawable-sw720dp-hdpi/ic_sysbar_ime_default.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_ime_pressed.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/ic_sysbar_ime_pressed.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_ime_pressed.png
rename to packages/SystemUI/res/drawable-sw720dp-hdpi/ic_sysbar_ime_pressed.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_zoom_default.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/ic_sysbar_zoom_default.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_zoom_default.png
rename to packages/SystemUI/res/drawable-sw720dp-hdpi/ic_sysbar_zoom_default.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_zoom_pressed.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/ic_sysbar_zoom_pressed.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_zoom_pressed.png
rename to packages/SystemUI/res/drawable-sw720dp-hdpi/ic_sysbar_zoom_pressed.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/notify_panel_clock_bg_normal.9.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/notify_panel_clock_bg_normal.9.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-hdpi/notify_panel_clock_bg_normal.9.png
rename to packages/SystemUI/res/drawable-sw720dp-hdpi/notify_panel_clock_bg_normal.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/notify_panel_clock_bg_pressed.9.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/notify_panel_clock_bg_pressed.9.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-hdpi/notify_panel_clock_bg_pressed.9.png
rename to packages/SystemUI/res/drawable-sw720dp-hdpi/notify_panel_clock_bg_pressed.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/notify_panel_notify_bg.9.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/notify_panel_notify_bg.9.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-hdpi/notify_panel_notify_bg.9.png
rename to packages/SystemUI/res/drawable-sw720dp-hdpi/notify_panel_notify_bg.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/recents_bg_protect_tile.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/recents_bg_protect_tile.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-hdpi/recents_bg_protect_tile.png
rename to packages/SystemUI/res/drawable-sw720dp-hdpi/recents_bg_protect_tile.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/recents_blue_glow.9.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/recents_blue_glow.9.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-hdpi/recents_blue_glow.9.png
rename to packages/SystemUI/res/drawable-sw720dp-hdpi/recents_blue_glow.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_alarm.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_alarm.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_alarm.png
rename to packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_alarm.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_0.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_battery_0.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_0.png
rename to packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_battery_0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_100.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_battery_100.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_100.png
rename to packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_battery_100.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_15.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_battery_15.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_15.png
rename to packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_battery_15.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_28.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_battery_28.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_28.png
rename to packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_battery_28.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_43.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_battery_43.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_43.png
rename to packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_battery_43.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_57.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_battery_57.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_57.png
rename to packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_battery_57.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_71.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_battery_71.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_71.png
rename to packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_battery_71.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_85.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_battery_85.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_85.png
rename to packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_battery_85.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim0.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_battery_charge_anim0.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim0.png
rename to packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_battery_charge_anim0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim100.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_battery_charge_anim100.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim100.png
rename to packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_battery_charge_anim100.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim15.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_battery_charge_anim15.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim15.png
rename to packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_battery_charge_anim15.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim28.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_battery_charge_anim28.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim28.png
rename to packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_battery_charge_anim28.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim43.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_battery_charge_anim43.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim43.png
rename to packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_battery_charge_anim43.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim57.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_battery_charge_anim57.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim57.png
rename to packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_battery_charge_anim57.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim71.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_battery_charge_anim71.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim71.png
rename to packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_battery_charge_anim71.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim85.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_battery_charge_anim85.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim85.png
rename to packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_battery_charge_anim85.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_bluetooth.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_data_bluetooth.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_bluetooth.png
rename to packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_data_bluetooth.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_bluetooth_connected.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_data_bluetooth_connected.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_bluetooth_connected.png
rename to packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_data_bluetooth_connected.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_1x.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_data_connected_1x.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_1x.png
rename to packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_data_connected_1x.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_3g.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_data_connected_3g.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_3g.png
rename to packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_data_connected_3g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_4g.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_data_connected_4g.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_4g.png
rename to packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_data_connected_4g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_e.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_data_connected_e.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_e.png
rename to packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_data_connected_e.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_g.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_data_connected_g.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_g.png
rename to packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_data_connected_g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_h.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_data_connected_h.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_h.png
rename to packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_data_connected_h.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_roam.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_data_connected_roam.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_roam.png
rename to packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_data_connected_roam.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_1x.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_data_fully_connected_1x.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_1x.png
rename to packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_data_fully_connected_1x.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_3g.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_data_fully_connected_3g.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_3g.png
rename to packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_data_fully_connected_3g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_4g.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_data_fully_connected_4g.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_4g.png
rename to packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_data_fully_connected_4g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_e.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_data_fully_connected_e.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_e.png
rename to packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_data_fully_connected_e.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_g.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_data_fully_connected_g.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_g.png
rename to packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_data_fully_connected_g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_h.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_data_fully_connected_h.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_h.png
rename to packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_data_fully_connected_h.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_0.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_signal_0.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_0.png
rename to packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_signal_0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_0_fully.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_signal_0_fully.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_0_fully.png
rename to packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_signal_0_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_1.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_signal_1.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_1.png
rename to packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_signal_1.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_1_fully.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_signal_1_fully.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_1_fully.png
rename to packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_signal_1_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_2.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_signal_2.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_2.png
rename to packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_signal_2.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_2_fully.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_signal_2_fully.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_2_fully.png
rename to packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_signal_2_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_3.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_signal_3.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_3.png
rename to packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_signal_3.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_3_fully.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_signal_3_fully.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_3_fully.png
rename to packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_signal_3_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_4.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_signal_4.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_4.png
rename to packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_signal_4.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_4_fully.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_signal_4_fully.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_4_fully.png
rename to packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_signal_4_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_flightmode.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_signal_flightmode.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_flightmode.png
rename to packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_signal_flightmode.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_in.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_signal_in.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_in.png
rename to packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_signal_in.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_inout.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_signal_inout.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_inout.png
rename to packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_signal_inout.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_null.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_signal_null.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_null.png
rename to packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_signal_null.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_out.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_signal_out.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_out.png
rename to packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_signal_out.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_in.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_wifi_in.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_in.png
rename to packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_wifi_in.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_inout.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_wifi_inout.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_inout.png
rename to packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_wifi_inout.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_out.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_wifi_out.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_out.png
rename to packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_wifi_out.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_0.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_wifi_signal_0.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_0.png
rename to packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_wifi_signal_0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_1.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_wifi_signal_1.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_1.png
rename to packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_wifi_signal_1.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_1_fully.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_wifi_signal_1_fully.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_1_fully.png
rename to packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_wifi_signal_1_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_2.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_wifi_signal_2.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_2.png
rename to packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_wifi_signal_2.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_2_fully.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_wifi_signal_2_fully.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_2_fully.png
rename to packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_wifi_signal_2_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_3.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_wifi_signal_3.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_3.png
rename to packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_wifi_signal_3.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_3_fully.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_wifi_signal_3_fully.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_3_fully.png
rename to packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_wifi_signal_3_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_4.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_wifi_signal_4.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_4.png
rename to packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_wifi_signal_4.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_4_fully.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_wifi_signal_4_fully.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_4_fully.png
rename to packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_wifi_signal_4_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_ime_default.png b/packages/SystemUI/res/drawable-sw720dp-mdpi/ic_sysbar_ime_default.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_ime_default.png
rename to packages/SystemUI/res/drawable-sw720dp-mdpi/ic_sysbar_ime_default.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_ime_pressed.png b/packages/SystemUI/res/drawable-sw720dp-mdpi/ic_sysbar_ime_pressed.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_ime_pressed.png
rename to packages/SystemUI/res/drawable-sw720dp-mdpi/ic_sysbar_ime_pressed.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_zoom_default.png b/packages/SystemUI/res/drawable-sw720dp-mdpi/ic_sysbar_zoom_default.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_zoom_default.png
rename to packages/SystemUI/res/drawable-sw720dp-mdpi/ic_sysbar_zoom_default.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_zoom_pressed.png b/packages/SystemUI/res/drawable-sw720dp-mdpi/ic_sysbar_zoom_pressed.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_zoom_pressed.png
rename to packages/SystemUI/res/drawable-sw720dp-mdpi/ic_sysbar_zoom_pressed.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/notify_panel_clock_bg_normal.9.png b/packages/SystemUI/res/drawable-sw720dp-mdpi/notify_panel_clock_bg_normal.9.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-mdpi/notify_panel_clock_bg_normal.9.png
rename to packages/SystemUI/res/drawable-sw720dp-mdpi/notify_panel_clock_bg_normal.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/notify_panel_clock_bg_pressed.9.png b/packages/SystemUI/res/drawable-sw720dp-mdpi/notify_panel_clock_bg_pressed.9.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-mdpi/notify_panel_clock_bg_pressed.9.png
rename to packages/SystemUI/res/drawable-sw720dp-mdpi/notify_panel_clock_bg_pressed.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/notify_panel_notify_bg.9.png b/packages/SystemUI/res/drawable-sw720dp-mdpi/notify_panel_notify_bg.9.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-mdpi/notify_panel_notify_bg.9.png
rename to packages/SystemUI/res/drawable-sw720dp-mdpi/notify_panel_notify_bg.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/recents_bg_protect_tile.png b/packages/SystemUI/res/drawable-sw720dp-mdpi/recents_bg_protect_tile.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-mdpi/recents_bg_protect_tile.png
rename to packages/SystemUI/res/drawable-sw720dp-mdpi/recents_bg_protect_tile.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/recents_blue_glow.9.png b/packages/SystemUI/res/drawable-sw720dp-mdpi/recents_blue_glow.9.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-mdpi/recents_blue_glow.9.png
rename to packages/SystemUI/res/drawable-sw720dp-mdpi/recents_blue_glow.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_alarm.png b/packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_alarm.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_alarm.png
rename to packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_alarm.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_0.png b/packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_battery_0.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_0.png
rename to packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_battery_0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_100.png b/packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_battery_100.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_100.png
rename to packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_battery_100.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_15.png b/packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_battery_15.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_15.png
rename to packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_battery_15.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_28.png b/packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_battery_28.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_28.png
rename to packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_battery_28.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_43.png b/packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_battery_43.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_43.png
rename to packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_battery_43.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_57.png b/packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_battery_57.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_57.png
rename to packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_battery_57.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_71.png b/packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_battery_71.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_71.png
rename to packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_battery_71.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_85.png b/packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_battery_85.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_85.png
rename to packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_battery_85.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim0.png b/packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_battery_charge_anim0.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim0.png
rename to packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_battery_charge_anim0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim100.png b/packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_battery_charge_anim100.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim100.png
rename to packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_battery_charge_anim100.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim15.png b/packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_battery_charge_anim15.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim15.png
rename to packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_battery_charge_anim15.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim28.png b/packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_battery_charge_anim28.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim28.png
rename to packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_battery_charge_anim28.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim43.png b/packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_battery_charge_anim43.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim43.png
rename to packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_battery_charge_anim43.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim57.png b/packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_battery_charge_anim57.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim57.png
rename to packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_battery_charge_anim57.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim71.png b/packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_battery_charge_anim71.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim71.png
rename to packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_battery_charge_anim71.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim85.png b/packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_battery_charge_anim85.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim85.png
rename to packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_battery_charge_anim85.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_bluetooth.png b/packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_data_bluetooth.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_bluetooth.png
rename to packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_data_bluetooth.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_bluetooth_connected.png b/packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_data_bluetooth_connected.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_bluetooth_connected.png
rename to packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_data_bluetooth_connected.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_1x.png b/packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_data_connected_1x.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_1x.png
rename to packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_data_connected_1x.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_3g.png b/packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_data_connected_3g.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_3g.png
rename to packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_data_connected_3g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_4g.png b/packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_data_connected_4g.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_4g.png
rename to packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_data_connected_4g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_e.png b/packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_data_connected_e.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_e.png
rename to packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_data_connected_e.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_g.png b/packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_data_connected_g.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_g.png
rename to packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_data_connected_g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_h.png b/packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_data_connected_h.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_h.png
rename to packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_data_connected_h.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_roam.png b/packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_data_connected_roam.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_roam.png
rename to packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_data_connected_roam.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_1x.png b/packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_data_fully_connected_1x.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_1x.png
rename to packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_data_fully_connected_1x.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_3g.png b/packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_data_fully_connected_3g.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_3g.png
rename to packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_data_fully_connected_3g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_4g.png b/packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_data_fully_connected_4g.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_4g.png
rename to packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_data_fully_connected_4g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_e.png b/packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_data_fully_connected_e.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_e.png
rename to packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_data_fully_connected_e.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_g.png b/packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_data_fully_connected_g.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_g.png
rename to packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_data_fully_connected_g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_h.png b/packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_data_fully_connected_h.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_h.png
rename to packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_data_fully_connected_h.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_0.png b/packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_signal_0.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_0.png
rename to packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_signal_0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_0_fully.png b/packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_signal_0_fully.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_0_fully.png
rename to packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_signal_0_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_1.png b/packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_signal_1.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_1.png
rename to packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_signal_1.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_1_fully.png b/packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_signal_1_fully.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_1_fully.png
rename to packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_signal_1_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_2.png b/packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_signal_2.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_2.png
rename to packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_signal_2.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_2_fully.png b/packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_signal_2_fully.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_2_fully.png
rename to packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_signal_2_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_3.png b/packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_signal_3.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_3.png
rename to packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_signal_3.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_3_fully.png b/packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_signal_3_fully.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_3_fully.png
rename to packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_signal_3_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_4.png b/packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_signal_4.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_4.png
rename to packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_signal_4.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_4_fully.png b/packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_signal_4_fully.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_4_fully.png
rename to packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_signal_4_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_flightmode.png b/packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_signal_flightmode.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_flightmode.png
rename to packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_signal_flightmode.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_in.png b/packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_signal_in.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_in.png
rename to packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_signal_in.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_inout.png b/packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_signal_inout.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_inout.png
rename to packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_signal_inout.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_null.png b/packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_signal_null.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_null.png
rename to packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_signal_null.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_out.png b/packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_signal_out.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_out.png
rename to packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_signal_out.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_in.png b/packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_wifi_in.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_in.png
rename to packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_wifi_in.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_inout.png b/packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_wifi_inout.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_inout.png
rename to packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_wifi_inout.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_out.png b/packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_wifi_out.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_out.png
rename to packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_wifi_out.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_0.png b/packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_wifi_signal_0.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_0.png
rename to packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_wifi_signal_0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_1.png b/packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_wifi_signal_1.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_1.png
rename to packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_wifi_signal_1.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_1_fully.png b/packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_wifi_signal_1_fully.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_1_fully.png
rename to packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_wifi_signal_1_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_2.png b/packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_wifi_signal_2.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_2.png
rename to packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_wifi_signal_2.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_2_fully.png b/packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_wifi_signal_2_fully.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_2_fully.png
rename to packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_wifi_signal_2_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_3.png b/packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_wifi_signal_3.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_3.png
rename to packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_wifi_signal_3.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_3_fully.png b/packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_wifi_signal_3_fully.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_3_fully.png
rename to packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_wifi_signal_3_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_4.png b/packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_wifi_signal_4.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_4.png
rename to packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_wifi_signal_4.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_4_fully.png b/packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_wifi_signal_4_fully.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_4_fully.png
rename to packages/SystemUI/res/drawable-sw720dp-mdpi/stat_sys_wifi_signal_4_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/ic_sysbar_ime_default.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/ic_sysbar_ime_default.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-xhdpi/ic_sysbar_ime_default.png
rename to packages/SystemUI/res/drawable-sw720dp-xhdpi/ic_sysbar_ime_default.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/ic_sysbar_ime_pressed.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/ic_sysbar_ime_pressed.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-xhdpi/ic_sysbar_ime_pressed.png
rename to packages/SystemUI/res/drawable-sw720dp-xhdpi/ic_sysbar_ime_pressed.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/ic_sysbar_zoom_default.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/ic_sysbar_zoom_default.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-xhdpi/ic_sysbar_zoom_default.png
rename to packages/SystemUI/res/drawable-sw720dp-xhdpi/ic_sysbar_zoom_default.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/ic_sysbar_zoom_pressed.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/ic_sysbar_zoom_pressed.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-xhdpi/ic_sysbar_zoom_pressed.png
rename to packages/SystemUI/res/drawable-sw720dp-xhdpi/ic_sysbar_zoom_pressed.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/notify_panel_clock_bg_normal.9.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/notify_panel_clock_bg_normal.9.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-xhdpi/notify_panel_clock_bg_normal.9.png
rename to packages/SystemUI/res/drawable-sw720dp-xhdpi/notify_panel_clock_bg_normal.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/notify_panel_clock_bg_pressed.9.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/notify_panel_clock_bg_pressed.9.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-xhdpi/notify_panel_clock_bg_pressed.9.png
rename to packages/SystemUI/res/drawable-sw720dp-xhdpi/notify_panel_clock_bg_pressed.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/notify_panel_notify_bg.9.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/notify_panel_notify_bg.9.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-xhdpi/notify_panel_notify_bg.9.png
rename to packages/SystemUI/res/drawable-sw720dp-xhdpi/notify_panel_notify_bg.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/recents_bg_protect_tile.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/recents_bg_protect_tile.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-xhdpi/recents_bg_protect_tile.png
rename to packages/SystemUI/res/drawable-sw720dp-xhdpi/recents_bg_protect_tile.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/recents_blue_glow.9.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/recents_blue_glow.9.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-xhdpi/recents_blue_glow.9.png
rename to packages/SystemUI/res/drawable-sw720dp-xhdpi/recents_blue_glow.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_alarm.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_alarm.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_alarm.png
rename to packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_alarm.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_0.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_battery_0.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_0.png
rename to packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_battery_0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_100.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_battery_100.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_100.png
rename to packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_battery_100.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_15.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_battery_15.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_15.png
rename to packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_battery_15.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_28.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_battery_28.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_28.png
rename to packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_battery_28.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_43.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_battery_43.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_43.png
rename to packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_battery_43.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_57.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_battery_57.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_57.png
rename to packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_battery_57.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_71.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_battery_71.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_71.png
rename to packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_battery_71.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_85.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_battery_85.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_85.png
rename to packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_battery_85.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim0.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_battery_charge_anim0.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim0.png
rename to packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_battery_charge_anim0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim100.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_battery_charge_anim100.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim100.png
rename to packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_battery_charge_anim100.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim15.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_battery_charge_anim15.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim15.png
rename to packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_battery_charge_anim15.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim28.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_battery_charge_anim28.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim28.png
rename to packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_battery_charge_anim28.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim43.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_battery_charge_anim43.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim43.png
rename to packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_battery_charge_anim43.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim57.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_battery_charge_anim57.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim57.png
rename to packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_battery_charge_anim57.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim71.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_battery_charge_anim71.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim71.png
rename to packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_battery_charge_anim71.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim85.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_battery_charge_anim85.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim85.png
rename to packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_battery_charge_anim85.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_bluetooth.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_data_bluetooth.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_bluetooth.png
rename to packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_data_bluetooth.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_bluetooth_connected.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_data_bluetooth_connected.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_bluetooth_connected.png
rename to packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_data_bluetooth_connected.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_connected_1x.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_data_connected_1x.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_connected_1x.png
rename to packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_data_connected_1x.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_connected_3g.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_data_connected_3g.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_connected_3g.png
rename to packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_data_connected_3g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_connected_4g.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_data_connected_4g.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_connected_4g.png
rename to packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_data_connected_4g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_connected_e.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_data_connected_e.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_connected_e.png
rename to packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_data_connected_e.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_connected_g.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_data_connected_g.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_connected_g.png
rename to packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_data_connected_g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_connected_h.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_data_connected_h.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_connected_h.png
rename to packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_data_connected_h.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_connected_roam.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_data_connected_roam.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_connected_roam.png
rename to packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_data_connected_roam.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_fully_connected_1x.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_data_fully_connected_1x.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_fully_connected_1x.png
rename to packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_data_fully_connected_1x.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_fully_connected_3g.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_data_fully_connected_3g.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_fully_connected_3g.png
rename to packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_data_fully_connected_3g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_fully_connected_4g.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_data_fully_connected_4g.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_fully_connected_4g.png
rename to packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_data_fully_connected_4g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_fully_connected_e.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_data_fully_connected_e.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_fully_connected_e.png
rename to packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_data_fully_connected_e.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_fully_connected_g.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_data_fully_connected_g.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_fully_connected_g.png
rename to packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_data_fully_connected_g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_fully_connected_h.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_data_fully_connected_h.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_fully_connected_h.png
rename to packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_data_fully_connected_h.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_0.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_signal_0.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_0.png
rename to packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_signal_0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_0_fully.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_signal_0_fully.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_0_fully.png
rename to packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_signal_0_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_1.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_signal_1.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_1.png
rename to packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_signal_1.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_1_fully.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_signal_1_fully.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_1_fully.png
rename to packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_signal_1_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_2.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_signal_2.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_2.png
rename to packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_signal_2.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_2_fully.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_signal_2_fully.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_2_fully.png
rename to packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_signal_2_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_3.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_signal_3.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_3.png
rename to packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_signal_3.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_3_fully.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_signal_3_fully.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_3_fully.png
rename to packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_signal_3_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_4.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_signal_4.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_4.png
rename to packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_signal_4.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_4_fully.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_signal_4_fully.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_4_fully.png
rename to packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_signal_4_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_flightmode.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_signal_flightmode.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_flightmode.png
rename to packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_signal_flightmode.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_in.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_signal_in.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_in.png
rename to packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_signal_in.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_inout.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_signal_inout.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_inout.png
rename to packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_signal_inout.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_null.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_signal_null.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_null.png
rename to packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_signal_null.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_out.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_signal_out.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_out.png
rename to packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_signal_out.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_in.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_wifi_in.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_in.png
rename to packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_wifi_in.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_inout.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_wifi_inout.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_inout.png
rename to packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_wifi_inout.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_out.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_wifi_out.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_out.png
rename to packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_wifi_out.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_0.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_wifi_signal_0.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_0.png
rename to packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_wifi_signal_0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_1.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_wifi_signal_1.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_1.png
rename to packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_wifi_signal_1.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_1_fully.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_wifi_signal_1_fully.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_1_fully.png
rename to packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_wifi_signal_1_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_2.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_wifi_signal_2.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_2.png
rename to packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_wifi_signal_2.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_2_fully.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_wifi_signal_2_fully.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_2_fully.png
rename to packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_wifi_signal_2_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_3.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_wifi_signal_3.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_3.png
rename to packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_wifi_signal_3.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_3_fully.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_wifi_signal_3_fully.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_3_fully.png
rename to packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_wifi_signal_3_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_4.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_wifi_signal_4.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_4.png
rename to packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_wifi_signal_4.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_4_fully.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_wifi_signal_4_fully.png
similarity index 100%
rename from packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_4_fully.png
rename to packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_wifi_signal_4_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable/system_bar_ticker_background.xml b/packages/SystemUI/res/drawable/system_bar_ticker_background.xml
new file mode 100644
index 0000000..7cb64c0
--- /dev/null
+++ b/packages/SystemUI/res/drawable/system_bar_ticker_background.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+-->
+
+<bitmap
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:tileMode="repeat"
+    android:src="@*android:drawable/notify_panel_notification_icon_bg"
+    />
diff --git a/packages/SystemUI/res/layout-land/status_bar_recent_panel.xml b/packages/SystemUI/res/layout-land/status_bar_recent_panel.xml
index dba1dd9..fcdd56c 100644
--- a/packages/SystemUI/res/layout-land/status_bar_recent_panel.xml
+++ b/packages/SystemUI/res/layout-land/status_bar_recent_panel.xml
@@ -20,9 +20,12 @@
 
 <com.android.systemui.recent.RecentsPanelView
     xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:systemui="http://schemas.android.com/apk/res/com.android.systemui"
     android:id="@+id/recents_root"
     android:layout_height="match_parent"
-    android:layout_width="match_parent">
+    android:layout_width="match_parent"
+    systemui:recentItemLayout="@layout/status_bar_recent_item"
+    >
 
     <FrameLayout
         android:id="@+id/recents_bg_protect"
diff --git a/packages/SystemUI/res/layout-port/status_bar_recent_panel.xml b/packages/SystemUI/res/layout-port/status_bar_recent_panel.xml
index 73c3da5..216dcb0 100644
--- a/packages/SystemUI/res/layout-port/status_bar_recent_panel.xml
+++ b/packages/SystemUI/res/layout-port/status_bar_recent_panel.xml
@@ -20,9 +20,12 @@
 
 <com.android.systemui.recent.RecentsPanelView
     xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:systemui="http://schemas.android.com/apk/res/com.android.systemui"
     android:id="@+id/recents_root"
     android:layout_height="match_parent"
-    android:layout_width="match_parent">
+    android:layout_width="match_parent"
+    systemui:recentItemLayout="@layout/status_bar_recent_item"
+    >
 
     <FrameLayout
         android:id="@+id/recents_bg_protect"
diff --git a/packages/SystemUI/res/layout-sw600dp/navigation_bar.xml b/packages/SystemUI/res/layout-sw600dp/navigation_bar.xml
new file mode 100644
index 0000000..1faebe8
--- /dev/null
+++ b/packages/SystemUI/res/layout-sw600dp/navigation_bar.xml
@@ -0,0 +1,313 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+**
+** Copyright 2012, 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.
+-->
+
+<!--  navigation bar for sw600dp (small tablets) -->
+<com.android.systemui.statusbar.phone.NavigationBarView
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:systemui="http://schemas.android.com/apk/res/com.android.systemui"
+    android:layout_height="match_parent"
+    android:layout_width="match_parent"
+    android:background="#FF000000"
+    >
+
+    <FrameLayout android:id="@+id/rot0"
+        android:layout_height="match_parent"
+        android:layout_width="match_parent"
+        >
+
+        <LinearLayout
+            android:layout_height="match_parent"
+            android:layout_width="match_parent"
+            android:orientation="horizontal"
+            android:clipChildren="false"
+            android:clipToPadding="false"
+            android:id="@+id/nav_buttons"
+            android:animateLayoutChanges="true"
+            >
+
+            <!-- navigation controls -->
+            <Space 
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:layout_weight="1"
+                />
+            <View
+                android:layout_width="48dp"
+                android:layout_height="match_parent"
+                android:layout_weight="0"
+                android:visibility="invisible"
+                />
+            <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/back"
+                android:layout_width="78dp"
+                android:layout_height="match_parent"
+                android:src="@drawable/ic_sysbar_back"
+                systemui:keyCode="4"
+                android:layout_weight="0"
+                systemui:glowBackground="@drawable/ic_sysbar_highlight"
+                android:contentDescription="@string/accessibility_back"
+                />
+            <Space 
+                android:layout_width="50dp"
+                android:layout_height="match_parent"
+                />
+            <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/home"
+                android:layout_width="78dp"
+                android:layout_height="match_parent"
+                android:src="@drawable/ic_sysbar_home"
+                systemui:keyCode="3"
+                systemui:keyRepeat="true"
+                android:layout_weight="0"
+                systemui:glowBackground="@drawable/ic_sysbar_highlight"
+                android:contentDescription="@string/accessibility_home"
+                />
+            <Space 
+                android:layout_width="50dp"
+                android:layout_height="match_parent"
+                />
+            <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/recent_apps"
+                android:layout_width="78dp"
+                android:layout_height="match_parent"
+                android:src="@drawable/ic_sysbar_recent"
+                android:layout_weight="0"
+                systemui:glowBackground="@drawable/ic_sysbar_highlight"
+                android:contentDescription="@string/accessibility_recent"
+                />
+            <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/menu"
+                android:layout_width="48dp"
+                android:layout_height="match_parent"
+                android:src="@drawable/ic_sysbar_menu"
+                systemui:keyCode="82"
+                android:layout_weight="0"
+                android:visibility="invisible"
+                android:contentDescription="@string/accessibility_menu"
+                systemui:glowBackground="@drawable/ic_sysbar_highlight"
+                />
+            <Space 
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:layout_weight="1"
+                />
+        </LinearLayout>
+
+        <!-- lights out layout to match exactly -->
+        <LinearLayout
+            android:layout_height="match_parent"
+            android:layout_width="match_parent"
+            android:orientation="horizontal"
+            android:id="@+id/lights_out"
+            android:visibility="gone"
+            >
+            <Space 
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:layout_weight="1"
+                />
+            <ImageView
+                android:layout_width="78dp"
+                android:layout_height="match_parent"
+                android:layout_marginLeft="40dp"
+                android:src="@drawable/ic_sysbar_lights_out_dot_small"
+                android:scaleType="center"
+                android:layout_weight="0"
+                />
+            <Space 
+                android:layout_width="50dp"
+                android:layout_height="match_parent"
+                />
+            <ImageView
+                android:layout_width="78dp"
+                android:layout_height="match_parent"
+                android:src="@drawable/ic_sysbar_lights_out_dot_large"
+                android:scaleType="center"
+                android:layout_weight="0"
+                />
+            <Space 
+                android:layout_width="50dp"
+                android:layout_height="match_parent"
+                />
+            <ImageView
+                android:layout_width="78dp"
+                android:layout_marginRight="40dp"
+                android:layout_height="match_parent"
+                android:src="@drawable/ic_sysbar_lights_out_dot_small"
+                android:scaleType="center"
+                android:layout_weight="0"
+                />
+            <Space 
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:layout_weight="1"
+                />
+        </LinearLayout>
+
+        <com.android.systemui.statusbar.policy.DeadZone
+            android:id="@+id/deadzone"
+            android:layout_height="@dimen/navigation_bar_deadzone_size"
+            android:layout_width="match_parent"
+            android:layout_gravity="top"
+            />
+    </FrameLayout>
+
+    <FrameLayout android:id="@+id/rot90"
+        android:layout_height="match_parent"
+        android:layout_width="match_parent"
+        android:visibility="gone"
+        android:paddingTop="0dp"
+        >
+
+        <LinearLayout
+            android:layout_height="match_parent"
+            android:layout_width="match_parent"
+            android:orientation="horizontal"
+            android:clipChildren="false"
+            android:clipToPadding="false"
+            android:id="@+id/nav_buttons"
+            android:animateLayoutChanges="true"
+            >
+
+            <!-- navigation controls -->
+            <Space 
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:layout_weight="1"
+                />
+            <View
+                android:layout_width="48dp"
+                android:layout_height="match_parent"
+                android:layout_weight="0"
+                android:visibility="invisible"
+                />
+            <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/back"
+                android:layout_width="78dp"
+                android:layout_height="match_parent"
+                android:src="@drawable/ic_sysbar_back"
+                systemui:keyCode="4"
+                android:layout_weight="0"
+                systemui:glowBackground="@drawable/ic_sysbar_highlight"
+                android:contentDescription="@string/accessibility_back"
+                />
+            <Space 
+                android:layout_width="84dp"
+                android:layout_height="match_parent"
+                />
+            <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/home"
+                android:layout_width="78dp"
+                android:layout_height="match_parent"
+                android:src="@drawable/ic_sysbar_home"
+                systemui:keyCode="3"
+                systemui:keyRepeat="true"
+                android:layout_weight="0"
+                systemui:glowBackground="@drawable/ic_sysbar_highlight"
+                android:contentDescription="@string/accessibility_home"
+                />
+            <Space 
+                android:layout_width="84dp"
+                android:layout_height="match_parent"
+                />
+            <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/recent_apps"
+                android:layout_width="78dp"
+                android:layout_height="match_parent"
+                android:src="@drawable/ic_sysbar_recent"
+                android:layout_weight="0"
+                systemui:glowBackground="@drawable/ic_sysbar_highlight"
+                android:contentDescription="@string/accessibility_recent"
+                />
+            <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/menu"
+                android:layout_width="48dp"
+                android:layout_height="match_parent"
+                android:src="@drawable/ic_sysbar_menu"
+                systemui:keyCode="82"
+                android:layout_weight="0"
+                android:visibility="invisible"
+                android:contentDescription="@string/accessibility_menu"
+                systemui:glowBackground="@drawable/ic_sysbar_highlight"
+                />
+            <Space 
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:layout_weight="1"
+                />
+        </LinearLayout>
+
+        <!-- lights out layout to match exactly -->
+        <LinearLayout
+            android:layout_height="match_parent"
+            android:layout_width="match_parent"
+            android:orientation="horizontal"
+            android:id="@+id/lights_out"
+            android:visibility="gone"
+            >
+            <Space 
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:layout_weight="1"
+                />
+            <ImageView
+                android:layout_width="78dp"
+                android:layout_height="match_parent"
+                android:layout_marginLeft="40dp"
+                android:src="@drawable/ic_sysbar_lights_out_dot_small"
+                android:scaleType="center"
+                android:layout_weight="0"
+                />
+            <Space 
+                android:layout_width="84dp"
+                android:layout_height="match_parent"
+                />
+            <ImageView
+                android:layout_width="78dp"
+                android:layout_height="match_parent"
+                android:src="@drawable/ic_sysbar_lights_out_dot_large"
+                android:scaleType="center"
+                android:layout_weight="0"
+                />
+            <Space 
+                android:layout_width="84dp"
+                android:layout_height="match_parent"
+                />
+            <ImageView
+                android:layout_width="78dp"
+                android:layout_marginRight="40dp"
+                android:layout_height="match_parent"
+                android:src="@drawable/ic_sysbar_lights_out_dot_small"
+                android:scaleType="center"
+                android:layout_weight="0"
+                />
+            <Space 
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:layout_weight="1"
+                />
+        </LinearLayout>
+
+        <com.android.systemui.statusbar.policy.DeadZone
+            android:id="@+id/deadzone"
+            android:layout_height="@dimen/navigation_bar_deadzone_size"
+            android:layout_width="match_parent"
+            android:layout_gravity="top"
+            />
+    </FrameLayout>
+
+    <!-- not used -->
+    <View android:id="@+id/rot270"
+        android:layout_height="match_parent"
+        android:layout_width="match_parent"
+        android:visibility="gone"
+        />
+
+</com.android.systemui.statusbar.phone.NavigationBarView>
diff --git a/packages/SystemUI/res/layout-sw600dp/compat_mode_help.xml b/packages/SystemUI/res/layout/compat_mode_help.xml
similarity index 100%
rename from packages/SystemUI/res/layout-sw600dp/compat_mode_help.xml
rename to packages/SystemUI/res/layout/compat_mode_help.xml
diff --git a/packages/SystemUI/res/layout-sw600dp/status_bar.xml b/packages/SystemUI/res/layout/system_bar.xml
similarity index 96%
rename from packages/SystemUI/res/layout-sw600dp/status_bar.xml
rename to packages/SystemUI/res/layout/system_bar.xml
index 2308bf0..a33d638 100644
--- a/packages/SystemUI/res/layout-sw600dp/status_bar.xml
+++ b/packages/SystemUI/res/layout/system_bar.xml
@@ -19,13 +19,13 @@
 <com.android.systemui.statusbar.tablet.TabletStatusBarView
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:systemui="http://schemas.android.com/apk/res/com.android.systemui"
-    android:background="@drawable/status_bar_background"
+    android:background="@drawable/system_bar_background"
     >
     
     <FrameLayout
         android:id="@+id/bar_contents_holder"
         android:layout_width="match_parent"
-        android:layout_height="@*android:dimen/status_bar_height"
+        android:layout_height="@*android:dimen/system_bar_height"
         android:layout_gravity="bottom"
         >
         <RelativeLayout
@@ -36,7 +36,7 @@
             >
 
             <!-- notification icons & panel access -->
-            <include layout="@layout/status_bar_notification_area" 
+            <include layout="@layout/system_bar_notification_area" 
                 android:layout_width="wrap_content"
                 android:layout_height="match_parent"
                 android:layout_alignParentRight="true"
diff --git a/packages/SystemUI/res/layout-sw600dp/status_bar_compat_mode_panel.xml b/packages/SystemUI/res/layout/system_bar_compat_mode_panel.xml
similarity index 100%
rename from packages/SystemUI/res/layout-sw600dp/status_bar_compat_mode_panel.xml
rename to packages/SystemUI/res/layout/system_bar_compat_mode_panel.xml
diff --git a/packages/SystemUI/res/layout-sw600dp/status_bar_input_methods_item.xml b/packages/SystemUI/res/layout/system_bar_input_methods_item.xml
similarity index 99%
rename from packages/SystemUI/res/layout-sw600dp/status_bar_input_methods_item.xml
rename to packages/SystemUI/res/layout/system_bar_input_methods_item.xml
index 41a20fb..5515559 100644
--- a/packages/SystemUI/res/layout-sw600dp/status_bar_input_methods_item.xml
+++ b/packages/SystemUI/res/layout/system_bar_input_methods_item.xml
@@ -102,4 +102,4 @@
         android:layout_width="match_parent"
         android:layout_height="1dip"
         android:background="@android:drawable/divider_horizontal_dark" />
-</LinearLayout>
\ No newline at end of file
+</LinearLayout>
diff --git a/packages/SystemUI/res/layout-sw600dp/status_bar_input_methods_panel.xml b/packages/SystemUI/res/layout/system_bar_input_methods_panel.xml
similarity index 99%
rename from packages/SystemUI/res/layout-sw600dp/status_bar_input_methods_panel.xml
rename to packages/SystemUI/res/layout/system_bar_input_methods_panel.xml
index b712dba..8dede50 100644
--- a/packages/SystemUI/res/layout-sw600dp/status_bar_input_methods_panel.xml
+++ b/packages/SystemUI/res/layout/system_bar_input_methods_panel.xml
@@ -114,4 +114,4 @@
                 android:ellipsize="marquee" />
         </LinearLayout>
     </FrameLayout>
-</com.android.systemui.statusbar.tablet.InputMethodsPanel>
\ No newline at end of file
+</com.android.systemui.statusbar.tablet.InputMethodsPanel>
diff --git a/packages/SystemUI/res/layout-sw600dp/status_bar_no_recent_apps.xml b/packages/SystemUI/res/layout/system_bar_no_recent_apps.xml
similarity index 100%
rename from packages/SystemUI/res/layout-sw600dp/status_bar_no_recent_apps.xml
rename to packages/SystemUI/res/layout/system_bar_no_recent_apps.xml
diff --git a/packages/SystemUI/res/layout-sw600dp/status_bar_notification_area.xml b/packages/SystemUI/res/layout/system_bar_notification_area.xml
similarity index 100%
rename from packages/SystemUI/res/layout-sw600dp/status_bar_notification_area.xml
rename to packages/SystemUI/res/layout/system_bar_notification_area.xml
diff --git a/packages/SystemUI/res/layout-sw600dp/status_bar_notification_panel.xml b/packages/SystemUI/res/layout/system_bar_notification_panel.xml
similarity index 94%
rename from packages/SystemUI/res/layout-sw600dp/status_bar_notification_panel.xml
rename to packages/SystemUI/res/layout/system_bar_notification_panel.xml
index 2947bfb..42af147 100644
--- a/packages/SystemUI/res/layout-sw600dp/status_bar_notification_panel.xml
+++ b/packages/SystemUI/res/layout/system_bar_notification_panel.xml
@@ -14,7 +14,7 @@
   limitations under the License.
 -->
 
-<!--    android:background="@drawable/status_bar_closed_default_background" -->
+<!--    android:background="@drawable/system_bar_closed_default_background" -->
 <com.android.systemui.statusbar.tablet.NotificationPanel
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:systemui="http://schemas.android.com/apk/res/com.android.systemui"
@@ -26,7 +26,7 @@
 
     <ImageView android:id="@+id/clear_all_button"
         android:layout_width="wrap_content"
-        android:layout_height="@*android:dimen/status_bar_height"
+        android:layout_height="@*android:dimen/system_bar_height"
         android:layout_alignParentRight="true"
         android:layout_alignParentBottom="true"
         android:layout_marginRight="20dp"
@@ -46,7 +46,7 @@
         android:layout_marginBottom="8dp"
         >
 
-        <include layout="@layout/status_bar_notification_panel_title"
+        <include layout="@layout/system_bar_notification_panel_title"
             android:layout_width="478dp"
             android:layout_height="224dp"
             android:layout_alignParentTop="true"
diff --git a/packages/SystemUI/res/layout-sw600dp/status_bar_notification_panel_title.xml b/packages/SystemUI/res/layout/system_bar_notification_panel_title.xml
similarity index 100%
rename from packages/SystemUI/res/layout-sw600dp/status_bar_notification_panel_title.xml
rename to packages/SystemUI/res/layout/system_bar_notification_panel_title.xml
diff --git a/packages/SystemUI/res/layout-sw600dp/status_bar_notification_peek.xml b/packages/SystemUI/res/layout/system_bar_notification_peek.xml
similarity index 92%
rename from packages/SystemUI/res/layout-sw600dp/status_bar_notification_peek.xml
rename to packages/SystemUI/res/layout/system_bar_notification_peek.xml
index 02f9a90..3cff47b 100644
--- a/packages/SystemUI/res/layout-sw600dp/status_bar_notification_peek.xml
+++ b/packages/SystemUI/res/layout/system_bar_notification_peek.xml
@@ -18,7 +18,7 @@
 */
 -->
 
-<!--    android:background="@drawable/status_bar_closed_default_background" -->
+<!--    android:background="@drawable/system_bar_closed_default_background" -->
 <com.android.systemui.statusbar.tablet.NotificationPeekPanel
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_height="wrap_content"
@@ -34,7 +34,7 @@
         android:gravity="center_horizontal|bottom"
         android:animationCache="false"
         android:orientation="vertical"
-        android:background="@drawable/status_bar_background"
+        android:background="@drawable/system_bar_background"
         android:clickable="true"
         android:focusable="true"
         android:descendantFocusability="afterDescendants"
diff --git a/packages/SystemUI/res/layout-sw600dp/status_bar_pocket_panel.xml b/packages/SystemUI/res/layout/system_bar_pocket_panel.xml
similarity index 100%
rename from packages/SystemUI/res/layout-sw600dp/status_bar_pocket_panel.xml
rename to packages/SystemUI/res/layout/system_bar_pocket_panel.xml
diff --git a/packages/SystemUI/res/layout-sw600dp/status_bar_recent_item.xml b/packages/SystemUI/res/layout/system_bar_recent_item.xml
similarity index 100%
rename from packages/SystemUI/res/layout-sw600dp/status_bar_recent_item.xml
rename to packages/SystemUI/res/layout/system_bar_recent_item.xml
diff --git a/packages/SystemUI/res/layout-sw600dp/status_bar_recent_panel.xml b/packages/SystemUI/res/layout/system_bar_recent_panel.xml
similarity index 88%
rename from packages/SystemUI/res/layout-sw600dp/status_bar_recent_panel.xml
rename to packages/SystemUI/res/layout/system_bar_recent_panel.xml
index 8e231d0..c2b9e51 100644
--- a/packages/SystemUI/res/layout-sw600dp/status_bar_recent_panel.xml
+++ b/packages/SystemUI/res/layout/system_bar_recent_panel.xml
@@ -20,11 +20,14 @@
 
 <com.android.systemui.recent.RecentsPanelView
     xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:systemui="http://schemas.android.com/apk/res/com.android.systemui"
     android:id="@+id/recents_root"
     android:layout_height="match_parent"
     android:layout_width="wrap_content"
     android:clipToPadding="false"
-    android:clipChildren="false">
+    android:clipChildren="false"
+    systemui:recentItemLayout="@layout/system_bar_recent_item"
+    >
 
     <FrameLayout
         android:id="@+id/recents_bg_protect"
@@ -32,7 +35,7 @@
         android:layout_width="wrap_content"
         android:layout_height="match_parent"
         android:layout_alignParentBottom="true"
-        android:layout_marginBottom="@*android:dimen/status_bar_height"
+        android:layout_marginBottom="@*android:dimen/system_bar_height"
         android:clipToPadding="false"
         android:clipChildren="false">
 
@@ -59,7 +62,7 @@
 
         </com.android.systemui.recent.RecentsVerticalScrollView>
 
-        <include layout="@layout/status_bar_no_recent_apps"
+        <include layout="@layout/system_bar_no_recent_apps"
             android:id="@+id/recents_no_apps"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
@@ -72,7 +75,7 @@
     <com.android.systemui.recent.StatusBarTouchProxy
         android:id="@+id/status_bar_touch_proxy"
         android:layout_width="match_parent"
-        android:layout_height="@*android:dimen/status_bar_height"
+        android:layout_height="@*android:dimen/system_bar_height"
         android:layout_alignParentBottom="true"
         android:layout_alignParentLeft="true"
     />
diff --git a/packages/SystemUI/res/layout-sw600dp/status_bar_recent_panel_footer.xml b/packages/SystemUI/res/layout/system_bar_recent_panel_footer.xml
similarity index 100%
rename from packages/SystemUI/res/layout-sw600dp/status_bar_recent_panel_footer.xml
rename to packages/SystemUI/res/layout/system_bar_recent_panel_footer.xml
diff --git a/packages/SystemUI/res/layout-sw600dp/status_bar_settings_view.xml b/packages/SystemUI/res/layout/system_bar_settings_view.xml
similarity index 100%
rename from packages/SystemUI/res/layout-sw600dp/status_bar_settings_view.xml
rename to packages/SystemUI/res/layout/system_bar_settings_view.xml
diff --git a/packages/SystemUI/res/layout-sw600dp/status_bar_ticker_compat.xml b/packages/SystemUI/res/layout/system_bar_ticker_compat.xml
similarity index 94%
rename from packages/SystemUI/res/layout-sw600dp/status_bar_ticker_compat.xml
rename to packages/SystemUI/res/layout/system_bar_ticker_compat.xml
index d963de1..0d255e7 100644
--- a/packages/SystemUI/res/layout-sw600dp/status_bar_ticker_compat.xml
+++ b/packages/SystemUI/res/layout/system_bar_ticker_compat.xml
@@ -33,9 +33,9 @@
 
     <LinearLayout
         android:layout_width="wrap_content"
-        android:layout_height="@*android:dimen/status_bar_height"
+        android:layout_height="@*android:dimen/system_bar_height"
         android:layout_weight="1"
-        android:background="@drawable/status_bar_ticker_background"
+        android:background="@drawable/system_bar_ticker_background"
         >
         
         <ImageView android:id="@+id/left_icon"
diff --git a/packages/SystemUI/res/layout-sw600dp/status_bar_ticker_panel.xml b/packages/SystemUI/res/layout/system_bar_ticker_panel.xml
similarity index 89%
rename from packages/SystemUI/res/layout-sw600dp/status_bar_ticker_panel.xml
rename to packages/SystemUI/res/layout/system_bar_ticker_panel.xml
index d51f9c8..1738b48 100644
--- a/packages/SystemUI/res/layout-sw600dp/status_bar_ticker_panel.xml
+++ b/packages/SystemUI/res/layout/system_bar_ticker_panel.xml
@@ -22,9 +22,9 @@
     >
 
     <View
-        android:layout_height="@*android:dimen/status_bar_height"
+        android:layout_height="@*android:dimen/system_bar_height"
         android:layout_width="match_parent"
-        android:background="@drawable/status_bar_ticker_background"
+        android:background="@drawable/system_bar_ticker_background"
         android:layout_alignParentLeft="true"
         android:layout_alignParentBottom="true"
         android:clickable="false"
@@ -43,7 +43,7 @@
     <FrameLayout
         android:id="@+id/ticker_expanded"
         android:layout_weight="1"
-        android:layout_height="@*android:dimen/status_bar_height"
+        android:layout_height="@*android:dimen/system_bar_height"
         android:layout_width="match_parent"
         android:layout_toRightOf="@id/large_icon"
         android:layout_alignParentBottom="true"
diff --git a/packages/SystemUI/res/values-sw600dp/colors.xml b/packages/SystemUI/res/values-sw600dp/colors.xml
deleted file mode 100644
index a7a70c3..0000000
--- a/packages/SystemUI/res/values-sw600dp/colors.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-    <drawable name="status_bar_background">#000000</drawable>
-    <drawable name="notification_icon_area_smoke">#aa000000</drawable>
-</resources>
-
diff --git a/packages/SystemUI/res/values-sw600dp/dimens.xml b/packages/SystemUI/res/values-sw600dp/dimens.xml
deleted file mode 100644
index 8c1ac55..0000000
--- a/packages/SystemUI/res/values-sw600dp/dimens.xml
+++ /dev/null
@@ -1,78 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- * Copyright (c) 2010, 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.
-*/
--->
-<resources>
-    <!-- The width of the ticker, including the icon -->
-    <dimen name="notification_ticker_width">360dp</dimen>
-    <!-- Status bar panel bottom offset (height of status bar - overlap) -->
-    <dimen name="status_bar_panel_bottom_offset">36dp</dimen>
-    <!-- gap on either side of status bar notification icons -->
-    <dimen name="status_bar_icon_padding">8dp</dimen>
-    <!-- The width of the notification panel window -->
-    <dimen name="notification_panel_width">512dp</dimen>
-    <!-- The minimum height of the notification panel window -->
-    <dimen name="notification_panel_min_height">770dp</dimen>
-    <!-- Bottom margin (from display edge) for status bar panels -->
-    <dimen name="panel_float">56dp</dimen>
-
-    <!-- Recent Applications parameters -->
-    <!-- How far the thumbnail for a recent app appears from left edge -->
-    <dimen name="status_bar_recents_thumbnail_left_margin">28dp</dimen>
-    <!-- Upper width limit for application icon -->
-    <dimen name="status_bar_recents_app_icon_max_width">64dp</dimen>
-    <!-- Upper height limit for application icon -->
-    <dimen name="status_bar_recents_app_icon_max_height">64dp</dimen>
-
-    <!-- Size of application icon -->
-    <dimen name="status_bar_recents_thumbnail_width">208dp</dimen>
-    <dimen name="status_bar_recents_thumbnail_height">130dp</dimen>
-
-    <!-- Width of recents panel -->
-    <dimen name="status_bar_recents_width">600dp</dimen>
-    <!-- Padding for text descriptions -->
-    <dimen name="status_bar_recents_text_description_padding">8dp</dimen>
-    <!-- Size of application label text -->
-    <dimen name="status_bar_recents_app_label_text_size">18dip</dimen>
-    <!-- Size of application description text -->
-    <dimen name="status_bar_recents_app_description_text_size">18dip</dimen>
-    <!-- Width of application label text -->
-    <dimen name="status_bar_recents_app_label_width">97dip</dimen>
-    <!-- Left margin for application label -->
-    <dimen name="status_bar_recents_app_label_left_margin">16dip</dimen>
-    <!-- Size of fading edge for text -->
-    <dimen name="status_bar_recents_text_fading_edge_length">20dip</dimen>
-    <!-- Size of fading edge for scrolling -->
-    <dimen name="status_bar_recents_scroll_fading_edge_length">10dip</dimen>
-    <!-- Margin between recents container and glow on the right -->
-    <dimen name="status_bar_recents_right_glow_margin">100dip</dimen>
-
-    <!-- Where to place the app icon over the thumbnail -->
-    <dimen name="status_bar_recents_app_icon_left_margin">0dp</dimen>
-    <dimen name="status_bar_recents_app_icon_top_margin">8dp</dimen>
-
-    <!-- size at which Notification icons will be drawn in the status bar -->
-    <dimen name="status_bar_icon_drawing_size">24dip</dimen>
-
-    <!-- opacity at which Notification icons will be drawn in the status bar -->
-    <item type="dimen" name="status_bar_icon_drawing_alpha">100%</item>
-
-    <!-- The width of the view containing non-menu status bar icons -->
-    <dimen name="navigation_key_width">80dip</dimen>
-
-    <!-- The width of the view containing the menu status bar icon -->
-    <dimen name="navigation_menu_key_width">40dip</dimen>
-</resources>
diff --git a/packages/SystemUI/res/values-sw720dp/config.xml b/packages/SystemUI/res/values-sw720dp/config.xml
index 56b8e54..8af700a 100644
--- a/packages/SystemUI/res/values-sw720dp/config.xml
+++ b/packages/SystemUI/res/values-sw720dp/config.xml
@@ -21,5 +21,13 @@
      for different hardware and product builds. -->
 <resources>
     <integer name="config_maxNotificationIcons">5</integer>
+
+    <!-- Whether we're using the tablet-optimized recents interface (we use this
+     value at runtime for some things) -->
+    <bool name="config_recents_interface_for_tablets">true</bool>
+
+    <!-- Whether recents thumbnails should stretch in both x and y to fill their
+     ImageView -->
+    <bool name="config_recents_thumbnail_image_fits_to_xy">true</bool>
 </resources>
 
diff --git a/packages/SystemUI/res/values-sw720dp/dimens.xml b/packages/SystemUI/res/values-sw720dp/dimens.xml
index b16b1e8..36cbabf 100644
--- a/packages/SystemUI/res/values-sw720dp/dimens.xml
+++ b/packages/SystemUI/res/values-sw720dp/dimens.xml
@@ -27,5 +27,59 @@
 
     <!-- The width of the view containing the menu status bar icon -->
     <dimen name="navigation_menu_key_width">80dip</dimen>
+
+    <!-- ======================================== -->
+    <!-- The following resources were recently moved from sw600dp; there may
+         be situations where they don't sync up perfectly with
+         PhoneStatusBar/TabletStatusBar. -->
+    <!-- ======================================== -->
+
+    <!-- The width of the ticker, including the icon -->
+    <dimen name="notification_ticker_width">360dp</dimen>
+    <!-- Status bar panel bottom offset (height of status bar - overlap) -->
+    <dimen name="status_bar_panel_bottom_offset">36dp</dimen>
+    <!-- gap on either side of status bar notification icons -->
+    <dimen name="status_bar_icon_padding">8dp</dimen>
+    <!-- The width of the notification panel window -->
+    <dimen name="notification_panel_width">512dp</dimen>
+    <!-- The minimum height of the notification panel window -->
+    <dimen name="notification_panel_min_height">770dp</dimen>
+    <!-- Bottom margin (from display edge) for status bar panels -->
+    <dimen name="panel_float">56dp</dimen>
+
+    <!-- Recent Applications parameters -->
+    <!-- How far the thumbnail for a recent app appears from left edge -->
+    <dimen name="status_bar_recents_thumbnail_left_margin">28dp</dimen>
+    <!-- Upper width limit for application icon -->
+    <dimen name="status_bar_recents_app_icon_max_width">64dp</dimen>
+    <!-- Upper height limit for application icon -->
+    <dimen name="status_bar_recents_app_icon_max_height">64dp</dimen>
+
+    <!-- Size of application icon -->
+    <dimen name="status_bar_recents_thumbnail_width">208dp</dimen>
+    <dimen name="status_bar_recents_thumbnail_height">130dp</dimen>
+
+    <!-- Width of recents panel -->
+    <dimen name="status_bar_recents_width">600dp</dimen>
+    <!-- Padding for text descriptions -->
+    <dimen name="status_bar_recents_text_description_padding">8dp</dimen>
+    <!-- Size of application label text -->
+    <dimen name="status_bar_recents_app_label_text_size">18dip</dimen>
+    <!-- Size of application description text -->
+    <dimen name="status_bar_recents_app_description_text_size">18dip</dimen>
+    <!-- Width of application label text -->
+    <dimen name="status_bar_recents_app_label_width">97dip</dimen>
+    <!-- Left margin for application label -->
+    <dimen name="status_bar_recents_app_label_left_margin">16dip</dimen>
+    <!-- Size of fading edge for text -->
+    <dimen name="status_bar_recents_text_fading_edge_length">20dip</dimen>
+    <!-- Size of fading edge for scrolling -->
+    <dimen name="status_bar_recents_scroll_fading_edge_length">10dip</dimen>
+    <!-- Margin between recents container and glow on the right -->
+    <dimen name="status_bar_recents_right_glow_margin">100dip</dimen>
+
+    <!-- Where to place the app icon over the thumbnail -->
+    <dimen name="status_bar_recents_app_icon_left_margin">0dp</dimen>
+    <dimen name="status_bar_recents_app_icon_top_margin">8dp</dimen>
 </resources>
 
diff --git a/packages/SystemUI/res/values-sw600dp/donottranslate.xml b/packages/SystemUI/res/values-sw720dp/donottranslate.xml
similarity index 100%
rename from packages/SystemUI/res/values-sw600dp/donottranslate.xml
rename to packages/SystemUI/res/values-sw720dp/donottranslate.xml
diff --git a/packages/SystemUI/res/values-sw600dp/styles.xml b/packages/SystemUI/res/values-sw720dp/styles.xml
similarity index 100%
rename from packages/SystemUI/res/values-sw600dp/styles.xml
rename to packages/SystemUI/res/values-sw720dp/styles.xml
diff --git a/packages/SystemUI/res/values/attrs.xml b/packages/SystemUI/res/values/attrs.xml
index 56d1295..48fb21f 100644
--- a/packages/SystemUI/res/values/attrs.xml
+++ b/packages/SystemUI/res/values/attrs.xml
@@ -32,5 +32,8 @@
     <declare-styleable name="NotificationRowLayout">
         <attr name="rowHeight" format="dimension" />
     </declare-styleable>
+    <declare-styleable name="RecentsPanelView">
+        <attr name="recentItemLayout" format="reference" />
+    </declare-styleable>
 </resources>
 
diff --git a/packages/SystemUI/res/values/colors.xml b/packages/SystemUI/res/values/colors.xml
index 2e55786..9257195 100644
--- a/packages/SystemUI/res/values/colors.xml
+++ b/packages/SystemUI/res/values/colors.xml
@@ -29,4 +29,9 @@
     <drawable name="recents_callout_line">#99ffffff</drawable>
     <drawable name="notification_item_background_legacy_color">#ffaaaaaa</drawable>
     <drawable name="intruder_bg_pressed">#ff33B5E5</drawable>
+
+    <!-- ==================== system bar only ==================== -->
+    <drawable name="system_bar_background">#ff000000</drawable>
+    <!-- the darkening filter applied to notifications -->
+    <drawable name="notification_icon_area_smoke">#aa000000</drawable>
 </resources>
diff --git a/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java b/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java
index 5d6e315..f19ab24 100644
--- a/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java
+++ b/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java
@@ -24,6 +24,7 @@
 import android.content.Intent;
 import android.content.res.Configuration;
 import android.content.res.Resources;
+import android.content.res.TypedArray;
 import android.graphics.Bitmap;
 import android.graphics.Matrix;
 import android.graphics.Shader.TileMode;
@@ -89,6 +90,7 @@
     private TaskDescriptionAdapter mListAdapter;
     private int mThumbnailWidth;
     private boolean mFitThumbnailToXY;
+    private int mRecentItemLayoutId;
 
     public static interface OnRecentsPanelVisibilityChangedListener {
         public void onRecentsPanelVisibilityChanged(boolean visible);
@@ -142,7 +144,7 @@
         }
 
         public View createView(ViewGroup parent) {
-            View convertView = mInflater.inflate(R.layout.status_bar_recent_item, parent, false);
+            View convertView = mInflater.inflate(mRecentItemLayoutId, parent, false);
             ViewHolder holder = new ViewHolder();
             holder.thumbnailView = convertView.findViewById(R.id.app_thumbnail);
             holder.thumbnailViewImage =
@@ -421,6 +423,11 @@
         super(context, attrs, defStyle);
         mContext = context;
         updateValuesFromResources();
+
+        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.RecentsPanelView,
+                defStyle, 0);
+
+        mRecentItemLayoutId = a.getResourceId(R.styleable.RecentsPanelView_recentItemLayout, 0);
     }
 
     public void updateValuesFromResources() {
@@ -432,6 +439,7 @@
     @Override
     protected void onFinishInflate() {
         super.onFinishInflate();
+
         mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
         mRecentsContainer = (ViewGroup) findViewById(R.id.recents_container);
         mStatusBarTouchProxy = (StatusBarTouchProxy) findViewById(R.id.status_bar_touch_proxy);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
index fa54130..19306a9 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
@@ -284,7 +284,7 @@
     protected abstract WindowManager.LayoutParams getRecentsLayoutParams(
             LayoutParams layoutParams);
 
-    protected void updateRecentsPanel() {
+    protected void updateRecentsPanel(int recentsResId) {
         // Recents Panel
         boolean visible = false;
         ArrayList<TaskDescription> recentTasksList = null;
@@ -301,7 +301,7 @@
         // Provide RecentsPanelView with a temporary parent to allow layout params to work.
         LinearLayout tmpRoot = new LinearLayout(mContext);
         mRecentsPanel = (RecentsPanelView) LayoutInflater.from(mContext).inflate(
-                 R.layout.status_bar_recent_panel, tmpRoot, false);
+                recentsResId, tmpRoot, false);
         mRecentsPanel.setRecentTasksLoader(mRecentTasksLoader);
         mRecentTasksLoader.setRecentsPanel(mRecentsPanel);
         mRecentsPanel.setOnTouchListener(
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
index 5582b0f..11e067f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
@@ -275,11 +275,6 @@
                                                 ? findViewById(R.id.rot90)
                                                 : findViewById(R.id.rot270);
 
-        for (View v : mRotatedViews) {
-            // this helps avoid drawing artifacts with glowing navigation keys 
-            ViewGroup group = (ViewGroup) v.findViewById(R.id.nav_buttons);
-            group.setMotionEventSplittingEnabled(false);
-        }
         mCurrentView = mRotatedViews[Surface.ROTATION_0];
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
index da98c80..61500e9 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -288,6 +288,7 @@
 
         try {
             boolean showNav = mWindowManager.hasNavigationBar();
+            if (DEBUG) Slog.v(TAG, "hasNavigationBar=" + showNav);
             if (showNav) {
                 mNavigationBarView =
                     (NavigationBarView) View.inflate(context, R.layout.navigation_bar, null);
@@ -388,9 +389,8 @@
         return lp;
     }
 
-    @Override
     protected void updateRecentsPanel() {
-        super.updateRecentsPanel();
+        super.updateRecentsPanel(R.layout.status_bar_recent_panel);
         // Make .03 alpha the minimum so you always see the item a bit-- slightly below
         // .03, the item disappears entirely (as if alpha = 0) and that discontinuity looks
         // a bit jarring
@@ -422,6 +422,7 @@
 
     // For small-screen devices (read: phones) that lack hardware navigation buttons
     private void addNavigationBar() {
+        if (DEBUG) Slog.v(TAG, "addNavigationBar: about to add " + mNavigationBarView);
         if (mNavigationBarView == null) return;
 
         prepareNavigationBarView();
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/InputMethodsPanel.java b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/InputMethodsPanel.java
index 2171329..8924087 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/InputMethodsPanel.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/InputMethodsPanel.java
@@ -225,7 +225,7 @@
         }
         final CharSequence imiName = getIMIName(imi);
         final Drawable icon = getSubtypeIcon(imi, subtype);
-        final View view = View.inflate(mContext, R.layout.status_bar_input_methods_item, null);
+        final View view = View.inflate(mContext, R.layout.system_bar_input_methods_item, null);
         final ImageView subtypeIcon = (ImageView)view.findViewById(R.id.item_icon);
         final TextView itemTitle = (TextView)view.findViewById(R.id.item_title);
         final TextView itemSubtitle = (TextView)view.findViewById(R.id.item_subtitle);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/NotificationPanel.java b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/NotificationPanel.java
index 8e58649..b82e1d0 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/NotificationPanel.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/NotificationPanel.java
@@ -344,7 +344,7 @@
     // NB: it will be invisible until you show it
     void addSettingsView() {
         LayoutInflater infl = LayoutInflater.from(getContext());
-        mSettingsView = infl.inflate(R.layout.status_bar_settings_view, mContentFrame, false);
+        mSettingsView = infl.inflate(R.layout.system_bar_settings_view, mContentFrame, false);
         mSettingsView.setVisibility(View.GONE);
         mContentFrame.addView(mSettingsView);
     }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java
index c868f78..7b3b745 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java
@@ -225,7 +225,7 @@
 
         // Notification Panel
         mNotificationPanel = (NotificationPanel)View.inflate(context,
-                R.layout.status_bar_notification_panel, null);
+                R.layout.system_bar_notification_panel, null);
         mNotificationPanel.setBar(this);
         mNotificationPanel.show(false, false);
         mNotificationPanel.setOnTouchListener(
@@ -286,7 +286,7 @@
         // Notification preview window
         if (NOTIFICATION_PEEK_ENABLED) {
             mNotificationPeekWindow = (NotificationPeekPanel) View.inflate(context,
-                    R.layout.status_bar_notification_peek, null);
+                    R.layout.system_bar_notification_peek, null);
             mNotificationPeekWindow.setBar(this);
 
             mNotificationPeekRow = (ViewGroup) mNotificationPeekWindow.findViewById(R.id.content);
@@ -330,7 +330,7 @@
 
         // Input methods Panel
         mInputMethodsPanel = (InputMethodsPanel) View.inflate(context,
-                R.layout.status_bar_input_methods_panel, null);
+                R.layout.system_bar_input_methods_panel, null);
         mInputMethodsPanel.setHardKeyboardEnabledChangeListener(this);
         mInputMethodsPanel.setOnTouchListener(new TouchOutsideListener(
                 MSG_CLOSE_INPUT_METHODS_PANEL, mInputMethodsPanel));
@@ -353,7 +353,7 @@
         
         // Compatibility mode selector panel
         mCompatModePanel = (CompatModePanel) View.inflate(context,
-                R.layout.status_bar_compat_mode_panel, null);
+                R.layout.system_bar_compat_mode_panel, null);
         mCompatModePanel.setOnTouchListener(new TouchOutsideListener(
                 MSG_CLOSE_COMPAT_MODE_PANEL, mCompatModePanel));
         mCompatModePanel.setTrigger(mCompatModeButton);
@@ -465,7 +465,7 @@
         loadDimens();
 
         final TabletStatusBarView sb = (TabletStatusBarView)View.inflate(
-                context, R.layout.status_bar, null);
+                context, R.layout.system_bar, null);
         mStatusBarView = sb;
 
         sb.setHandler(mHandler);
@@ -647,7 +647,7 @@
     }
 
     protected void updateRecentsPanel() {
-        super.updateRecentsPanel();
+        super.updateRecentsPanel(R.layout.system_bar_recent_panel);
         mRecentsPanel.setStatusBarView(mStatusBarView);
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletTicker.java b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletTicker.java
index e93a32b..754441c 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletTicker.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletTicker.java
@@ -264,7 +264,7 @@
             iconId = R.id.left_icon;
         }
         if (n.tickerView != null) {
-            group = (ViewGroup)inflater.inflate(R.layout.status_bar_ticker_panel, null, false);
+            group = (ViewGroup)inflater.inflate(R.layout.system_bar_ticker_panel, null, false);
             ViewGroup content = (FrameLayout) group.findViewById(R.id.ticker_expanded);
             View expanded = null;
             Exception exception = null;
@@ -285,7 +285,7 @@
                     ViewGroup.LayoutParams.MATCH_PARENT);
             content.addView(expanded, lp);
         } else if (n.tickerText != null) {
-            group = (ViewGroup)inflater.inflate(R.layout.status_bar_ticker_compat, mWindow, false);
+            group = (ViewGroup)inflater.inflate(R.layout.system_bar_ticker_compat, mWindow, false);
             final Drawable icon = StatusBarIconView.getIcon(mContext,
                     new StatusBarIcon(notification.pkg, n.icon, n.iconLevel, 0, n.tickerText));
             ImageView iv = (ImageView)group.findViewById(iconId);
diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
index b22a109..cc663c2 100755
--- a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
+++ b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
@@ -310,8 +310,10 @@
     WindowState mNavigationBar = null;
     boolean mHasNavigationBar = false;
     boolean mCanHideNavigationBar = false;
-    boolean mNavigationBarOnBottom = true;
-    int mNavigationBarWidth = 0, mNavigationBarHeight = 0;
+    boolean mNavigationBarCanMove = false; // can the navigation bar ever move to the side?
+    boolean mNavigationBarOnBottom = true; // is the navigation bar on the bottom *right now*?
+    int[] mNavigationBarHeightForRotation = new int[4];
+    int[] mNavigationBarWidthForRotation = new int[4];
 
     WindowState mKeyguard = null;
     KeyguardViewMediator mKeyguardMediator;
@@ -972,19 +974,38 @@
 
         mStatusBarHeight = mContext.getResources().getDimensionPixelSize(
                 com.android.internal.R.dimen.status_bar_height);
-        mNavigationBarHeight = mContext.getResources().getDimensionPixelSize(
-                com.android.internal.R.dimen.navigation_bar_height);
-        mNavigationBarWidth = mContext.getResources().getDimensionPixelSize(
-                com.android.internal.R.dimen.navigation_bar_width);
 
-        // Determine whether the status bar can hide based on the size
-        // of the screen.  We assume sizes >= 600dp are tablets where we
-        // will use the system bar.
-        // XXX: This will change to 720dp soon.
+        mNavigationBarHeightForRotation[Surface.ROTATION_0] =
+        mNavigationBarHeightForRotation[Surface.ROTATION_90] =
+        mNavigationBarHeightForRotation[Surface.ROTATION_180] =
+        mNavigationBarHeightForRotation[Surface.ROTATION_270] =
+                mContext.getResources().getDimensionPixelSize(
+                        com.android.internal.R.dimen.navigation_bar_height);
+        mNavigationBarWidthForRotation[Surface.ROTATION_0] =
+        mNavigationBarWidthForRotation[Surface.ROTATION_90] =
+        mNavigationBarWidthForRotation[Surface.ROTATION_180] =
+        mNavigationBarWidthForRotation[Surface.ROTATION_270] =
+                mContext.getResources().getDimensionPixelSize(
+                        com.android.internal.R.dimen.navigation_bar_width);
+
+        // SystemUI (status bar) layout policy
         int shortSizeDp = shortSize
                 * DisplayMetrics.DENSITY_DEFAULT
                 / DisplayMetrics.DENSITY_DEVICE;
-        mHasSystemNavBar = shortSizeDp >= 600;
+
+        if (shortSizeDp < 600) {
+            // 0-599dp: "phone" UI with a separate status & navigation bar
+            mHasSystemNavBar = false;
+            mNavigationBarCanMove = true;
+        } else if (shortSizeDp < 720) {
+            // 600-719dp: "phone" UI with modifications for larger screens
+            mHasSystemNavBar = false;
+            mNavigationBarCanMove = false;
+        } else {
+            // 720dp: "tablet" UI with a single combined status & navigation bar
+            mHasSystemNavBar = true;
+            mNavigationBarCanMove = false;
+        }
 
         if (!mHasSystemNavBar) {
             mHasNavigationBar = mContext.getResources().getBoolean(
@@ -1007,7 +1028,7 @@
             int longSizeDp = longSize
                     * DisplayMetrics.DENSITY_DEFAULT
                     / DisplayMetrics.DENSITY_DEVICE;
-            int barHeightDp = mNavigationBarHeight
+            int barHeightDp = mNavigationBarHeightForRotation[mLandscapeRotation]
                     * DisplayMetrics.DENSITY_DEFAULT
                     / DisplayMetrics.DENSITY_DEVICE;
             int aspect = ((shortSizeDp-barHeightDp) * 16) / longSizeDp;
@@ -1354,8 +1375,8 @@
         if (mHasNavigationBar) {
             // For a basic navigation bar, when we are in landscape mode we place
             // the navigation bar to the side.
-            if (fullWidth > fullHeight) {
-                return fullWidth - mNavigationBarWidth;
+            if (mNavigationBarCanMove && fullWidth > fullHeight) {
+                return fullWidth - mNavigationBarWidthForRotation[rotation];
             }
         }
         return fullWidth;
@@ -1364,13 +1385,13 @@
     public int getNonDecorDisplayHeight(int fullWidth, int fullHeight, int rotation) {
         if (mHasSystemNavBar) {
             // For the system navigation bar, we always place it at the bottom.
-            return fullHeight - mNavigationBarHeight;
+            return fullHeight - mNavigationBarHeightForRotation[rotation];
         }
         if (mHasNavigationBar) {
             // For a basic navigation bar, when we are in portrait mode we place
             // the navigation bar to the bottom.
-            if (fullWidth < fullHeight) {
-                return fullHeight - mNavigationBarHeight;
+            if (!mNavigationBarCanMove || fullWidth < fullHeight) {
+                return fullHeight - mNavigationBarHeightForRotation[rotation];
             }
         }
         return fullHeight;
@@ -2181,10 +2202,10 @@
             // size.  We need to do this directly, instead of relying on
             // it to bubble up from the nav bar, because this needs to
             // change atomically with screen rotations.
-            mNavigationBarOnBottom = !mHasNavigationBar || displayWidth < displayHeight;
+            mNavigationBarOnBottom = (!mNavigationBarCanMove || displayWidth < displayHeight);
             if (mNavigationBarOnBottom) {
                 // It's a system nav bar or a portrait screen; nav bar goes on bottom.
-                int top = displayHeight - mNavigationBarHeight;
+                int top = displayHeight - mNavigationBarHeightForRotation[displayRotation];
                 if (mHdmiPlugged) {
                     if (top > mExternalDisplayHeight) {
                         top = mExternalDisplayHeight;
@@ -2202,7 +2223,7 @@
                 }
             } else {
                 // Landscape screen; nav bar goes to the right.
-                int left = displayWidth - mNavigationBarWidth;
+                int left = displayWidth - mNavigationBarWidthForRotation[displayRotation];
                 if (mHdmiPlugged) {
                     if (left > mExternalDisplayWidth) {
                         left = mExternalDisplayWidth;
diff --git a/tests/DumpRenderTree/src/com/android/dumprendertree/CallbackProxy.java b/tests/DumpRenderTree/src/com/android/dumprendertree/CallbackProxy.java
index 740f544..d74f5f7 100644
--- a/tests/DumpRenderTree/src/com/android/dumprendertree/CallbackProxy.java
+++ b/tests/DumpRenderTree/src/com/android/dumprendertree/CallbackProxy.java
@@ -487,7 +487,7 @@
     }
 
     public void setAppCacheMaximumSize(long size) {
-        WebStorage.getInstance().setAppCacheMaximumSize(size);
+        android.webkit.WebStorageClassic.getInstance().setAppCacheMaximumSize(size);
     }
 
     public void setCanOpenWindows() {
diff --git a/tests/DumpRenderTree2/src/com/android/dumprendertree2/LayoutTestController.java b/tests/DumpRenderTree2/src/com/android/dumprendertree2/LayoutTestController.java
index e608e2d..d0c59d3 100644
--- a/tests/DumpRenderTree2/src/com/android/dumprendertree2/LayoutTestController.java
+++ b/tests/DumpRenderTree2/src/com/android/dumprendertree2/LayoutTestController.java
@@ -66,7 +66,7 @@
 
     public void setAppCacheMaximumSize(long size) {
         Log.i(LOG_TAG, "setAppCacheMaximumSize() called with: " + size);
-        WebStorage.getInstance().setAppCacheMaximumSize(size);
+        android.webkit.WebStorageClassic.getInstance().setAppCacheMaximumSize(size);
     }
 
     public void setCanOpenWindows() {