diff --git a/Android.mk b/Android.mk
index 7a24663..4c135da 100644
--- a/Android.mk
+++ b/Android.mk
@@ -391,6 +391,8 @@
 # (see development/build/sdk.atree)
 web_docs_sample_code_flags := \
 		-hdf android.hasSamples 1 \
+		-samplecode $(sample_dir)/AccessibilityService \
+		            resources/samples/AccessibilityService "Accessibility Service" \
 		-samplecode $(sample_dir)/ApiDemos \
 		            resources/samples/ApiDemos "API Demos" \
 		-samplecode $(sample_dir)/BackupRestore \
diff --git a/api/current.xml b/api/current.xml
index 7624086..b62c689 100644
--- a/api/current.xml
+++ b/api/current.xml
@@ -221434,17 +221434,6 @@
  visibility="public"
 >
 </method>
-<method name="showInputMethodSubtypePicker"
- return="void"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-</method>
 <method name="showSoftInput"
  return="boolean"
  abstract="false"
@@ -249212,7 +249201,7 @@
  deprecated="not deprecated"
  visibility="public"
 >
-<parameter name="arg0" type="T">
+<parameter name="t" type="T">
 </parameter>
 </method>
 </interface>
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java
index 5c4f57a..c0714e3 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -870,12 +870,6 @@
                             (dbStats.dbSize > 0) ? String.valueOf(dbStats.dbSize) : " ",
                             (dbStats.lookaside > 0) ? String.valueOf(dbStats.lookaside) : " ",
                             dbStats.cache, dbStats.dbName);
-                    if (dbStats.dataDump != null) {
-                        int size = dbStats.dataDump.size();
-                        for (int dumpIndex = 0; dumpIndex < size; dumpIndex++) {
-                            printRow(pw, "%s", dbStats.dataDump.get(dumpIndex));
-                        }
-                    }
                 }
             }
 
diff --git a/core/java/android/bluetooth/BluetoothAdapter.java b/core/java/android/bluetooth/BluetoothAdapter.java
index 556fb10..32df4e8 100644
--- a/core/java/android/bluetooth/BluetoothAdapter.java
+++ b/core/java/android/bluetooth/BluetoothAdapter.java
@@ -521,6 +521,21 @@
     }
 
     /**
+     * Get the UUIDs supported by the local Bluetooth adapter.
+     *
+     * <p>Requires {@link android.Manifest.permission#BLUETOOTH}
+     *
+     * @return the UUIDs supported by the local Bluetooth Adapter.
+     * @hide
+     */
+    public ParcelUuid[] getUuids() {
+        try {
+            return mService.getUuids();
+        } catch (RemoteException e) {Log.e(TAG, "", e);}
+        return null;
+    }
+
+    /**
      * Set the friendly Bluetooth name of the local Bluetooth adapter.
      * <p>This name is visible to remote Bluetooth devices.
      * <p>Valid Bluetooth names are a maximum of 248 bytes using UTF-8
diff --git a/core/java/android/bluetooth/BluetoothDeviceProfileState.java b/core/java/android/bluetooth/BluetoothDeviceProfileState.java
index 138e7f2..3eadff9 100644
--- a/core/java/android/bluetooth/BluetoothDeviceProfileState.java
+++ b/core/java/android/bluetooth/BluetoothDeviceProfileState.java
@@ -301,10 +301,9 @@
                     if (isPhoneDocked(mDevice)) {
                         // Don't auto connect to docks.
                         break;
-                    } else if (mHeadsetService == null) {
-                        deferMessage(message);
                     } else {
-                        if (mHeadsetService.getPriority(mDevice) ==
+                        if (mHeadsetService != null &&
+                              mHeadsetService.getPriority(mDevice) ==
                               BluetoothHeadset.PRIORITY_AUTO_CONNECT &&
                               mHeadsetService.getDevicesMatchingConnectionStates(
                                   new int[] {BluetoothProfile.STATE_CONNECTED,
@@ -1027,7 +1026,8 @@
                 // This is again against spec. HFP incoming connections should be made
                 // before A2DP, so we should not hit this case. But many devices
                 // don't follow this.
-                if (mHeadsetService.getPriority(mDevice) == BluetoothProfile.PRIORITY_ON) {
+                if (mHeadsetService != null &&
+                      mHeadsetService.getPriority(mDevice) == BluetoothProfile.PRIORITY_ON) {
                     Message msg = new Message();
                     msg.what = CONNECT_OTHER_PROFILES;
                     msg.arg1 = CONNECT_HFP_OUTGOING;
diff --git a/core/java/android/bluetooth/IBluetooth.aidl b/core/java/android/bluetooth/IBluetooth.aidl
index aefb3f2..f3e73cf 100644
--- a/core/java/android/bluetooth/IBluetooth.aidl
+++ b/core/java/android/bluetooth/IBluetooth.aidl
@@ -35,6 +35,7 @@
     String getAddress();
     String getName();
     boolean setName(in String name);
+    ParcelUuid[] getUuids();
 
     int getScanMode();
     boolean setScanMode(int mode, int duration);
diff --git a/core/java/android/database/sqlite/SQLiteDatabase.java b/core/java/android/database/sqlite/SQLiteDatabase.java
index 87f55d2..7efb7fd 100644
--- a/core/java/android/database/sqlite/SQLiteDatabase.java
+++ b/core/java/android/database/sqlite/SQLiteDatabase.java
@@ -2507,7 +2507,7 @@
                     if (pageCount > 0) {
                         dbStatsList.add(new DbStats(dbName, pageCount, db.getPageSize(),
                                 lookasideUsed, db.getCacheHitNum(), db.getCacheMissNum(),
-                                db.getCachesize(), getDataDump(db)));
+                                db.getCachesize()));
                     }
                 }
                 // if there are pooled connections, return the cache stats for them also.
@@ -2518,7 +2518,7 @@
                     for (SQLiteDatabase pDb : connPool.getConnectionList()) {
                         dbStatsList.add(new DbStats("(pooled # " + pDb.mConnectionNum + ") "
                                 + lastnode, 0, 0, 0, pDb.getCacheHitNum(),
-                                pDb.getCacheMissNum(), pDb.getCachesize(), null));
+                                pDb.getCacheMissNum(), pDb.getCachesize()));
                     }
                 }
             } catch (SQLiteException e) {
@@ -2529,44 +2529,6 @@
         return dbStatsList;
     }
 
-    private static ArrayList<String> getDataDump(SQLiteDatabase db) {
-        // create database dump of certain data from certain databases for debugging purposes
-        if (db.getPath().equalsIgnoreCase(
-                "/data/data/com.android.providers.downloads/databases/downloads.db")) {
-            String sql =
-                    "select * from downloads " +
-                    " where notificationpackage = 'com.google.android.gsf'" + 
-                    " or status >= 400";
-            Cursor cursor = db.rawQuery(sql, null);
-            try {
-                int count = cursor.getCount();
-                if (count == 0) {
-                    return null;
-                }
-                ArrayList<String> buff = new ArrayList<String>();
-                buff.add("  Data from downloads.db");
-                int columnCount = cursor.getColumnCount();
-                for (int i =0; i < count && cursor.moveToNext(); i++) {
-                    buff.add("    Row#" + i + "");
-                    for (int j = 0; j < columnCount; j++) {
-                        String colName = cursor.getColumnName(j);
-                        String value = cursor.getString(j);
-                        buff.add("      " + colName + " = " + value);
-                    }
-                }
-                for (String s : buff)  Log.i("vnoritag", s);
-                return buff;
-            } catch (SQLiteException e) {
-                Log.w(TAG, "exception in executing the sql: " + sql, e);
-            } finally {
-                if (cursor != null) {
-                    cursor.close();
-                }
-            }
-        }
-        return null;
-    }
-
     /**
      * Returns list of full pathnames of all attached databases including the main database
      * by executing 'pragma database_list' on the database.
diff --git a/core/java/android/database/sqlite/SQLiteDebug.java b/core/java/android/database/sqlite/SQLiteDebug.java
index 72377f0..94960791 100644
--- a/core/java/android/database/sqlite/SQLiteDebug.java
+++ b/core/java/android/database/sqlite/SQLiteDebug.java
@@ -121,31 +121,27 @@
      */
     public static class DbStats {
         /** name of the database */
-        public final String dbName;
+        public String dbName;
 
         /** the page size for the database */
-        public final long pageSize;
+        public long pageSize;
 
         /** the database size */
-        public final long dbSize;
+        public long dbSize;
 
         /** documented here http://www.sqlite.org/c3ref/c_dbstatus_lookaside_used.html */
-        public final int lookaside;
+        public int lookaside;
 
         /** statement cache stats: hits/misses/cachesize */
-        public final String cache;
-
-        /** database dump of 'useful info for debugging only */
-        public final ArrayList<String> dataDump;
+        public String cache;
 
         public DbStats(String dbName, long pageCount, long pageSize, int lookaside,
-            int hits, int misses, int cachesize, ArrayList<String> data) {
+            int hits, int misses, int cachesize) {
             this.dbName = dbName;
             this.pageSize = pageSize / 1024;
             dbSize = (pageCount * pageSize) / 1024;
             this.lookaside = lookaside;
             this.cache = hits + "/" + misses + "/" + cachesize;
-            this.dataDump = data;
         }
     }
 
diff --git a/core/java/android/net/MobileDataStateTracker.java b/core/java/android/net/MobileDataStateTracker.java
index 40f72b2..de7abd7 100644
--- a/core/java/android/net/MobileDataStateTracker.java
+++ b/core/java/android/net/MobileDataStateTracker.java
@@ -46,6 +46,7 @@
 
     private static final String TAG = "MobileDataStateTracker";
     private static final boolean DBG = true;
+    private static final boolean VDBG = false;
 
     private Phone.DataState mMobileDataState;
     private ITelephony mPhoneService;
@@ -156,10 +157,15 @@
     private class MobileDataStateReceiver extends BroadcastReceiver {
         IConnectivityManager mConnectivityManager;
 
+        @Override
         public void onReceive(Context context, Intent intent) {
             if (intent.getAction().equals(TelephonyIntents.
                     ACTION_ANY_DATA_CONNECTION_STATE_CHANGED)) {
                 String apnType = intent.getStringExtra(Phone.DATA_APN_TYPE_KEY);
+                if (VDBG) Log.d(TAG,
+                        String.format("Broadcast received: ACTION_ANY_DATA_CONNECTION_STATE_CHANGED"
+                                            + "mApnType=%s %s received apnType=%s",
+                        mApnType, TextUtils.equals(apnType, mApnType) ? "==" : "!=", apnType));
                 if (!TextUtils.equals(apnType, mApnType)) {
                     return;
                 }
@@ -171,8 +177,8 @@
                 mNetworkInfo.setIsAvailable(!intent.getBooleanExtra(Phone.NETWORK_UNAVAILABLE_KEY,
                         false));
 
-                if (DBG) Log.d(TAG, mApnType + " Received state= " + state + ", old= " +
-                        mMobileDataState + ", reason= " +
+                if (DBG) Log.d(TAG, mApnType + " Received state=" + state + ", old=" +
+                        mMobileDataState + ", reason=" +
                         (reason == null ? "(unspecified)" : reason));
 
                 if (mMobileDataState != state) {
@@ -249,6 +255,8 @@
                     equals(TelephonyIntents.ACTION_DATA_CONNECTION_FAILED)) {
                 String apnType = intent.getStringExtra(Phone.DATA_APN_TYPE_KEY);
                 if (!TextUtils.equals(apnType, mApnType)) {
+                    if (DBG) Log.d(TAG, String.format("Broadcast received: ACTION_ANY_DATA_CONNECTION_FAILED ignore, mApnType=%s != received apnType=%s",
+                            mApnType, apnType));
                     return;
                 }
                 String reason = intent.getStringExtra(Phone.FAILURE_REASON_KEY);
@@ -256,6 +264,8 @@
                 if (DBG) Log.d(TAG, mApnType + "Received " + intent.getAction() +
                         " broadcast" + reason == null ? "" : "(" + reason + ")");
                 setDetailedState(DetailedState.FAILED, reason, apnName);
+            } else {
+                if (DBG) Log.d(TAG, "Broadcast received: ignore " + intent.getAction());
             }
         }
     }
diff --git a/core/java/android/os/StrictMode.java b/core/java/android/os/StrictMode.java
index 854428f..754d073 100644
--- a/core/java/android/os/StrictMode.java
+++ b/core/java/android/os/StrictMode.java
@@ -113,6 +113,13 @@
     private static final boolean IS_USER_BUILD = "user".equals(Build.TYPE);
     private static final boolean IS_ENG_BUILD = "eng".equals(Build.TYPE);
 
+    /**
+     * The boolean system property to control screen flashes on violations.
+     *
+     * @hide
+     */
+    public static final String VISUAL_PROPERTY = "persist.sys.strictmode.visual";
+
     // Only log a duplicate stack trace to the logs every second.
     private static final long MIN_LOG_INTERVAL_MS = 1000;
 
@@ -712,29 +719,66 @@
         return new ThreadPolicy(oldPolicyMask);
     }
 
+    // We don't want to flash the screen red in the system server
+    // process, nor do we want to modify all the call sites of
+    // conditionallyEnableDebugLogging() in the system server,
+    // so instead we use this to determine if we are the system server.
+    private static boolean amTheSystemServerProcess() {
+        // Fast path.  Most apps don't have the system server's UID.
+        if (Process.myUid() != Process.SYSTEM_UID) {
+            return false;
+        }
+
+        // The settings app, though, has the system server's UID so
+        // look up our stack to see if we came from the system server.
+        Throwable stack = new Throwable();
+        stack.fillInStackTrace();
+        for (StackTraceElement ste : stack.getStackTrace()) {
+            String clsName = ste.getClassName();
+            if (clsName != null && clsName.startsWith("com.android.server.")) {
+                return true;
+            }
+        }
+        return false;
+    }
+
     /**
      * Enable DropBox logging for debug phone builds.
      *
      * @hide
      */
     public static boolean conditionallyEnableDebugLogging() {
+        boolean doFlashes = !amTheSystemServerProcess() &&
+                SystemProperties.getBoolean(VISUAL_PROPERTY, IS_ENG_BUILD);
+
         // For debug builds, log event loop stalls to dropbox for analysis.
         // Similar logic also appears in ActivityThread.java for system apps.
-        if (IS_USER_BUILD) {
+        if (IS_USER_BUILD && !doFlashes) {
             setCloseGuardEnabled(false);
             return false;
         }
-        StrictMode.setThreadPolicyMask(
-            StrictMode.DETECT_DISK_WRITE |
-            StrictMode.DETECT_DISK_READ |
-            StrictMode.DETECT_NETWORK |
-            StrictMode.PENALTY_DROPBOX |
-            (IS_ENG_BUILD ? StrictMode.PENALTY_FLASH : 0)
-        );
-        sVmPolicyMask = StrictMode.DETECT_VM_CURSOR_LEAKS |
-                StrictMode.DETECT_VM_CLOSABLE_LEAKS |
-                StrictMode.PENALTY_DROPBOX;
-        setCloseGuardEnabled(vmClosableObjectLeaksEnabled());
+
+        int threadPolicyMask = StrictMode.DETECT_DISK_WRITE |
+                StrictMode.DETECT_DISK_READ |
+                StrictMode.DETECT_NETWORK;
+
+        if (!IS_USER_BUILD) {
+            threadPolicyMask |= StrictMode.PENALTY_DROPBOX;
+        }
+        if (doFlashes) {
+            threadPolicyMask |= StrictMode.PENALTY_FLASH;
+        }
+
+        StrictMode.setThreadPolicyMask(threadPolicyMask);
+
+        if (IS_USER_BUILD) {
+            setCloseGuardEnabled(false);
+        } else {
+            sVmPolicyMask = StrictMode.DETECT_VM_CURSOR_LEAKS |
+                    StrictMode.DETECT_VM_CLOSABLE_LEAKS |
+                    StrictMode.PENALTY_DROPBOX;
+            setCloseGuardEnabled(vmClosableObjectLeaksEnabled());
+        }
         return true;
     }
 
diff --git a/core/java/android/os/SystemProperties.java b/core/java/android/os/SystemProperties.java
index 4a036ec..619bf8d 100644
--- a/core/java/android/os/SystemProperties.java
+++ b/core/java/android/os/SystemProperties.java
@@ -93,7 +93,7 @@
      * Get the value for the given key, returned as a boolean.
      * Values 'n', 'no', '0', 'false' or 'off' are considered false.
      * Values 'y', 'yes', '1', 'true' or 'on' are considered true.
-     * (case insensitive).
+     * (case sensitive).
      * If the key does not exist, or has any other value, then the default
      * result is returned.
      * @param key the key to lookup
diff --git a/core/java/android/preference/PreferenceFrameLayout.java b/core/java/android/preference/PreferenceFrameLayout.java
index 426abf0..481859e17 100644
--- a/core/java/android/preference/PreferenceFrameLayout.java
+++ b/core/java/android/preference/PreferenceFrameLayout.java
@@ -45,12 +45,18 @@
         TypedArray a = context.obtainStyledAttributes(attrs,
                 com.android.internal.R.styleable.PreferenceFrameLayout, defStyle, 0);
 
-        mTopPadding = (int) a.getDimension(
+        float density = context.getResources().getDisplayMetrics().density;
+        int defaultTopPadding = (int) (density * DEFAULT_TOP_PADDING + 0.5f);
+        int defaultBottomPadding = (int) (density * DEFAULT_BOTTOM_PADDING + 0.5f);
+
+        mTopPadding = a.getDimensionPixelSize(
                 com.android.internal.R.styleable.PreferenceFrameLayout_topPadding,
-                DEFAULT_TOP_PADDING);
-        mBottomPadding = (int) a.getDimension(
+                defaultTopPadding);
+        mBottomPadding = a.getDimensionPixelSize(
                 com.android.internal.R.styleable.PreferenceFrameLayout_bottomPadding,
-                DEFAULT_BOTTOM_PADDING);
+                defaultBottomPadding);
+
+
 
         a.recycle();
     }
diff --git a/core/java/android/server/BluetoothService.java b/core/java/android/server/BluetoothService.java
index 01a6b94..398b5ae 100644
--- a/core/java/android/server/BluetoothService.java
+++ b/core/java/android/server/BluetoothService.java
@@ -541,14 +541,15 @@
                             mHandler.obtainMessage(MESSAGE_REGISTER_SDP_RECORDS, 3, -1), 500);
                     break;
                 case 3:
-                    Log.d(TAG, "Registering opush record");
-                    SystemService.start("opush");
-                    mHandler.sendMessageDelayed(
-                            mHandler.obtainMessage(MESSAGE_REGISTER_SDP_RECORDS, 4, -1), 500);
-                    break;
-                case 4:
                     Log.d(TAG, "Registering pbap record");
                     SystemService.start("pbap");
+                    mHandler.sendMessageDelayed(
+                        mHandler.obtainMessage(MESSAGE_REGISTER_SDP_RECORDS, 4, -1), 500);
+
+                    break;
+                case 4:
+                    Log.d(TAG, "Registering opush record");
+                    SystemService.start("opush");
                     break;
                 }
                 break;
@@ -630,8 +631,15 @@
                 initProfileState();
 
                 //Register SDP records.
-                mHandler.sendMessageDelayed(
+                if (mContext.getResources().
+                        getBoolean(com.android.internal.R.bool.config_voice_capable)) {
+                    mHandler.sendMessageDelayed(
                         mHandler.obtainMessage(MESSAGE_REGISTER_SDP_RECORDS, 1, -1), 3000);
+                } else {
+                    // Register only OPP.
+                    mHandler.sendMessageDelayed(
+                        mHandler.obtainMessage(MESSAGE_REGISTER_SDP_RECORDS, 4, -1), 3000);
+                }
                 setBluetoothTetheringNative(true, BluetoothPan.NAP_ROLE, BluetoothPan.NAP_BRIDGE);
 
 
@@ -1196,6 +1204,24 @@
         return getProperty("Name");
     }
 
+    public synchronized ParcelUuid[] getUuids() {
+        mContext.enforceCallingOrSelfPermission(BLUETOOTH_PERM, "Need BLUETOOTH permission");
+        String value =  getProperty("UUIDs");
+        if (value == null) return null;
+
+        String[] uuidStrings = null;
+        // The UUIDs are stored as a "," separated string.
+        uuidStrings = value.split(",");
+        ParcelUuid[] uuids = new ParcelUuid[uuidStrings.length];
+
+        for (int i = 0; i < uuidStrings.length; i++) {
+            uuids[i] = ParcelUuid.fromString(uuidStrings[i]);
+        }
+        return uuids;
+
+    }
+
+
     /**
      * Returns the user-friendly name of a remote device.  This value is
      * returned from our local cache, which is updated when onPropertyChange
diff --git a/core/java/android/view/IWindowManager.aidl b/core/java/android/view/IWindowManager.aidl
index d964e2f..beda099 100644
--- a/core/java/android/view/IWindowManager.aidl
+++ b/core/java/android/view/IWindowManager.aidl
@@ -140,6 +140,12 @@
     // on screen)
     void showStrictModeViolation(boolean on);
 
+    // Proxy to set the system property for whether the flashing
+    // should be enabled.  The 'enabled' value is null or blank for
+    // the system default (differs per build variant) or any valid
+    // boolean string as parsed by SystemProperties.getBoolean().
+    void setStrictModeVisualIndicatorPreference(String enabled);
+
     // These can only be called with the SET_ORIENTATION permission.
     /**
      * Change the current screen rotation, constants as per
diff --git a/core/java/android/view/animation/ScaleAnimation.java b/core/java/android/view/animation/ScaleAnimation.java
index 8537d42..1dd250f 100644
--- a/core/java/android/view/animation/ScaleAnimation.java
+++ b/core/java/android/view/animation/ScaleAnimation.java
@@ -17,8 +17,10 @@
 package android.view.animation;
 
 import android.content.Context;
+import android.content.res.Resources;
 import android.content.res.TypedArray;
 import android.util.AttributeSet;
+import android.util.TypedValue;
 
 /**
  * An animation that controls the scale of an object. You can specify the point
@@ -26,11 +28,23 @@
  * 
  */
 public class ScaleAnimation extends Animation {
+    private final Resources mResources;
+
     private float mFromX;
     private float mToX;
     private float mFromY;
     private float mToY;
 
+    private int mFromXType = TypedValue.TYPE_NULL;
+    private int mToXType = TypedValue.TYPE_NULL;
+    private int mFromYType = TypedValue.TYPE_NULL;
+    private int mToYType = TypedValue.TYPE_NULL;
+
+    private int mFromXData = 0;
+    private int mToXData = 0;
+    private int mFromYData = 0;
+    private int mToYData = 0;
+
     private int mPivotXType = ABSOLUTE;
     private int mPivotYType = ABSOLUTE;
     private float mPivotXValue = 0.0f;
@@ -48,14 +62,60 @@
     public ScaleAnimation(Context context, AttributeSet attrs) {
         super(context, attrs);
 
+        mResources = context.getResources();
+
         TypedArray a = context.obtainStyledAttributes(attrs,
                 com.android.internal.R.styleable.ScaleAnimation);
 
-        mFromX = a.getFloat(com.android.internal.R.styleable.ScaleAnimation_fromXScale, 0.0f);
-        mToX = a.getFloat(com.android.internal.R.styleable.ScaleAnimation_toXScale, 0.0f);
+        TypedValue tv = a.peekValue(
+                com.android.internal.R.styleable.ScaleAnimation_fromXScale);
+        mFromX = 0.0f;
+        if (tv != null) {
+            if (tv.type == TypedValue.TYPE_FLOAT) {
+                // This is a scaling factor.
+                mFromX = tv.getFloat();
+            } else {
+                mFromXType = tv.type;
+                mFromXData = tv.data;
+            }
+        }
+        tv = a.peekValue(
+                com.android.internal.R.styleable.ScaleAnimation_toXScale);
+        mToX = 0.0f;
+        if (tv != null) {
+            if (tv.type == TypedValue.TYPE_FLOAT) {
+                // This is a scaling factor.
+                mToX = tv.getFloat();
+            } else {
+                mToXType = tv.type;
+                mToXData = tv.data;
+            }
+        }
 
-        mFromY = a.getFloat(com.android.internal.R.styleable.ScaleAnimation_fromYScale, 0.0f);
-        mToY = a.getFloat(com.android.internal.R.styleable.ScaleAnimation_toYScale, 0.0f);
+        tv = a.peekValue(
+                com.android.internal.R.styleable.ScaleAnimation_fromYScale);
+        mFromY = 0.0f;
+        if (tv != null) {
+            if (tv.type == TypedValue.TYPE_FLOAT) {
+                // This is a scaling factor.
+                mFromY = tv.getFloat();
+            } else {
+                mFromYType = tv.type;
+                mFromYData = tv.data;
+            }
+        }
+        tv = a.peekValue(
+                com.android.internal.R.styleable.ScaleAnimation_toYScale);
+        mToY = 0.0f;
+        if (tv != null) {
+            if (tv.type == TypedValue.TYPE_FLOAT) {
+                // This is a scaling factor.
+                mToY = tv.getFloat();
+            } else {
+                mToYType = tv.type;
+                mToYData = tv.data;
+            }
+        }
 
         Description d = Description.parseValue(a.peekValue(
                 com.android.internal.R.styleable.ScaleAnimation_pivotX));
@@ -81,6 +141,7 @@
      * @param toY Vertical scaling factor to apply at the end of the animation
      */
     public ScaleAnimation(float fromX, float toX, float fromY, float toY) {
+        mResources = null;
         mFromX = fromX;
         mToX = toX;
         mFromY = fromY;
@@ -107,6 +168,7 @@
      */
     public ScaleAnimation(float fromX, float toX, float fromY, float toY,
             float pivotX, float pivotY) {
+        mResources = null;
         mFromX = fromX;
         mToX = toX;
         mFromY = fromY;
@@ -146,6 +208,7 @@
      */
     public ScaleAnimation(float fromX, float toX, float fromY, float toY,
             int pivotXType, float pivotXValue, int pivotYType, float pivotYValue) {
+        mResources = null;
         mFromX = fromX;
         mToX = toX;
         mFromY = fromY;
@@ -177,10 +240,32 @@
         }
     }
 
+    float resolveScale(float scale, int type, int data, int size, int psize) {
+        float targetSize;
+        if (type == TypedValue.TYPE_FRACTION) {
+            targetSize = TypedValue.complexToFraction(data, size, psize);
+        } else if (type == TypedValue.TYPE_DIMENSION) {
+            targetSize = TypedValue.complexToDimension(data, mResources.getDisplayMetrics());
+        } else {
+            return scale;
+        }
+
+        if (size == 0) {
+            return 1;
+        }
+
+        return targetSize/(float)size;
+    }
+
     @Override
     public void initialize(int width, int height, int parentWidth, int parentHeight) {
         super.initialize(width, height, parentWidth, parentHeight);
 
+        mFromX = resolveScale(mFromX, mFromXType, mFromXData, width, parentWidth);
+        mToX = resolveScale(mToX, mToXType, mToXData, width, parentWidth);
+        mFromY = resolveScale(mFromY, mFromYType, mFromYData, height, parentHeight);
+        mToY = resolveScale(mToY, mToYType, mToYData, height, parentHeight);
+
         mPivotX = resolveSize(mPivotXType, mPivotXValue, width, parentWidth);
         mPivotY = resolveSize(mPivotYType, mPivotYValue, height, parentHeight);
     }
diff --git a/core/java/android/view/inputmethod/InputMethodManager.java b/core/java/android/view/inputmethod/InputMethodManager.java
index 9bc1c22..867bb83 100644
--- a/core/java/android/view/inputmethod/InputMethodManager.java
+++ b/core/java/android/view/inputmethod/InputMethodManager.java
@@ -1430,16 +1430,6 @@
         }
     }
 
-    public void showInputMethodSubtypePicker() {
-        synchronized (mH) {
-            try {
-                mService.showInputMethodSubtypePickerFromClient(mClient);
-            } catch (RemoteException e) {
-                Log.w(TAG, "IME died: " + mCurId, e);
-            }
-        }
-    }
-
     public void showInputMethodAndSubtypeEnabler(String topId) {
         synchronized (mH) {
             try {
diff --git a/core/java/android/webkit/OverScrollGlow.java b/core/java/android/webkit/OverScrollGlow.java
index 53600f6..af56a2f 100644
--- a/core/java/android/webkit/OverScrollGlow.java
+++ b/core/java/android/webkit/OverScrollGlow.java
@@ -17,6 +17,7 @@
 
 import com.android.internal.R;
 
+import android.content.Context;
 import android.content.res.Resources;
 import android.graphics.Canvas;
 import android.graphics.drawable.Drawable;
@@ -40,13 +41,14 @@
 
     public OverScrollGlow(WebView host) {
         mHostView = host;
-        final Resources res = host.getContext().getResources();
+        Context context = host.getContext();
+        final Resources res = context.getResources();
         final Drawable edge = res.getDrawable(R.drawable.overscroll_edge);
         final Drawable glow = res.getDrawable(R.drawable.overscroll_glow);
-        mEdgeGlowTop = new EdgeGlow(edge, glow);
-        mEdgeGlowBottom = new EdgeGlow(edge, glow);
-        mEdgeGlowLeft = new EdgeGlow(edge, glow);
-        mEdgeGlowRight = new EdgeGlow(edge, glow);
+        mEdgeGlowTop = new EdgeGlow(context, edge, glow);
+        mEdgeGlowBottom = new EdgeGlow(context, edge, glow);
+        mEdgeGlowLeft = new EdgeGlow(context, edge, glow);
+        mEdgeGlowRight = new EdgeGlow(context, edge, glow);
     }
 
     /**
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java
index 56325f6..33015ad 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -588,9 +588,11 @@
     private static final int DRAG_HELD_MOTIONLESS       = 8;
     private static final int AWAKEN_SCROLL_BARS         = 9;
     private static final int PREVENT_DEFAULT_TIMEOUT    = 10;
+    private static final int SCROLL_SELECT_TEXT         = 11;
+
 
     private static final int FIRST_PRIVATE_MSG_ID = REMEMBER_PASSWORD;
-    private static final int LAST_PRIVATE_MSG_ID = PREVENT_DEFAULT_TIMEOUT;
+    private static final int LAST_PRIVATE_MSG_ID = SCROLL_SELECT_TEXT;
 
     /*
      * Package message ids
@@ -647,7 +649,8 @@
         "RESUME_WEBCORE_PRIORITY", //        = 7;
         "DRAG_HELD_MOTIONLESS", //           = 8;
         "AWAKEN_SCROLL_BARS", //             = 9;
-        "PREVENT_DEFAULT_TIMEOUT" //         = 10;
+        "PREVENT_DEFAULT_TIMEOUT", //        = 10;
+        "SCROLL_SELECT_TEXT" //              = 11;
     };
 
     static final String[] HandlerPackageDebugString = {
@@ -787,6 +790,11 @@
 
     private int mBackgroundColor = Color.WHITE;
 
+    private static final long SELECT_SCROLL_INTERVAL = 1000 / 60; // 60 / second
+    private int mAutoScrollX = 0;
+    private int mAutoScrollY = 0;
+    private boolean mSentAutoScrollMessage = false;
+
     // Used to notify listeners of a new picture.
     private PictureListener mPictureListener;
     /**
@@ -1923,25 +1931,15 @@
      * browsing session and clears any internal state associated with that
      * session. The consequences of calling this method while a private
      * browsing session is active are unspecified.
-     * @param context The same context which was used to create the private
-     *                browsing WebView.
      * @return True if the private browsing files were successfully deleted,
      *         false otherwise.
      * @hide pending API council approval.
      */
-    public static boolean cleanupPrivateBrowsingFiles(Context context) {
-        // It seems wrong that we have to pass the storage locations here, given
-        // that the storage files are created native-side in WebRequestContext
-        // (albeit using a dumb getter on BrowserFrame to get the paths from
-        // Java). It looks like this is required because we may need to call
-        // this method before the BrowserFrame has been set up.
-        // TODO: Investigate whether this can be avoided.
-        return nativeCleanupPrivateBrowsingFiles(context.getDatabasePath("dummy").getParent(),
-                                                 context.getCacheDir().getAbsolutePath());
+    public static boolean cleanupPrivateBrowsingFiles() {
+        return nativeCleanupPrivateBrowsingFiles();
     }
 
-    private static native boolean nativeCleanupPrivateBrowsingFiles(String databaseDirectory,
-                                                                    String cacheDirectory);
+    private static native boolean nativeCleanupPrivateBrowsingFiles();
 
     private boolean extendScroll(int y) {
         int finalY = mScroller.getFinalY();
@@ -3883,13 +3881,6 @@
 
         // decide which adornments to draw
         int extras = DRAW_EXTRAS_NONE;
-        if (DebugFlags.WEB_VIEW) {
-            Log.v(LOGTAG, "mFindIsUp=" + mFindIsUp
-                    + " mSelectingText=" + mSelectingText
-                    + " nativePageShouldHandleShiftAndArrows()="
-                    + nativePageShouldHandleShiftAndArrows()
-                    + " animateZoom=" + animateZoom);
-        }
         if (mFindIsUp) {
             extras = DRAW_EXTRAS_FIND;
         } else if (mSelectingText) {
@@ -3900,6 +3891,14 @@
         } else if (drawCursorRing) {
             extras = DRAW_EXTRAS_CURSOR_RING;
         }
+        if (DebugFlags.WEB_VIEW) {
+            Log.v(LOGTAG, "mFindIsUp=" + mFindIsUp
+                    + " mSelectingText=" + mSelectingText
+                    + " nativePageShouldHandleShiftAndArrows()="
+                    + nativePageShouldHandleShiftAndArrows()
+                    + " animateZoom=" + animateZoom
+                    + " extras=" + extras);
+        }
 
         if (canvas.isHardwareAccelerated()) {
             try {
@@ -4654,6 +4653,9 @@
             WebViewCore.resumePriority();
             WebViewCore.resumeUpdatePicture(mWebViewCore);
             invalidate(); // redraw without selection
+            mAutoScrollX = 0;
+            mAutoScrollY = 0;
+            mSentAutoScrollMessage = false;
         }
     }
 
@@ -5299,6 +5301,22 @@
                     if (parent != null) {
                         parent.requestDisallowInterceptTouchEvent(true);
                     }
+                    int layer = nativeScrollableLayer(contentX, contentY);
+                    if (layer == 0) {
+                        mAutoScrollX = x <= SELECT_SCROLL ? -SELECT_SCROLL
+                            : x >= getViewWidth() - SELECT_SCROLL
+                            ? SELECT_SCROLL : 0;
+                        mAutoScrollY = y <= SELECT_SCROLL ? -SELECT_SCROLL
+                            : y >= getViewHeightWithTitle() - SELECT_SCROLL
+                            ? SELECT_SCROLL : 0;
+                        if (!mSentAutoScrollMessage) {
+                            mSentAutoScrollMessage = true;
+                            mPrivateHandler.sendEmptyMessageDelayed(
+                                    SCROLL_SELECT_TEXT, SELECT_SCROLL_INTERVAL);
+                        }
+                    } else {
+                        // TODO: allow scrollable overflow div to autoscroll
+                    }
                     nativeExtendSelection(contentX, contentY);
                     invalidate();
                     break;
@@ -5723,6 +5741,7 @@
     private static final int TRACKBALL_MOVE_COUNT = 10;
     private static final int TRACKBALL_MULTIPLIER = 3;
     private static final int SELECT_CURSOR_OFFSET = 16;
+    private static final int SELECT_SCROLL = 5;
     private int mSelectX = 0;
     private int mSelectY = 0;
     private boolean mFocusSizeChanged = false;
@@ -6627,6 +6646,16 @@
                     }
                     break;
                 }
+                case SCROLL_SELECT_TEXT: {
+                    if (mAutoScrollX == 0 && mAutoScrollY == 0) {
+                        mSentAutoScrollMessage = false;
+                        break;
+                    }
+                    scrollBy(mAutoScrollX, mAutoScrollY);
+                    sendEmptyMessageDelayed(
+                            SCROLL_SELECT_TEXT, SELECT_SCROLL_INTERVAL);
+                    break;
+                }
                 case SWITCH_TO_SHORTPRESS: {
                     if (mTouchMode == TOUCH_INIT_MODE) {
                         if (!getSettings().supportTouchOnly()
@@ -7739,6 +7768,7 @@
     private native boolean  nativeHitSelection(int x, int y);
     private native String   nativeImageURI(int x, int y);
     private native void     nativeInstrumentReport();
+    private native Rect     nativeLayerBounds(int layer);
     /* package */ native boolean nativeMoveCursorToNextTextInput();
     // return true if the page has been scrolled
     private native boolean  nativeMotionUp(int x, int y, int slop);
diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java
index 423a788..4ff7ee8 100644
--- a/core/java/android/widget/AbsListView.java
+++ b/core/java/android/widget/AbsListView.java
@@ -132,7 +132,7 @@
      * Indicates the touch gesture is a scroll
      */
     static final int TOUCH_MODE_SCROLL = 3;
-    
+
     /**
      * Indicates the view is in the process of being flung
      */
@@ -385,7 +385,7 @@
      * Handles one frame of a fling
      */
     private FlingRunnable mFlingRunnable;
-    
+
     /**
      * Handles scrolling between positions within the list.
      */
@@ -456,7 +456,7 @@
     int mResurrectToPosition = INVALID_POSITION;
 
     private ContextMenuInfo mContextMenuInfo = null;
-    
+
     /**
      * Maximum distance to record overscroll
      */
@@ -550,19 +550,19 @@
     private int mMinimumVelocity;
     private int mMaximumVelocity;
     private float mVelocityScale = 1.0f;
-    
+
     final boolean[] mIsScrap = new boolean[1];
-    
+
     // True when the popup should be hidden because of a call to
     // dispatchDisplayHint()
     private boolean mPopupHidden;
-    
+
     /**
      * ID of the active pointer. This is used to retain consistency during
      * drags/flings if multiple pointers are used.
      */
     private int mActivePointerId = INVALID_POINTER;
-    
+
     /**
      * Sentinel value for no current active pointer.
      * Used by {@link #mActivePointerId}.
@@ -726,7 +726,7 @@
 
         boolean smoothScrollbar = a.getBoolean(R.styleable.AbsListView_smoothScrollbar, true);
         setSmoothScrollbarEnabled(smoothScrollbar);
-        
+
         final int adapterId = a.getResourceId(R.styleable.AbsListView_adapter, 0);
         if (adapterId != 0) {
             final Context c = context;
@@ -764,11 +764,12 @@
     public void setOverScrollMode(int mode) {
         if (mode != OVER_SCROLL_NEVER) {
             if (mEdgeGlowTop == null) {
-                final Resources res = getContext().getResources();
+                Context context = getContext();
+                final Resources res = context.getResources();
                 final Drawable edge = res.getDrawable(R.drawable.overscroll_edge);
                 final Drawable glow = res.getDrawable(R.drawable.overscroll_glow);
-                mEdgeGlowTop = new EdgeGlow(edge, glow);
-                mEdgeGlowBottom = new EdgeGlow(edge, glow);
+                mEdgeGlowTop = new EdgeGlow(context, edge, glow);
+                mEdgeGlowBottom = new EdgeGlow(context, edge, glow);
             }
         } else {
             mEdgeGlowTop = null;
@@ -1843,7 +1844,7 @@
      * @param position The position to display
      * @param isScrap Array of at least 1 boolean, the first entry will become true if
      *                the returned view was taken from the scrap heap, false if otherwise.
-     * 
+     *
      * @return A view displaying the data associated with the specified position
      */
     View obtainView(int position, boolean[] isScrap) {
@@ -2166,7 +2167,7 @@
                 treeObserver.addOnGlobalLayoutListener(this);
             }
         }
-        
+
         if (mAdapter != null && mDataSetObserver == null) {
             mDataSetObserver = new AdapterDataSetObserver();
             mAdapter.registerDataSetObserver(mDataSetObserver);
@@ -2962,7 +2963,7 @@
                                 mFlingRunnable = new FlingRunnable();
                             }
                             reportScrollStateChange(OnScrollListener.SCROLL_STATE_FLING);
-                            
+
                             mFlingRunnable.start(-initialVelocity);
                         } else {
                             mTouchMode = TOUCH_MODE_REST;
@@ -3015,7 +3016,7 @@
                 mVelocityTracker.recycle();
                 mVelocityTracker = null;
             }
-            
+
             mActivePointerId = INVALID_POINTER;
 
             if (PROFILE_SCROLLING) {
@@ -3064,7 +3065,7 @@
                     mVelocityTracker = null;
                 }
             }
-            
+
             if (mEdgeGlowTop != null) {
                 mEdgeGlowTop.onRelease();
                 mEdgeGlowBottom.onRelease();
@@ -3072,7 +3073,7 @@
             mActivePointerId = INVALID_POINTER;
             break;
         }
-        
+
         case MotionEvent.ACTION_POINTER_UP: {
             onSecondaryPointerUp(ev);
             final int x = mMotionX;
@@ -3170,11 +3171,11 @@
                 mMotionCorrection = 0;
                 return true;
             }
-            
+
             final int x = (int) ev.getX();
             final int y = (int) ev.getY();
             mActivePointerId = ev.getPointerId(0);
-            
+
             int motionPosition = findMotionRow(y);
             if (touchMode != TOUCH_MODE_FLING && motionPosition >= 0) {
                 // User clicked on an actual view (and was not stopping a fling).
@@ -3213,7 +3214,7 @@
             reportScrollStateChange(OnScrollListener.SCROLL_STATE_IDLE);
             break;
         }
-        
+
         case MotionEvent.ACTION_POINTER_UP: {
             onSecondaryPointerUp(ev);
             break;
@@ -3222,7 +3223,7 @@
 
         return false;
     }
-    
+
     private void onSecondaryPointerUp(MotionEvent ev) {
         final int pointerIndex = (ev.getAction() & MotionEvent.ACTION_POINTER_INDEX_MASK) >>
                 MotionEvent.ACTION_POINTER_INDEX_SHIFT;
@@ -3418,7 +3419,7 @@
             default:
                 endFling();
                 return;
-                
+
             case TOUCH_MODE_SCROLL:
                 if (mScroller.isFinished()) {
                     return;
@@ -3521,17 +3522,17 @@
             }
         }
     }
-    
-    
+
+
     class PositionScroller implements Runnable {
         private static final int SCROLL_DURATION = 400;
-        
+
         private static final int MOVE_DOWN_POS = 1;
         private static final int MOVE_UP_POS = 2;
         private static final int MOVE_DOWN_BOUND = 3;
         private static final int MOVE_UP_BOUND = 4;
         private static final int MOVE_OFFSET = 5;
-        
+
         private int mMode;
         private int mTargetPos;
         private int mBoundPos;
@@ -3540,17 +3541,17 @@
         private final int mExtraScroll;
 
         private int mOffsetFromTop;
-        
+
         PositionScroller() {
             mExtraScroll = ViewConfiguration.get(mContext).getScaledFadingEdgeLength();
         }
-        
+
         void start(int position) {
             final int firstPos = mFirstPosition;
             final int lastPos = firstPos + getChildCount() - 1;
-            
+
             int viewTravelCount;
-            if (position <= firstPos) {                
+            if (position <= firstPos) {
                 viewTravelCount = firstPos - position + 1;
                 mMode = MOVE_UP_POS;
             } else if (position >= lastPos) {
@@ -3560,7 +3561,7 @@
                 // Already on screen, nothing to do
                 return;
             }
-            
+
             if (viewTravelCount > 0) {
                 mScrollDuration = SCROLL_DURATION / viewTravelCount;
             } else {
@@ -3569,19 +3570,19 @@
             mTargetPos = position;
             mBoundPos = INVALID_POSITION;
             mLastSeenPos = INVALID_POSITION;
-            
+
             post(this);
         }
-        
+
         void start(int position, int boundPosition) {
             if (boundPosition == INVALID_POSITION) {
                 start(position);
                 return;
             }
-            
+
             final int firstPos = mFirstPosition;
             final int lastPos = firstPos + getChildCount() - 1;
-            
+
             int viewTravelCount;
             if (position <= firstPos) {
                 final int boundPosFromLast = lastPos - boundPosition;
@@ -3589,7 +3590,7 @@
                     // Moving would shift our bound position off the screen. Abort.
                     return;
                 }
-                
+
                 final int posTravel = firstPos - position + 1;
                 final int boundTravel = boundPosFromLast - 1;
                 if (boundTravel < posTravel) {
@@ -3619,7 +3620,7 @@
                 // Already on screen, nothing to do
                 return;
             }
-            
+
             if (viewTravelCount > 0) {
                 mScrollDuration = SCROLL_DURATION / viewTravelCount;
             } else {
@@ -3628,7 +3629,7 @@
             mTargetPos = position;
             mBoundPos = boundPosition;
             mLastSeenPos = INVALID_POSITION;
-            
+
             post(this);
         }
 
@@ -3679,12 +3680,12 @@
 
             final int listHeight = getHeight();
             final int firstPos = mFirstPosition;
-            
+
             switch (mMode) {
             case MOVE_DOWN_POS: {
                 final int lastViewIndex = getChildCount() - 1;
                 final int lastPos = firstPos + lastViewIndex;
-                
+
                 if (lastViewIndex < 0) {
                     return;
                 }
@@ -3710,11 +3711,11 @@
                 }
                 break;
             }
-                
+
             case MOVE_DOWN_BOUND: {
                 final int nextViewIndex = 1;
                 final int childCount = getChildCount();
-                
+
                 if (firstPos == mBoundPos || childCount <= nextViewIndex
                         || firstPos + childCount >= mItemCount) {
                     return;
@@ -3739,13 +3740,13 @@
 
                     post(this);
                 } else  {
-                    if (nextViewTop > extraScroll) { 
+                    if (nextViewTop > extraScroll) {
                         smoothScrollBy(nextViewTop - extraScroll, mScrollDuration);
                     }
                 }
                 break;
             }
-                
+
             case MOVE_UP_POS: {
                 if (firstPos == mLastSeenPos) {
                     // No new views, let things keep going.
@@ -3769,7 +3770,7 @@
                 }
                 break;
             }
-                
+
             case MOVE_UP_BOUND: {
                 final int lastViewIndex = getChildCount() - 2;
                 if (lastViewIndex < 0) {
@@ -3835,11 +3836,11 @@
             }
         }
     }
-    
+
     /**
      * The amount of friction applied to flings. The default value
      * is {@link ViewConfiguration#getScrollFriction}.
-     * 
+     *
      * @return A scalar dimensionless value representing the coefficient of
      *         friction.
      */
@@ -3847,19 +3848,19 @@
         if (mFlingRunnable == null) {
             mFlingRunnable = new FlingRunnable();
         }
-        mFlingRunnable.mScroller.setFriction(friction);        
+        mFlingRunnable.mScroller.setFriction(friction);
     }
 
     /**
      * Sets a scale factor for the fling velocity. The initial scale
      * factor is 1.0.
-     * 
+     *
      * @param scale The scale factor to multiply the velocity by.
      */
     public void setVelocityScale(float scale) {
         mVelocityScale = scale;
     }
-    
+
     /**
      * Smoothly scroll to the specified adapter position. The view will
      * scroll such that the indicated position is displayed.
@@ -3913,7 +3914,7 @@
      * Smoothly scroll to the specified adapter position. The view will
      * scroll such that the indicated position is displayed, but it will
      * stop early if scrolling further would scroll boundPosition out of
-     * view. 
+     * view.
      * @param position Scroll to this adapter position.
      * @param boundPosition Do not scroll if it would move this adapter
      *          position out of view.
@@ -3924,7 +3925,7 @@
         }
         mPositionScroller.start(position, boundPosition);
     }
-    
+
     /**
      * Smoothly scroll by distance pixels over duration milliseconds.
      * @param distance Distance to scroll in pixels.
@@ -4145,7 +4146,7 @@
         if (down) {
             mFirstPosition += count;
         }
-        
+
         invalidate();
 
         final int absIncrementalDeltaY = Math.abs(incrementalDeltaY);
@@ -4171,7 +4172,7 @@
 
         invokeOnItemScrollListener();
         awakenScrollBars();
-        
+
         return false;
     }
 
@@ -5289,7 +5290,7 @@
             mCurrentScrap = scrapViews[0];
             mScrapViews = scrapViews;
         }
-        
+
         public void markChildrenDirty() {
             if (mViewTypeCount == 1) {
                 final ArrayList<View> scrap = mCurrentScrap;
diff --git a/core/java/android/widget/EdgeGlow.java b/core/java/android/widget/EdgeGlow.java
index 9b3a6e6..2a0e849 100644
--- a/core/java/android/widget/EdgeGlow.java
+++ b/core/java/android/widget/EdgeGlow.java
@@ -16,6 +16,7 @@
 
 package android.widget;
 
+import android.content.Context;
 import android.graphics.Canvas;
 import android.graphics.drawable.Drawable;
 import android.view.animation.AnimationUtils;
@@ -44,7 +45,7 @@
     private static final float HELD_GLOW_ALPHA = 0.5f;
     private static final float HELD_GLOW_SCALE_Y = 0.5f;
 
-    private static final float MAX_GLOW_HEIGHT = 3.f;
+    private static final float MAX_GLOW_HEIGHT = 4.f;
 
     private static final float PULL_GLOW_BEGIN = 1.f;
     private static final float PULL_EDGE_BEGIN = 0.6f;
@@ -58,6 +59,8 @@
     private final Drawable mGlow;
     private int mWidth;
     private int mHeight;
+    private final int MIN_WIDTH = 300;
+    private final int mMinWidth;
 
     private float mEdgeAlpha;
     private float mEdgeScaleY;
@@ -86,12 +89,12 @@
 
     // How much dragging should effect the height of the edge image.
     // Number determined by user testing.
-    private static final int PULL_DISTANCE_EDGE_FACTOR = 5;
+    private static final int PULL_DISTANCE_EDGE_FACTOR = 7;
 
     // How much dragging should effect the height of the glow image.
     // Number determined by user testing.
-    private static final int PULL_DISTANCE_GLOW_FACTOR = 5;
-    private static final float PULL_DISTANCE_ALPHA_GLOW_FACTOR = 0.8f;
+    private static final int PULL_DISTANCE_GLOW_FACTOR = 7;
+    private static final float PULL_DISTANCE_ALPHA_GLOW_FACTOR = 1.1f;
 
     private static final int VELOCITY_EDGE_FACTOR = 8;
     private static final int VELOCITY_GLOW_FACTOR = 16;
@@ -100,10 +103,11 @@
 
     private float mPullDistance;
 
-    public EdgeGlow(Drawable edge, Drawable glow) {
+    public EdgeGlow(Context context, Drawable edge, Drawable glow) {
         mEdge = edge;
         mGlow = glow;
 
+        mMinWidth = (int) (context.getResources().getDisplayMetrics().density * MIN_WIDTH + 0.5f);
         mInterpolator = new DecelerateInterpolator();
     }
 
@@ -251,17 +255,31 @@
 
         mGlow.setAlpha((int) (Math.max(0, Math.min(mGlowAlpha, 1)) * 255));
 
-        // Center the glow inside the width of the container.
-        int glowLeft = (mWidth - glowWidth)/2;
-        mGlow.setBounds(glowLeft, 0, mWidth - glowLeft, (int) Math.min(
+        int glowBottom = (int) Math.min(
                 glowHeight * mGlowScaleY * glowHeight/ glowWidth * 0.6f,
-                glowHeight * MAX_GLOW_HEIGHT));
+                glowHeight * MAX_GLOW_HEIGHT);
+        if (mWidth < mMinWidth) {
+            // Center the glow and clip it.
+            int glowLeft = (mWidth - glowWidth)/2;
+            mGlow.setBounds(glowLeft, 0, mWidth - glowLeft, glowBottom);
+        } else {
+            // Stretch the glow to fit.
+            mGlow.setBounds(0, 0, mWidth, glowBottom);
+        }
+
         mGlow.draw(canvas);
 
         mEdge.setAlpha((int) (Math.max(0, Math.min(mEdgeAlpha, 1)) * 255));
 
-        int edgeLeft = (mWidth - edgeWidth)/2;
-        mEdge.setBounds(edgeLeft, 0, mWidth - edgeLeft, (int) (edgeHeight * mEdgeScaleY));
+        int edgeBottom = (int) (edgeHeight * mEdgeScaleY);
+        if (mWidth < mMinWidth) {
+            // Center the edge and clip it.
+            int edgeLeft = (mWidth - edgeWidth)/2;
+            mEdge.setBounds(edgeLeft, 0, mWidth - edgeLeft, edgeBottom);
+        } else {
+            // Stretch the edge to fit.
+            mEdge.setBounds(0, 0, mWidth, edgeBottom);
+        }
         mEdge.draw(canvas);
 
         return mState != STATE_IDLE;
diff --git a/core/java/android/widget/HorizontalScrollView.java b/core/java/android/widget/HorizontalScrollView.java
index 9fc91da..c05e3ad 100644
--- a/core/java/android/widget/HorizontalScrollView.java
+++ b/core/java/android/widget/HorizontalScrollView.java
@@ -58,8 +58,8 @@
  * within a larger container.
  *
  * <p>HorizontalScrollView only supports horizontal scrolling.
- * 
- * @attr ref android.R.styleable#HorizontalScrollView_fillViewport 
+ *
+ * @attr ref android.R.styleable#HorizontalScrollView_fillViewport
  */
 public class HorizontalScrollView extends FrameLayout {
     private static final int ANIMATED_SCROLL_GAP = ScrollView.ANIMATED_SCROLL_GAP;
@@ -125,7 +125,7 @@
     private int mTouchSlop;
     private int mMinimumVelocity;
     private int mMaximumVelocity;
-    
+
     private int mOverscrollDistance;
     private int mOverflingDistance;
 
@@ -134,13 +134,13 @@
      * drags/flings if multiple pointers are used.
      */
     private int mActivePointerId = INVALID_POINTER;
-    
+
     /**
      * Sentinel value for no current active pointer.
      * Used by {@link #mActivePointerId}.
      */
     private static final int INVALID_POINTER = -1;
-    
+
     public HorizontalScrollView(Context context) {
         this(context, null);
     }
@@ -279,7 +279,7 @@
      *
      * @param fillViewport True to stretch the content's width to the viewport's
      *        boundaries, false otherwise.
-     * 
+     *
      * @attr ref android.R.styleable#HorizontalScrollView_fillViewport
      */
     public void setFillViewport(boolean fillViewport) {
@@ -322,13 +322,13 @@
             int width = getMeasuredWidth();
             if (child.getMeasuredWidth() < width) {
                 final FrameLayout.LayoutParams lp = (LayoutParams) child.getLayoutParams();
-    
+
                 int childHeightMeasureSpec = getChildMeasureSpec(heightMeasureSpec, mPaddingTop
                         + mPaddingBottom, lp.height);
                 width -= mPaddingLeft;
                 width -= mPaddingRight;
                 int childWidthMeasureSpec = MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY);
-    
+
                 child.measure(childWidthMeasureSpec, childHeightMeasureSpec);
             }
         }
@@ -400,7 +400,7 @@
         }
         return false;
     }
-    
+
     @Override
     public boolean onInterceptTouchEvent(MotionEvent ev) {
         /*
@@ -453,7 +453,7 @@
                     mIsBeingDragged = false;
                     break;
                 }
-                
+
                 /*
                  * Remember location of down touch.
                  * ACTION_DOWN always refers to pointer index 0.
@@ -581,7 +581,7 @@
                             }
                         }
                     }
-                    
+
                     mActivePointerId = INVALID_POINTER;
                     mIsBeingDragged = false;
 
@@ -618,7 +618,7 @@
         }
         return true;
     }
-    
+
     private void onSecondaryPointerUp(MotionEvent ev) {
         final int pointerIndex = (ev.getAction() & MotionEvent.ACTION_POINTER_INDEX_MASK) >>
                 MotionEvent.ACTION_POINTER_INDEX_SHIFT;
@@ -635,7 +635,7 @@
             }
         }
     }
-    
+
     @Override
     protected void onOverScrolled(int scrollX, int scrollY,
             boolean clampedX, boolean clampedY) {
@@ -917,7 +917,7 @@
             if (direction == View.FOCUS_LEFT && getScrollX() < scrollDelta) {
                 scrollDelta = getScrollX();
             } else if (direction == View.FOCUS_RIGHT && getChildCount() > 0) {
-                
+
                 int daRight = getChildAt(0).getRight();
 
                 int screenRight = getScrollX() + getWidth();
@@ -1033,7 +1033,7 @@
         if (count == 0) {
             return contentWidth;
         }
-        
+
         int scrollRange = getChildAt(0).getRight();
         final int scrollX = mScrollX;
         final int overscrollRight = Math.max(0, scrollRange - contentWidth);
@@ -1045,7 +1045,7 @@
 
         return scrollRange;
     }
-    
+
     @Override
     protected int computeHorizontalScrollOffset() {
         return Math.max(0, super.computeHorizontalScrollOffset());
@@ -1352,25 +1352,25 @@
         if (getChildCount() > 0) {
             int width = getWidth() - mPaddingRight - mPaddingLeft;
             int right = getChildAt(0).getWidth();
-    
-            mScroller.fling(mScrollX, mScrollY, velocityX, 0, 0, 
+
+            mScroller.fling(mScrollX, mScrollY, velocityX, 0, 0,
                     Math.max(0, right - width), 0, 0, width/2, 0);
-    
+
             final boolean movingRight = velocityX > 0;
-    
+
             View newFocused = findFocusableViewInMyBounds(movingRight,
                     mScroller.getFinalX(), findFocus());
-    
+
             if (newFocused == null) {
                 newFocused = this;
             }
-    
+
             if (newFocused != findFocus()
                     && newFocused.requestFocus(movingRight ? View.FOCUS_RIGHT : View.FOCUS_LEFT)) {
                 mScrollViewMovedFocus = true;
                 mScrollViewMovedFocus = false;
             }
-    
+
             invalidate();
         }
     }
@@ -1396,11 +1396,12 @@
     public void setOverScrollMode(int mode) {
         if (mode != OVER_SCROLL_NEVER) {
             if (mEdgeGlowLeft == null) {
-                final Resources res = getContext().getResources();
+                Context context = getContext();
+                final Resources res = context.getResources();
                 final Drawable edge = res.getDrawable(R.drawable.overscroll_edge);
                 final Drawable glow = res.getDrawable(R.drawable.overscroll_glow);
-                mEdgeGlowLeft = new EdgeGlow(edge, glow);
-                mEdgeGlowRight = new EdgeGlow(edge, glow);
+                mEdgeGlowLeft = new EdgeGlow(context, edge, glow);
+                mEdgeGlowRight = new EdgeGlow(context, edge, glow);
             }
         } else {
             mEdgeGlowLeft = null;
diff --git a/core/java/android/widget/ScrollView.java b/core/java/android/widget/ScrollView.java
index 900c9ec..9fa90dc 100644
--- a/core/java/android/widget/ScrollView.java
+++ b/core/java/android/widget/ScrollView.java
@@ -51,7 +51,7 @@
  * takes care of its own scrolling, so does not require a ScrollView, but
  * using the two together is possible to achieve the effect of a text view
  * within a larger container.
- * 
+ *
  * <p>ScrollView only supports vertical scrolling.
  *
  * @attr ref android.R.styleable#ScrollView_fillViewport
@@ -120,7 +120,7 @@
     private int mTouchSlop;
     private int mMinimumVelocity;
     private int mMaximumVelocity;
-    
+
     private int mOverscrollDistance;
     private int mOverflingDistance;
 
@@ -269,7 +269,7 @@
      * Indicates whether this ScrollView's content is stretched to fill the viewport.
      *
      * @return True if the content fills the viewport, false otherwise.
-     * 
+     *
      * @attr ref android.R.styleable#ScrollView_fillViewport
      */
     public boolean isFillViewport() {
@@ -282,7 +282,7 @@
      *
      * @param fillViewport True to stretch the content's height to the viewport's
      *        boundaries, false otherwise.
-     * 
+     *
      * @attr ref android.R.styleable#ScrollView_fillViewport
      */
     public void setFillViewport(boolean fillViewport) {
@@ -325,14 +325,14 @@
             int height = getMeasuredHeight();
             if (child.getMeasuredHeight() < height) {
                 final FrameLayout.LayoutParams lp = (LayoutParams) child.getLayoutParams();
-    
+
                 int childWidthMeasureSpec = getChildMeasureSpec(widthMeasureSpec, mPaddingLeft
                         + mPaddingRight, lp.width);
                 height -= mPaddingTop;
                 height -= mPaddingBottom;
                 int childHeightMeasureSpec =
                         MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY);
-    
+
                 child.measure(childWidthMeasureSpec, childHeightMeasureSpec);
             }
         }
@@ -521,7 +521,7 @@
             case MotionEvent.ACTION_DOWN: {
                 final float y = ev.getY();
                 mIsBeingDragged = true;
-                
+
                 /*
                  * If being flinged and user touches, stop the fling. isFinished
                  * will be false if being flinged.
@@ -579,7 +579,7 @@
                     }
                 }
                 break;
-            case MotionEvent.ACTION_UP: 
+            case MotionEvent.ACTION_UP:
                 if (mIsBeingDragged) {
                     final VelocityTracker velocityTracker = mVelocityTracker;
                     velocityTracker.computeCurrentVelocity(1000, mMaximumVelocity);
@@ -615,7 +615,7 @@
         }
         return true;
     }
-    
+
     private void onSecondaryPointerUp(MotionEvent ev) {
         final int pointerIndex = (ev.getAction() & MotionEvent.ACTION_POINTER_INDEX_MASK) >>
                 MotionEvent.ACTION_POINTER_INDEX_SHIFT;
@@ -632,7 +632,7 @@
             }
         }
     }
-    
+
     @Override
     protected void onOverScrolled(int scrollX, int scrollY,
             boolean clampedX, boolean clampedY) {
@@ -919,9 +919,9 @@
             } else if (direction == View.FOCUS_DOWN) {
                 if (getChildCount() > 0) {
                     int daBottom = getChildAt(0).getBottom();
-    
+
                     int screenBottom = getScrollY() + getHeight();
-    
+
                     if (daBottom - screenBottom < maxJump) {
                         scrollDelta = daBottom - screenBottom;
                     }
@@ -1038,7 +1038,7 @@
         if (count == 0) {
             return contentHeight;
         }
-        
+
         int scrollRange = getChildAt(0).getBottom();
         final int scrollY = mScrollY;
         final int overscrollBottom = Math.max(0, scrollRange - contentHeight);
@@ -1289,7 +1289,7 @@
         }
 
         return nextFocus.requestFocus(direction, previouslyFocusedRect);
-    }    
+    }
 
     @Override
     public boolean requestChildRectangleOnScreen(View child, Rect rectangle,
@@ -1325,7 +1325,7 @@
     protected void onLayout(boolean changed, int l, int t, int r, int b) {
         super.onLayout(changed, l, t, r, b);
         mIsLayoutDirty = false;
-        // Give a child focus if it needs it 
+        // Give a child focus if it needs it
         if (mChildToScrollTo != null && isViewDescendantOf(mChildToScrollTo, this)) {
                 scrollToChild(mChildToScrollTo);
         }
@@ -1352,7 +1352,7 @@
             int scrollDelta = computeScrollDeltaToGetChildRectOnScreen(mTempRect);
             doScrollY(scrollDelta);
         }
-    }    
+    }
 
     /**
      * Return true if child is an descendant of parent, (or equal to the parent).
@@ -1364,7 +1364,7 @@
 
         final ViewParent theParent = child.getParent();
         return (theParent instanceof ViewGroup) && isViewDescendantOf((View) theParent, parent);
-    }    
+    }
 
     /**
      * Fling the scroll view
@@ -1377,18 +1377,18 @@
         if (getChildCount() > 0) {
             int height = getHeight() - mPaddingBottom - mPaddingTop;
             int bottom = getChildAt(0).getHeight();
-    
-            mScroller.fling(mScrollX, mScrollY, 0, velocityY, 0, 0, 0, 
+
+            mScroller.fling(mScrollX, mScrollY, 0, velocityY, 0, 0, 0,
                     Math.max(0, bottom - height), 0, height/2);
-    
+
             final boolean movingDown = velocityY > 0;
-    
+
             View newFocused =
                     findFocusableViewInMyBounds(movingDown, mScroller.getFinalY(), findFocus());
             if (newFocused == null) {
                 newFocused = this;
             }
-    
+
             if (newFocused != findFocus()
                     && newFocused.requestFocus(movingDown ? View.FOCUS_DOWN : View.FOCUS_UP)) {
                 mScrollViewMovedFocus = true;
@@ -1444,11 +1444,12 @@
     public void setOverScrollMode(int mode) {
         if (mode != OVER_SCROLL_NEVER) {
             if (mEdgeGlowTop == null) {
-                final Resources res = getContext().getResources();
+                Context context = getContext();
+                final Resources res = context.getResources();
                 final Drawable edge = res.getDrawable(R.drawable.overscroll_edge);
                 final Drawable glow = res.getDrawable(R.drawable.overscroll_glow);
-                mEdgeGlowTop = new EdgeGlow(edge, glow);
-                mEdgeGlowBottom = new EdgeGlow(edge, glow);
+                mEdgeGlowTop = new EdgeGlow(context, edge, glow);
+                mEdgeGlowBottom = new EdgeGlow(context, edge, glow);
             }
         } else {
             mEdgeGlowTop = null;
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index 9f9fb18..45c46db 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -313,6 +313,8 @@
     Drawable mSelectHandleRight;
     Drawable mSelectHandleCenter;
 
+    private int mLastDownPositionX, mLastDownPositionY;
+
     /*
      * Kick-start the font cache for the zygote process (to pay the cost of
      * initializing freetype for our default font only once).
@@ -3839,20 +3841,15 @@
 
         boolean changed = false;
 
-        SelectionModifierCursorController selectionController = null;
-        if (mSelectionModifierCursorController != null) {
-            selectionController = (SelectionModifierCursorController)
-                mSelectionModifierCursorController;
-        }
-
-
         if (mMovement != null) {
             /* This code also provides auto-scrolling when a cursor is moved using a
              * CursorController (insertion point or selection limits).
              * For selection, ensure start or end is visible depending on controller's state.
              */
             int curs = getSelectionEnd();
-            if (selectionController != null && selectionController.isSelectionStartDragged()) {
+            // Do not create the controller if it is not already created.
+            if (mSelectionModifierCursorController != null &&
+                    mSelectionModifierCursorController.isSelectionStartDragged()) {
                 curs = getSelectionStart();
             }
 
@@ -3879,7 +3876,7 @@
         // - ExtractEditText does not call onFocus when it is displayed. Fixing this issue would
         //   allow to test for hasSelection in onFocusChanged, which would trigger a
         //   startTextSelectionMode here. TODO
-        if (this instanceof ExtractEditText && selectionController != null && hasSelection()) {
+        if (this instanceof ExtractEditText && hasSelection() && hasSelectionController()) {
             startSelectionActionMode();
         }
 
@@ -3900,6 +3897,8 @@
 
         final ViewTreeObserver observer = getViewTreeObserver();
         if (observer != null) {
+            // No need to create the controller.
+            // The get method will add the listener on controller creation.
             if (mInsertionPointCursorController != null) {
                 observer.addOnTouchModeChangeListener(mInsertionPointCursorController);
             }
@@ -3919,6 +3918,7 @@
                 observer.removeOnPreDrawListener(this);
                 mPreDrawState = PREDRAW_NOT_REGISTERED;
             }
+            // No need to create the controller, as getXXController would.
             if (mInsertionPointCursorController != null) {
                 observer.removeOnTouchModeChangeListener(mInsertionPointCursorController);
             }
@@ -4396,6 +4396,7 @@
      * @hide
      */
     protected void updateCursorControllerPositions() {
+        // No need to create the controllers if they were not already
         if (mInsertionPointCursorController != null &&
                 mInsertionPointCursorController.isShowing()) {
             mInsertionPointCursorController.updatePosition();
@@ -6906,8 +6907,9 @@
                 terminateSelectionActionMode();
             }
 
+            // No need to create the controller
             if (mSelectionModifierCursorController != null) {
-                ((SelectionModifierCursorController) mSelectionModifierCursorController).resetTouchOffsets();
+                mSelectionModifierCursorController.resetTouchOffsets();
             }
         }
 
@@ -6921,9 +6923,9 @@
     }
 
     private int getLastTapPosition() {
+        // No need to create the controller at that point, no last tap position saved
         if (mSelectionModifierCursorController != null) {
-            int lastTapPosition = ((SelectionModifierCursorController)
-                    mSelectionModifierCursorController).getMinTouchOffset();
+            int lastTapPosition = mSelectionModifierCursorController.getMinTouchOffset();
             if (lastTapPosition >= 0) {
                 // Safety check, should not be possible.
                 if (lastTapPosition > mText.length()) {
@@ -7009,8 +7011,8 @@
                 // Restore previous selection
                 Selection.setSelection((Spannable)mText, prevStart, prevEnd);
 
-                if (hasSelectionController() && !getSelectionController().isShowing()) {
-                    // If the anchors aren't showing, revive them.
+                if (hasSelectionController()) {
+                    // Revive the anchors.
                     getSelectionController().show();
                 }
                 return;
@@ -7065,6 +7067,9 @@
         }
 
         if (action == MotionEvent.ACTION_DOWN) {
+            mLastDownPositionX = (int) event.getX();
+            mLastDownPositionY = (int) event.getY();
+
             // Reset this state; it will be re-set if super.onTouchEvent
             // causes focus to move to the view.
             mTouchFocusSelected = false;
@@ -7098,10 +7103,11 @@
                 handled |= mMovement.onTouchEvent(this, (Spannable) mText, event);
             }
 
-            if (isTextEditable()) {
+            if (isTextEditable() || mTextIsSelectable) {
                 if (mScrollX != oldScrollX || mScrollY != oldScrollY) {
                     // Hide insertion anchor while scrolling. Leave selection.
                     hideInsertionPointCursorController();
+                    // No need to create the controller, since there is nothing to update.
                     if (mSelectionModifierCursorController != null &&
                             mSelectionModifierCursorController.isShowing()) {
                         mSelectionModifierCursorController.updatePosition();
@@ -7146,9 +7152,8 @@
                     || windowParams.type > WindowManager.LayoutParams.LAST_SUB_WINDOW;
         }
 
-        // TODO Add an extra android:cursorController flag to disable the controller?
         mInsertionControllerEnabled = windowSupportsHandles && isTextEditable() && mCursorVisible &&
-                mLayout != null && !mTextIsSelectable;
+                mLayout != null;
         mSelectionControllerEnabled = windowSupportsHandles && textCanBeSelected() &&
                 mLayout != null;
 
@@ -7157,10 +7162,7 @@
         }
 
         if (!mSelectionControllerEnabled) {
-            // Stop selection mode if the controller becomes unavailable.
-            if (mSelectionModifierCursorController != null) {
-                stopSelectionActionMode();
-            }
+            stopSelectionActionMode();
             mSelectionModifierCursorController = null;
         }
     }
@@ -7170,8 +7172,7 @@
      * a selectable TextView.
      */
     private boolean isTextEditable() {
-        return (mText instanceof Editable && onCheckIsTextEditor() && isEnabled())
-                || mTextIsSelectable;
+        return mText instanceof Editable && onCheckIsTextEditor() && isEnabled();
     }
 
     /**
@@ -7580,11 +7581,10 @@
             minOffset = getSelectionStart();
             maxOffset = getSelectionEnd();
         } else {
-            // selectionModifierCursorController is not null at that point
-            SelectionModifierCursorController selectionModifierCursorController =
-                ((SelectionModifierCursorController) mSelectionModifierCursorController);
-            minOffset = selectionModifierCursorController.getMinTouchOffset();
-            maxOffset = selectionModifierCursorController.getMaxTouchOffset();
+            // selectionModifierCursorController is guaranteed to exist at that point
+            SelectionModifierCursorController selectionController = getSelectionController();
+            minOffset = selectionController.getMinTouchOffset();
+            maxOffset = selectionController.getMaxTouchOffset();
         }
 
         int selectionStart, selectionEnd;
@@ -7747,7 +7747,7 @@
                         }
                     }
                     if (clip != null) {
-                        clipboard.setPrimaryClip(clip);
+                        setPrimaryClip(clip);
                     }
                 }
                 return true;
@@ -7771,7 +7771,7 @@
                 // Two spaces at beginning of paste: remove one
                 final int originalLength = mText.length();
                 ((Editable) mText).replace(min - 1, min, "");
-                // Due to filters, there is no garantee that exactly one character was
+                // Due to filters, there is no guarantee that exactly one character was
                 // removed. Count instead.
                 final int delta = mText.length() - originalLength;
                 min += delta;
@@ -7838,6 +7838,16 @@
             return true;
         }
 
+        if (!isPositionOnText(mLastDownPositionX, mLastDownPositionY) &&
+                mInsertionControllerEnabled) {
+            // Long press in empty space moves cursor and shows the Paste affordance if available.
+            final int offset = getOffset(mLastDownPositionX, mLastDownPositionY);
+            Selection.setSelection((Spannable)mText, offset);
+            getInsertionController().show(0);
+            mEatTouchRelease = true;
+            return true;
+        }
+
         if (mSelectionActionMode != null) {
             if (touchPositionIsInSelection()) {
                 // Start a drag
@@ -7880,10 +7890,9 @@
             Selection.setSelection((Spannable) mText, selectionStart, selectionEnd);
         }
 
-        SelectionModifierCursorController selectionModifierCursorController =
-            ((SelectionModifierCursorController) mSelectionModifierCursorController);
-        int minOffset = selectionModifierCursorController.getMinTouchOffset();
-        int maxOffset = selectionModifierCursorController.getMaxTouchOffset();
+        SelectionModifierCursorController selectionController = getSelectionController();
+        int minOffset = selectionController.getMinTouchOffset();
+        int maxOffset = selectionController.getMaxTouchOffset();
 
         return ((minOffset >= selectionStart) && (maxOffset < selectionEnd));
     }
@@ -7928,10 +7937,10 @@
      */
     private void terminateSelectionActionMode() {
         stopSelectionActionMode();
+
+        // No need to create the controller, nothing to cancel in that case.
         if (mSelectionModifierCursorController != null) {
-            SelectionModifierCursorController selectionModifierCursorController =
-                (SelectionModifierCursorController) mSelectionModifierCursorController;
-            selectionModifierCursorController.cancelFadeOutAnimation();
+            mSelectionModifierCursorController.cancelFadeOutAnimation();
         }
     }
 
@@ -7943,10 +7952,10 @@
 
     /**
      * Paste clipboard content between min and max positions.
-     *
-     * @param clipboard getSystemService(Context.CLIPBOARD_SERVICE)
      */
-    private void paste(ClipboardManager clipboard, int min, int max) {
+    private void paste(int min, int max) {
+        ClipboardManager clipboard =
+            (ClipboardManager) getContext().getSystemService(Context.CLIPBOARD_SERVICE);
         ClipData clip = clipboard.getPrimaryClip();
         if (clip != null) {
             boolean didfirst = false;
@@ -7966,14 +7975,22 @@
                 }
             }
             stopSelectionActionMode();
+            sLastCutOrCopyTime = 0;
         }
     }
 
+    private void setPrimaryClip(ClipData clip) {
+        ClipboardManager clipboard = (ClipboardManager) getContext().
+                getSystemService(Context.CLIPBOARD_SERVICE);
+        clipboard.setPrimaryClip(clip);
+        sLastCutOrCopyTime = SystemClock.uptimeMillis();
+    }
+
     private class SelectionActionModeCallback implements ActionMode.Callback {
 
         @Override
         public boolean onCreateActionMode(ActionMode mode, Menu menu) {
-            if (mSelectionModifierCursorController == null) {
+            if (!hasSelectionController()) {
                 Log.w(LOG_TAG, "TextView has no selection controller. Action mode cancelled.");
                 return false;
             }
@@ -8029,7 +8046,7 @@
             styledAttributes.recycle();
 
             if (atLeastOne) {
-                mSelectionModifierCursorController.show();
+                getSelectionController().show();
                 return true;
             } else {
                 return false;
@@ -8048,15 +8065,12 @@
             if (itemId == ID_SELECT_ALL) {
                 Selection.setSelection((Spannable) mText, 0, mText.length());
                 // Update controller positions after selection change.
-                if (mSelectionModifierCursorController != null) {
-                    mSelectionModifierCursorController.show();
+                if (hasSelectionController()) {
+                    getSelectionController().show();
                 }
                 return true;
             }
 
-            ClipboardManager clipboard = (ClipboardManager) getContext().
-                    getSystemService(Context.CLIPBOARD_SERVICE);
-
             int min = 0;
             int max = mText.length();
 
@@ -8070,18 +8084,18 @@
 
             switch (item.getItemId()) {
                 case ID_PASTE:
-                    paste(clipboard, min, max);
+                    paste(min, max);
                     return true;
 
                 case ID_CUT:
-                    clipboard.setPrimaryClip(ClipData.newPlainText(null, null,
+                    setPrimaryClip(ClipData.newPlainText(null, null,
                             mTransformed.subSequence(min, max)));
                     ((Editable) mText).delete(min, max);
                     stopSelectionActionMode();
                     return true;
 
                 case ID_COPY:
-                    clipboard.setPrimaryClip(ClipData.newPlainText(null, null,
+                    setPrimaryClip(ClipData.newPlainText(null, null,
                             mTransformed.subSequence(min, max)));
                     stopSelectionActionMode();
                     return true;
@@ -8093,9 +8107,7 @@
         @Override
         public void onDestroyActionMode(ActionMode mode) {
             Selection.setSelection((Spannable) mText, getSelectionStart());
-            if (mSelectionModifierCursorController != null) {
-                mSelectionModifierCursorController.hide();
-            }
+            hideSelectionModifierCursorController();
             mSelectionActionMode = null;
         }
     }
@@ -8206,9 +8218,7 @@
         @Override
         public void onClick(View v) {
             if (canPaste()) {
-                ClipboardManager clipboard =
-                    (ClipboardManager) getContext().getSystemService(Context.CLIPBOARD_SERVICE);
-                paste(clipboard, getSelectionStart(), getSelectionEnd());
+                paste(getSelectionStart(), getSelectionEnd());
             }
             hide();
         }
@@ -8253,6 +8263,7 @@
         private int mLastParentY;
         private int mContainerPositionX, mContainerPositionY;
         private long mTouchTimer;
+        private boolean mHasPastePopupWindow = false;
         private PastePopupMenu mPastePopupWindow;
 
         public static final int LEFT = 0;
@@ -8305,7 +8316,7 @@
                 mDrawable = mSelectHandleCenter;
                 handleWidth = mDrawable.getIntrinsicWidth();
                 mHotspotX = handleWidth / 2;
-                mPastePopupWindow = new PastePopupMenu();
+                mHasPastePopupWindow = true;
                 break;
             }
             }
@@ -8473,9 +8484,9 @@
                 mLastParentX = coords[0];
                 mLastParentY = coords[1];
                 mIsDragging = true;
-                if (mPastePopupWindow != null) {
+                if (mHasPastePopupWindow) {
                     mTouchTimer = SystemClock.uptimeMillis();
-                    if (mPastePopupWindow.isShowing()) {
+                    if (mPastePopupWindow != null && mPastePopupWindow.isShowing()) {
                         // Tapping on the handle again dismisses the displayed paste view,
                         mPastePopupWindow.hide();
                         // and makes sure the action up does not display the paste view.
@@ -8496,6 +8507,9 @@
             }
             case MotionEvent.ACTION_UP:
                 if (mPastePopupWindow != null) {
+                    // Will show the paste popup after a delay.
+                    mController.show();
+                    /* TEMP USER TEST: Display Paste as soon as handle is draggged
                     long delay = SystemClock.uptimeMillis() - mTouchTimer;
                     if (delay < ViewConfiguration.getTapTimeout()) {
                         final float touchOffsetX = ev.getRawX() - mPositionX;
@@ -8507,9 +8521,9 @@
                         final int doubleTapSlop = viewConfiguration.getScaledDoubleTapSlop();
                         final int slopSquared = doubleTapSlop * doubleTapSlop;
                         if (distanceSquared < slopSquared) {
-                            mPastePopupWindow.show();
+                            showPastePopupWindow();
                         }
-                    }
+                    }*/
                 }
                 mIsDragging = false;
                 break;
@@ -8541,13 +8555,25 @@
             convertFromViewportToContentCoordinates(bounds);
             moveTo(bounds.left, bounds.top);
         }
+
+        void showPastePopupWindow() {
+            if (mHasPastePopupWindow) {
+                if (mPastePopupWindow == null) {
+                    // Lazy initialisation: create when actually shown only.
+                    mPastePopupWindow = new PastePopupMenu();
+                }
+                mPastePopupWindow.show();
+            }
+        }
     }
 
     private class InsertionPointCursorController implements CursorController {
         private static final int DELAY_BEFORE_FADE_OUT = 4100;
+        private static final int DELAY_BEFORE_PASTE = 2000;
+        private static final int RECENT_CUT_COPY_DURATION = 15 * 1000;
 
-        // The cursor controller image
-        private final HandleView mHandle;
+        // The cursor controller image. Lazily created.
+        private HandleView mHandle;
 
         private final Runnable mHider = new Runnable() {
             public void run() {
@@ -8555,28 +8581,44 @@
             }
         };
 
-        InsertionPointCursorController() {
-            mHandle = new HandleView(this, HandleView.CENTER);
-        }
+        private final Runnable mPastePopupShower = new Runnable() {
+            public void run() {
+                getHandle().showPastePopupWindow();
+            }
+        };
 
         public void show() {
+            show(DELAY_BEFORE_PASTE);
+        }
+
+        public void show(int delayBeforePaste) {
             updatePosition();
-            mHandle.show();
-            hideDelayed(DELAY_BEFORE_FADE_OUT);
+            hideDelayed();
+            getHandle().show();
+            removeCallbacks(mPastePopupShower);
+            if (canPaste()) {
+                final long durationSinceCutOrCopy = SystemClock.uptimeMillis() - sLastCutOrCopyTime;
+                if (durationSinceCutOrCopy < RECENT_CUT_COPY_DURATION)
+                    delayBeforePaste = 0;
+                postDelayed(mPastePopupShower, delayBeforePaste);
+            }
         }
 
         public void hide() {
-            mHandle.hide();
-            TextView.this.removeCallbacks(mHider);
+            if (mHandle != null) {
+                mHandle.hide();
+            }
+            removeCallbacks(mHider);
+            removeCallbacks(mPastePopupShower);
         }
 
-        private void hideDelayed(int msec) {
-            TextView.this.removeCallbacks(mHider);
-            TextView.this.postDelayed(mHider, msec);
+        private void hideDelayed() {
+            removeCallbacks(mHider);
+            postDelayed(mHider, DELAY_BEFORE_FADE_OUT);
         }
 
         public boolean isShowing() {
-            return mHandle.isShowing();
+            return mHandle != null && mHandle.isShowing();
         }
 
         public void updatePosition(HandleView handle, int x, int y) {
@@ -8587,7 +8629,7 @@
                 Selection.setSelection((Spannable) mText, offset);
                 updatePosition();
             }
-            hideDelayed(DELAY_BEFORE_FADE_OUT);
+            hideDelayed();
         }
 
         public void updatePosition() {
@@ -8600,7 +8642,7 @@
                 return;
             }
 
-            mHandle.positionAtCursor(offset, true);
+            getHandle().positionAtCursor(offset, true);
         }
 
         public boolean onTouchEvent(MotionEvent ev) {
@@ -8612,10 +8654,17 @@
                 hide();
             }
         }
+
+        private HandleView getHandle() {
+            if (mHandle == null) {
+                mHandle = new HandleView(this, HandleView.CENTER);
+            }
+            return mHandle;
+        }
     }
 
     private class SelectionModifierCursorController implements CursorController {
-        // The cursor controller images
+        // The cursor controller images, lazily created when shown.
         private HandleView mStartHandle, mEndHandle;
         // The offsets of that last touch down event. Remembered to start selection there.
         private int mMinTouchOffset, mMaxTouchOffset;
@@ -8636,8 +8685,6 @@
         };
 
         SelectionModifierCursorController() {
-            mStartHandle = new HandleView(this, HandleView.LEFT);
-            mEndHandle = new HandleView(this, HandleView.RIGHT);
             resetTouchOffsets();
         }
 
@@ -8646,24 +8693,30 @@
                 return;
             }
 
+            // Lazy object creation has to be done before updatePosition() is called.
+            if (mStartHandle == null) mStartHandle = new HandleView(this, HandleView.LEFT);
+            if (mEndHandle == null) mEndHandle = new HandleView(this, HandleView.RIGHT);
+
             mIsShowing = true;
             updatePosition();
+
             mStartHandle.show();
             mEndHandle.show();
+
             hideInsertionPointCursorController();
-            hideDelayed(DELAY_BEFORE_FADE_OUT);
+            hideDelayed();
         }
 
         public void hide() {
-            mStartHandle.hide();
-            mEndHandle.hide();
+            if (mStartHandle != null) mStartHandle.hide();
+            if (mEndHandle != null) mEndHandle.hide();
             mIsShowing = false;
             removeCallbacks(mHider);
         }
 
-        private void hideDelayed(int delay) {
+        private void hideDelayed() {
             removeCallbacks(mHider);
-            postDelayed(mHider, delay);
+            postDelayed(mHider, DELAY_BEFORE_FADE_OUT);
         }
 
         public boolean isShowing() {
@@ -8706,6 +8759,7 @@
 
             Selection.setSelection((Spannable) mText, selectionStart, selectionEnd);
             updatePosition();
+            hideDelayed();
         }
 
         public void updatePosition() {
@@ -8723,15 +8777,15 @@
                 return;
             }
 
+            // The handles have been created since the controller isShowing().
             mStartHandle.positionAtCursor(selectionStart, true);
             mEndHandle.positionAtCursor(selectionEnd, true);
-            hideDelayed(DELAY_BEFORE_FADE_OUT);
         }
 
         public boolean onTouchEvent(MotionEvent event) {
             // This is done even when the View does not have focus, so that long presses can start
             // selection and tap can move cursor from this tap position.
-            if (isTextEditable()) {
+            if (isTextEditable() || mTextIsSelectable) {
                 switch (event.getActionMasked()) {
                     case MotionEvent.ACTION_DOWN:
                         final int x = (int) event.getX();
@@ -8810,7 +8864,7 @@
          * @return true iff this controller is currently used to move the selection start.
          */
         public boolean isSelectionStartDragged() {
-            return mStartHandle.isDragging();
+            return mStartHandle != null && mStartHandle.isDragging();
         }
 
         public void onTouchModeChanged(boolean isInTouchMode) {
@@ -8821,12 +8875,14 @@
     }
 
     private void hideInsertionPointCursorController() {
+        // No need to create the controller to hide it.
         if (mInsertionPointCursorController != null) {
             mInsertionPointCursorController.hide();
         }
     }
 
     private void hideSelectionModifierCursorController() {
+        // No need to create the controller to hide it.
         if (mSelectionModifierCursorController != null) {
             mSelectionModifierCursorController.hide();
         }
@@ -8837,15 +8893,6 @@
         hideSelectionModifierCursorController();
     }
 
-    private int getOffsetForHorizontal(int line, int x) {
-        x -= getTotalPaddingLeft();
-        // Clamp the position to inside of the view.
-        x = Math.max(0, x);
-        x = Math.min(getWidth() - getTotalPaddingRight() - 1, x);
-        x += getScrollX();
-        return getLayout().getOffsetForHorizontal(line, x);
-    }
-
     /**
      * Get the offset character closest to the specified absolute position.
      *
@@ -8858,15 +8905,8 @@
      */
     public int getOffset(int x, int y) {
         if (getLayout() == null) return -1;
-
-        y -= getTotalPaddingTop();
-        // Clamp the position to inside of the view.
-        y = Math.max(0, y);
-        y = Math.min(getHeight() - getTotalPaddingBottom() - 1, y);
-        y += getScrollY();
-
-        final int line = getLayout().getLineForVertical(y);
-        final int offset = getOffsetForHorizontal(line, x);
+        final int line = getLineAtCoordinate(y);
+        final int offset = getOffsetAtCoordinate(line, x);
         return offset;
     }
 
@@ -8874,14 +8914,7 @@
         final Layout layout = getLayout();
         if (layout == null) return -1;
 
-        y -= getTotalPaddingTop();
-        // Clamp the position to inside of the view.
-        y = Math.max(0, y);
-        y = Math.min(getHeight() - getTotalPaddingBottom() - 1, y);
-        y += getScrollY();
-
-        int line = getLayout().getLineForVertical(y);
-
+        int line = getLineAtCoordinate(y);
         final int previousLine = layout.getLineForOffset(previousOffset);
         final int previousLineTop = layout.getLineTop(previousLine);
         final int previousLineBottom = layout.getLineBottom(previousLine);
@@ -8894,21 +8927,58 @@
             line = previousLine;
         }
 
-        return getOffsetForHorizontal(line, x);
+        return getOffsetAtCoordinate(line, x);
+    }
+
+    private int convertToLocalHorizontalCoordinate(int x) {
+        x -= getTotalPaddingLeft();
+        // Clamp the position to inside of the view.
+        x = Math.max(0, x);
+        x = Math.min(getWidth() - getTotalPaddingRight() - 1, x);
+        x += getScrollX();
+        return x;
+    }
+
+    private int getLineAtCoordinate(int y) {
+        y -= getTotalPaddingTop();
+        // Clamp the position to inside of the view.
+        y = Math.max(0, y);
+        y = Math.min(getHeight() - getTotalPaddingBottom() - 1, y);
+        y += getScrollY();
+        return getLayout().getLineForVertical(y);
+    }
+
+    private int getOffsetAtCoordinate(int line, int x) {
+        x = convertToLocalHorizontalCoordinate(x);
+        return getLayout().getOffsetForHorizontal(line, x);
+    }
+
+    /** Returns true if the screen coordinates position (x,y) corresponds to a character displayed
+     * in the view. Returns false when the position is in the empty space of left/right of text.
+     */
+    private boolean isPositionOnText(int x, int y) {
+        if (getLayout() == null) return false;
+
+        final int line = getLineAtCoordinate(y);
+        x = convertToLocalHorizontalCoordinate(x);
+
+        if (x < getLayout().getLineLeft(line)) return false;
+        if (x > getLayout().getLineRight(line)) return false;
+        return true;
     }
 
     @Override
     public boolean onDragEvent(DragEvent event) {
         switch (event.getAction()) {
             case DragEvent.ACTION_DRAG_STARTED:
-                return mInsertionPointCursorController != null;
+                return hasInsertionController();
 
             case DragEvent.ACTION_DRAG_ENTERED:
                 TextView.this.requestFocus();
                 return true;
 
             case DragEvent.ACTION_DRAG_LOCATION: {
-                final int offset = getOffset((int)event.getX(), (int)event.getY());
+                final int offset = getOffset((int) event.getX(), (int) event.getY());
                 Selection.setSelection((Spannable)mText, offset);
                 return true;
             }
@@ -8951,7 +9021,7 @@
         return mSelectionControllerEnabled;
     }
 
-    CursorController getInsertionController() {
+    InsertionPointCursorController getInsertionController() {
         if (!mInsertionControllerEnabled) {
             return null;
         }
@@ -8968,7 +9038,7 @@
         return mInsertionPointCursorController;
     }
 
-    CursorController getSelectionController() {
+    SelectionModifierCursorController getSelectionController() {
         if (!mSelectionControllerEnabled) {
             return null;
         }
@@ -9027,8 +9097,8 @@
     private boolean                 mCursorVisible = true;
 
     // Cursor Controllers.
-    private CursorController        mInsertionPointCursorController;
-    private CursorController        mSelectionModifierCursorController;
+    private InsertionPointCursorController mInsertionPointCursorController;
+    private SelectionModifierCursorController mSelectionModifierCursorController;
     private ActionMode              mSelectionActionMode;
     private boolean                 mInsertionControllerEnabled;
     private boolean                 mSelectionControllerEnabled;
@@ -9097,4 +9167,6 @@
     private InputFilter[] mFilters = NO_FILTERS;
     private static final Spanned EMPTY_SPANNED = new SpannedString("");
     private static int DRAG_THUMBNAIL_MAX_TEXT_LENGTH = 20;
+    // System wide time for last cut or copy action.
+    private static long sLastCutOrCopyTime;
 }
diff --git a/core/java/com/android/internal/statusbar/IStatusBar.aidl b/core/java/com/android/internal/statusbar/IStatusBar.aidl
index f87ca3e..1cc068f 100644
--- a/core/java/com/android/internal/statusbar/IStatusBar.aidl
+++ b/core/java/com/android/internal/statusbar/IStatusBar.aidl
@@ -32,6 +32,6 @@
     void animateCollapse();
     void setLightsOn(boolean on);
     void setMenuKeyVisible(boolean visible);
-    void setIMEButtonVisible(boolean visible);
+    void setIMEButtonVisible(in IBinder token, boolean visible);
 }
 
diff --git a/core/java/com/android/internal/statusbar/IStatusBarService.aidl b/core/java/com/android/internal/statusbar/IStatusBarService.aidl
index 19666fd..f86b72d 100644
--- a/core/java/com/android/internal/statusbar/IStatusBarService.aidl
+++ b/core/java/com/android/internal/statusbar/IStatusBarService.aidl
@@ -32,13 +32,13 @@
     void removeIcon(String slot);
     void setActiveWindowIsFullscreen(boolean fullscreen);
     void setMenuKeyVisible(boolean visible);
-    void setIMEButtonVisible(boolean visible);
+    void setIMEButtonVisible(in IBinder token, boolean visible);
 
     // ---- Methods below are for use by the status bar policy services ----
     // You need the STATUS_BAR_SERVICE permission
     void registerStatusBar(IStatusBar callbacks, out StatusBarIconList iconList,
             out List<IBinder> notificationKeys, out List<StatusBarNotification> notifications,
-            out int[] switches);
+            out int[] switches, out List<IBinder> binders);
     void onPanelRevealed();
     void onNotificationClick(String pkg, String tag, int id);
     void onNotificationError(String pkg, String tag, int id,
diff --git a/core/java/com/android/internal/view/IInputMethodManager.aidl b/core/java/com/android/internal/view/IInputMethodManager.aidl
index a2e9486..215809f 100644
--- a/core/java/com/android/internal/view/IInputMethodManager.aidl
+++ b/core/java/com/android/internal/view/IInputMethodManager.aidl
@@ -52,7 +52,6 @@
             int softInputMode, boolean first, int windowFlags);
             
     void showInputMethodPickerFromClient(in IInputMethodClient client);
-    void showInputMethodSubtypePickerFromClient(in IInputMethodClient client);
     void showInputMethodAndSubtypeEnablerFromClient(in IInputMethodClient client, String topId);
     void setInputMethod(in IBinder token, String id);
     void setInputMethodAndSubtype(in IBinder token, String id, in InputMethodSubtype subtype);
diff --git a/core/jni/android_database_CursorWindow.cpp b/core/jni/android_database_CursorWindow.cpp
index 040dac3..fad9539 100644
--- a/core/jni/android_database_CursorWindow.cpp
+++ b/core/jni/android_database_CursorWindow.cpp
@@ -63,7 +63,8 @@
     }
 
     if (!window->initBuffer(localOnly)) {
-        jniThrowException(env, "java/lang/IllegalStateException", "Couldn't init cursor window");
+        jniThrowException(env, "java/lang/RuntimeException",
+                "Memory couldn't be allocated for 1MB CursorWindow object.");
         delete window;
         return;
     }
@@ -82,11 +83,13 @@
 
     CursorWindow * window = new CursorWindow();
     if (!window) {
-        jniThrowException(env, "java/lang/RuntimeException", "No memory for native window object");
+        jniThrowException(env, "java/lang/RuntimeException",
+                "CursorWindow of size 1MB couldn't be created. No memory?");
         return;
     }
     if (!window->setMemory(memory)) {
-        jniThrowException(env, "java/lang/RuntimeException", "No memory in memObj");
+        jniThrowException(env, "java/lang/RuntimeException",
+                "Memory couldn't be initialized for 1MB CursorWindow object.");
         delete window;
         return;
     }
@@ -131,8 +134,9 @@
 
 static void throwExceptionWithRowCol(JNIEnv * env, jint row, jint column)
 {
-    char buf[100];
-    snprintf(buf, sizeof(buf), "get field slot from row %d col %d failed", row, column);
+    char buf[200];
+    snprintf(buf, sizeof(buf), "Couldn't read row %d, col %d from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it",
+            row, column);
     jniThrowException(env, "java/lang/IllegalStateException", buf);
 }
 
diff --git a/core/res/res/anim/screen_rotate_0_enter.xml b/core/res/res/anim/screen_rotate_0_enter.xml
new file mode 100644
index 0000000..9e9a8ad
--- /dev/null
+++ b/core/res/res/anim/screen_rotate_0_enter.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+** Copyright 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.
+*/
+-->
+
+<set xmlns:android="http://schemas.android.com/apk/res/android"
+        android:shareInterpolator="false">
+    <alpha android:fromAlpha="1.0" android:toAlpha="1.0"
+            android:interpolator="@anim/decelerate_quint_interpolator"
+            android:duration="@android:integer/config_shortAnimTime" />
+</set>
diff --git a/core/res/res/anim/screen_rotate_0_exit.xml b/core/res/res/anim/screen_rotate_0_exit.xml
new file mode 100644
index 0000000..09d0ac3
--- /dev/null
+++ b/core/res/res/anim/screen_rotate_0_exit.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+** Copyright 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.
+*/
+-->
+
+<set xmlns:android="http://schemas.android.com/apk/res/android"
+        android:shareInterpolator="false">
+    <alpha android:fromAlpha="1.0" android:toAlpha="0"
+            android:interpolator="@anim/decelerate_quint_interpolator"
+            android:duration="@android:integer/config_shortAnimTime" />
+</set>
diff --git a/core/res/res/anim/screen_rotate_180_enter.xml b/core/res/res/anim/screen_rotate_180_enter.xml
new file mode 100644
index 0000000..bfc8c6d
--- /dev/null
+++ b/core/res/res/anim/screen_rotate_180_enter.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+** Copyright 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.
+*/
+-->
+
+<set xmlns:android="http://schemas.android.com/apk/res/android"
+        android:shareInterpolator="false">
+    <scale android:fromXScale="1.0" android:toXScale="1.0"
+            android:fromYScale=".9" android:toYScale="1.0"
+            android:pivotX="50%" android:pivotY="50%"
+            android:interpolator="@anim/decelerate_quint_interpolator"
+            android:duration="@android:integer/config_mediumAnimTime" />
+</set>
diff --git a/core/res/res/anim/screen_rotate_180_exit.xml b/core/res/res/anim/screen_rotate_180_exit.xml
new file mode 100644
index 0000000..f1ce1cf
--- /dev/null
+++ b/core/res/res/anim/screen_rotate_180_exit.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+** Copyright 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.
+*/
+-->
+
+<set xmlns:android="http://schemas.android.com/apk/res/android"
+        android:shareInterpolator="false">
+    <scale android:fromXScale="1.0" android:toXScale="1.0"
+            android:fromYScale="1.0" android:toYScale=".9"
+            android:pivotX="50%" android:pivotY="50%"
+            android:interpolator="@anim/decelerate_quint_interpolator"
+            android:duration="@android:integer/config_mediumAnimTime" />
+    <alpha android:fromAlpha="1.0" android:toAlpha="0"
+            android:interpolator="@anim/decelerate_quint_interpolator"
+            android:duration="@android:integer/config_mediumAnimTime" />
+</set>
diff --git a/core/res/res/anim/screen_rotate_minus_90_enter.xml b/core/res/res/anim/screen_rotate_minus_90_enter.xml
new file mode 100644
index 0000000..92a7779
--- /dev/null
+++ b/core/res/res/anim/screen_rotate_minus_90_enter.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+** Copyright 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.
+*/
+-->
+
+<set xmlns:android="http://schemas.android.com/apk/res/android"
+        android:shareInterpolator="false">
+    <scale android:fromXScale="100%p" android:toXScale="100%"
+            android:fromYScale="100%p" android:toYScale="100%"
+            android:pivotX="50%" android:pivotY="50%"
+            android:interpolator="@anim/decelerate_quint_interpolator"
+            android:duration="@android:integer/config_mediumAnimTime" />
+    <rotate android:fromDegrees="-90" android:toDegrees="0"
+            android:pivotX="50%" android:pivotY="50%"
+            android:interpolator="@anim/decelerate_quint_interpolator"
+            android:duration="@android:integer/config_mediumAnimTime" />
+</set>
diff --git a/core/res/res/anim/screen_rotate_minus_90_exit.xml b/core/res/res/anim/screen_rotate_minus_90_exit.xml
new file mode 100644
index 0000000..c530759
--- /dev/null
+++ b/core/res/res/anim/screen_rotate_minus_90_exit.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+** Copyright 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.
+*/
+-->
+
+<set xmlns:android="http://schemas.android.com/apk/res/android"
+        android:shareInterpolator="false">
+    <scale android:fromXScale="100%" android:toXScale="100%p"
+            android:fromYScale="100%" android:toYScale="100%p"
+            android:pivotX="50%" android:pivotY="50%"
+            android:interpolator="@anim/decelerate_quint_interpolator"
+            android:duration="@android:integer/config_mediumAnimTime" />
+    <rotate android:fromDegrees="0" android:toDegrees="90"
+            android:pivotX="50%" android:pivotY="50%"
+            android:interpolator="@anim/decelerate_quint_interpolator"
+            android:duration="@android:integer/config_mediumAnimTime" />
+    <alpha android:fromAlpha="1.0" android:toAlpha="0"
+            android:interpolator="@anim/decelerate_quint_interpolator"
+            android:duration="@android:integer/config_mediumAnimTime" />
+</set>
diff --git a/core/res/res/anim/screen_rotate_plus_90_enter.xml b/core/res/res/anim/screen_rotate_plus_90_enter.xml
new file mode 100644
index 0000000..f4ffaa8
--- /dev/null
+++ b/core/res/res/anim/screen_rotate_plus_90_enter.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+** Copyright 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.
+*/
+-->
+
+<set xmlns:android="http://schemas.android.com/apk/res/android"
+        android:shareInterpolator="false">
+    <scale android:fromXScale="100%p" android:toXScale="100%"
+            android:fromYScale="100%p" android:toYScale="100%"
+            android:pivotX="50%" android:pivotY="50%"
+            android:interpolator="@anim/decelerate_quint_interpolator"
+            android:duration="@android:integer/config_mediumAnimTime" />
+    <rotate android:fromDegrees="90" android:toDegrees="0"
+            android:pivotX="50%" android:pivotY="50%"
+            android:interpolator="@anim/decelerate_quint_interpolator"
+            android:duration="@android:integer/config_mediumAnimTime" />
+</set>
diff --git a/core/res/res/anim/screen_rotate_plus_90_exit.xml b/core/res/res/anim/screen_rotate_plus_90_exit.xml
new file mode 100644
index 0000000..0728bfb
--- /dev/null
+++ b/core/res/res/anim/screen_rotate_plus_90_exit.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+** Copyright 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.
+*/
+-->
+
+<set xmlns:android="http://schemas.android.com/apk/res/android"
+        android:shareInterpolator="false">
+    <scale android:fromXScale="100%" android:toXScale="100%p"
+            android:fromYScale="100%" android:toYScale="100%p"
+            android:pivotX="50%" android:pivotY="50%"
+            android:interpolator="@anim/decelerate_quint_interpolator"
+            android:duration="@android:integer/config_mediumAnimTime" />
+    <rotate android:fromDegrees="0" android:toDegrees="-90"
+            android:pivotX="50%" android:pivotY="50%"
+            android:interpolator="@anim/decelerate_quint_interpolator"
+            android:duration="@android:integer/config_mediumAnimTime" />
+    <alpha android:fromAlpha="1.0" android:toAlpha="0"
+            android:interpolator="@anim/decelerate_quint_interpolator"
+            android:duration="@android:integer/config_mediumAnimTime" />
+</set>
diff --git a/core/res/res/drawable-hdpi/ic_clear.png b/core/res/res/drawable-hdpi/ic_clear.png
new file mode 100644
index 0000000..33ad8d4
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_clear.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_clear_off.png b/core/res/res/drawable-hdpi/ic_clear_off.png
new file mode 100644
index 0000000..d97c342
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_clear_off.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_commit.png b/core/res/res/drawable-hdpi/ic_commit.png
new file mode 100644
index 0000000..404051c
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_commit.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_go.png b/core/res/res/drawable-hdpi/ic_go.png
new file mode 100644
index 0000000..97b825e
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_go.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_search.png b/core/res/res/drawable-hdpi/ic_search.png
new file mode 100644
index 0000000..bf8bd66
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_search.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_voice_search.png b/core/res/res/drawable-hdpi/ic_voice_search.png
new file mode 100644
index 0000000..66d14ae
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_voice_search.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/list_activated_holo.9.png b/core/res/res/drawable-hdpi/list_activated_holo.9.png
index cd9a08e..12a379b 100644
--- a/core/res/res/drawable-hdpi/list_activated_holo.9.png
+++ b/core/res/res/drawable-hdpi/list_activated_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/list_divider_holo_dark.9.png b/core/res/res/drawable-hdpi/list_divider_holo_dark.9.png
index 7b18202..7264a7a 100644
--- a/core/res/res/drawable-hdpi/list_divider_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/list_divider_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/list_divider_holo_light.9.png b/core/res/res/drawable-hdpi/list_divider_holo_light.9.png
index 17bcbb4..74f48f5 100644
--- a/core/res/res/drawable-hdpi/list_divider_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/list_divider_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/list_focused_holo.9.png b/core/res/res/drawable-hdpi/list_focused_holo.9.png
index b91e9f2..e354629 100644
--- a/core/res/res/drawable-hdpi/list_focused_holo.9.png
+++ b/core/res/res/drawable-hdpi/list_focused_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/list_longpressed_holo.9.png b/core/res/res/drawable-hdpi/list_longpressed_holo.9.png
index db4831d..367c7d9 100644
--- a/core/res/res/drawable-hdpi/list_longpressed_holo.9.png
+++ b/core/res/res/drawable-hdpi/list_longpressed_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/list_pressed_holo_dark.9.png b/core/res/res/drawable-hdpi/list_pressed_holo_dark.9.png
index 1ce1601..9eae8f4 100644
--- a/core/res/res/drawable-hdpi/list_pressed_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/list_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/list_pressed_holo_light.9.png b/core/res/res/drawable-hdpi/list_pressed_holo_light.9.png
index b36aa2c..a9131fc 100644
--- a/core/res/res/drawable-hdpi/list_pressed_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/list_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/list_section_divider_holo_light.9.png b/core/res/res/drawable-hdpi/list_section_divider_holo_light.9.png
index 763f4f6f..8069452a 100644
--- a/core/res/res/drawable-hdpi/list_section_divider_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/list_section_divider_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/list_selected_holo_dark.9.png b/core/res/res/drawable-hdpi/list_selected_holo_dark.9.png
index c054e14..780e86d 100644
--- a/core/res/res/drawable-hdpi/list_selected_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/list_selected_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/list_selected_holo_light.9.png b/core/res/res/drawable-hdpi/list_selected_holo_light.9.png
index 77c4032..999d05b 100644
--- a/core/res/res/drawable-hdpi/list_selected_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/list_selected_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_clear.png b/core/res/res/drawable-mdpi/ic_clear.png
new file mode 100644
index 0000000..86944a8
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_clear.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_clear_off.png b/core/res/res/drawable-mdpi/ic_clear_off.png
new file mode 100644
index 0000000..b9c3b44
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_clear_off.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_commit.png b/core/res/res/drawable-mdpi/ic_commit.png
new file mode 100644
index 0000000..49d7ec8
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_commit.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_go.png b/core/res/res/drawable-mdpi/ic_go.png
new file mode 100644
index 0000000..2340648
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_go.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_search.png b/core/res/res/drawable-mdpi/ic_search.png
new file mode 100644
index 0000000..d92071b
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_search.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_voice_search.png b/core/res/res/drawable-mdpi/ic_voice_search.png
new file mode 100644
index 0000000..a2fe874
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_voice_search.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/list_activated_holo.9.png b/core/res/res/drawable-mdpi/list_activated_holo.9.png
index 01ec674..f162c9a 100644
--- a/core/res/res/drawable-mdpi/list_activated_holo.9.png
+++ b/core/res/res/drawable-mdpi/list_activated_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/list_divider_holo_dark.9.png b/core/res/res/drawable-mdpi/list_divider_holo_dark.9.png
index 7b18202..aa8015d 100644
--- a/core/res/res/drawable-mdpi/list_divider_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/list_divider_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/list_divider_holo_light.9.png b/core/res/res/drawable-mdpi/list_divider_holo_light.9.png
index 17bcbb4..c25c256 100644
--- a/core/res/res/drawable-mdpi/list_divider_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/list_divider_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/list_focused_holo.9.png b/core/res/res/drawable-mdpi/list_focused_holo.9.png
index 23385df..e2449dd 100644
--- a/core/res/res/drawable-mdpi/list_focused_holo.9.png
+++ b/core/res/res/drawable-mdpi/list_focused_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/list_longpressed_holo.9.png b/core/res/res/drawable-mdpi/list_longpressed_holo.9.png
index 3312a51..3483891 100644
--- a/core/res/res/drawable-mdpi/list_longpressed_holo.9.png
+++ b/core/res/res/drawable-mdpi/list_longpressed_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/list_pressed_holo_dark.9.png b/core/res/res/drawable-mdpi/list_pressed_holo_dark.9.png
index bbb14d8..e3344b6 100644
--- a/core/res/res/drawable-mdpi/list_pressed_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/list_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/list_pressed_holo_light.9.png b/core/res/res/drawable-mdpi/list_pressed_holo_light.9.png
index 72380d4..2365978 100644
--- a/core/res/res/drawable-mdpi/list_pressed_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/list_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/list_section_divider_holo_dark.9.png b/core/res/res/drawable-mdpi/list_section_divider_holo_dark.9.png
index 953d7bf..f873edb 100644
--- a/core/res/res/drawable-mdpi/list_section_divider_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/list_section_divider_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/list_section_divider_holo_light.9.png b/core/res/res/drawable-mdpi/list_section_divider_holo_light.9.png
index e5fe664..ba11cfb 100644
--- a/core/res/res/drawable-mdpi/list_section_divider_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/list_section_divider_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/list_selected_holo_dark.9.png b/core/res/res/drawable-mdpi/list_selected_holo_dark.9.png
index c453506..a7f6277 100644
--- a/core/res/res/drawable-mdpi/list_selected_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/list_selected_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/list_selected_holo_light.9.png b/core/res/res/drawable-mdpi/list_selected_holo_light.9.png
index 58b6b3c..b6029ec 100644
--- a/core/res/res/drawable-mdpi/list_selected_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/list_selected_holo_light.9.png
Binary files differ
diff --git a/core/res/res/layout-xlarge/status_bar_latest_event_content.xml b/core/res/res/layout-xlarge/status_bar_latest_event_content.xml
index e4aa270..dca2c57 100644
--- a/core/res/res/layout-xlarge/status_bar_latest_event_content.xml
+++ b/core/res/res/layout-xlarge/status_bar_latest_event_content.xml
@@ -29,6 +29,7 @@
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:layout_weight="1"
+            android:layout_marginTop="-4dp"
             android:singleLine="true"
             android:ellipsize="marquee"
             android:fadingEdge="horizontal"
diff --git a/core/res/res/layout-xlarge/status_bar_latest_event_content_large_icon.xml b/core/res/res/layout-xlarge/status_bar_latest_event_content_large_icon.xml
index 1e1f9de..144fa0d 100644
--- a/core/res/res/layout-xlarge/status_bar_latest_event_content_large_icon.xml
+++ b/core/res/res/layout-xlarge/status_bar_latest_event_content_large_icon.xml
@@ -22,6 +22,7 @@
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:layout_weight="1"
+            android:layout_marginTop="-4dp"
             android:singleLine="true"
             android:ellipsize="marquee"
             android:fadingEdge="horizontal"
@@ -37,7 +38,9 @@
         />
     <ImageView android:id="@+id/icon"
         android:layout_width="48dp"
-        android:layout_height="64dp"
+        android:layout_height="32dp"
+        android:layout_gravity="top"
+        android:layout_marginTop="8dp"
         android:scaleType="center"
         />
 </LinearLayout>
diff --git a/core/res/res/layout-xlarge/status_bar_latest_event_ticker.xml b/core/res/res/layout-xlarge/status_bar_latest_event_ticker.xml
index b09ed44..7631781 100644
--- a/core/res/res/layout-xlarge/status_bar_latest_event_ticker.xml
+++ b/core/res/res/layout-xlarge/status_bar_latest_event_ticker.xml
@@ -28,6 +28,7 @@
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:layout_weight="1"
+            android:layout_marginTop="-4dp"
             android:singleLine="true"
             android:ellipsize="marquee"
             android:fadingEdge="horizontal"
@@ -37,8 +38,8 @@
         android:textAppearance="@style/TextAppearance.StatusBar.EventContent.Info"
         android:layout_width="wrap_content"
         android:layout_height="match_parent"
+        android:layout_marginTop="-10dp"
         android:singleLine="true"
-        android:gravity="center_vertical"
         />
 </LinearLayout>
 
diff --git a/core/res/res/layout-xlarge/status_bar_latest_event_ticker_large_icon.xml b/core/res/res/layout-xlarge/status_bar_latest_event_ticker_large_icon.xml
index 6c2e6f7..b382c55 100644
--- a/core/res/res/layout-xlarge/status_bar_latest_event_ticker_large_icon.xml
+++ b/core/res/res/layout-xlarge/status_bar_latest_event_ticker_large_icon.xml
@@ -23,6 +23,7 @@
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:layout_weight="1"
+            android:layout_marginTop="-4dp"
             android:singleLine="true"
             android:ellipsize="marquee"
             android:fadingEdge="horizontal"
@@ -33,11 +34,13 @@
         android:layout_width="wrap_content"
         android:layout_height="match_parent"
         android:singleLine="true"
-        android:gravity="center_vertical"
+        android:layout_marginTop="-10dp"
         />
     <ImageView android:id="@+id/icon"
         android:layout_width="48dp"
-        android:layout_height="match_parent"
+        android:layout_height="32dp"
+        android:layout_gravity="top"
+        android:layout_marginTop="6dp"
         android:scaleType="center"
         />
 </LinearLayout>
diff --git a/core/res/res/layout/search_view.xml b/core/res/res/layout/search_view.xml
index 0fd9a77..eb0bb11 100644
--- a/core/res/res/layout/search_view.xml
+++ b/core/res/res/layout/search_view.xml
@@ -43,7 +43,8 @@
         android:layout_height="wrap_content"
         android:layout_width="wrap_content"
         android:layout_gravity="center_vertical"
-        android:src="@android:drawable/ic_btn_search"
+        android:background="?android:attr/selectableItemBackground"
+        android:src="@android:drawable/ic_search"
     />
 
     <LinearLayout
@@ -56,6 +57,7 @@
 
         <!-- Inner layout contains the app icon, button(s) and EditText -->
         <LinearLayout
+            android:id="@+id/search_plate"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_weight="1"
@@ -65,16 +67,16 @@
 
             <ImageView
                 android:id="@+id/search_app_icon"
-                android:layout_height="24dip"
-                android:layout_width="24dip"
+                android:layout_width="wrap_content"
+                android:layout_height="match_parent"
                 android:layout_marginRight="7dip"
-                android:layout_gravity="bottom"
-                android:src="@android:drawable/ic_btn_search"
+                android:layout_gravity="center_vertical"
+                android:src="?android:attr/searchViewSearchIcon"
             />
 
             <AutoCompleteTextView
                 android:id="@+id/search_src_text"
-                android:layout_height="wrap_content"
+                android:layout_height="36dip"
                 android:layout_width="0dp"
                 android:layout_weight="1"
                 android:minWidth="100dp"
@@ -88,43 +90,46 @@
                 android:inputType="text|textAutoComplete"
                 android:imeOptions="actionSearch"
                 android:dropDownHeight="wrap_content"
-                android:dropDownAnchor="@id/search_edit_frame"
+                android:dropDownAnchor="@id/search_plate"
                 android:dropDownVerticalOffset="0dip"
                 android:dropDownHorizontalOffset="0dip"
-                android:popupBackground="?android:attr/searchDropdownBackground"
             />
 
-            <!-- TODO: Use the generic dialog close drawable -->
             <ImageView
                 android:id="@+id/search_close_btn"
-                android:layout_width="24dp"
-                android:layout_height="24dp"
-                android:layout_gravity="bottom"
-                android:src="@android:drawable/btn_close"
+                android:layout_width="wrap_content"
+                android:layout_height="match_parent"
+                android:paddingLeft="4dip"
+                android:paddingRight="4dip"
+                android:layout_gravity="center_vertical"
+                android:background="?android:attr/selectableItemBackground"
+                android:src="?android:attr/searchViewCloseIcon"
             />
 
         </LinearLayout>
 
-        <ImageView
-            android:id="@+id/search_go_btn"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_gravity="bottom"
-            android:layout_marginLeft="4dip"
-            android:layout_marginRight="4dip"
-            android:src="@android:drawable/ic_btn_find_next"
-        />
     </LinearLayout>
 
-    <ImageButton
+    <ImageView
+        android:id="@+id/search_go_btn"
+        android:layout_width="wrap_content"
+        android:layout_height="match_parent"
+        android:layout_gravity="center_vertical"
+        android:paddingLeft="4dip"
+        android:paddingRight="4dip"
+        android:background="?android:attr/selectableItemBackground"
+        android:src="?android:attr/searchViewGoIcon"
+    />
+
+    <ImageView
         android:id="@+id/search_voice_btn"
         android:layout_width="wrap_content"
         android:layout_height="match_parent"
         android:layout_gravity="center_vertical"
-        android:layout_marginLeft="4dip"
-        android:layout_marginRight="4dip"
-        android:src="@android:drawable/ic_btn_speak_now"
-        android:background="@android:color/transparent"
+        android:paddingLeft="4dip"
+        android:paddingRight="4dip"
+        android:src="?android:attr/searchViewVoiceIcon"
+        android:background="?android:attr/selectableItemBackground"
         android:visibility="gone"
     />
 </LinearLayout>
diff --git a/core/res/res/values-xlarge/config.xml b/core/res/res/values-xlarge/config.xml
index 37f59c8..8ed1c3e 100644
--- a/core/res/res/values-xlarge/config.xml
+++ b/core/res/res/values-xlarge/config.xml
@@ -31,7 +31,7 @@
     <bool name="config_enableLockScreenRotation">true</bool>
 
     <!-- see comment in values/config.xml -->
-    <integer name="config_longPressOnHomeBehavior">1</integer>
+    <integer name="config_longPressOnHomeBehavior">0</integer>
 
 </resources>
 
diff --git a/core/res/res/values-xlarge/styles.xml b/core/res/res/values-xlarge/styles.xml
index 316861e..095a83d 100644
--- a/core/res/res/values-xlarge/styles.xml
+++ b/core/res/res/values-xlarge/styles.xml
@@ -29,10 +29,10 @@
     <style name="TextAppearance.StatusBar.Icon">
     </style>
     <style name="TextAppearance.StatusBar.EventContent">
-        <item name="android:textColor">?android:attr/textColorPrimary</item>
-        <item name="android:textSize">16sp</item>
+        <item name="android:textColor">#ff999999</item>
     </style>
     <style name="TextAppearance.StatusBar.EventContent.Title">
-        <item name="android:textStyle">bold</item>
+        <item name="android:textColor">?android:attr/textColorPrimary</item>
     </style>
 </resources>
+
diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml
index 3f81a89..a8099e3 100755
--- a/core/res/res/values/attrs.xml
+++ b/core/res/res/values/attrs.xml
@@ -605,8 +605,20 @@
         <!-- Background drawable for standalone items that need focus/pressed states. -->
         <attr name="selectableItemBackground" format="reference" />
 
+        <!-- ============================ -->
+        <!-- SearchView styles and assets -->
+        <!-- ============================ -->
+        <eat-comment />
         <!-- SearchView dropdown background -->
         <attr name="searchDropdownBackground" format="reference" />
+        <!-- SearchView close button icon -->
+        <attr name="searchViewCloseIcon" format="reference" />
+        <!-- SearchView Go button icon -->
+        <attr name="searchViewGoIcon" format="reference" />
+        <!-- SearchView Search icon -->
+        <attr name="searchViewSearchIcon" format="reference" />
+        <!-- SearchView Voice button icon -->
+        <attr name="searchViewVoiceIcon" format="reference" />
 
         <!-- Specifies a drawable to use for the 'home as up' indicator. -->
         <attr name="homeAsUpIndicator" format="reference" />
@@ -3221,10 +3233,10 @@
     </declare-styleable>
 
     <declare-styleable name="ScaleAnimation">
-        <attr name="fromXScale" format="float" />
-        <attr name="toXScale" format="float" />
-        <attr name="fromYScale" format="float" />
-        <attr name="toYScale" format="float" />
+        <attr name="fromXScale" format="float|fraction|dimension" />
+        <attr name="toXScale" format="float|fraction|dimension" />
+        <attr name="fromYScale" format="float|fraction|dimension" />
+        <attr name="toYScale" format="float|fraction|dimension" />
         <attr name="pivotX" />
         <attr name="pivotY" />
     </declare-styleable>
diff --git a/core/res/res/values/colors.xml b/core/res/res/values/colors.xml
index 21b810e..d64fb74 100644
--- a/core/res/res/values/colors.xml
+++ b/core/res/res/values/colors.xml
@@ -110,8 +110,8 @@
     <color name="background_holo_light">#fff3f3f3</color>
     <color name="bright_foreground_holo_dark">@android:color/background_holo_light</color>
     <color name="bright_foreground_holo_light">@android:color/background_holo_dark</color>
-    <color name="bright_foreground_disabled_holo_dark">#80ffffff</color>
-    <color name="bright_foreground_disabled_holo_light">#80000000</color>
+    <color name="bright_foreground_disabled_holo_dark">#ff4c4c4c</color>
+    <color name="bright_foreground_disabled_holo_light">#ffb2b2b2</color>
     <color name="bright_foreground_inverse_holo_dark">@android:color/bright_foreground_holo_light</color>
     <color name="bright_foreground_inverse_holo_light">@android:color/bright_foreground_holo_dark</color>
     <color name="dim_foreground_holo_dark">#bebebe</color>
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index 61223b3..03d581f 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -355,7 +355,7 @@
             1 - Recent apps dialog
             2 - Recent apps activity in SystemUI
     -->
-    <integer name="config_longPressOnHomeBehavior">0</integer>
+    <integer name="config_longPressOnHomeBehavior">1</integer>
 
     <!-- Array of light sensor LUX values to define our levels for auto backlight brightness support.
          The N entries of this array define N + 1 zones as follows:
diff --git a/core/res/res/values/styles.xml b/core/res/res/values/styles.xml
index 6985de6..2754e73 100644
--- a/core/res/res/values/styles.xml
+++ b/core/res/res/values/styles.xml
@@ -779,23 +779,22 @@
         <item name="android:textColor">@android:color/sliding_tab_text_color_active</item>
         <item name="android:textSize">28sp</item>
     </style>
-    
 
-    <!-- @hide -->	
+    <!-- @hide -->
      <style name="TextAppearance.SearchResult">
          <item name="android:textStyle">normal</item>
          <item name="android:textColor">?textColorPrimaryInverse</item>
          <item name="android:textColorHint">?textColorHintInverse</item>
      </style>	
-     	
-     <!-- @hide -->	
+
+     <!-- @hide -->
      <style name="TextAppearance.SearchResult.Title">
-         <item name="android:textSize">16sp</item>
+         <item name="android:textSize">18sp</item>
      </style>
-     	
-     <!-- @hide -->	
+
+     <!-- @hide -->
      <style name="TextAppearance.SearchResult.Subtitle">
-         <item name="android:textSize">13sp</item>
+         <item name="android:textSize">14sp</item>
          <item name="android:textColor">?textColorSecondaryInverse</item>
      </style>
 
@@ -1061,17 +1060,17 @@
 
     <style name="TextAppearance.Holo.SearchResult">
         <item name="android:textStyle">normal</item>
-        <item name="android:textColor">?textColorPrimaryInverse</item>
-        <item name="android:textColorHint">?textColorHintInverse</item>
+        <item name="android:textColor">?textColorPrimary</item>
+        <item name="android:textColorHint">?textColorHint</item>
     </style>
 
     <style name="TextAppearance.Holo.SearchResult.Title">
-         <item name="android:textSize">16sp</item>
+         <item name="android:textSize">18sp</item>
     </style>
 
     <style name="TextAppearance.Holo.SearchResult.Subtitle">
-        <item name="android:textSize">13sp</item>
-        <item name="android:textColor">?textColorSecondaryInverse</item>
+        <item name="android:textSize">14sp</item>
+        <item name="android:textColor">?textColorSecondary</item>
     </style>
 
     <style name="TextAppearance.Holo.Widget" parent="TextAppearance.Widget">
@@ -1203,14 +1202,17 @@
     </style>
 
     <style name="TextAppearance.Holo.Light.SearchResult" parent="TextAppearance.Holo.SearchResult">
-         <item name="android:textColor">?textColorPrimary</item>
-         <item name="android:textColorHint">?textColorHint</item>
+        <item name="android:textColor">?textColorPrimary</item>
+        <item name="android:textColorHint">?textColorHint</item>
     </style>
 
     <style name="TextAppearance.Holo.Light.SearchResult.Title">
+        <item name="android:textSize">18sp</item>
     </style>
 
     <style name="TextAppearance.Holo.Light.SearchResult.Subtitle">
+        <item name="android:textSize">14sp</item>
+        <item name="android:textColor">?textColorSecondary</item>
     </style>
 
     <style name="TextAppearance.Holo.Light.Widget" parent="TextAppearance.Widget">
@@ -1320,6 +1322,8 @@
     </style>
 
     <style name="Widget.Holo.AutoCompleteTextView" parent="Widget.AutoCompleteTextView">
+        <item name="android:dropDownSelector">@android:drawable/list_selector_holo_dark</item>
+        <item name="android:popupBackground">@android:drawable/menu_dropdown_panel_holo_dark</item>
     </style>
 
     <style name="Widget.Holo.CompoundButton.CheckBox" parent="Widget.CompoundButton.CheckBox">
@@ -1620,6 +1624,8 @@
     </style>
 
     <style name="Widget.Holo.Light.AutoCompleteTextView" parent="Widget.AutoCompleteTextView">
+        <item name="android:dropDownSelector">@android:drawable/list_selector_holo_light</item>
+        <item name="android:popupBackground">@android:drawable/menu_dropdown_panel_holo_light</item>
     </style>
 
     <style name="Widget.Holo.Light.CompoundButton.CheckBox" parent="Widget.CompoundButton.CheckBox">
diff --git a/core/res/res/values/themes.xml b/core/res/res/values/themes.xml
index 1ef99d0..0eec0df 100644
--- a/core/res/res/values/themes.xml
+++ b/core/res/res/values/themes.xml
@@ -261,7 +261,11 @@
         <item name="buttonGroupStyle">@android:style/Widget.ButtonGroup</item>
 
         <!-- SearchView attributes -->
-        <item name="searchDropdownBackground">@android:drawable/search_dropdown_dark</item>
+        <item name="searchDropdownBackground">@android:drawable/spinner_dropdown_background</item>
+        <item name="searchViewCloseIcon">@android:drawable/ic_clear</item>
+        <item name="searchViewSearchIcon">@android:drawable/ic_search</item>
+        <item name="searchViewGoIcon">@android:drawable/ic_go</item>
+        <item name="searchViewVoiceIcon">@android:drawable/ic_voice_search</item>
 
         <!-- PreferenceFrameLayout attributes -->
         <item name="preferenceFrameLayoutStyle">@android:style/Widget.PreferenceFrameLayout</item>
@@ -1028,7 +1032,7 @@
 
         <!-- Widget styles -->
         <item name="absListViewStyle">@android:style/Widget.Holo.AbsListView</item>
-        <item name="autoCompleteTextViewStyle">@android:style/Widget.Holo.AutoCompleteTextView</item>
+        <item name="autoCompleteTextViewStyle">@android:style/Widget.Holo.Light.AutoCompleteTextView</item>
         <item name="checkboxStyle">@android:style/Widget.Holo.CompoundButton.CheckBox</item>
         <item name="dropDownListViewStyle">@android:style/Widget.Holo.ListView.DropDown</item>
         <item name="editTextStyle">@android:style/Widget.Holo.EditText</item>
diff --git a/docs/html/guide/topics/resources/layout-resource.jd b/docs/html/guide/topics/resources/layout-resource.jd
index 111851c..36369d3 100644
--- a/docs/html/guide/topics/resources/layout-resource.jd
+++ b/docs/html/guide/topics/resources/layout-resource.jd
@@ -149,17 +149,23 @@
         </dd>
         <dt><code>android:layout_height</code></dt>
         <dd><em>Dimension or keyword</em>. Overrides the height given to the root view in the
-included layout.
+included layout. Only effective if <code>android:layout_width</code> is also declared.
         </dd>
         <dt><code>android:layout_width</code></dt>
         <dd><em>Dimension or keyword</em>. Overrides the width given to the root view in the
-included layout.
+included layout. Only effective if <code>android:layout_height</code> is also declared.
         </dd>
       </dl>
       <p>You can include any other layout attributes in the <code>&lt;include&gt;</code> that are
 supported by the root element in the included layout and they will override those defined in the
 root element.</p>
 
+      <p class="caution"><strong>Caution:</strong> If you want to override the layout dimensions,
+you must override both <code>android:layout_height</code> and
+<code>android:layout_width</code>&mdash;you cannot override only the height or only the width.
+If you override only one, it will not take effect. (Other layout properties, such as weight,
+are still inherited from the source layout.)</p>
+
     <p>Another way to include a layout is to use {@link android.view.ViewStub}. It is a lightweight
 View that consumes no layout space until you explicitly inflate it, at which point, it includes a
 layout file defined by its {@code android:layout} attribute. For more information about using {@link
diff --git a/docs/html/guide/topics/ui/actionbar.jd b/docs/html/guide/topics/ui/actionbar.jd
index 2b942e7..c3d3482f 100644
--- a/docs/html/guide/topics/ui/actionbar.jd
+++ b/docs/html/guide/topics/ui/actionbar.jd
@@ -8,9 +8,10 @@
 
   <h2>Quickview</h2>
   <ul>
-    <li>A replacement for the title bar for displaying global actions for the activity</li>
-    <li>Provides toolbar actions and modes of navigating around the application</li>
-    <li>Switches to contextual menu options when one or more items are selected</li>
+    <li>A replacement for the title bar that includes the application icon and activity title</li>
+    <li>Provides action items from the Options Menu and modes of navigating around the
+application</li>
+    <li>Supports custom views, including an embedded search box</li>
     <li>Requires API Level HONEYCOMB</li>
   </ul>
 
@@ -22,9 +23,9 @@
         <li><a href="#Home">Using the application icon as an action item</a></li>
       </ol>
     </li>
+    <li><a href="#ActionView">Adding an Action View</a></li>
     <li><a href="#Tabs">Adding Tabs</a></li>
     <li><a href="#Dropdown">Adding Drop-down Navigation</a></li>
-    <li><a href="#Search">Adding Search</a></li>
   </ol>
 
   <h2>Key classes</h2>
@@ -40,62 +41,88 @@
 </div>
 </div>
 
-<p>The action bar is a widget for activities that replaces the traditional title bar at
-the top of an activity. By default, the action bar includes the application logo on the left side,
-followed by the activity title. The action bar offers several useful features for
-applications&mdash;especially those targeted to tablet devices. The action bar features include
+<p>The Action Bar is a widget for activities that replaces the traditional title bar at
+the top of an activity. By default, the Action Bar includes the application logo on the left side,
+followed by the activity title. The Action Bar offers several useful features for
+applications&mdash;especially those targeted to tablet devices. The Action Bar features include
 the ability to:</p>
 
 <ul>
-  <li>Display menu items from the <a
-href="{@docRoot}guide/topics/ui/menus.html#OptionsMenu">options menu</a> as "action
-items"&mdash;providing instant access to key user actions.</li>
+  <li>Display items from the <a
+href="{@docRoot}guide/topics/ui/menus.html#OptionsMenu">Options Menu</a> as "action
+items"&mdash;providing instant access to key user actions. (Menu items not appearing as action
+items are placed in the Overflow Menu, revealed by a drop-down in the Action Bar.)</li>
   <li>Provide tabs for navigating between <a
 href="{@docRoot}guide/topics/fragments/index.html">fragments</a>.</li>
   <li>Provide drop-down navigation items.</li>
-  <li>Embed a {@link android.widget.SearchView} for instant searching.</li>
+  <li>Provide interactive "action views" in place of action items.</li>
   <li>Use the application logo as a "return home" or "up" navigation action.</li>
 </ul>
 
 <img src="{@docRoot}images/ui/actionbar.png" height="36" alt="" />
-<p class="img-caption"><strong>Figure 1.</strong> A screenshot of the action bar in the NotePad
+<p class="img-caption"><strong>Figure 1.</strong> A screenshot of the Action Bar in the NotePad
 sample application, containing action items to save and delete the note.</p>
 
 
 <h2 id="Adding">Adding the Action Bar</h2>
 
-<p>To add the Action Bar to your activity, apply the holographic theme&mdash;{@code
-Theme.Holo}&mdash;or the action bar theme&mdash;{@code Theme.WithActionBar}&mdash;in your manifest
-file. For example:</p>
+<p>To add the Action Bar to your activities, simply target your application for HONEYCOMB or later,
+using the <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code
+&lt;uses-sdk&gt;}</a> element. That is, by setting either the {@code android:minSdkVersion} or
+{@code android:targetSdkVersion} to HONEYCOMB or later, each activity in your application will
+include the Action Bar when running on devices with HONEYCOMB or later. For example:</p>
 
 <pre>
-&lt;activity android:theme="@android:style/Theme.Holo" &gt;
+&lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"
+      package="com.example.helloworld"
+      android:versionCode="1"
+      android:versionName="1.0"&gt;
+    <b>&lt;uses-sdk android:minSdkVersion="Froyo" /&gt;</b>
+    &lt;application ... &gt;
+        ...
+    &lt;/application&gt;
+&lt;/manifest&gt;
 </pre>
 
-<p>The activity now appears with the action bar in place of the traditional title bar.</p>
+<p>This also enables the "Holographic" theme for all your activities, which is the new default
+application theme for HONEYCOMB and later.</p>
+
+<p class="note"><strong>Note:</strong> In order for the Holographic theme to be applied based on
+the target platform version, the <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code &lt;uses-sdk&gt;}</a>
+element must appear <em>before</em> the <a
+href="{@docRoot}guide/topics/manifest/application-element.html">{@code &lt;application&gt;}</a>
+element.</p>
+
+<h3>Hide the Action Bar</h3>
+
+<p>If you want to hide the Action Bar for a particular activity, set the activity theme to
+{@code android:style/Theme.NoTitleBar}. For example:</p>
+
+<pre>
+&lt;activity android:theme="@android:style/Theme.NoTitleBar"&gt;
+</pre>
 
 
 <h2 id="ActionItems">Adding Action Items</h2>
 
-<p>For each action item you want to add to the action bar, you must add a menu item to the
-activity's <a href="{@docRoot}guide/topics/ui/menus.html#OptionsMenu">options menu</a> and declare
-that the item be shown as an action, using the {@code android:showAsAction} attribute in the menu
-XML or with {@link android.view.MenuItem#setShowAsAction setShowAsAction()} on the {@link
-android.view.MenuItem}.</p>
+<p>For each action item you want to add to the Action Bar, you must add a menu item to the
+activity's <a href="{@docRoot}guide/topics/ui/menus.html#OptionsMenu">Options Menu</a> and declare
+that the item be shown as an action.</p>
 
 <div class="figure" style="width:359px">
   <img src="{@docRoot}images/ui/actionbar-item-withtext.png" height="57" alt="" />
-  <p class="img-caption"><strong>Figure 2.</strong> A screenshot from an action bar with two
+  <p class="img-caption"><strong>Figure 2.</strong> A screenshot from an Action Bar with two
 action items.</p>
 </div>
 
-<p>You can specify a menu item to appear as an action item in the action bar&mdash;if there is room
+<p>You can specify a menu item to appear as an action item&mdash;if there is room
 for it&mdash;from the <a href="{@docRoot}guide/topics/resources/menu-resource.html">menu
 resource</a> by declaring {@code
 android:showAsAction="ifRoom"} for the {@code &lt;item&gt;} element. This way, the item will display
-in the action bar for quick access only if there is room available for it&mdash;if there's not
-enough room, the item is placed the options menu (revealed by the drop-down icon on the right side
-of the action bar). From your application code, you can specify the item to appear as an action item
+in the Action Bar for quick access only if there is room available for it&mdash;if there's not
+enough room, the item is placed the Overflow Menu (revealed by the menu icon on the right side
+of the Action Bar). From your application code, you can specify the item to appear as an action item
 by calling {@link android.view.MenuItem#setShowAsAction setShowAsAction()} on the {@link
 android.view.MenuItem} and passing {@link android.view.MenuItem#SHOW_AS_ACTION_IF_ROOM}.</p>
 
@@ -104,7 +131,7 @@
 flag&mdash;in XML, add {@code withText} to the {@code android:showAsAction} attribute or, in
 your application code, use the {@link android.view.MenuItem#SHOW_AS_ACTION_WITH_TEXT} flag when
 calling {@link android.view.MenuItem#setShowAsAction setShowAsAction()}. Figure 2 shows a screenshot
-of an action bar with two action items that include text.</p>
+of an Action Bar with two action items that include text.</p>
 
 <p>Here's an example of how you can declare a menu item as an action item in a <a
 href="{@docRoot}guide/topics/resources/menu-resource.html">menu resource</a> file:</p>
@@ -121,22 +148,21 @@
 <p>In this case, both the {@code ifRoom} and {@code withText} flags are set, so that when this
 item appears as an action item, it includes the title text along with the icon.</p>
 
-<p>A menu item placed in the action bar triggers the same callback methods as other items in the
-options menu. When the user selects an item in the action bar, your activity receives a call to
+<p>A menu item placed in the Action Bar triggers the same callback methods as other items in the
+Options Menu. When the user selects an item in the Action Bar, your activity receives a call to
 {@link android.app.Activity#onOptionsItemSelected(MenuItem) onOptionsItemSelected()}, passing the
 item ID. (If you added the item from a fragment, then the respective {@link
 android.app.Fragment#onOptionsItemSelected(MenuItem) onOptionsItemSelected()} method is called
 for that fragment.)</p>
 
-<p class="note"><strong>Note:</strong> Even menu items that are contained in the options menu
-(and not shown as action items) will show an icon, so when using the action bar, you should
-provide an icon for every item in the options menu.</p>
+<p class="note"><strong>Note:</strong> Menu items that appear in the Overflow Menu (not as action
+items) also show an icon, so it's best if you provide an icon for every menu item.</p>
 
 <p>You can also declare an item to <em>always</em> appear as an action item,  but you should avoid
 doing so. Most of the time, there will be enough room for several action items and they will appear
 in the order you declare them. If you set items to always appear as action
 items  (instead of <em>if room</em>), then they are added without discrimination and there is a risk
-that they will collide with other elements in the action bar, such as tabs or custom views.</p>
+that they will collide with other elements in the Action Bar, such as tabs or custom views.</p>
 
 <p>For more information about menus, see the <a
 href="{@docRoot}guide/topics/ui/menus.html#options-menu">Creating Menus</a> developer guide.</p>
@@ -144,7 +170,7 @@
 
 <h3 id="Home">Using the application icon as an action item</h3>
 
-<p>By default, the application icon appears in the action bar on the left side, but does nothing
+<p>By default, the application icon appears in the Action Bar on the left side, but does nothing
 when tapped. To use the application icon as an action item when tapped, you simply need to add a
 condition to your {@link android.app.Activity#onOptionsItemSelected onOptionsItemSelected()} method
 that performs an action when the {@link android.view.MenuItem} ID is {@code android.R.id.home}.
@@ -158,7 +184,7 @@
 public boolean onOptionsItemSelected(MenuItem item) {
     switch (item.getItemId()) {
         case android.R.id.home:
-            // app icon in action bar clicked; go home
+            // app icon in Action Bar clicked; go home
             Intent intent = new Intent(this, HomeActivity.class);
             startActivity(intent);
             break;
@@ -176,7 +202,7 @@
 <p>You can also use the application icon to provide "up" navigation. The way you handle the event
 when a user taps the icon is the same, but if the user experience for the event is to <em>navigate
 up to the parent activity</em>, then you should indicate this behavior by setting the
-action bar to "show home as up." You can do so by calling {@link
+Action Bar to "show home as up." You can do so by calling {@link
 android.app.ActionBar#setDisplayOptions setDisplayOptions()} on your activity's {@link
 android.app.ActionBar}, and passing the {@link
 android.app.ActionBar#DISPLAY_HOME_AS_UP} display option.</p>
@@ -186,7 +212,7 @@
 sure you do so <em>after</em> you've called {@link android.app.Activity#setContentView
 setContentView()}).</p>
 
-<p>For example, here's how you can change the action bar display mode to show the application
+<p>For example, here's how you can change the Action Bar display mode to show the application
 icon as an "up" action:</p>
 
 <pre>
@@ -198,24 +224,103 @@
 }
 </pre>
 
-<p class="caution"><strong>Caution:</strong> If your activity does not have an action bar (if you
-did not set the theme of your activity or application to the holographic or action bar theme), then
+<p class="caution"><strong>Caution:</strong> If your activity does not have an Action Bar (if you
+did not set the theme of your activity or application to the holographic or Action Bar theme), then
 {@link android.app.Activity#getActionBar} returns null.</p>
 
 
+
+<h2 id="ActionView">Adding an Action View</h2>
+
+<div class="figure" style="width:281px">
+  <img src="{@docRoot}images/ui/actionbar-actionview.png" alt="" />
+  <p class="img-caption"><strong>Figure 4.</strong> An action view with a search widget.</p>
+</div>
+
+<p>An action view is a customized view you can specify for an item in your Options Menu, to
+display in the Action Bar when the item is included as an action item. For example, you can
+include a menu item for "Search", which appears and behaves as a normal menu item in the Overflow
+Menu, but, when set as an action item, it provides an action view that is a {@link
+android.widget.SearchView}, so the user can initiate a search directly from the Action Bar.
+Figure 4 shows an example of this, in which a menu item for search provides an action view
+using the {@link android.widget.SearchView} widget.</p>
+
+<p>The best way to declare an action view for an item is in your <a
+href="{@docRoot}guide/topics/resources/menu-resource.html">menu resource</a>, using the {@code
+android:actionLayout} or {@code android:actionViewClass} attribute.</p>
+
+<ul>
+  <li>The value for {@code android:actionLayout} must be a resource pointer to a layout file.
+For example:
+<pre>
+&lt;item android:id="@+id/menu_search"
+    android:title="Search"
+    android:icon="@drawable/ic_menu_search"
+    android:showAsAction="ifRoom"
+    <b>android:actionLayout="@layout/searchview"</b> /&gt;
+</pre></li>
+  <li>The value for {@code android:actionViewClass} must be a fully-qualified class name for
+the {@link android.view.View} you want to use. For example:
+<pre>
+&lt;item android:id="@+id/menu_search"
+    android:title="Search"
+    android:icon="@drawable/ic_menu_search"
+    android:showAsAction="ifRoom"
+    <b>android:actionViewClass="android.widget.SearchView"</b> /&gt;
+</pre></li>
+</ul>
+
+<p>Now, when the menu item is displayed as an action item, it's action view appears instead of
+the item's traditional icon and/or text. Yet, if for some reason the item does not appear in the
+Action Bar, then it behaves like a normal menu item in the Overflow Menu and you must respond
+accordingly when the user taps it, from the {@link android.app.Activity#onOptionsItemSelected
+onOptionsItemSelected()} callback.</p>
+
+<p>When the activity first starts, the system populates the Action Bar and Overflow Menu by calling
+{@link android.app.Activity#onCreateOptionsMenu onCreateOptionsMenu()}.
+After you've inflated your menu in this method, you can acquire elements in an action view
+(perhaps in order to attach listeners) by calling {@link android.view.Menu#findItem
+findItem()} with the ID of the menu item, then {@link android.view.MenuItem#getActionView} on
+the returned {@link android.view.MenuItem}. For example, the search widget from the above samples is
+acquired like this:</p>
+
+<pre>
+&#64;Override
+public boolean onCreateOptionsMenu(Menu menu) {
+  getMenuInflater().inflate(R.menu.options, menu);
+  SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
+  // Set appropriate listeners for searchView
+  ...
+  return super.onCreateOptionsMenu(menu);
+}
+</pre>
+
+<p>For more information about enabling search in the Action Bar, see the <a
+href="{@docRoot}guide/topics/search/index.html">Search</a> developer guide.</p>
+
+
+
 <h2 id="Tabs">Adding Tabs</h2>
 
-<p>The action bar can display tabs that allow the user navigate between different fragments in the
+<p>The Action Bar can display tabs that allow the user navigate between different fragments in the
 activity. Each tab can include a title and/or an icon.</p>
 
+<!--
+<div class="figure" style="width:300px">
+  <img src="{@docRoot}images/ui/actionbar-tabs.png" alt="" />
+  <p class="img-caption"><strong>Figure 5.</strong> Screenshot of tabs in the
+Action Bar.</p>
+</div>
+-->
+
 <p>To begin, your layout must include a {@link android.view.View} in which each {@link
 android.app.Fragment} associated with a tab is displayed. Be sure the view has an ID that you
 can use to reference it from your code.</p>
 
-<p>To add tabs to the action bar:</p>
+<p>To add tabs to the Action Bar:</p>
 <ol>
   <li>Create an implementation of {@link android.app.ActionBar.TabListener} to handle the
-interaction events on the action bar tabs. You must implement all methods: {@link
+interaction events on the Action Bar tabs. You must implement all methods: {@link
 android.app.ActionBar.TabListener#onTabSelected onTabSelected()}, {@link
 android.app.ActionBar.TabListener#onTabUnselected onTabUnselected()}, and {@link
 android.app.ActionBar.TabListener#onTabReselected onTabReselected()}.
@@ -260,7 +365,7 @@
   <li>Call {@link android.app.ActionBar#setNavigationMode(int)
 setNavigationMode(NAVIGATION_MODE_TABS)} to enable tab mode for the {@link
 android.app.ActionBar}.</li>
-  <li>Create each tab for the action bar:
+  <li>Create each tab for the Action Bar:
     <ol>
       <li>Create a new {@link android.app.ActionBar.Tab} by calling {@link
 android.app.ActionBar#newTab()} on the {@link android.app.ActionBar}.</li>
@@ -274,19 +379,19 @@
 setTabListener()}.
     </ol>
   </li>
-  <li>Add each {@link android.app.ActionBar.Tab} to the action bar by calling {@link
+  <li>Add each {@link android.app.ActionBar.Tab} to the Action Bar by calling {@link
 android.app.ActionBar#addTab addTab()} on the {@link android.app.ActionBar} and passing the
-{@link android.app.ActionBar.Tab}.</li>
+{@link android.app.ActionBar.Tab}.<>
 </ol>
 <p>For example, the following code combines steps 2 - 5 to create two tabs and add them to
-the action bar:</p>
+the Action Bar:</p>
 <pre>
 &#64;Override
 protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.main);
 
-    // setup action bar for tabs
+    // setup Action Bar for tabs
     final ActionBar actionBar = getActionBar();
     actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
     // remove the activity title to make space for tabs
@@ -295,11 +400,11 @@
     // instantiate fragment for the tab
     Fragment artistsFragment = new ArtistsFragment();
     // add a new tab and set its title text and tab listener
-    bar.addTab(bar.newTab().setText(R.string.tab_artists)
+    actionBar.addTab(actionBar.newTab().setText(R.string.tab_artists)
             .setTabListener(new TabListener(artistsFragment)));
 
     Fragment albumsFragment = new AlbumsFragment();
-    bar.addTab(bar.newTab().setText(R.string.tab_albums)
+    actionBar.addTab(actionBar.newTab().setText(R.string.tab_albums)
             .setTabListener(new TabListener(albumsFragment)));
 }
 </pre>
@@ -330,3 +435,159 @@
 href="{@docRoot}guide/topics/fragments/index.html">Fragments</a> developer guide.</p>
 
 
+
+<h2 id="Dropdown">Adding Drop-down Navigation</h2>
+
+<p>As another mode of navigation within your activity, you can provide a drop-down list in the
+Action Bar. For example, the drop-down list can provide alternative modes for sorting the content in
+the activity or switching the user's account.</p>
+
+<!--
+<div class="figure" style="width:135px">
+  <img src="{@docRoot}images/ui/actionbar-dropdown.png" alt="" />
+  <p class="img-caption"><strong>Figure 5.</strong> Screenshot of a drop-down navigation list in the
+Action Bar.</p>
+</div>
+-->
+
+<p>Here's a quick list of what you must do to enable drop-down navigation:</p>
+
+<ol>
+  <li>Create a {@link android.widget.SpinnerAdapter} that provides the
+list of selectable items for the list and the layout to use when drawing each item in the list.</li>
+  <li>Implement {@link android.app.ActionBar.NavigationCallback} to define the behavior when the
+user selects an item from the list.</li>
+  <li>Turn on navigation mode for the Action Bar with {@link
+android.app.ActionBar#setNavigationMode setNavigationMode()}. For example:
+<pre>
+ActionBar actionBar = getActionBar();
+actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
+</pre>
+  <p>You should perform this during your activity's {@link android.app.Activity#onCreate
+onCreate()} method.</p>
+  </li>
+  <li>Following that, set the callback for your drop-down list with {@link
+android.app.ActionBar#setListNavigationCallbacks setListNavigationCallbacks()}. For example:
+<pre>
+actionBar.setListNavigationCallbacks(mSpinnerAdapter, mNavigationCallback);
+</pre>
+<p>This method takes your {@link android.widget.SpinnerAdapter} and {@link
+android.app.ActionBar.NavigationCallback}. More about these next.</p>
+</li>
+</ol>
+
+<p>That's the basic setup. The {@link android.widget.SpinnerAdapter} and {@link
+android.app.ActionBar.NavigationCallback} is where most of the work is done. There are many ways 
+you can implement these to define the functionality for your drop-down navigation. Implementing
+various types of {@link android.widget.SpinnerAdapter} is beyond the scope of this
+document&mdash;you should refer to the class refrence for more information about implementing it or
+extending an existing implementation. However, below is a simple example for a {@link
+android.widget.SpinnerAdapter} and {@link android.app.ActionBar.NavigationCallback} to get you
+started.</p>
+
+
+<h3 id="Spinner">Example: simple SpinnerAdapter</h3>
+
+<p>{@link android.widget.SpinnerAdapter} is an interface that you can implement to provide
+content for the list and is where your implementation for the drop-down list can be heavily
+customized. Android includes some useful implementations that you can extend, such as {@link
+android.widget.ArrayAdapter} and {@link
+android.widget.SimpleCursorAdapter}. For example, here's an easy way to create a {@link
+android.widget.SpinnerAdapter} with {@link android.widget.ArrayAdapter}, using a string array
+from resources:</p>
+
+<pre>
+SpinnerAdapter mSpinnerAdapter = ArrayAdapter.createFromResource(this, R.array.action_list,
+          android.R.layout.simple_spinner_dropdown_item);
+</pre>
+
+<p>This is now ready to be given to {@link
+android.app.ActionBar#setListNavigationCallbacks setListNavigationCallbacks()}, in step 4 from
+above.</p>
+
+<p>A <a href="{@docRoot}guide/topics/resources/string-resource.html#StringArray">string array</a>
+defined as a resource looks like this:</p>
+
+<pre>
+&lt;?xml version="1.0" encoding="utf-8"?&gt;
+&lt;resources&gt;
+    &lt;string-array name="action_list"&gt;
+        &lt;item&gt;Mercury&lt;/item&gt;
+        &lt;item&gt;Venus&lt;/item&gt;
+        &lt;item&gt;Earth&lt;/item&gt;
+    &lt;/string-array&gt;
+&lt;/pre&gt;
+</pre>
+
+
+<h3 id="NavigationCallback">Example: simple NavigationCallback</h3>
+
+<p>Your implementation of {@link android.app.ActionBar.NavigationCallback} is where you handle
+fragment changes or other modifications to your activity when the user selects an item from the
+drop-down list. There's only one callback method to implement: {@link
+android.app.ActionBar.NavigationCallback#onNavigationItemSelected onNavigationItemSelected()}.</p>
+
+<p>The {@link
+android.app.ActionBar.NavigationCallback#onNavigationItemSelected onNavigationItemSelected()}
+method receives the position of the item in the list and an item ID provided by the {@link
+android.widget.SpinnerAdapter}.</p>
+
+<p>Here's an example that instantiates an anonymous implementation of {@link
+android.app.ActionBar.NavigationCallback}, which inserts a {@link android.app.Fragment} into the
+layout container identified by {@code R.id.fragment_container}:</p>
+
+<pre>
+mNavigationCallback = new NavigationCallback() {
+  // Get the same strings provided for the drop-down's ArrayAdapter
+  String[] strings = getResources().getStringArray(R.array.action_list);
+
+  &#64;Override
+  public boolean onNavigationItemSelected(int position, long itemId) {
+    // Create new fragment from our own Fragment class
+    ListContentFragment newFragment = new ListContentFragment();
+    FragmentTransaction ft = openFragmentTransaction();
+    // Replace whatever is in the fragment container with this fragment
+    //  and give the fragment a tag name equal to the string at the position selected
+    ft.replace(R.id.fragment_container, newFragment, strings[position]);
+    // Apply changes
+    ft.commit();
+    return true;
+  }
+};
+</pre>
+
+<p>This instance of {@link android.app.ActionBar.NavigationCallback} can be given to {@link
+android.app.ActionBar#setListNavigationCallbacks setListNavigationCallbacks()}, in step 4 from
+above.</p>
+
+<p>In this example, the fragment added is given a tag that can uniquely identify the fragment.
+For this example, the {@code ListContentFragment} class used uses this tag as
+the text for a {@link android.widget.TextView} in the fragment's layout. Here's how it's done:</p>
+
+<pre>
+public class ListContentFragment extends Fragment {
+    private String mText;
+
+    &#64;Override
+    public void onAttach(Activity activity) {
+      // This is the first callback received; here we can set the text for
+      // the fragment as defined by the tag specified during the fragment transaction
+      super.onAttach(activity);
+      mText = getTag();
+    }
+
+    &#64;Override
+    public View onCreateView(LayoutInflater inflater, ViewGroup container,
+            Bundle savedInstanceState) {
+        // This is called to define the layout for the fragment;
+        // we just create a TextView and set its text to be the fragment tag
+        TextView text = new TextView(getActivity());
+        text.setText(mText);
+        return text;
+    }
+}
+</pre>
+
+
+
+
diff --git a/docs/html/guide/topics/ui/declaring-layout.jd b/docs/html/guide/topics/ui/declaring-layout.jd
index 4d71d28..d561bdd 100644
--- a/docs/html/guide/topics/ui/declaring-layout.jd
+++ b/docs/html/guide/topics/ui/declaring-layout.jd
@@ -120,7 +120,7 @@
 <pre>
 public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
-    setContentView.(R.layout.main_layout);
+    setContentView(R.layout.main_layout);
 }
 </pre>
 
diff --git a/docs/html/images/ui/actionbar-actionview.png b/docs/html/images/ui/actionbar-actionview.png
new file mode 100644
index 0000000..30edca0
--- /dev/null
+++ b/docs/html/images/ui/actionbar-actionview.png
Binary files differ
diff --git a/docs/html/resources/articles/layout-tricks-reuse.jd b/docs/html/resources/articles/layout-tricks-reuse.jd
index 072ba89..396e2127 100644
--- a/docs/html/resources/articles/layout-tricks-reuse.jd
+++ b/docs/html/resources/articles/layout-tricks-reuse.jd
@@ -53,12 +53,24 @@
 layout; it will also override the id of the included layout if one is defined.
 Similarly, you can override all the layout parameters. This means that any
 <code>android:layout_*</code> attribute can be used with the <code>&lt;include
-/&gt;</code> tag. Here is an example:</p>
+/&gt;</code> tag. Here is an example in
+which the same layout is included twice, but only the first one overrides the layout properties:</p>
 
-<pre class="prettyprint">&lt;include android:layout_width="fill_parent" layout="@layout/image_holder" /&gt;
-&lt;include android:layout_width="256dip" layout="@layout/image_holder" /&gt;
+<pre>
+&lt;!-- override the layout height and width --&gt;
+&lt;include layout="@layout/image_holder"
+    android:layout_height="fill_parent"
+    android:layout_width="fill_parent" /&gt;
+&lt;!-- do not override layout dimensions; inherit them from image_holder --&gt;
+&lt;include layout="@layout/image_holder" /&gt;
 </pre>
 
+<p class="caution"><strong>Caution:</strong> If you want to override the layout dimensions,
+you must override both <code>android:layout_height</code> and
+<code>android:layout_width</code>&mdash;you cannot override only the height or only the width.
+If you override only one, it will not take effect. (Other layout properties, such as weight,
+are still inherited from the source layout.)</p>
+
 <p>This tag is particularly useful when you need to customize only part of your
 UI depending on the device's configuration. For instance, the main layout of
 your activity can be placed in the <code>layout/</code> directory and can
diff --git a/drm/libdrmframework/plugins/widevine/Android.mk b/drm/libdrmframework/plugins/widevine/Android.mk
deleted file mode 100644
index 2c388da..0000000
--- a/drm/libdrmframework/plugins/widevine/Android.mk
+++ /dev/null
@@ -1,27 +0,0 @@
-#
-# 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.
-#
-LOCAL_PATH:= $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := libdrmwvmplugin
-
-LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/drm/plugins/native
-
-LOCAL_PRELINK_MODULE := false
-
-LOCAL_MODULE_TAGS := optional
-
-include $(BUILD_SHARED_LIBRARY)
diff --git a/libs/binder/CursorWindow.cpp b/libs/binder/CursorWindow.cpp
index fbba281..47bbd04 100644
--- a/libs/binder/CursorWindow.cpp
+++ b/libs/binder/CursorWindow.cpp
@@ -219,7 +219,8 @@
 field_slot_t * CursorWindow::getFieldSlotWithCheck(int row, int column)
 {
   if (row < 0 || row >= mHeader->numRows || column < 0 || column >= mHeader->numColumns) {
-      LOGE("Bad request for field slot %d,%d. numRows = %d, numColumns = %d", row, column, mHeader->numRows, mHeader->numColumns);
+      LOGE("Failed to read row# %d, column# from a CursorWindow which has %d rows, %d columns.",
+              row, column, mHeader->numRows, mHeader->numColumns);
       return NULL;
   }        
   row_slot_t * rowSlot = getRowSlot(row);
@@ -238,7 +239,8 @@
 uint32_t CursorWindow::read_field_slot(int row, int column, field_slot_t * slotOut)
 {
     if (row < 0 || row >= mHeader->numRows || column < 0 || column >= mHeader->numColumns) {
-        LOGE("Bad request for field slot %d,%d. numRows = %d, numColumns = %d", row, column, mHeader->numRows, mHeader->numColumns);
+        LOGE("Can't read row# %d, col# %d from CursorWindow. Make sure your Cursor is initialized correctly.",
+                row, column);
         return -1;
     }        
     row_slot_t * rowSlot = getRowSlot(row);
diff --git a/libs/rs/java/Balls/src/com/android/balls/BallsRS.java b/libs/rs/java/Balls/src/com/android/balls/BallsRS.java
index 76c23b7..42eaede 100644
--- a/libs/rs/java/Balls/src/com/android/balls/BallsRS.java
+++ b/libs/rs/java/Balls/src/com/android/balls/BallsRS.java
@@ -21,7 +21,7 @@
 import android.util.Log;
 
 public class BallsRS {
-    public static final int PART_COUNT = 800;
+    public static final int PART_COUNT = 1000;
 
     public BallsRS() {
     }
diff --git a/libs/rs/java/Balls/src/com/android/balls/ball_physics.rs b/libs/rs/java/Balls/src/com/android/balls/ball_physics.rs
index 96c39b1..47eaf1b 100644
--- a/libs/rs/java/Balls/src/com/android/balls/ball_physics.rs
+++ b/libs/rs/java/Balls/src/com/android/balls/ball_physics.rs
@@ -41,7 +41,20 @@
                 fv -= (vec / (len * len * len)) * 20000.f;
             } else {
                 if (len2 < 0.1) {
-                    continue;
+                    if (xin == x) {
+                        continue;
+                    }
+                    ballOut->delta = 0.f;
+                    ballOut->position = ballIn->position;
+                    if (xin > x) {
+                        ballOut->position.x += 1.f;
+                    } else {
+                        ballOut->position.x -= 1.f;
+                    }
+                    ballOut->color.rgb = 1.f;
+                    ballOut->arcID = -1;
+                    ballOut->arcStr = 0;
+                    return;
                 }
                 // Collision
                 float2 axis = normalize(vec);
diff --git a/libs/rs/rsScriptC.h b/libs/rs/rsScriptC.h
index 4f0dff3..ab2db5c8 100644
--- a/libs/rs/rsScriptC.h
+++ b/libs/rs/rsScriptC.h
@@ -21,7 +21,9 @@
 
 #include "RenderScriptEnv.h"
 
-struct BCCscript;
+namespace bcc {
+class BCCscript;
+}
 
 // ---------------------------------------------------------------------------
 namespace android {
@@ -46,7 +48,7 @@
 
     Program_t mProgram;
 
-    BCCscript*    mBccScript;
+    bcc::BCCscript* mBccScript;
 
     const Allocation *ptrToAllocation(const void *) const;
 
diff --git a/media/java/android/media/videoeditor/MediaProperties.java b/media/java/android/media/videoeditor/MediaProperties.java
index 34088fc..0bb83eb 100755
--- a/media/java/android/media/videoeditor/MediaProperties.java
+++ b/media/java/android/media/videoeditor/MediaProperties.java
@@ -95,6 +95,9 @@
     public static final int BITRATE_384K = 384000;
     public static final int BITRATE_512K = 512000;
     public static final int BITRATE_800K = 800000;
+    public static final int BITRATE_2M = 2000000;
+    public static final int BITRATE_5M = 5000000;
+    public static final int BITRATE_8M = 8000000;
 
     // The array of supported bitrates
     private static final int[] SUPPORTED_BITRATES = new int[] {
diff --git a/media/libwvm/Android.mk b/media/libwvm/Android.mk
deleted file mode 100644
index 7c75c0f..0000000
--- a/media/libwvm/Android.mk
+++ /dev/null
@@ -1,10 +0,0 @@
-# create an empty mk for libwvm
-# for integration purpose
-LOCAL_PATH := $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := libwvm
-
-LOCAL_MODULE_TAGS := optional
-include $(BUILD_SHARED_LIBRARY)
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_notification_open.png b/packages/SystemUI/res/drawable-hdpi/ic_notification_open.png
new file mode 100644
index 0000000..d083396
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_notification_open.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_notification_veto.png b/packages/SystemUI/res/drawable-hdpi/ic_notification_veto.png
new file mode 100644
index 0000000..395604f
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_notification_veto.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_notification_dnd.png b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_notification_dnd.png
new file mode 100644
index 0000000..51b5809
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_notification_dnd.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_notification_dnd_off.png b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_notification_dnd_off.png
new file mode 100644
index 0000000..37ef7e1
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_notification_dnd_off.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_quicksettings.png b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_quicksettings.png
new file mode 100644
index 0000000..d9b4eca
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_quicksettings.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_rotate_off_lanscape.png b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_rotate_off_lanscape.png
new file mode 100644
index 0000000..c091489
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_rotate_off_lanscape.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_rotate_off_portrait.png b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_rotate_off_portrait.png
new file mode 100644
index 0000000..73a9897
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_rotate_off_portrait.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_shadow.9.png b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_shadow.9.png
new file mode 100644
index 0000000..7cb2643
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_shadow.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/recent_overlay.png b/packages/SystemUI/res/drawable-hdpi/recent_overlay.png
new file mode 100644
index 0000000..fcf4417
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/recent_overlay.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/recent_rez_border.png b/packages/SystemUI/res/drawable-hdpi/recent_rez_border.png
new file mode 100644
index 0000000..af36ac7
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/recent_rez_border.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/sysbar_signalmini_100.png b/packages/SystemUI/res/drawable-hdpi/sysbar_signalmini_100.png
new file mode 100644
index 0000000..d89f8891
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/sysbar_signalmini_100.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_notification_veto.png b/packages/SystemUI/res/drawable-mdpi/ic_notification_veto.png
new file mode 100644
index 0000000..f6299e9
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_notification_veto.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_notification_dnd.png b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_notification_dnd.png
new file mode 100644
index 0000000..fe44063
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_notification_dnd.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_notification_dnd_off.png b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_notification_dnd_off.png
new file mode 100644
index 0000000..8088a2f
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_notification_dnd_off.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_rotate_off_lanscape.png b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_rotate_off_lanscape.png
new file mode 100644
index 0000000..96bf2ec
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_rotate_off_lanscape.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_rotate_off_portrait.png b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_rotate_off_portrait.png
new file mode 100644
index 0000000..cc56778
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_rotate_off_portrait.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable/recent_overlay.png b/packages/SystemUI/res/drawable-mdpi/recent_overlay.png
similarity index 100%
rename from packages/SystemUI/res/drawable/recent_overlay.png
rename to packages/SystemUI/res/drawable-mdpi/recent_overlay.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable/recent_rez_border.png b/packages/SystemUI/res/drawable-mdpi/recent_rez_border.png
similarity index 100%
rename from packages/SystemUI/res/drawable/recent_rez_border.png
rename to packages/SystemUI/res/drawable-mdpi/recent_rez_border.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/sysbar_signal_0.png b/packages/SystemUI/res/drawable-mdpi/sysbar_signal_0.png
new file mode 100644
index 0000000..7371571
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/sysbar_signal_0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/sysbar_signal_10.png b/packages/SystemUI/res/drawable-mdpi/sysbar_signal_10.png
new file mode 100644
index 0000000..5781e9a
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/sysbar_signal_10.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/sysbar_signal_100.png b/packages/SystemUI/res/drawable-mdpi/sysbar_signal_100.png
new file mode 100644
index 0000000..c65728c
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/sysbar_signal_100.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/sysbar_signal_20.png b/packages/SystemUI/res/drawable-mdpi/sysbar_signal_20.png
new file mode 100644
index 0000000..a249fa2
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/sysbar_signal_20.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/sysbar_signal_30.png b/packages/SystemUI/res/drawable-mdpi/sysbar_signal_30.png
new file mode 100644
index 0000000..289c088
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/sysbar_signal_30.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/sysbar_signal_40.png b/packages/SystemUI/res/drawable-mdpi/sysbar_signal_40.png
new file mode 100644
index 0000000..f49dbd6
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/sysbar_signal_40.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/sysbar_signal_50.png b/packages/SystemUI/res/drawable-mdpi/sysbar_signal_50.png
new file mode 100644
index 0000000..2f83e68
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/sysbar_signal_50.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/sysbar_signal_60.png b/packages/SystemUI/res/drawable-mdpi/sysbar_signal_60.png
new file mode 100644
index 0000000..bedc021
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/sysbar_signal_60.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/sysbar_signal_70.png b/packages/SystemUI/res/drawable-mdpi/sysbar_signal_70.png
new file mode 100644
index 0000000..edd8c05
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/sysbar_signal_70.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/sysbar_signal_80.png b/packages/SystemUI/res/drawable-mdpi/sysbar_signal_80.png
new file mode 100644
index 0000000..148e20c
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/sysbar_signal_80.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/sysbar_signal_90.png b/packages/SystemUI/res/drawable-mdpi/sysbar_signal_90.png
new file mode 100644
index 0000000..5a90ccb
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/sysbar_signal_90.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/app_icon.png b/packages/SystemUI/res/drawable-xlarge-hdpi/app_icon.png
new file mode 100644
index 0000000..aedf7e7
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xlarge-hdpi/app_icon.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable/ic_sysbar_back_ime.xml b/packages/SystemUI/res/drawable/ic_sysbar_back_ime.xml
new file mode 100644
index 0000000..248496d
--- /dev/null
+++ b/packages/SystemUI/res/drawable/ic_sysbar_back_ime.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2008 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.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_pressed="true" android:drawable="@drawable/ic_sysbar_back_ime_pressed" />
+    <item android:drawable="@drawable/ic_sysbar_back_ime_default" />
+</selector>
+
diff --git a/packages/SystemUI/res/layout-xlarge/status_bar.xml b/packages/SystemUI/res/layout-xlarge/status_bar.xml
index 488dbba..d4e9c53 100644
--- a/packages/SystemUI/res/layout-xlarge/status_bar.xml
+++ b/packages/SystemUI/res/layout-xlarge/status_bar.xml
@@ -167,11 +167,19 @@
                     />
             </com.android.systemui.statusbar.tablet.ShirtPocket>
             <com.android.systemui.statusbar.tablet.InputMethodButton
-                android:id="@+id/imeButton"
+                android:id="@+id/imeSwitchButton"
                 android:layout_width="wrap_content"
                 android:layout_height="match_parent"
                 android:layout_marginLeft="8dip"
-                android:src="@drawable/ic_sysbar_ime"
+                android:src="@drawable/ic_sysbar_ime_default"
+                android:visibility="invisible"
+                />
+            <com.android.systemui.statusbar.tablet.InputMethodButton
+                android:id="@+id/imeShortcutButton"
+                android:layout_width="wrap_content"
+                android:layout_height="match_parent"
+                android:layout_marginLeft="8dip"
+                android:src="@drawable/ic_sysbar_ime_default"
                 android:visibility="invisible"
                 />
         </LinearLayout>
diff --git a/packages/SystemUI/res/layout-xlarge/sysbar_panel_notifications.xml b/packages/SystemUI/res/layout-xlarge/status_bar_notification_panel.xml
similarity index 94%
rename from packages/SystemUI/res/layout-xlarge/sysbar_panel_notifications.xml
rename to packages/SystemUI/res/layout-xlarge/status_bar_notification_panel.xml
index fb4cf3f..c0612c8 100644
--- a/packages/SystemUI/res/layout-xlarge/sysbar_panel_notifications.xml
+++ b/packages/SystemUI/res/layout-xlarge/status_bar_notification_panel.xml
@@ -62,6 +62,7 @@
 
         <com.android.systemui.statusbar.policy.DateView
             android:id="@+id/date"
+            style="@style/StatusBarNotificationText"
             android:layout_height="wrap_content"
             android:layout_width="match_parent"
             android:layout_below="@id/clock"
@@ -84,12 +85,13 @@
 
         <TextView
             android:id="@+id/battery_text"
-            android:layout_width="48dp"
+            style="@style/StatusBarNotificationText"
+            android:layout_width="56dp"
             android:layout_height="wrap_content"
             android:layout_toRightOf="@id/battery"
             android:layout_alignBaseline="@id/battery"
             android:singleLine="true"
-            android:text="@string/system_panel_settings_button"
+            android:text="@string/status_bar_settings_settings_button"
             />
 
         <ImageView
@@ -104,12 +106,13 @@
 
         <TextView
             android:id="@+id/network_text"
+            style="@style/StatusBarNotificationText"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_toRightOf="@id/network"
             android:layout_alignBaseline="@id/battery"
             android:singleLine="true"
-            android:text="@string/system_panel_settings_button"
+            android:text="@string/status_bar_settings_settings_button"
             />
 
         <ImageView
diff --git a/packages/SystemUI/res/layout-xlarge/sysbar_panel_notification_peek.xml b/packages/SystemUI/res/layout-xlarge/status_bar_notification_peek.xml
similarity index 100%
rename from packages/SystemUI/res/layout-xlarge/sysbar_panel_notification_peek.xml
rename to packages/SystemUI/res/layout-xlarge/status_bar_notification_peek.xml
diff --git a/packages/SystemUI/res/layout-xlarge/status_bar_latest_event.xml b/packages/SystemUI/res/layout-xlarge/status_bar_notification_row.xml
similarity index 100%
rename from packages/SystemUI/res/layout-xlarge/status_bar_latest_event.xml
rename to packages/SystemUI/res/layout-xlarge/status_bar_notification_row.xml
diff --git a/packages/SystemUI/res/layout-xlarge/sysbar_panel_pocket.xml b/packages/SystemUI/res/layout-xlarge/status_bar_pocket_panel.xml
similarity index 100%
rename from packages/SystemUI/res/layout-xlarge/sysbar_panel_pocket.xml
rename to packages/SystemUI/res/layout-xlarge/status_bar_pocket_panel.xml
diff --git a/packages/SystemUI/res/layout-xlarge/sysbar_panel_recent_item.xml b/packages/SystemUI/res/layout-xlarge/status_bar_recent_item.xml
similarity index 99%
rename from packages/SystemUI/res/layout-xlarge/sysbar_panel_recent_item.xml
rename to packages/SystemUI/res/layout-xlarge/status_bar_recent_item.xml
index b1997b8..e7a3a61 100644
--- a/packages/SystemUI/res/layout-xlarge/sysbar_panel_recent_item.xml
+++ b/packages/SystemUI/res/layout-xlarge/status_bar_recent_item.xml
@@ -56,4 +56,4 @@
 
     </LinearLayout>
 
-</LinearLayout>
\ No newline at end of file
+</LinearLayout>
diff --git a/packages/SystemUI/res/layout-xlarge/sysbar_panel_recent.xml b/packages/SystemUI/res/layout-xlarge/status_bar_recent_panel.xml
similarity index 100%
rename from packages/SystemUI/res/layout-xlarge/sysbar_panel_recent.xml
rename to packages/SystemUI/res/layout-xlarge/status_bar_recent_panel.xml
diff --git a/packages/SystemUI/res/layout-xlarge/status_bar_settings_view.xml b/packages/SystemUI/res/layout-xlarge/status_bar_settings_view.xml
new file mode 100644
index 0000000..6dd97c3
--- /dev/null
+++ b/packages/SystemUI/res/layout-xlarge/status_bar_settings_view.xml
@@ -0,0 +1,170 @@
+<?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.
+-->
+
+<com.android.systemui.statusbar.tablet.SettingsView
+        xmlns:android="http://schemas.android.com/apk/res/android"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="vertical"
+        android:background="@drawable/status_bar_item_background"
+        android:paddingLeft="16dp"
+        >
+
+    <!-- Airplane mode -->
+    <LinearLayout
+            android:id="@+id/airplane"
+            style="@style/StatusBarPanelSettingsRow"
+            >
+        <ImageView
+                android:id="@+id/airplane_icon"
+                style="@style/StatusBarPanelSettingsIcon"
+                android:src="@drawable/ic_sysbar_airplane_on"
+                />
+        <TextView
+                android:id="@+id/airplane_label"
+                style="@style/StatusBarPanelSettingsContents"
+                android:text="@string/status_bar_settings_airplane"
+                />
+        <CheckBox
+                android:id="@+id/airplane_checkbox"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_gravity="center_vertical"
+                />
+    </LinearLayout>
+    <View style="@style/StatusBarPanelSettingsPanelSeparator" />
+
+    <!-- Network -->
+    <LinearLayout
+            android:id="@+id/network"
+            style="@style/StatusBarPanelSettingsRow"
+            >
+        <ImageView
+                android:id="@+id/network_icon"
+                style="@style/StatusBarPanelSettingsIcon"
+                android:src="@drawable/ic_sysbar_wifi_on"
+                />
+        <TextView
+                android:id="@+id/network_label"
+                style="@style/StatusBarPanelSettingsContents"
+                />
+        <ImageView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_gravity="top"
+            android:layout_marginTop="16dp"
+            android:layout_marginRight="8dp"
+            android:src="@drawable/ic_notification_open"
+            />
+    </LinearLayout>
+    <View style="@style/StatusBarPanelSettingsPanelSeparator" />
+
+    <!-- Rotation lock -->
+    <LinearLayout
+            android:id="@+id/rotate"
+            style="@style/StatusBarPanelSettingsRow"
+            >
+        <ImageView
+                android:id="@+id/rotate_icon"
+                style="@style/StatusBarPanelSettingsIcon"
+                android:src="@drawable/ic_sysbar_rotate_on"
+                />
+        <TextView
+                android:id="@+id/rotate_label"
+                style="@style/StatusBarPanelSettingsContents"
+                android:text="@string/status_bar_settings_rotation_lock"
+                />
+        <CheckBox
+                android:id="@+id/rotate_checkbox"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_gravity="center_vertical"
+                />
+    </LinearLayout>
+    <View style="@style/StatusBarPanelSettingsPanelSeparator" />
+
+    <!-- Brightness -->
+    <LinearLayout style="@style/StatusBarPanelSettingsRow" >
+        <ImageView
+                android:id="@+id/brightness_icon"
+                style="@style/StatusBarPanelSettingsIcon"
+                android:src="@drawable/ic_sysbar_brightness"
+                />
+    </LinearLayout>
+    <View style="@style/StatusBarPanelSettingsPanelSeparator" />
+
+    <!-- Volume -->
+    <LinearLayout style="@style/StatusBarPanelSettingsRow" >
+        <ImageView
+                android:id="@+id/volume_icon"
+                style="@style/StatusBarPanelSettingsIcon"
+                android:src="@drawable/ic_sysbar_sound_on"
+                />
+    </LinearLayout>
+    <View style="@style/StatusBarPanelSettingsPanelSeparator" />
+
+    <!-- Notifications / Do not disturb -->
+    <LinearLayout
+            android:id="@+id/do_not_disturb"
+            style="@style/StatusBarPanelSettingsRow"
+            >
+        <ImageView
+                android:id="@+id/do_not_disturb_icon"
+                style="@style/StatusBarPanelSettingsIcon"
+                android:src="@drawable/ic_sysbar_gps_on"
+                />
+        <TextView
+                style="@style/StatusBarPanelSettingsContents"
+                android:text="@string/status_bar_settings_notifications"
+                />
+        <CheckBox
+                android:id="@+id/do_not_disturb_checkbox"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_gravity="center_vertical"
+                />
+    </LinearLayout>
+    <View style="@style/StatusBarPanelSettingsPanelSeparator" />
+
+    <!-- Link to settings -->
+    <LinearLayout
+            android:id="@+id/settings"
+            style="@style/StatusBarPanelSettingsRow"
+            >
+
+        <ImageView
+                android:id="@+id/settings"
+                style="@style/StatusBarPanelSettingsIcon"
+                android:src="@drawable/ic_sysbar_quicksettings"
+                />
+        <TextView
+                style="@style/StatusBarPanelSettingsContents"
+                android:text="@string/status_bar_settings_settings_button"
+                />
+        <ImageView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_gravity="top"
+            android:layout_marginTop="16dp"
+            android:layout_marginRight="8dp"
+            android:src="@drawable/ic_notification_open"
+            />
+    </LinearLayout>
+    <View style="@style/StatusBarPanelSettingsPanelSeparator" />
+
+</com.android.systemui.statusbar.tablet.SettingsView>
+
diff --git a/packages/SystemUI/res/layout-xlarge/ticker_compat.xml b/packages/SystemUI/res/layout-xlarge/status_bar_ticker_compat.xml
similarity index 100%
rename from packages/SystemUI/res/layout-xlarge/ticker_compat.xml
rename to packages/SystemUI/res/layout-xlarge/status_bar_ticker_compat.xml
diff --git a/packages/SystemUI/res/layout-xlarge/ticker.xml b/packages/SystemUI/res/layout-xlarge/status_bar_ticker_panel.xml
similarity index 100%
rename from packages/SystemUI/res/layout-xlarge/ticker.xml
rename to packages/SystemUI/res/layout-xlarge/status_bar_ticker_panel.xml
diff --git a/packages/SystemUI/res/layout-xlarge/sysbar_panel_settings.xml b/packages/SystemUI/res/layout-xlarge/sysbar_panel_settings.xml
deleted file mode 100644
index a800afb..0000000
--- a/packages/SystemUI/res/layout-xlarge/sysbar_panel_settings.xml
+++ /dev/null
@@ -1,25 +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.
--->
-
-<com.android.systemui.statusbar.tablet.SettingsPanel
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="200dip"
-    android:background="#ff000000"
-    >
-</com.android.systemui.statusbar.tablet.SettingsPanel>
-
diff --git a/packages/SystemUI/res/layout-xlarge/sysbar_panel_system.xml b/packages/SystemUI/res/layout-xlarge/sysbar_panel_system.xml
deleted file mode 100644
index a1792fd..0000000
--- a/packages/SystemUI/res/layout-xlarge/sysbar_panel_system.xml
+++ /dev/null
@@ -1,213 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/* apps/common/assets/default/default/skins/StatusBar.xml
-**
-** Copyright 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.
-*/
--->
-
-<com.android.systemui.statusbar.tablet.SystemPanel
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_height="wrap_content"
-    android:layout_width="match_parent"
-    android:background="@drawable/sysbar_panel_bg"
-    android:orientation="vertical"
-    android:paddingLeft="70dip"
-    android:paddingRight="120dip"
-    >
-
-    <!-- top row: quick settings buttons -->
-    <LinearLayout
-        android:layout_width="match_parent"
-        android:layout_height="64dip"
-        android:orientation="horizontal"
-        android:gravity="center"
-        >
-        <ImageButton android:id="@+id/brightness"
-            android:layout_width="90dip"
-            android:layout_height="64dip"
-            android:src="@drawable/ic_sysbar_brightness"
-            android:background="@drawable/sysbar_toggle_bg_off"
-            />
-        <ImageButton android:id="@+id/sound"
-            android:layout_width="90dip"
-            android:layout_height="64dip"
-            android:layout_marginLeft="8dip"
-            android:src="@drawable/ic_sysbar_sound_on"
-            android:background="@drawable/sysbar_toggle_bg_off"
-            />
-        <ImageButton android:id="@+id/orientation"
-            android:layout_width="90dip"
-            android:layout_height="64dip"
-            android:layout_marginLeft="8dip"
-            android:src="@drawable/ic_sysbar_rotate_on"
-            android:background="@drawable/sysbar_toggle_bg_off"
-            />
-        <ImageButton android:id="@+id/airplane"
-            android:layout_width="90dip"
-            android:layout_height="64dip"
-            android:layout_marginLeft="8dip"
-            android:src="@drawable/ic_sysbar_airplane_on"
-            android:background="@drawable/sysbar_toggle_bg_off"
-            />
-        <ImageButton android:id="@+id/gps"
-            android:layout_width="90dip"
-            android:layout_height="64dip"
-            android:layout_marginLeft="8dip"
-            android:src="@drawable/ic_sysbar_gps_on"
-            android:background="@drawable/sysbar_toggle_bg_off"
-            />
-        <ImageButton android:id="@+id/bluetooth"
-            android:layout_width="90dip"
-            android:layout_height="64dip"
-            android:layout_marginLeft="8dip"
-            android:src="@drawable/ic_sysbar_bluetooth_on"
-            android:background="@drawable/sysbar_toggle_bg_off"
-            />
-    </LinearLayout>
-
-    <!-- main row: meters, clock -->
-    <RelativeLayout
-        android:padding="8dip"
-        android:layout_width="match_parent"
-        android:layout_height="192dip"
-        >
-        <RelativeLayout
-            android:layout_width="256dip"
-            android:layout_height="192dip"
-            android:layout_alignParentLeft="true"
-            android:layout_marginLeft="48dip"
-            >
-            <ImageView android:id="@+id/battery_meter"
-                android:layout_width="256dip"
-                android:layout_height="wrap_content"
-                android:layout_alignParentBottom="true"
-                android:scaleType="centerCrop"
-                />
-            <TextView android:id="@+id/battery_info"
-                style="@style/TextAppearance.StatusBar.SystemPanel"
-                android:layout_width="match_parent"
-                android:layout_height="24dip"
-                android:gravity="center"
-                android:layout_above="@id/battery_meter"
-                />
-        </RelativeLayout>
-
-        <com.android.systemui.statusbar.policy.Clock
-            style="@style/TextAppearance.StatusBar.SystemPanel"
-            android:id="@+id/clock"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:singleLine="true"
-            android:textSize="50sp"
-            android:textStyle="normal"
-            android:textColor="#FFFFFFFF"
-            android:layout_centerHorizontal="true"
-            android:layout_alignParentBottom="true"
-            />
-
-        <RelativeLayout
-            android:layout_width="256dip"
-            android:layout_height="192dip"
-            android:layout_alignParentRight="true"
-            android:layout_marginRight="48dip"
-            >
-            <ImageView android:id="@+id/signal_meter"
-                android:layout_width="256dip"
-                android:layout_height="wrap_content"
-                android:layout_alignParentBottom="true"
-                android:scaleType="centerCrop"
-                />
-
-            <TextView android:id="@+id/signal_info"
-                style="@style/TextAppearance.StatusBar.SystemPanel"
-                android:layout_width="match_parent"
-                android:layout_height="24dip"
-                android:gravity="center"
-                android:layout_above="@id/signal_meter"
-                />
-        </RelativeLayout>
-
-        <ImageView
-            android:layout_height="wrap_content"
-            android:layout_width="wrap_content"
-            android:layout_alignParentLeft="true"
-            android:layout_alignParentBottom="true"
-            android:layout_marginBottom="8dip"
-            android:layout_marginLeft="8dip"
-            android:src="@drawable/ic_sysbar_battery_on"
-            />
-        <ImageView
-            android:layout_height="wrap_content"
-            android:layout_width="wrap_content"
-            android:layout_alignParentRight="true"
-            android:layout_alignParentBottom="true"
-            android:layout_marginBottom="8dip"
-            android:layout_marginRight="8dip"
-            android:src="@drawable/ic_sysbar_wifi_on"
-            />
-    </RelativeLayout>
-
-    <!-- bottom row: transient indicators, settings button -->
-    <View
-        android:layout_width="match_parent"
-        android:layout_height="1sp"
-        android:background="@android:drawable/divider_horizontal_dark"
-        />
-    <RelativeLayout
-        android:layout_width="match_parent"
-        android:layout_height="48dip"
-        >
-        <TextView android:id="@+id/settings_button"
-            style="@style/TextAppearance.StatusBar.TextButton"
-            android:layout_width="wrap_content"
-            android:layout_height="match_parent"
-            android:layout_alignParentRight="true"
-            android:paddingRight="32dip"
-            android:paddingLeft="32dip"
-            android:textSize="20sp"
-            android:gravity="center"
-            android:text="@string/system_panel_settings_button"
-            />
-        <View
-            android:id="@+id/settings_left_divider"
-            android:layout_height="match_parent"
-            android:layout_width="1sp"
-            android:layout_toLeftOf="@id/settings_button"
-            android:background="@*android:drawable/divider_vertical_dark"
-            />
-        <LinearLayout
-            android:layout_width="match_parent"
-            android:layout_height="match_parent"
-            android:layout_alignParentLeft="true"
-            android:layout_toLeftOf="@id/settings_left_divider"
-            android:orientation="horizontal"
-            android:gravity="left|center_vertical"
-            >
-            <!-- TODO: alarm -->
-            <!-- TODO: sync -->
-            <com.android.systemui.statusbar.policy.DateView
-                android:id="@+id/date"
-                style="@style/TextAppearance.StatusBar.SystemPanel"
-                android:layout_width="wrap_content"
-                android:layout_height="match_parent"
-                android:singleLine="true"
-                android:gravity="center"
-                />
-        </LinearLayout>
-
-
-    </RelativeLayout>
-</com.android.systemui.statusbar.tablet.SystemPanel>
diff --git a/packages/SystemUI/res/layout-xlarge/ticker_icon.xml b/packages/SystemUI/res/layout-xlarge/ticker_icon.xml
deleted file mode 100644
index 9efa987..0000000
--- a/packages/SystemUI/res/layout-xlarge/ticker_icon.xml
+++ /dev/null
@@ -1,25 +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.
--->
-
-<ImageView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="30dp"
-    android:layout_height="30dp"
-    android:layout_gravity="center"
-    android:layout_marginLeft="6dp"
-    />
-
diff --git a/packages/SystemUI/res/layout/status_bar_latest_event.xml b/packages/SystemUI/res/layout/status_bar_notification_row.xml
similarity index 100%
rename from packages/SystemUI/res/layout/status_bar_latest_event.xml
rename to packages/SystemUI/res/layout/status_bar_notification_row.xml
diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml
index d94e58a..1a32aa7 100644
--- a/packages/SystemUI/res/values-ar/strings.xml
+++ b/packages/SystemUI/res/values-ar/strings.xml
@@ -35,7 +35,7 @@
     <!-- no translation found for invalid_charger (4549105996740522523) -->
     <skip />
     <string name="battery_low_why" msgid="7279169609518386372">"استخدام البطارية"</string>
-    <!-- no translation found for system_panel_settings_button (7832600575390861653) -->
+    <!-- no translation found for status_bar_settings_settings_button (7832600575390861653) -->
     <skip />
     <string name="recent_tasks_title" msgid="3691764623638127888">"حديثة"</string>
     <!-- no translation found for recent_tasks_empty (1905484479067697884) -->
diff --git a/packages/SystemUI/res/values-bg/strings.xml b/packages/SystemUI/res/values-bg/strings.xml
index 975c207..a9c8ba0 100644
--- a/packages/SystemUI/res/values-bg/strings.xml
+++ b/packages/SystemUI/res/values-bg/strings.xml
@@ -35,7 +35,7 @@
     <!-- no translation found for invalid_charger (4549105996740522523) -->
     <skip />
     <string name="battery_low_why" msgid="7279169609518386372">"Използване на батерията"</string>
-    <!-- no translation found for system_panel_settings_button (7832600575390861653) -->
+    <!-- no translation found for status_bar_settings_settings_button (7832600575390861653) -->
     <skip />
     <string name="recent_tasks_title" msgid="3691764623638127888">"Скорошни"</string>
     <!-- no translation found for recent_tasks_empty (1905484479067697884) -->
diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml
index 611bec7..eea01e1 100644
--- a/packages/SystemUI/res/values-ca/strings.xml
+++ b/packages/SystemUI/res/values-ca/strings.xml
@@ -35,7 +35,7 @@
     <!-- no translation found for invalid_charger (4549105996740522523) -->
     <skip />
     <string name="battery_low_why" msgid="7279169609518386372">"Ús de la bateria"</string>
-    <!-- no translation found for system_panel_settings_button (7832600575390861653) -->
+    <!-- no translation found for status_bar_settings_settings_button (7832600575390861653) -->
     <skip />
     <string name="recent_tasks_title" msgid="3691764623638127888">"Recents"</string>
     <!-- no translation found for recent_tasks_empty (1905484479067697884) -->
diff --git a/packages/SystemUI/res/values-cs-xlarge/strings.xml b/packages/SystemUI/res/values-cs-xlarge/strings.xml
index a0301bb..d432a8b 100644
--- a/packages/SystemUI/res/values-cs-xlarge/strings.xml
+++ b/packages/SystemUI/res/values-cs-xlarge/strings.xml
@@ -21,11 +21,11 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <!-- no translation found for status_bar_clear_all_button (4722520806446512408) -->
     <skip />
-    <string name="system_panel_signal_meter_disconnected" msgid="2123001074951934237">"žádné připojení k internetu"</string>
-    <!-- no translation found for system_panel_signal_meter_wifi_ssid_format (6261810256542749384) -->
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="2123001074951934237">"žádné připojení k internetu"</string>
+    <!-- no translation found for status_bar_settings_signal_meter_wifi_ssid_format (6261810256542749384) -->
     <skip />
-    <string name="system_panel_signal_meter_wifi_nossid" msgid="160846667119240422">"Wi-Fi: připojeno"</string>
-    <string name="system_panel_signal_meter_wifi_connecting" msgid="4087640898624652649">"Wi-Fi: připojování"</string>
-    <string name="system_panel_signal_meter_data_connected" msgid="2171100321540926054">"Mob. data: připojeno"</string>
-    <string name="system_panel_signal_meter_data_connecting" msgid="7183001278053801143">"Mob. data: připojování"</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="160846667119240422">"Wi-Fi: připojeno"</string>
+    <string name="status_bar_settings_signal_meter_wifi_connecting" msgid="4087640898624652649">"Wi-Fi: připojování"</string>
+    <string name="status_bar_settings_signal_meter_data_connected" msgid="2171100321540926054">"Mob. data: připojeno"</string>
+    <string name="status_bar_settings_signal_meter_data_connecting" msgid="7183001278053801143">"Mob. data: připojování"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-cs/strings.xml b/packages/SystemUI/res/values-cs/strings.xml
index 4e7f5cf..5eac747 100644
--- a/packages/SystemUI/res/values-cs/strings.xml
+++ b/packages/SystemUI/res/values-cs/strings.xml
@@ -35,7 +35,7 @@
     <!-- no translation found for invalid_charger (4549105996740522523) -->
     <skip />
     <string name="battery_low_why" msgid="7279169609518386372">"Využití baterie"</string>
-    <!-- no translation found for system_panel_settings_button (7832600575390861653) -->
+    <!-- no translation found for status_bar_settings_settings_button (7832600575390861653) -->
     <skip />
     <string name="recent_tasks_title" msgid="3691764623638127888">"Nejnovější"</string>
     <!-- no translation found for recent_tasks_empty (1905484479067697884) -->
diff --git a/packages/SystemUI/res/values-da-xlarge/strings.xml b/packages/SystemUI/res/values-da-xlarge/strings.xml
index d75b5a51..9d587a8 100644
--- a/packages/SystemUI/res/values-da-xlarge/strings.xml
+++ b/packages/SystemUI/res/values-da-xlarge/strings.xml
@@ -21,11 +21,11 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <!-- no translation found for status_bar_clear_all_button (4722520806446512408) -->
     <skip />
-    <string name="system_panel_signal_meter_disconnected" msgid="2123001074951934237">"ingen forbindelse"</string>
-    <!-- no translation found for system_panel_signal_meter_wifi_ssid_format (6261810256542749384) -->
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="2123001074951934237">"ingen forbindelse"</string>
+    <!-- no translation found for status_bar_settings_signal_meter_wifi_ssid_format (6261810256542749384) -->
     <skip />
-    <string name="system_panel_signal_meter_wifi_nossid" msgid="160846667119240422">"Wi-Fi forbundet"</string>
-    <string name="system_panel_signal_meter_wifi_connecting" msgid="4087640898624652649">"Wi-Fi: forbinder..."</string>
-    <string name="system_panel_signal_meter_data_connected" msgid="2171100321540926054">"Mobildata tilsluttet"</string>
-    <string name="system_panel_signal_meter_data_connecting" msgid="7183001278053801143">"Mobildata tilsluttes"</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="160846667119240422">"Wi-Fi forbundet"</string>
+    <string name="status_bar_settings_signal_meter_wifi_connecting" msgid="4087640898624652649">"Wi-Fi: forbinder..."</string>
+    <string name="status_bar_settings_signal_meter_data_connected" msgid="2171100321540926054">"Mobildata tilsluttet"</string>
+    <string name="status_bar_settings_signal_meter_data_connecting" msgid="7183001278053801143">"Mobildata tilsluttes"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml
index aad6d71..7b49070 100644
--- a/packages/SystemUI/res/values-da/strings.xml
+++ b/packages/SystemUI/res/values-da/strings.xml
@@ -35,7 +35,7 @@
     <!-- no translation found for invalid_charger (4549105996740522523) -->
     <skip />
     <string name="battery_low_why" msgid="7279169609518386372">"Batteriforbrug"</string>
-    <!-- no translation found for system_panel_settings_button (7832600575390861653) -->
+    <!-- no translation found for status_bar_settings_settings_button (7832600575390861653) -->
     <skip />
     <string name="recent_tasks_title" msgid="3691764623638127888">"Seneste"</string>
     <!-- no translation found for recent_tasks_empty (1905484479067697884) -->
diff --git a/packages/SystemUI/res/values-de-xlarge/strings.xml b/packages/SystemUI/res/values-de-xlarge/strings.xml
index eb402da..fd1a976 100644
--- a/packages/SystemUI/res/values-de-xlarge/strings.xml
+++ b/packages/SystemUI/res/values-de-xlarge/strings.xml
@@ -21,11 +21,11 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <!-- no translation found for status_bar_clear_all_button (4722520806446512408) -->
     <skip />
-    <string name="system_panel_signal_meter_disconnected" msgid="2123001074951934237">"Keine Verbindung"</string>
-    <!-- no translation found for system_panel_signal_meter_wifi_ssid_format (6261810256542749384) -->
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="2123001074951934237">"Keine Verbindung"</string>
+    <!-- no translation found for status_bar_settings_signal_meter_wifi_ssid_format (6261810256542749384) -->
     <skip />
-    <string name="system_panel_signal_meter_wifi_nossid" msgid="160846667119240422">"WLAN: verbunden"</string>
-    <string name="system_panel_signal_meter_wifi_connecting" msgid="4087640898624652649">"WLAN: verbindet..."</string>
-    <string name="system_panel_signal_meter_data_connected" msgid="2171100321540926054">"Mobile Daten: aktiv"</string>
-    <string name="system_panel_signal_meter_data_connecting" msgid="7183001278053801143">"Mobile Daten: verbindet"</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="160846667119240422">"WLAN: verbunden"</string>
+    <string name="status_bar_settings_signal_meter_wifi_connecting" msgid="4087640898624652649">"WLAN: verbindet..."</string>
+    <string name="status_bar_settings_signal_meter_data_connected" msgid="2171100321540926054">"Mobile Daten: aktiv"</string>
+    <string name="status_bar_settings_signal_meter_data_connecting" msgid="7183001278053801143">"Mobile Daten: verbindet"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml
index 1674c22..1535e78 100644
--- a/packages/SystemUI/res/values-de/strings.xml
+++ b/packages/SystemUI/res/values-de/strings.xml
@@ -35,7 +35,7 @@
     <!-- no translation found for invalid_charger (4549105996740522523) -->
     <skip />
     <string name="battery_low_why" msgid="7279169609518386372">"Akkuverbrauch"</string>
-    <!-- no translation found for system_panel_settings_button (7832600575390861653) -->
+    <!-- no translation found for status_bar_settings_settings_button (7832600575390861653) -->
     <skip />
     <string name="recent_tasks_title" msgid="3691764623638127888">"Zuletzt verwendet"</string>
     <!-- no translation found for recent_tasks_empty (1905484479067697884) -->
diff --git a/packages/SystemUI/res/values-el-xlarge/strings.xml b/packages/SystemUI/res/values-el-xlarge/strings.xml
index 63e59aa..c52d6daf 100644
--- a/packages/SystemUI/res/values-el-xlarge/strings.xml
+++ b/packages/SystemUI/res/values-el-xlarge/strings.xml
@@ -21,11 +21,11 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <!-- no translation found for status_bar_clear_all_button (4722520806446512408) -->
     <skip />
-    <string name="system_panel_signal_meter_disconnected" msgid="2123001074951934237">"χωρίς σύνδ. σε Διαδ."</string>
-    <!-- no translation found for system_panel_signal_meter_wifi_ssid_format (6261810256542749384) -->
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="2123001074951934237">"χωρίς σύνδ. σε Διαδ."</string>
+    <!-- no translation found for status_bar_settings_signal_meter_wifi_ssid_format (6261810256542749384) -->
     <skip />
-    <string name="system_panel_signal_meter_wifi_nossid" msgid="160846667119240422">"Wi-Fi: συνδέθηκε"</string>
-    <string name="system_panel_signal_meter_wifi_connecting" msgid="4087640898624652649">"Wi-Fi: σύνδεση..."</string>
-    <string name="system_panel_signal_meter_data_connected" msgid="2171100321540926054">"Δεδ. κιν.: συνδέθηκε"</string>
-    <string name="system_panel_signal_meter_data_connecting" msgid="7183001278053801143">"Δεδ.κιν.: σύνδεση..."</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="160846667119240422">"Wi-Fi: συνδέθηκε"</string>
+    <string name="status_bar_settings_signal_meter_wifi_connecting" msgid="4087640898624652649">"Wi-Fi: σύνδεση..."</string>
+    <string name="status_bar_settings_signal_meter_data_connected" msgid="2171100321540926054">"Δεδ. κιν.: συνδέθηκε"</string>
+    <string name="status_bar_settings_signal_meter_data_connecting" msgid="7183001278053801143">"Δεδ.κιν.: σύνδεση..."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml
index bb7fab1..369b16f 100644
--- a/packages/SystemUI/res/values-el/strings.xml
+++ b/packages/SystemUI/res/values-el/strings.xml
@@ -35,7 +35,7 @@
     <!-- no translation found for invalid_charger (4549105996740522523) -->
     <skip />
     <string name="battery_low_why" msgid="7279169609518386372">"Χρήση μπαταρίας"</string>
-    <!-- no translation found for system_panel_settings_button (7832600575390861653) -->
+    <!-- no translation found for status_bar_settings_settings_button (7832600575390861653) -->
     <skip />
     <string name="recent_tasks_title" msgid="3691764623638127888">"Πρόσφατα"</string>
     <!-- no translation found for recent_tasks_empty (1905484479067697884) -->
diff --git a/packages/SystemUI/res/values-en-rGB/strings.xml b/packages/SystemUI/res/values-en-rGB/strings.xml
index 2939dba..db4f9ba 100644
--- a/packages/SystemUI/res/values-en-rGB/strings.xml
+++ b/packages/SystemUI/res/values-en-rGB/strings.xml
@@ -35,7 +35,7 @@
     <!-- no translation found for invalid_charger (4549105996740522523) -->
     <skip />
     <string name="battery_low_why" msgid="7279169609518386372">"Battery use"</string>
-    <!-- no translation found for system_panel_settings_button (7832600575390861653) -->
+    <!-- no translation found for status_bar_settings_settings_button (7832600575390861653) -->
     <skip />
     <string name="recent_tasks_title" msgid="3691764623638127888">"Recent"</string>
     <!-- no translation found for recent_tasks_empty (1905484479067697884) -->
diff --git a/packages/SystemUI/res/values-es-rUS-xlarge/strings.xml b/packages/SystemUI/res/values-es-rUS-xlarge/strings.xml
index b4f8f27..6530edf 100644
--- a/packages/SystemUI/res/values-es-rUS-xlarge/strings.xml
+++ b/packages/SystemUI/res/values-es-rUS-xlarge/strings.xml
@@ -21,11 +21,11 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <!-- no translation found for status_bar_clear_all_button (4722520806446512408) -->
     <skip />
-    <string name="system_panel_signal_meter_disconnected" msgid="2123001074951934237">"no hay conexión a Internet"</string>
-    <!-- no translation found for system_panel_signal_meter_wifi_ssid_format (6261810256542749384) -->
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="2123001074951934237">"no hay conexión a Internet"</string>
+    <!-- no translation found for status_bar_settings_signal_meter_wifi_ssid_format (6261810256542749384) -->
     <skip />
-    <string name="system_panel_signal_meter_wifi_nossid" msgid="160846667119240422">"Wi-Fi: conectado"</string>
-    <string name="system_panel_signal_meter_wifi_connecting" msgid="4087640898624652649">"Wi-Fi: conectando…"</string>
-    <string name="system_panel_signal_meter_data_connected" msgid="2171100321540926054">"Datos para cel: conectado"</string>
-    <string name="system_panel_signal_meter_data_connecting" msgid="7183001278053801143">"Datos para cel: conectando"</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="160846667119240422">"Wi-Fi: conectado"</string>
+    <string name="status_bar_settings_signal_meter_wifi_connecting" msgid="4087640898624652649">"Wi-Fi: conectando…"</string>
+    <string name="status_bar_settings_signal_meter_data_connected" msgid="2171100321540926054">"Datos para cel: conectado"</string>
+    <string name="status_bar_settings_signal_meter_data_connecting" msgid="7183001278053801143">"Datos para cel: conectando"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml
index c18de7d..2312be7 100644
--- a/packages/SystemUI/res/values-es-rUS/strings.xml
+++ b/packages/SystemUI/res/values-es-rUS/strings.xml
@@ -35,7 +35,7 @@
     <!-- no translation found for invalid_charger (4549105996740522523) -->
     <skip />
     <string name="battery_low_why" msgid="7279169609518386372">"Uso de la batería"</string>
-    <string name="system_panel_settings_button" msgid="7832600575390861653">"Configuración"</string>
+    <string name="status_bar_settings_settings_button" msgid="7832600575390861653">"Configuración"</string>
     <string name="recent_tasks_title" msgid="3691764623638127888">"Reciente"</string>
     <!-- no translation found for recent_tasks_empty (1905484479067697884) -->
     <skip />
diff --git a/packages/SystemUI/res/values-es-xlarge/strings.xml b/packages/SystemUI/res/values-es-xlarge/strings.xml
index 2045aa8..adcda91 100644
--- a/packages/SystemUI/res/values-es-xlarge/strings.xml
+++ b/packages/SystemUI/res/values-es-xlarge/strings.xml
@@ -21,11 +21,11 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <!-- no translation found for status_bar_clear_all_button (4722520806446512408) -->
     <skip />
-    <string name="system_panel_signal_meter_disconnected" msgid="2123001074951934237">"sin conexión"</string>
-    <!-- no translation found for system_panel_signal_meter_wifi_ssid_format (6261810256542749384) -->
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="2123001074951934237">"sin conexión"</string>
+    <!-- no translation found for status_bar_settings_signal_meter_wifi_ssid_format (6261810256542749384) -->
     <skip />
-    <string name="system_panel_signal_meter_wifi_nossid" msgid="160846667119240422">"WiFi: conectado"</string>
-    <string name="system_panel_signal_meter_wifi_connecting" msgid="4087640898624652649">"WiFi: conectando..."</string>
-    <string name="system_panel_signal_meter_data_connected" msgid="2171100321540926054">"Datos móviles: conectados"</string>
-    <string name="system_panel_signal_meter_data_connecting" msgid="7183001278053801143">"Datos móviles: conectando..."</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="160846667119240422">"WiFi: conectado"</string>
+    <string name="status_bar_settings_signal_meter_wifi_connecting" msgid="4087640898624652649">"WiFi: conectando..."</string>
+    <string name="status_bar_settings_signal_meter_data_connected" msgid="2171100321540926054">"Datos móviles: conectados"</string>
+    <string name="status_bar_settings_signal_meter_data_connecting" msgid="7183001278053801143">"Datos móviles: conectando..."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml
index 84b7e32..64b60b4 100644
--- a/packages/SystemUI/res/values-es/strings.xml
+++ b/packages/SystemUI/res/values-es/strings.xml
@@ -35,7 +35,7 @@
     <!-- no translation found for invalid_charger (4549105996740522523) -->
     <skip />
     <string name="battery_low_why" msgid="7279169609518386372">"Uso de la batería"</string>
-    <!-- no translation found for system_panel_settings_button (7832600575390861653) -->
+    <!-- no translation found for status_bar_settings_settings_button (7832600575390861653) -->
     <skip />
     <string name="recent_tasks_title" msgid="3691764623638127888">"Reciente"</string>
     <!-- no translation found for recent_tasks_empty (1905484479067697884) -->
diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml
index cc1f215..8e2b348 100644
--- a/packages/SystemUI/res/values-fa/strings.xml
+++ b/packages/SystemUI/res/values-fa/strings.xml
@@ -35,7 +35,7 @@
     <!-- no translation found for invalid_charger (4549105996740522523) -->
     <skip />
     <string name="battery_low_why" msgid="7279169609518386372">"استفاده از باتری"</string>
-    <!-- no translation found for system_panel_settings_button (7832600575390861653) -->
+    <!-- no translation found for status_bar_settings_settings_button (7832600575390861653) -->
     <skip />
     <string name="recent_tasks_title" msgid="3691764623638127888">"اخیر"</string>
     <!-- no translation found for recent_tasks_empty (1905484479067697884) -->
diff --git a/packages/SystemUI/res/values-fi/strings.xml b/packages/SystemUI/res/values-fi/strings.xml
index 59e3af3..8fcc7d6 100644
--- a/packages/SystemUI/res/values-fi/strings.xml
+++ b/packages/SystemUI/res/values-fi/strings.xml
@@ -35,7 +35,7 @@
     <!-- no translation found for invalid_charger (4549105996740522523) -->
     <skip />
     <string name="battery_low_why" msgid="7279169609518386372">"Akun käyttö"</string>
-    <!-- no translation found for system_panel_settings_button (7832600575390861653) -->
+    <!-- no translation found for status_bar_settings_settings_button (7832600575390861653) -->
     <skip />
     <string name="recent_tasks_title" msgid="3691764623638127888">"Viimeisimmät"</string>
     <!-- no translation found for recent_tasks_empty (1905484479067697884) -->
diff --git a/packages/SystemUI/res/values-fr-xlarge/strings.xml b/packages/SystemUI/res/values-fr-xlarge/strings.xml
index 36c6f77..f8036ad 100644
--- a/packages/SystemUI/res/values-fr-xlarge/strings.xml
+++ b/packages/SystemUI/res/values-fr-xlarge/strings.xml
@@ -21,11 +21,11 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <!-- no translation found for status_bar_clear_all_button (4722520806446512408) -->
     <skip />
-    <string name="system_panel_signal_meter_disconnected" msgid="2123001074951934237">"Internet indisponible"</string>
-    <!-- no translation found for system_panel_signal_meter_wifi_ssid_format (6261810256542749384) -->
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="2123001074951934237">"Internet indisponible"</string>
+    <!-- no translation found for status_bar_settings_signal_meter_wifi_ssid_format (6261810256542749384) -->
     <skip />
-    <string name="system_panel_signal_meter_wifi_nossid" msgid="160846667119240422">"Wi-Fi : connecté"</string>
-    <string name="system_panel_signal_meter_wifi_connecting" msgid="4087640898624652649">"Wi-Fi : connexion..."</string>
-    <string name="system_panel_signal_meter_data_connected" msgid="2171100321540926054">"Données mobiles connectées"</string>
-    <string name="system_panel_signal_meter_data_connecting" msgid="7183001278053801143">"Connexion données mobiles..."</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="160846667119240422">"Wi-Fi : connecté"</string>
+    <string name="status_bar_settings_signal_meter_wifi_connecting" msgid="4087640898624652649">"Wi-Fi : connexion..."</string>
+    <string name="status_bar_settings_signal_meter_data_connected" msgid="2171100321540926054">"Données mobiles connectées"</string>
+    <string name="status_bar_settings_signal_meter_data_connecting" msgid="7183001278053801143">"Connexion données mobiles..."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-fr/strings.xml b/packages/SystemUI/res/values-fr/strings.xml
index 914e98e..7df4d74 100644
--- a/packages/SystemUI/res/values-fr/strings.xml
+++ b/packages/SystemUI/res/values-fr/strings.xml
@@ -35,7 +35,7 @@
     <!-- no translation found for invalid_charger (4549105996740522523) -->
     <skip />
     <string name="battery_low_why" msgid="7279169609518386372">"Utilisation de la batterie"</string>
-    <!-- no translation found for system_panel_settings_button (7832600575390861653) -->
+    <!-- no translation found for status_bar_settings_settings_button (7832600575390861653) -->
     <skip />
     <string name="recent_tasks_title" msgid="3691764623638127888">"Récentes"</string>
     <!-- no translation found for recent_tasks_empty (1905484479067697884) -->
diff --git a/packages/SystemUI/res/values-he/strings.xml b/packages/SystemUI/res/values-he/strings.xml
index 67b2c5f..0e3479b 100644
--- a/packages/SystemUI/res/values-he/strings.xml
+++ b/packages/SystemUI/res/values-he/strings.xml
@@ -35,7 +35,7 @@
     <!-- no translation found for invalid_charger (4549105996740522523) -->
     <skip />
     <string name="battery_low_why" msgid="7279169609518386372">"צריכת סוללה"</string>
-    <!-- no translation found for system_panel_settings_button (7832600575390861653) -->
+    <!-- no translation found for status_bar_settings_settings_button (7832600575390861653) -->
     <skip />
     <string name="recent_tasks_title" msgid="3691764623638127888">"אחרונות"</string>
     <!-- no translation found for recent_tasks_empty (1905484479067697884) -->
diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml
index 149a356..0fea021 100644
--- a/packages/SystemUI/res/values-hr/strings.xml
+++ b/packages/SystemUI/res/values-hr/strings.xml
@@ -35,7 +35,7 @@
     <!-- no translation found for invalid_charger (4549105996740522523) -->
     <skip />
     <string name="battery_low_why" msgid="7279169609518386372">"Iskorištenost baterije"</string>
-    <!-- no translation found for system_panel_settings_button (7832600575390861653) -->
+    <!-- no translation found for status_bar_settings_settings_button (7832600575390861653) -->
     <skip />
     <string name="recent_tasks_title" msgid="3691764623638127888">"Nedavni"</string>
     <!-- no translation found for recent_tasks_empty (1905484479067697884) -->
diff --git a/packages/SystemUI/res/values-hu/strings.xml b/packages/SystemUI/res/values-hu/strings.xml
index 9eb50fa..788e96f4 100644
--- a/packages/SystemUI/res/values-hu/strings.xml
+++ b/packages/SystemUI/res/values-hu/strings.xml
@@ -35,7 +35,7 @@
     <!-- no translation found for invalid_charger (4549105996740522523) -->
     <skip />
     <string name="battery_low_why" msgid="7279169609518386372">"Akkumulátorhasználat"</string>
-    <!-- no translation found for system_panel_settings_button (7832600575390861653) -->
+    <!-- no translation found for status_bar_settings_settings_button (7832600575390861653) -->
     <skip />
     <string name="recent_tasks_title" msgid="3691764623638127888">"Legutóbbiak"</string>
     <!-- no translation found for recent_tasks_empty (1905484479067697884) -->
diff --git a/packages/SystemUI/res/values-id/strings.xml b/packages/SystemUI/res/values-id/strings.xml
index 3bf805c..cde575f 100644
--- a/packages/SystemUI/res/values-id/strings.xml
+++ b/packages/SystemUI/res/values-id/strings.xml
@@ -35,7 +35,7 @@
     <!-- no translation found for invalid_charger (4549105996740522523) -->
     <skip />
     <string name="battery_low_why" msgid="7279169609518386372">"Penggunaan baterai"</string>
-    <!-- no translation found for system_panel_settings_button (7832600575390861653) -->
+    <!-- no translation found for status_bar_settings_settings_button (7832600575390861653) -->
     <skip />
     <string name="recent_tasks_title" msgid="3691764623638127888">"Terbaru"</string>
     <!-- no translation found for recent_tasks_empty (1905484479067697884) -->
diff --git a/packages/SystemUI/res/values-it-xlarge/strings.xml b/packages/SystemUI/res/values-it-xlarge/strings.xml
index 512dfa4..3909bd5 100644
--- a/packages/SystemUI/res/values-it-xlarge/strings.xml
+++ b/packages/SystemUI/res/values-it-xlarge/strings.xml
@@ -21,11 +21,11 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <!-- no translation found for status_bar_clear_all_button (4722520806446512408) -->
     <skip />
-    <string name="system_panel_signal_meter_disconnected" msgid="2123001074951934237">"no conness. Internet"</string>
-    <!-- no translation found for system_panel_signal_meter_wifi_ssid_format (6261810256542749384) -->
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="2123001074951934237">"no conness. Internet"</string>
+    <!-- no translation found for status_bar_settings_signal_meter_wifi_ssid_format (6261810256542749384) -->
     <skip />
-    <string name="system_panel_signal_meter_wifi_nossid" msgid="160846667119240422">"Wi-Fi: connesso"</string>
-    <string name="system_panel_signal_meter_wifi_connecting" msgid="4087640898624652649">"Wi-Fi: connessione…"</string>
-    <string name="system_panel_signal_meter_data_connected" msgid="2171100321540926054">"Dati cell.: connesso"</string>
-    <string name="system_panel_signal_meter_data_connecting" msgid="7183001278053801143">"Dati cell.: connessione…"</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="160846667119240422">"Wi-Fi: connesso"</string>
+    <string name="status_bar_settings_signal_meter_wifi_connecting" msgid="4087640898624652649">"Wi-Fi: connessione…"</string>
+    <string name="status_bar_settings_signal_meter_data_connected" msgid="2171100321540926054">"Dati cell.: connesso"</string>
+    <string name="status_bar_settings_signal_meter_data_connecting" msgid="7183001278053801143">"Dati cell.: connessione…"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml
index 849be2e..ee91a16 100644
--- a/packages/SystemUI/res/values-it/strings.xml
+++ b/packages/SystemUI/res/values-it/strings.xml
@@ -35,7 +35,7 @@
     <!-- no translation found for invalid_charger (4549105996740522523) -->
     <skip />
     <string name="battery_low_why" msgid="7279169609518386372">"Utilizzo batteria"</string>
-    <!-- no translation found for system_panel_settings_button (7832600575390861653) -->
+    <!-- no translation found for status_bar_settings_settings_button (7832600575390861653) -->
     <skip />
     <string name="recent_tasks_title" msgid="3691764623638127888">"Recenti"</string>
     <!-- no translation found for recent_tasks_empty (1905484479067697884) -->
diff --git a/packages/SystemUI/res/values-ja-xlarge/strings.xml b/packages/SystemUI/res/values-ja-xlarge/strings.xml
index 01dacb3..df512b7 100644
--- a/packages/SystemUI/res/values-ja-xlarge/strings.xml
+++ b/packages/SystemUI/res/values-ja-xlarge/strings.xml
@@ -21,11 +21,11 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <!-- no translation found for status_bar_clear_all_button (4722520806446512408) -->
     <skip />
-    <string name="system_panel_signal_meter_disconnected" msgid="2123001074951934237">"インターネット接続なし"</string>
-    <!-- no translation found for system_panel_signal_meter_wifi_ssid_format (6261810256542749384) -->
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="2123001074951934237">"インターネット接続なし"</string>
+    <!-- no translation found for status_bar_settings_signal_meter_wifi_ssid_format (6261810256542749384) -->
     <skip />
-    <string name="system_panel_signal_meter_wifi_nossid" msgid="160846667119240422">"Wi-Fi: 接続されました"</string>
-    <string name="system_panel_signal_meter_wifi_connecting" msgid="4087640898624652649">"Wi-Fi: 接続中..."</string>
-    <string name="system_panel_signal_meter_data_connected" msgid="2171100321540926054">"データ通信: 接続されました"</string>
-    <string name="system_panel_signal_meter_data_connecting" msgid="7183001278053801143">"データ通信: 接続中..."</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="160846667119240422">"Wi-Fi: 接続されました"</string>
+    <string name="status_bar_settings_signal_meter_wifi_connecting" msgid="4087640898624652649">"Wi-Fi: 接続中..."</string>
+    <string name="status_bar_settings_signal_meter_data_connected" msgid="2171100321540926054">"データ通信: 接続されました"</string>
+    <string name="status_bar_settings_signal_meter_data_connecting" msgid="7183001278053801143">"データ通信: 接続中..."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-ja/strings.xml b/packages/SystemUI/res/values-ja/strings.xml
index f787541..817f656 100644
--- a/packages/SystemUI/res/values-ja/strings.xml
+++ b/packages/SystemUI/res/values-ja/strings.xml
@@ -35,7 +35,7 @@
     <!-- no translation found for invalid_charger (4549105996740522523) -->
     <skip />
     <string name="battery_low_why" msgid="7279169609518386372">"電池使用量"</string>
-    <!-- no translation found for system_panel_settings_button (7832600575390861653) -->
+    <!-- no translation found for status_bar_settings_settings_button (7832600575390861653) -->
     <skip />
     <string name="recent_tasks_title" msgid="3691764623638127888">"新着"</string>
     <!-- no translation found for recent_tasks_empty (1905484479067697884) -->
diff --git a/packages/SystemUI/res/values-ko-xlarge/strings.xml b/packages/SystemUI/res/values-ko-xlarge/strings.xml
index a26940a..42f798c 100644
--- a/packages/SystemUI/res/values-ko-xlarge/strings.xml
+++ b/packages/SystemUI/res/values-ko-xlarge/strings.xml
@@ -21,11 +21,11 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <!-- no translation found for status_bar_clear_all_button (4722520806446512408) -->
     <skip />
-    <string name="system_panel_signal_meter_disconnected" msgid="2123001074951934237">"인터넷에 연결되지 않음"</string>
-    <!-- no translation found for system_panel_signal_meter_wifi_ssid_format (6261810256542749384) -->
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="2123001074951934237">"인터넷에 연결되지 않음"</string>
+    <!-- no translation found for status_bar_settings_signal_meter_wifi_ssid_format (6261810256542749384) -->
     <skip />
-    <string name="system_panel_signal_meter_wifi_nossid" msgid="160846667119240422">"Wi-Fi: 연결됨"</string>
-    <string name="system_panel_signal_meter_wifi_connecting" msgid="4087640898624652649">"Wi-Fi: 연결 중…"</string>
-    <string name="system_panel_signal_meter_data_connected" msgid="2171100321540926054">"모바일 데이터: 연결됨"</string>
-    <string name="system_panel_signal_meter_data_connecting" msgid="7183001278053801143">"모바일 데이터: 연결 중…"</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="160846667119240422">"Wi-Fi: 연결됨"</string>
+    <string name="status_bar_settings_signal_meter_wifi_connecting" msgid="4087640898624652649">"Wi-Fi: 연결 중…"</string>
+    <string name="status_bar_settings_signal_meter_data_connected" msgid="2171100321540926054">"모바일 데이터: 연결됨"</string>
+    <string name="status_bar_settings_signal_meter_data_connecting" msgid="7183001278053801143">"모바일 데이터: 연결 중…"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml
index ff82d99..be94258 100644
--- a/packages/SystemUI/res/values-ko/strings.xml
+++ b/packages/SystemUI/res/values-ko/strings.xml
@@ -35,7 +35,7 @@
     <!-- no translation found for invalid_charger (4549105996740522523) -->
     <skip />
     <string name="battery_low_why" msgid="7279169609518386372">"배터리 사용량"</string>
-    <!-- no translation found for system_panel_settings_button (7832600575390861653) -->
+    <!-- no translation found for status_bar_settings_settings_button (7832600575390861653) -->
     <skip />
     <string name="recent_tasks_title" msgid="3691764623638127888">"최근 사용한 앱"</string>
     <!-- no translation found for recent_tasks_empty (1905484479067697884) -->
diff --git a/packages/SystemUI/res/values-lt/strings.xml b/packages/SystemUI/res/values-lt/strings.xml
index c87f312..ccfc800 100644
--- a/packages/SystemUI/res/values-lt/strings.xml
+++ b/packages/SystemUI/res/values-lt/strings.xml
@@ -35,7 +35,7 @@
     <!-- no translation found for invalid_charger (4549105996740522523) -->
     <skip />
     <string name="battery_low_why" msgid="7279169609518386372">"Akumuliatoriaus naudojimas"</string>
-    <!-- no translation found for system_panel_settings_button (7832600575390861653) -->
+    <!-- no translation found for status_bar_settings_settings_button (7832600575390861653) -->
     <skip />
     <string name="recent_tasks_title" msgid="3691764623638127888">"Naujos"</string>
     <!-- no translation found for recent_tasks_empty (1905484479067697884) -->
diff --git a/packages/SystemUI/res/values-lv/strings.xml b/packages/SystemUI/res/values-lv/strings.xml
index ac0715e..dd6cdcf 100644
--- a/packages/SystemUI/res/values-lv/strings.xml
+++ b/packages/SystemUI/res/values-lv/strings.xml
@@ -35,7 +35,7 @@
     <!-- no translation found for invalid_charger (4549105996740522523) -->
     <skip />
     <string name="battery_low_why" msgid="7279169609518386372">"Akumulatora lietojums"</string>
-    <!-- no translation found for system_panel_settings_button (7832600575390861653) -->
+    <!-- no translation found for status_bar_settings_settings_button (7832600575390861653) -->
     <skip />
     <string name="recent_tasks_title" msgid="3691764623638127888">"Nesens"</string>
     <!-- no translation found for recent_tasks_empty (1905484479067697884) -->
diff --git a/packages/SystemUI/res/values-nb-xlarge/strings.xml b/packages/SystemUI/res/values-nb-xlarge/strings.xml
index 9a95faf..b07d70c 100644
--- a/packages/SystemUI/res/values-nb-xlarge/strings.xml
+++ b/packages/SystemUI/res/values-nb-xlarge/strings.xml
@@ -21,11 +21,11 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <!-- no translation found for status_bar_clear_all_button (4722520806446512408) -->
     <skip />
-    <string name="system_panel_signal_meter_disconnected" msgid="2123001074951934237">"ingen Int.-tilkobl."</string>
-    <!-- no translation found for system_panel_signal_meter_wifi_ssid_format (6261810256542749384) -->
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="2123001074951934237">"ingen Int.-tilkobl."</string>
+    <!-- no translation found for status_bar_settings_signal_meter_wifi_ssid_format (6261810256542749384) -->
     <skip />
-    <string name="system_panel_signal_meter_wifi_nossid" msgid="160846667119240422">"Wi-Fi: tilkoblet"</string>
-    <string name="system_panel_signal_meter_wifi_connecting" msgid="4087640898624652649">"Wi-Fi: kobler til"</string>
-    <string name="system_panel_signal_meter_data_connected" msgid="2171100321540926054">"Mob.data: tilkoblet"</string>
-    <string name="system_panel_signal_meter_data_connecting" msgid="7183001278053801143">"Mob.data: kobler til"</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="160846667119240422">"Wi-Fi: tilkoblet"</string>
+    <string name="status_bar_settings_signal_meter_wifi_connecting" msgid="4087640898624652649">"Wi-Fi: kobler til"</string>
+    <string name="status_bar_settings_signal_meter_data_connected" msgid="2171100321540926054">"Mob.data: tilkoblet"</string>
+    <string name="status_bar_settings_signal_meter_data_connecting" msgid="7183001278053801143">"Mob.data: kobler til"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml
index aefd2ec..5da4f01 100644
--- a/packages/SystemUI/res/values-nb/strings.xml
+++ b/packages/SystemUI/res/values-nb/strings.xml
@@ -35,7 +35,7 @@
     <!-- no translation found for invalid_charger (4549105996740522523) -->
     <skip />
     <string name="battery_low_why" msgid="7279169609518386372">"Batteribruk"</string>
-    <!-- no translation found for system_panel_settings_button (7832600575390861653) -->
+    <!-- no translation found for status_bar_settings_settings_button (7832600575390861653) -->
     <skip />
     <string name="recent_tasks_title" msgid="3691764623638127888">"Nylig"</string>
     <!-- no translation found for recent_tasks_empty (1905484479067697884) -->
diff --git a/packages/SystemUI/res/values-nl-xlarge/strings.xml b/packages/SystemUI/res/values-nl-xlarge/strings.xml
index 8ab6234..6298908 100644
--- a/packages/SystemUI/res/values-nl-xlarge/strings.xml
+++ b/packages/SystemUI/res/values-nl-xlarge/strings.xml
@@ -21,11 +21,11 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <!-- no translation found for status_bar_clear_all_button (4722520806446512408) -->
     <skip />
-    <string name="system_panel_signal_meter_disconnected" msgid="2123001074951934237">"geen internet"</string>
-    <!-- no translation found for system_panel_signal_meter_wifi_ssid_format (6261810256542749384) -->
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="2123001074951934237">"geen internet"</string>
+    <!-- no translation found for status_bar_settings_signal_meter_wifi_ssid_format (6261810256542749384) -->
     <skip />
-    <string name="system_panel_signal_meter_wifi_nossid" msgid="160846667119240422">"Wi-Fi: verbonden"</string>
-    <string name="system_panel_signal_meter_wifi_connecting" msgid="4087640898624652649">"Wi-Fi: verbinden…"</string>
-    <string name="system_panel_signal_meter_data_connected" msgid="2171100321540926054">"Mobiel: verbonden"</string>
-    <string name="system_panel_signal_meter_data_connecting" msgid="7183001278053801143">"Mobiel: verbinden..."</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="160846667119240422">"Wi-Fi: verbonden"</string>
+    <string name="status_bar_settings_signal_meter_wifi_connecting" msgid="4087640898624652649">"Wi-Fi: verbinden…"</string>
+    <string name="status_bar_settings_signal_meter_data_connected" msgid="2171100321540926054">"Mobiel: verbonden"</string>
+    <string name="status_bar_settings_signal_meter_data_connecting" msgid="7183001278053801143">"Mobiel: verbinden..."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml
index e7fd55b..3492652 100644
--- a/packages/SystemUI/res/values-nl/strings.xml
+++ b/packages/SystemUI/res/values-nl/strings.xml
@@ -35,7 +35,7 @@
     <!-- no translation found for invalid_charger (4549105996740522523) -->
     <skip />
     <string name="battery_low_why" msgid="7279169609518386372">"Accugebruik"</string>
-    <!-- no translation found for system_panel_settings_button (7832600575390861653) -->
+    <!-- no translation found for status_bar_settings_settings_button (7832600575390861653) -->
     <skip />
     <string name="recent_tasks_title" msgid="3691764623638127888">"Recent"</string>
     <!-- no translation found for recent_tasks_empty (1905484479067697884) -->
diff --git a/packages/SystemUI/res/values-pl-xlarge/strings.xml b/packages/SystemUI/res/values-pl-xlarge/strings.xml
index a11754b..e2cefc6 100644
--- a/packages/SystemUI/res/values-pl-xlarge/strings.xml
+++ b/packages/SystemUI/res/values-pl-xlarge/strings.xml
@@ -21,11 +21,11 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <!-- no translation found for status_bar_clear_all_button (4722520806446512408) -->
     <skip />
-    <string name="system_panel_signal_meter_disconnected" msgid="2123001074951934237">"brak połączenia internetowego"</string>
-    <!-- no translation found for system_panel_signal_meter_wifi_ssid_format (6261810256542749384) -->
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="2123001074951934237">"brak połączenia internetowego"</string>
+    <!-- no translation found for status_bar_settings_signal_meter_wifi_ssid_format (6261810256542749384) -->
     <skip />
-    <string name="system_panel_signal_meter_wifi_nossid" msgid="160846667119240422">"Wi-Fi: połączono"</string>
-    <string name="system_panel_signal_meter_wifi_connecting" msgid="4087640898624652649">"Wi-Fi: łączenie…"</string>
-    <string name="system_panel_signal_meter_data_connected" msgid="2171100321540926054">"Sieć komórkowa: połączono"</string>
-    <string name="system_panel_signal_meter_data_connecting" msgid="7183001278053801143">"Sieć komórkowa: łączenie…"</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="160846667119240422">"Wi-Fi: połączono"</string>
+    <string name="status_bar_settings_signal_meter_wifi_connecting" msgid="4087640898624652649">"Wi-Fi: łączenie…"</string>
+    <string name="status_bar_settings_signal_meter_data_connected" msgid="2171100321540926054">"Sieć komórkowa: połączono"</string>
+    <string name="status_bar_settings_signal_meter_data_connecting" msgid="7183001278053801143">"Sieć komórkowa: łączenie…"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml
index 108ef13..f6a6d79 100644
--- a/packages/SystemUI/res/values-pl/strings.xml
+++ b/packages/SystemUI/res/values-pl/strings.xml
@@ -35,7 +35,7 @@
     <!-- no translation found for invalid_charger (4549105996740522523) -->
     <skip />
     <string name="battery_low_why" msgid="7279169609518386372">"Użycie baterii"</string>
-    <!-- no translation found for system_panel_settings_button (7832600575390861653) -->
+    <!-- no translation found for status_bar_settings_settings_button (7832600575390861653) -->
     <skip />
     <string name="recent_tasks_title" msgid="3691764623638127888">"Najnowsze"</string>
     <!-- no translation found for recent_tasks_empty (1905484479067697884) -->
diff --git a/packages/SystemUI/res/values-pt-rPT-xlarge/strings.xml b/packages/SystemUI/res/values-pt-rPT-xlarge/strings.xml
index 9f20932..550c11c 100644
--- a/packages/SystemUI/res/values-pt-rPT-xlarge/strings.xml
+++ b/packages/SystemUI/res/values-pt-rPT-xlarge/strings.xml
@@ -21,11 +21,11 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <!-- no translation found for status_bar_clear_all_button (4722520806446512408) -->
     <skip />
-    <string name="system_panel_signal_meter_disconnected" msgid="2123001074951934237">"Sem ligação à internet"</string>
-    <!-- no translation found for system_panel_signal_meter_wifi_ssid_format (6261810256542749384) -->
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="2123001074951934237">"Sem ligação à internet"</string>
+    <!-- no translation found for status_bar_settings_signal_meter_wifi_ssid_format (6261810256542749384) -->
     <skip />
-    <string name="system_panel_signal_meter_wifi_nossid" msgid="160846667119240422">"Wi-Fi: ligado"</string>
-    <string name="system_panel_signal_meter_wifi_connecting" msgid="4087640898624652649">"Wi-Fi: a ligar…"</string>
-    <string name="system_panel_signal_meter_data_connected" msgid="2171100321540926054">"Dados móveis: ligado"</string>
-    <string name="system_panel_signal_meter_data_connecting" msgid="7183001278053801143">"Dados móveis: a ligar..."</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="160846667119240422">"Wi-Fi: ligado"</string>
+    <string name="status_bar_settings_signal_meter_wifi_connecting" msgid="4087640898624652649">"Wi-Fi: a ligar…"</string>
+    <string name="status_bar_settings_signal_meter_data_connected" msgid="2171100321540926054">"Dados móveis: ligado"</string>
+    <string name="status_bar_settings_signal_meter_data_connecting" msgid="7183001278053801143">"Dados móveis: a ligar..."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-pt-rPT/strings.xml b/packages/SystemUI/res/values-pt-rPT/strings.xml
index 1f38ed7..2c03a18 100644
--- a/packages/SystemUI/res/values-pt-rPT/strings.xml
+++ b/packages/SystemUI/res/values-pt-rPT/strings.xml
@@ -35,7 +35,7 @@
     <!-- no translation found for invalid_charger (4549105996740522523) -->
     <skip />
     <string name="battery_low_why" msgid="7279169609518386372">"Utilização da bateria"</string>
-    <!-- no translation found for system_panel_settings_button (7832600575390861653) -->
+    <!-- no translation found for status_bar_settings_settings_button (7832600575390861653) -->
     <skip />
     <string name="recent_tasks_title" msgid="3691764623638127888">"Recente"</string>
     <!-- no translation found for recent_tasks_empty (1905484479067697884) -->
diff --git a/packages/SystemUI/res/values-pt-xlarge/strings.xml b/packages/SystemUI/res/values-pt-xlarge/strings.xml
index 481263f..9f2d033 100644
--- a/packages/SystemUI/res/values-pt-xlarge/strings.xml
+++ b/packages/SystemUI/res/values-pt-xlarge/strings.xml
@@ -21,11 +21,11 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <!-- no translation found for status_bar_clear_all_button (4722520806446512408) -->
     <skip />
-    <string name="system_panel_signal_meter_disconnected" msgid="2123001074951934237">"Sem conex. à intern."</string>
-    <!-- no translation found for system_panel_signal_meter_wifi_ssid_format (6261810256542749384) -->
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="2123001074951934237">"Sem conex. à intern."</string>
+    <!-- no translation found for status_bar_settings_signal_meter_wifi_ssid_format (6261810256542749384) -->
     <skip />
-    <string name="system_panel_signal_meter_wifi_nossid" msgid="160846667119240422">"Wi-Fi: conectado"</string>
-    <string name="system_panel_signal_meter_wifi_connecting" msgid="4087640898624652649">"Wi-Fi: conectando…"</string>
-    <string name="system_panel_signal_meter_data_connected" msgid="2171100321540926054">"Dados móv: conectado"</string>
-    <string name="system_panel_signal_meter_data_connecting" msgid="7183001278053801143">"Dados: conectando..."</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="160846667119240422">"Wi-Fi: conectado"</string>
+    <string name="status_bar_settings_signal_meter_wifi_connecting" msgid="4087640898624652649">"Wi-Fi: conectando…"</string>
+    <string name="status_bar_settings_signal_meter_data_connected" msgid="2171100321540926054">"Dados móv: conectado"</string>
+    <string name="status_bar_settings_signal_meter_data_connecting" msgid="7183001278053801143">"Dados: conectando..."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml
index 83bde68..a7a43a8 100644
--- a/packages/SystemUI/res/values-pt/strings.xml
+++ b/packages/SystemUI/res/values-pt/strings.xml
@@ -35,7 +35,7 @@
     <!-- no translation found for invalid_charger (4549105996740522523) -->
     <skip />
     <string name="battery_low_why" msgid="7279169609518386372">"Uso da bateria"</string>
-    <!-- no translation found for system_panel_settings_button (7832600575390861653) -->
+    <!-- no translation found for status_bar_settings_settings_button (7832600575390861653) -->
     <skip />
     <string name="recent_tasks_title" msgid="3691764623638127888">"Recente"</string>
     <!-- no translation found for recent_tasks_empty (1905484479067697884) -->
diff --git a/packages/SystemUI/res/values-rm/strings.xml b/packages/SystemUI/res/values-rm/strings.xml
index 8a5014e..a8625a9 100644
--- a/packages/SystemUI/res/values-rm/strings.xml
+++ b/packages/SystemUI/res/values-rm/strings.xml
@@ -35,7 +35,7 @@
     <!-- no translation found for invalid_charger (4549105996740522523) -->
     <skip />
     <string name="battery_low_why" msgid="7279169609518386372">"Consum dad accu"</string>
-    <!-- no translation found for system_panel_settings_button (7832600575390861653) -->
+    <!-- no translation found for status_bar_settings_settings_button (7832600575390861653) -->
     <skip />
     <string name="recent_tasks_title" msgid="3691764623638127888">"Utilisà sco ultim"</string>
     <!-- no translation found for recent_tasks_empty (1905484479067697884) -->
diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml
index bdca5ea..7b4ad47 100644
--- a/packages/SystemUI/res/values-ro/strings.xml
+++ b/packages/SystemUI/res/values-ro/strings.xml
@@ -35,7 +35,7 @@
     <!-- no translation found for invalid_charger (4549105996740522523) -->
     <skip />
     <string name="battery_low_why" msgid="7279169609518386372">"Utilizarea bateriei"</string>
-    <!-- no translation found for system_panel_settings_button (7832600575390861653) -->
+    <!-- no translation found for status_bar_settings_settings_button (7832600575390861653) -->
     <skip />
     <string name="recent_tasks_title" msgid="3691764623638127888">"Recente"</string>
     <!-- no translation found for recent_tasks_empty (1905484479067697884) -->
diff --git a/packages/SystemUI/res/values-ru-xlarge/strings.xml b/packages/SystemUI/res/values-ru-xlarge/strings.xml
index 7514d4b..68b2b9a 100644
--- a/packages/SystemUI/res/values-ru-xlarge/strings.xml
+++ b/packages/SystemUI/res/values-ru-xlarge/strings.xml
@@ -21,11 +21,11 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <!-- no translation found for status_bar_clear_all_button (4722520806446512408) -->
     <skip />
-    <string name="system_panel_signal_meter_disconnected" msgid="2123001074951934237">"связь отсутствует"</string>
-    <!-- no translation found for system_panel_signal_meter_wifi_ssid_format (6261810256542749384) -->
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="2123001074951934237">"связь отсутствует"</string>
+    <!-- no translation found for status_bar_settings_signal_meter_wifi_ssid_format (6261810256542749384) -->
     <skip />
-    <string name="system_panel_signal_meter_wifi_nossid" msgid="160846667119240422">"Wi-Fi: подключено"</string>
-    <string name="system_panel_signal_meter_wifi_connecting" msgid="4087640898624652649">"Wi-Fi: подключение..."</string>
-    <string name="system_panel_signal_meter_data_connected" msgid="2171100321540926054">"Моб. данные: подключено"</string>
-    <string name="system_panel_signal_meter_data_connecting" msgid="7183001278053801143">"Моб. данные: подключение..."</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="160846667119240422">"Wi-Fi: подключено"</string>
+    <string name="status_bar_settings_signal_meter_wifi_connecting" msgid="4087640898624652649">"Wi-Fi: подключение..."</string>
+    <string name="status_bar_settings_signal_meter_data_connected" msgid="2171100321540926054">"Моб. данные: подключено"</string>
+    <string name="status_bar_settings_signal_meter_data_connecting" msgid="7183001278053801143">"Моб. данные: подключение..."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml
index f701fe3..d597315 100644
--- a/packages/SystemUI/res/values-ru/strings.xml
+++ b/packages/SystemUI/res/values-ru/strings.xml
@@ -35,7 +35,7 @@
     <!-- no translation found for invalid_charger (4549105996740522523) -->
     <skip />
     <string name="battery_low_why" msgid="7279169609518386372">"Расход заряда батареи"</string>
-    <!-- no translation found for system_panel_settings_button (7832600575390861653) -->
+    <!-- no translation found for status_bar_settings_settings_button (7832600575390861653) -->
     <skip />
     <string name="recent_tasks_title" msgid="3691764623638127888">"Недавние"</string>
     <!-- no translation found for recent_tasks_empty (1905484479067697884) -->
diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml
index 95b4c30..b4a3221 100644
--- a/packages/SystemUI/res/values-sk/strings.xml
+++ b/packages/SystemUI/res/values-sk/strings.xml
@@ -35,7 +35,7 @@
     <!-- no translation found for invalid_charger (4549105996740522523) -->
     <skip />
     <string name="battery_low_why" msgid="7279169609518386372">"Využitie batérie"</string>
-    <!-- no translation found for system_panel_settings_button (7832600575390861653) -->
+    <!-- no translation found for status_bar_settings_settings_button (7832600575390861653) -->
     <skip />
     <string name="recent_tasks_title" msgid="3691764623638127888">"Najnovšie"</string>
     <!-- no translation found for recent_tasks_empty (1905484479067697884) -->
diff --git a/packages/SystemUI/res/values-sl/strings.xml b/packages/SystemUI/res/values-sl/strings.xml
index 94b599d..8783529 100644
--- a/packages/SystemUI/res/values-sl/strings.xml
+++ b/packages/SystemUI/res/values-sl/strings.xml
@@ -35,7 +35,7 @@
     <!-- no translation found for invalid_charger (4549105996740522523) -->
     <skip />
     <string name="battery_low_why" msgid="7279169609518386372">"Uporaba baterije"</string>
-    <!-- no translation found for system_panel_settings_button (7832600575390861653) -->
+    <!-- no translation found for status_bar_settings_settings_button (7832600575390861653) -->
     <skip />
     <string name="recent_tasks_title" msgid="3691764623638127888">"Nedavno"</string>
     <!-- no translation found for recent_tasks_empty (1905484479067697884) -->
diff --git a/packages/SystemUI/res/values-sr/strings.xml b/packages/SystemUI/res/values-sr/strings.xml
index e1f07b5..a4d2bf0 100644
--- a/packages/SystemUI/res/values-sr/strings.xml
+++ b/packages/SystemUI/res/values-sr/strings.xml
@@ -35,7 +35,7 @@
     <!-- no translation found for invalid_charger (4549105996740522523) -->
     <skip />
     <string name="battery_low_why" msgid="7279169609518386372">"Коришћење батерије"</string>
-    <!-- no translation found for system_panel_settings_button (7832600575390861653) -->
+    <!-- no translation found for status_bar_settings_settings_button (7832600575390861653) -->
     <skip />
     <string name="recent_tasks_title" msgid="3691764623638127888">"Недавно"</string>
     <!-- no translation found for recent_tasks_empty (1905484479067697884) -->
diff --git a/packages/SystemUI/res/values-sv-xlarge/strings.xml b/packages/SystemUI/res/values-sv-xlarge/strings.xml
index ccc30ec..c1147c7 100644
--- a/packages/SystemUI/res/values-sv-xlarge/strings.xml
+++ b/packages/SystemUI/res/values-sv-xlarge/strings.xml
@@ -21,11 +21,11 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <!-- no translation found for status_bar_clear_all_button (4722520806446512408) -->
     <skip />
-    <string name="system_panel_signal_meter_disconnected" msgid="2123001074951934237">"ingen Internetanslutn."</string>
-    <!-- no translation found for system_panel_signal_meter_wifi_ssid_format (6261810256542749384) -->
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="2123001074951934237">"ingen Internetanslutn."</string>
+    <!-- no translation found for status_bar_settings_signal_meter_wifi_ssid_format (6261810256542749384) -->
     <skip />
-    <string name="system_panel_signal_meter_wifi_nossid" msgid="160846667119240422">"Wi-Fi: ansluten"</string>
-    <string name="system_panel_signal_meter_wifi_connecting" msgid="4087640898624652649">"Wi-Fi: ansluter..."</string>
-    <string name="system_panel_signal_meter_data_connected" msgid="2171100321540926054">"Mobildata: ansluten"</string>
-    <string name="system_panel_signal_meter_data_connecting" msgid="7183001278053801143">"Mobildata: ansluter…"</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="160846667119240422">"Wi-Fi: ansluten"</string>
+    <string name="status_bar_settings_signal_meter_wifi_connecting" msgid="4087640898624652649">"Wi-Fi: ansluter..."</string>
+    <string name="status_bar_settings_signal_meter_data_connected" msgid="2171100321540926054">"Mobildata: ansluten"</string>
+    <string name="status_bar_settings_signal_meter_data_connecting" msgid="7183001278053801143">"Mobildata: ansluter…"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml
index 4f9cfd0..f2dc7f1 100644
--- a/packages/SystemUI/res/values-sv/strings.xml
+++ b/packages/SystemUI/res/values-sv/strings.xml
@@ -35,7 +35,7 @@
     <!-- no translation found for invalid_charger (4549105996740522523) -->
     <skip />
     <string name="battery_low_why" msgid="7279169609518386372">"Batteriförbrukning"</string>
-    <!-- no translation found for system_panel_settings_button (7832600575390861653) -->
+    <!-- no translation found for status_bar_settings_settings_button (7832600575390861653) -->
     <skip />
     <string name="recent_tasks_title" msgid="3691764623638127888">"Senaste"</string>
     <!-- no translation found for recent_tasks_empty (1905484479067697884) -->
diff --git a/packages/SystemUI/res/values-th/strings.xml b/packages/SystemUI/res/values-th/strings.xml
index 00be23d..fb25fdf 100644
--- a/packages/SystemUI/res/values-th/strings.xml
+++ b/packages/SystemUI/res/values-th/strings.xml
@@ -35,7 +35,7 @@
     <!-- no translation found for invalid_charger (4549105996740522523) -->
     <skip />
     <string name="battery_low_why" msgid="7279169609518386372">"การใช้แบตเตอรี่"</string>
-    <!-- no translation found for system_panel_settings_button (7832600575390861653) -->
+    <!-- no translation found for status_bar_settings_settings_button (7832600575390861653) -->
     <skip />
     <string name="recent_tasks_title" msgid="3691764623638127888">"เมื่อเร็วๆ นี้"</string>
     <!-- no translation found for recent_tasks_empty (1905484479067697884) -->
diff --git a/packages/SystemUI/res/values-tl/strings.xml b/packages/SystemUI/res/values-tl/strings.xml
index 240f181..900de9f 100644
--- a/packages/SystemUI/res/values-tl/strings.xml
+++ b/packages/SystemUI/res/values-tl/strings.xml
@@ -35,7 +35,7 @@
     <!-- no translation found for invalid_charger (4549105996740522523) -->
     <skip />
     <string name="battery_low_why" msgid="7279169609518386372">"Paggamit ng baterya"</string>
-    <!-- no translation found for system_panel_settings_button (7832600575390861653) -->
+    <!-- no translation found for status_bar_settings_settings_button (7832600575390861653) -->
     <skip />
     <string name="recent_tasks_title" msgid="3691764623638127888">"Kamakailan"</string>
     <!-- no translation found for recent_tasks_empty (1905484479067697884) -->
diff --git a/packages/SystemUI/res/values-tr-xlarge/strings.xml b/packages/SystemUI/res/values-tr-xlarge/strings.xml
index 008006d..cc36b93 100644
--- a/packages/SystemUI/res/values-tr-xlarge/strings.xml
+++ b/packages/SystemUI/res/values-tr-xlarge/strings.xml
@@ -21,11 +21,11 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <!-- no translation found for status_bar_clear_all_button (4722520806446512408) -->
     <skip />
-    <string name="system_panel_signal_meter_disconnected" msgid="2123001074951934237">"internet bağlantısı yok"</string>
-    <!-- no translation found for system_panel_signal_meter_wifi_ssid_format (6261810256542749384) -->
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="2123001074951934237">"internet bağlantısı yok"</string>
+    <!-- no translation found for status_bar_settings_signal_meter_wifi_ssid_format (6261810256542749384) -->
     <skip />
-    <string name="system_panel_signal_meter_wifi_nossid" msgid="160846667119240422">"Kablosuz: bağlı"</string>
-    <string name="system_panel_signal_meter_wifi_connecting" msgid="4087640898624652649">"Kablosuz: bağlanıyor..."</string>
-    <string name="system_panel_signal_meter_data_connected" msgid="2171100321540926054">"Mobil veri: bağlı"</string>
-    <string name="system_panel_signal_meter_data_connecting" msgid="7183001278053801143">"Mob veri: bağlnyr..."</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="160846667119240422">"Kablosuz: bağlı"</string>
+    <string name="status_bar_settings_signal_meter_wifi_connecting" msgid="4087640898624652649">"Kablosuz: bağlanıyor..."</string>
+    <string name="status_bar_settings_signal_meter_data_connected" msgid="2171100321540926054">"Mobil veri: bağlı"</string>
+    <string name="status_bar_settings_signal_meter_data_connecting" msgid="7183001278053801143">"Mob veri: bağlnyr..."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-tr/strings.xml b/packages/SystemUI/res/values-tr/strings.xml
index cef5539..31451e1 100644
--- a/packages/SystemUI/res/values-tr/strings.xml
+++ b/packages/SystemUI/res/values-tr/strings.xml
@@ -35,7 +35,7 @@
     <!-- no translation found for invalid_charger (4549105996740522523) -->
     <skip />
     <string name="battery_low_why" msgid="7279169609518386372">"Pil kullanımı"</string>
-    <!-- no translation found for system_panel_settings_button (7832600575390861653) -->
+    <!-- no translation found for status_bar_settings_settings_button (7832600575390861653) -->
     <skip />
     <string name="recent_tasks_title" msgid="3691764623638127888">"En Son Görevler"</string>
     <!-- no translation found for recent_tasks_empty (1905484479067697884) -->
diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml
index cbc7881..e7b9f19 100644
--- a/packages/SystemUI/res/values-uk/strings.xml
+++ b/packages/SystemUI/res/values-uk/strings.xml
@@ -35,7 +35,7 @@
     <!-- no translation found for invalid_charger (4549105996740522523) -->
     <skip />
     <string name="battery_low_why" msgid="7279169609518386372">"Викор. батареї"</string>
-    <!-- no translation found for system_panel_settings_button (7832600575390861653) -->
+    <!-- no translation found for status_bar_settings_settings_button (7832600575390861653) -->
     <skip />
     <string name="recent_tasks_title" msgid="3691764623638127888">"Останні"</string>
     <!-- no translation found for recent_tasks_empty (1905484479067697884) -->
diff --git a/packages/SystemUI/res/values-vi/strings.xml b/packages/SystemUI/res/values-vi/strings.xml
index 0a559da..fe11324 100644
--- a/packages/SystemUI/res/values-vi/strings.xml
+++ b/packages/SystemUI/res/values-vi/strings.xml
@@ -35,7 +35,7 @@
     <!-- no translation found for invalid_charger (4549105996740522523) -->
     <skip />
     <string name="battery_low_why" msgid="7279169609518386372">"Sử dụng pin"</string>
-    <!-- no translation found for system_panel_settings_button (7832600575390861653) -->
+    <!-- no translation found for status_bar_settings_settings_button (7832600575390861653) -->
     <skip />
     <string name="recent_tasks_title" msgid="3691764623638127888">"Gần đây"</string>
     <!-- no translation found for recent_tasks_empty (1905484479067697884) -->
diff --git a/packages/SystemUI/res/values-xlarge/strings.xml b/packages/SystemUI/res/values-xlarge/strings.xml
index e305681..e3e5148 100644
--- a/packages/SystemUI/res/values-xlarge/strings.xml
+++ b/packages/SystemUI/res/values-xlarge/strings.xml
@@ -25,14 +25,14 @@
 
     <!-- Text to display underneath the graphical signal strength meter when
          no connection is available. [CHAR LIMIT=20] -->
-    <string name="system_panel_signal_meter_disconnected">
+    <string name="status_bar_settings_signal_meter_disconnected">
         no internet connection
     </string>
 
     <!-- Text to display underneath the graphical signal strength meter when
          it is displaying information about a connected, named Wi-Fi network.
          [CHAR LIMIT=20] -->
-    <string name="system_panel_signal_meter_wifi_ssid_format">
+    <string name="status_bar_settings_signal_meter_wifi_ssid_format">
         <xliff:g id="ssid">%s</xliff:g>
     </string>
 
@@ -40,14 +40,14 @@
          it is displaying Wi-Fi status and Wi-Fi is connected to a network
          whose SSID is not available.
          [CHAR LIMIT=20] -->
-    <string name="system_panel_signal_meter_wifi_nossid">
+    <string name="status_bar_settings_signal_meter_wifi_nossid">
         Wi-Fi: connected
     </string>
 
     <!-- Text to display underneath the graphical signal strength meter when
          it is displaying Wi-Fi status and Wi-Fi is in the process of
          connecting to a network.  [CHAR LIMIT=20] -->
-    <string name="system_panel_signal_meter_wifi_connecting">
+    <string name="status_bar_settings_signal_meter_wifi_connecting">
         Wi-Fi: connecting…
     </string>
  
@@ -55,7 +55,7 @@
          it is displaying mobile data (3G) status and a network connection is
          available.
          [CHAR LIMIT=20] -->
-    <string name="system_panel_signal_meter_data_connected">
+    <string name="status_bar_settings_signal_meter_data_connected">
         Mobile data: connected
     </string>
 
@@ -63,7 +63,7 @@
          it is displaying mobile data (3G) status and a network connection is
          unavailable.
          [CHAR LIMIT=20] -->
-    <string name="system_panel_signal_meter_data_connecting">
+    <string name="status_bar_settings_signal_meter_data_connecting">
         Mobile data: connecting…
     </string>
 </resources>
diff --git a/packages/SystemUI/res/values-xlarge/styles.xml b/packages/SystemUI/res/values-xlarge/styles.xml
new file mode 100644
index 0000000..fb10a24
--- /dev/null
+++ b/packages/SystemUI/res/values-xlarge/styles.xml
@@ -0,0 +1,50 @@
+<?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 xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <style name="StatusBarNotificationText">
+        <item name="android:textSize">16sp</item>
+        <item name="android:textColor">#ff999999</item>
+    </style>
+
+    <style name="StatusBarPanelSettingsRow">
+        <item name="android:layout_height">64dp</item>
+        <item name="android:layout_width">match_parent</item>
+        <item name="android:orientation">horizontal</item>
+    </style>
+
+    <style name="StatusBarPanelSettingsIcon">
+        <item name="android:layout_height">match_parent</item>
+        <item name="android:layout_width">64dp</item>
+        <item name="android:scaleType">center</item>
+    </style>
+
+    <style name="StatusBarPanelSettingsContents">
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:layout_width">0dp</item>
+        <item name="android:layout_weight">1</item>
+        <item name="android:layout_gravity">left|center_vertical</item>
+        <item name="android:textColor">?android:attr/textColorPrimary</item>
+    </style>
+
+    <style name="StatusBarPanelSettingsPanelSeparator">
+        <item name="android:layout_width">match_parent</item>
+        <item name="android:layout_height">1dp</item>
+        <item name="android:background">@android:drawable/divider_horizontal_dark</item>
+    </style>
+
+</resources>
diff --git a/packages/SystemUI/res/values-zh-rCN-xlarge/strings.xml b/packages/SystemUI/res/values-zh-rCN-xlarge/strings.xml
index 68b0fac..072bcb0 100644
--- a/packages/SystemUI/res/values-zh-rCN-xlarge/strings.xml
+++ b/packages/SystemUI/res/values-zh-rCN-xlarge/strings.xml
@@ -21,11 +21,11 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <!-- no translation found for status_bar_clear_all_button (4722520806446512408) -->
     <skip />
-    <string name="system_panel_signal_meter_disconnected" msgid="2123001074951934237">"无互联网连接"</string>
-    <!-- no translation found for system_panel_signal_meter_wifi_ssid_format (6261810256542749384) -->
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="2123001074951934237">"无互联网连接"</string>
+    <!-- no translation found for status_bar_settings_signal_meter_wifi_ssid_format (6261810256542749384) -->
     <skip />
-    <string name="system_panel_signal_meter_wifi_nossid" msgid="160846667119240422">"Wi-Fi：已连接"</string>
-    <string name="system_panel_signal_meter_wifi_connecting" msgid="4087640898624652649">"Wi-Fi：正在连接..."</string>
-    <string name="system_panel_signal_meter_data_connected" msgid="2171100321540926054">"移动数据：已连接"</string>
-    <string name="system_panel_signal_meter_data_connecting" msgid="7183001278053801143">"移动数据：正在连接..."</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="160846667119240422">"Wi-Fi：已连接"</string>
+    <string name="status_bar_settings_signal_meter_wifi_connecting" msgid="4087640898624652649">"Wi-Fi：正在连接..."</string>
+    <string name="status_bar_settings_signal_meter_data_connected" msgid="2171100321540926054">"移动数据：已连接"</string>
+    <string name="status_bar_settings_signal_meter_data_connecting" msgid="7183001278053801143">"移动数据：正在连接..."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml
index 9ed98c9..48218c0 100644
--- a/packages/SystemUI/res/values-zh-rCN/strings.xml
+++ b/packages/SystemUI/res/values-zh-rCN/strings.xml
@@ -35,7 +35,7 @@
     <!-- no translation found for invalid_charger (4549105996740522523) -->
     <skip />
     <string name="battery_low_why" msgid="7279169609518386372">"电量使用情况"</string>
-    <!-- no translation found for system_panel_settings_button (7832600575390861653) -->
+    <!-- no translation found for status_bar_settings_settings_button (7832600575390861653) -->
     <skip />
     <string name="recent_tasks_title" msgid="3691764623638127888">"近期任务"</string>
     <!-- no translation found for recent_tasks_empty (1905484479067697884) -->
diff --git a/packages/SystemUI/res/values-zh-rTW-xlarge/strings.xml b/packages/SystemUI/res/values-zh-rTW-xlarge/strings.xml
index bc41d11..0d06aad 100644
--- a/packages/SystemUI/res/values-zh-rTW-xlarge/strings.xml
+++ b/packages/SystemUI/res/values-zh-rTW-xlarge/strings.xml
@@ -21,11 +21,11 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <!-- no translation found for status_bar_clear_all_button (4722520806446512408) -->
     <skip />
-    <string name="system_panel_signal_meter_disconnected" msgid="2123001074951934237">"沒有網際網路連線"</string>
-    <!-- no translation found for system_panel_signal_meter_wifi_ssid_format (6261810256542749384) -->
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="2123001074951934237">"沒有網際網路連線"</string>
+    <!-- no translation found for status_bar_settings_signal_meter_wifi_ssid_format (6261810256542749384) -->
     <skip />
-    <string name="system_panel_signal_meter_wifi_nossid" msgid="160846667119240422">"Wi-F：已連線"</string>
-    <string name="system_panel_signal_meter_wifi_connecting" msgid="4087640898624652649">"Wi-Fi：連線中..."</string>
-    <string name="system_panel_signal_meter_data_connected" msgid="2171100321540926054">"行動數據：已連線"</string>
-    <string name="system_panel_signal_meter_data_connecting" msgid="7183001278053801143">"行動數據：連線中..."</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="160846667119240422">"Wi-F：已連線"</string>
+    <string name="status_bar_settings_signal_meter_wifi_connecting" msgid="4087640898624652649">"Wi-Fi：連線中..."</string>
+    <string name="status_bar_settings_signal_meter_data_connected" msgid="2171100321540926054">"行動數據：已連線"</string>
+    <string name="status_bar_settings_signal_meter_data_connecting" msgid="7183001278053801143">"行動數據：連線中..."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml
index 4dc323b..10c08d0 100644
--- a/packages/SystemUI/res/values-zh-rTW/strings.xml
+++ b/packages/SystemUI/res/values-zh-rTW/strings.xml
@@ -35,7 +35,7 @@
     <!-- no translation found for invalid_charger (4549105996740522523) -->
     <skip />
     <string name="battery_low_why" msgid="7279169609518386372">"電池使用狀況"</string>
-    <!-- no translation found for system_panel_settings_button (7832600575390861653) -->
+    <!-- no translation found for status_bar_settings_settings_button (7832600575390861653) -->
     <skip />
     <string name="recent_tasks_title" msgid="3691764623638127888">"最新的"</string>
     <!-- no translation found for recent_tasks_empty (1905484479067697884) -->
diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml
index e8c3c91..ed31a34 100644
--- a/packages/SystemUI/res/values/strings.xml
+++ b/packages/SystemUI/res/values/strings.xml
@@ -72,10 +72,19 @@
     <string name="battery_low_why">Battery use</string>
 
     <!-- Name of the button that links to the Settings app. [CHAR LIMIT=NONE] -->
-    <string name="system_panel_settings_button">Settings</string>
+    <string name="status_bar_settings_settings_button">Settings</string>
+
+    <!-- Label in the system panel for airplane mode (all radios are turned off)[CHAR LIMIT=30] -->
+    <string name="status_bar_settings_airplane">Airplane mode</string>
+
+    <!-- Label in system panel saying the device will use the orientation sensor to rotate [CHAR LIMIT=30] -->
+    <string name="status_bar_settings_rotation_lock">Lock screen orientation</string>
+
+    <!-- Label in system panel saying the device will show notifications [CHAR LIMIT=30] -->
+    <string name="status_bar_settings_notifications">Notifications</string>
 
     <!-- Text to display next to the graphical battery meter.  [CHAR LIMIT=3] -->
-    <string name="system_panel_battery_meter_format" translatable="false">
+    <string name="status_bar_settings_battery_meter_format" translatable="false">
         <xliff:g id="number">%d</xliff:g><xliff:g id="percent">%%</xliff:g>
     </string>
 
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java b/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
index ed2ed1c..37939df 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
@@ -82,7 +82,7 @@
         public void animateCollapse();
         public void setLightsOn(boolean on);
         public void setMenuKeyVisible(boolean visible);
-        public void setIMEButtonVisible(boolean visible);
+        public void setIMEButtonVisible(IBinder token, boolean visible);
     }
 
     public CommandQueue(Callbacks callbacks, StatusBarIconList list) {
@@ -165,10 +165,10 @@
         }
     }
 
-    public void setIMEButtonVisible(boolean visible) {
+    public void setIMEButtonVisible(IBinder token, boolean visible) {
         synchronized (mList) {
             mHandler.removeMessages(MSG_SHOW_IME_BUTTON);
-            mHandler.obtainMessage(MSG_SHOW_IME_BUTTON, visible ? 1 : 0, 0, null).sendToTarget();
+            mHandler.obtainMessage(MSG_SHOW_IME_BUTTON, visible ? 1 : 0, 0, token).sendToTarget();
         }
     }
 
@@ -233,7 +233,7 @@
                     mCallbacks.setMenuKeyVisible(msg.arg1 != 0);
                     break;
                 case MSG_SHOW_IME_BUTTON:
-                    mCallbacks.setIMEButtonVisible(msg.arg1 != 0);
+                    mCallbacks.setIMEButtonVisible((IBinder)msg.obj, msg.arg1 != 0);
                     break;
             }
         }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBar.java
index 731f6cd..d7f3730 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBar.java
@@ -65,9 +65,10 @@
         mBarService = IStatusBarService.Stub.asInterface(
                 ServiceManager.getService(Context.STATUS_BAR_SERVICE));
         int[] switches = new int[4];
+        ArrayList<IBinder> binders = new ArrayList<IBinder>();
         try {
             mBarService.registerStatusBar(mCommandQueue, iconList, notificationKeys, notifications,
-                    switches);
+                    switches, binders);
         } catch (RemoteException ex) {
             // If the system process isn't there we're doomed anyway.
         }
@@ -75,7 +76,8 @@
         disable(switches[0]);
         setLightsOn(switches[1] != 0);
         setMenuKeyVisible(switches[2] != 0);
-        setIMEButtonVisible(switches[3] != 0);
+        // StatusBarManagerService has a back up of IME token and it's restored here.
+        setIMEButtonVisible(binders.get(0), switches[3] != 0);
 
         // Set up the initial icon state
         int N = iconList.size();
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 915fa2f..0d6c5f6 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -505,7 +505,7 @@
         // create the row view
         LayoutInflater inflater = (LayoutInflater)mContext.getSystemService(
                 Context.LAYOUT_INFLATER_SERVICE);
-        View row = inflater.inflate(R.layout.status_bar_latest_event, parent, false);
+        View row = inflater.inflate(R.layout.status_bar_notification_row, parent, false);
 
         // bind the click event to the content area
         ViewGroup content = (ViewGroup)row.findViewById(R.id.content);
@@ -1016,7 +1016,7 @@
 
     // Not supported
     public void setMenuKeyVisible(boolean visible) { }
-    public void setIMEButtonVisible(boolean visible) { }
+    public void setIMEButtonVisible(IBinder token, boolean visible) { }
 
     private class Launcher implements View.OnClickListener {
         private PendingIntent mIntent;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/AirplaneModeController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/AirplaneModeController.java
new file mode 100644
index 0000000..da60f0d
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/AirplaneModeController.java
@@ -0,0 +1,92 @@
+/*
+ * 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.
+ */
+
+package com.android.systemui.statusbar.policy;
+
+import android.content.BroadcastReceiver;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.os.RemoteException;
+import android.os.ServiceManager;
+import android.provider.Settings;
+import android.util.Slog;
+import android.widget.CompoundButton;
+
+public class AirplaneModeController extends BroadcastReceiver
+        implements CompoundButton.OnCheckedChangeListener {
+    private static final String TAG = "StatusBar.AirplaneModeController";
+
+    private Context mContext;
+    private CompoundButton mCheckBox;
+
+    private boolean mAirplaneMode;
+
+    public AirplaneModeController(Context context, CompoundButton checkbox) {
+        mContext = context;
+        mAirplaneMode = getAirplaneMode();
+        mCheckBox = checkbox;
+        checkbox.setChecked(mAirplaneMode);
+        checkbox.setOnCheckedChangeListener(this);
+
+        IntentFilter filter = new IntentFilter();
+        filter.addAction(Intent.ACTION_AIRPLANE_MODE_CHANGED);
+        context.registerReceiver(this, filter);
+
+    }
+
+    public void release() {
+        mContext.unregisterReceiver(this);
+    }
+
+    public void onCheckedChanged(CompoundButton view, boolean checked) {
+        Slog.d(TAG, "onCheckedChanged checked=" + checked + " mAirplaneMode=" + mAirplaneMode);
+        if (checked != mAirplaneMode) {
+            mAirplaneMode = checked;
+            unsafe(checked);
+        }
+    }
+
+    public void onReceive(Context context, Intent intent) {
+        if (Intent.ACTION_AIRPLANE_MODE_CHANGED.equals(intent.getAction())) {
+            final boolean enabled = intent.getBooleanExtra("state", false);
+            if (enabled != mAirplaneMode) {
+                mAirplaneMode = enabled;
+                mCheckBox.setChecked(enabled);
+            }
+        }
+    }
+
+    private boolean getAirplaneMode() {
+        ContentResolver cr = mContext.getContentResolver();
+        return 0 != Settings.System.getInt(cr, Settings.System.AIRPLANE_MODE_ON, 0);
+    }
+
+    // TODO: Fix this racy API by adding something better to TelephonyManager or
+    // ConnectivityService.
+    private void unsafe(boolean enabled) {
+        Settings.System.putInt(
+                mContext.getContentResolver(),
+                Settings.System.AIRPLANE_MODE_ON,
+                enabled ? 1 : 0);
+        Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
+        intent.addFlags(Intent.FLAG_RECEIVER_REPLACE_PENDING);
+        intent.putExtra("state", enabled);
+        mContext.sendBroadcast(intent);
+    }
+}
+
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/AutoRotateController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/AutoRotateController.java
new file mode 100644
index 0000000..866e5fc
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/AutoRotateController.java
@@ -0,0 +1,73 @@
+/*
+ * 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.
+ */
+
+package com.android.systemui.statusbar.policy;
+
+import android.content.ContentResolver;
+import android.content.Context;
+import android.os.RemoteException;
+import android.os.ServiceManager;
+import android.provider.Settings;
+import android.util.Slog;
+import android.view.IWindowManager;
+import android.widget.CompoundButton;
+
+/**
+ * TODO: Listen for changes to the setting.
+ */
+public class AutoRotateController implements CompoundButton.OnCheckedChangeListener {
+    private static final String TAG = "StatusBar.AutoRotateController";
+
+    private Context mContext;
+    private CompoundButton mCheckBox;
+
+    private boolean mLockRotation;
+
+    public AutoRotateController(Context context, CompoundButton checkbox) {
+        mContext = context;
+        mLockRotation = getLockRotation();
+        mCheckBox = checkbox;
+        checkbox.setChecked(mLockRotation);
+        checkbox.setOnCheckedChangeListener(this);
+    }
+
+    public void onCheckedChanged(CompoundButton view, boolean checked) {
+        Slog.d(TAG, "onCheckedChanged checked=" + checked + " mLockRotation=" + mLockRotation);
+        if (checked != mLockRotation) {
+            setLockRotation(checked);
+        }
+    }
+
+    private boolean getLockRotation() {
+        ContentResolver cr = mContext.getContentResolver();
+        return 0 == Settings.System.getInt(cr, Settings.System.ACCELEROMETER_ROTATION, 0);
+    }
+
+    private void setLockRotation(boolean locked) {
+        mLockRotation = locked;
+        try {
+            IWindowManager wm = IWindowManager.Stub.asInterface(ServiceManager.getService(
+                        Context.WINDOW_SERVICE));
+            ContentResolver cr = mContext.getContentResolver();
+            if (locked) {
+                wm.freezeRotation();
+            } else {
+                wm.thawRotation();
+            }
+        } catch (RemoteException exc) {
+        }
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryController.java
index a1efdd4..ae2b6b2 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryController.java
@@ -67,7 +67,7 @@
             for (int i=0; i<N; i++) {
                 //final boolean plugged = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0) != 0;
                 TextView v = mLabelViews.get(i);
-                v.setText(mContext.getString(R.string.system_panel_battery_meter_format, level));
+                v.setText(mContext.getString(R.string.status_bar_settings_battery_meter_format, level));
             }
         }
     }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java
index 18003dd..ec23a3d 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java
@@ -616,18 +616,18 @@
 
         if (mWifiConnected) {
             if (mWifiSsid == null) {
-                label = context.getString(R.string.system_panel_signal_meter_wifi_nossid);
+                label = context.getString(R.string.status_bar_settings_signal_meter_wifi_nossid);
             } else {
-                label = context.getString(R.string.system_panel_signal_meter_wifi_ssid_format,
+                label = context.getString(R.string.status_bar_settings_signal_meter_wifi_ssid_format,
                                       mWifiSsid);
             }
             combinedSignalIconId = mWifiIconId;
             dataTypeIconId = 0;
         } else {
             if (mDataConnected) {
-                label = context.getString(R.string.system_panel_signal_meter_data_connected);
+                label = context.getString(R.string.status_bar_settings_signal_meter_data_connected);
             } else {
-                label = context.getString(R.string.system_panel_signal_meter_disconnected);
+                label = context.getString(R.string.status_bar_settings_signal_meter_disconnected);
             }
             combinedSignalIconId = mDataSignalIconId;
             dataTypeIconId = mDataTypeIconId;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/InputMethodButton.java b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/InputMethodButton.java
index a025d63..7e03e2a 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/InputMethodButton.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/InputMethodButton.java
@@ -20,6 +20,7 @@
 import android.content.pm.PackageManager;
 import android.graphics.drawable.Drawable;
 import android.os.Handler;
+import android.os.IBinder;
 import android.provider.Settings;
 import android.util.Log;
 import android.util.Slog;
@@ -33,24 +34,39 @@
 import com.android.server.InputMethodManagerService;
 import com.android.systemui.R;
 
+import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 public class InputMethodButton extends ImageView {
 
     private static final String  TAG = "StatusBar/InputMethodButton";
     private static final boolean DEBUG = false;
 
-    private boolean mKeyboardShown;
-    private ImageView mIcon;
+    private static final int ID_IME_SWITCH_BUTTON = R.id.imeSwitchButton;
+    private static final int ID_IME_SHORTCUT_BUTTON = R.id.imeShortcutButton;
+
     // other services we wish to talk to
-    private InputMethodManager mImm;
+    private final InputMethodManager mImm;
+    private final int mId;
+    // Cache of InputMethodsInfo
+    private final HashMap<String, InputMethodInfo> mInputMethodsInfo =
+            new HashMap<String, InputMethodInfo>();
+    private ImageView mIcon;
+    private IBinder mToken;
+    private boolean mKeyboardShown;
+    private InputMethodInfo mShortcutInfo;
+    private InputMethodSubtype mShortcutSubtype;
 
     public InputMethodButton(Context context, AttributeSet attrs) {
         super(context, attrs);
 
         mKeyboardShown = false;
+        // Resource Id of the input method button. This id is defined in status_bar.xml
+        mId = getId();
         // IME hookup
-        mImm = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
+        mImm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
         // TODO: read the current icon & visibility state directly from the service
 
         // TODO: register for notifications about changes to visibility & subtype from service
@@ -58,14 +74,24 @@
         setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
-                mImm.showInputMethodSubtypePicker();
+                switch (mId) {
+                    case ID_IME_SWITCH_BUTTON:
+                        mImm.showInputMethodPicker();
+                        break;
+                    case ID_IME_SHORTCUT_BUTTON:
+                        if (mToken != null && mShortcutInfo != null) {
+                            mImm.setInputMethodAndSubtype(
+                                    mToken, mShortcutInfo.getId(), mShortcutSubtype);
+                        }
+                        break;
+                }
             }
         });
     }
 
     @Override
     protected void onAttachedToWindow() {
-        mIcon = (ImageView) findViewById(R.id.imeButton);
+        mIcon = (ImageView) findViewById(mId);
 
         refreshStatusIcon(mKeyboardShown);
     }
@@ -73,25 +99,44 @@
     private InputMethodInfo getCurrentInputMethodInfo() {
         String curInputMethodId = Settings.Secure.getString(getContext()
                 .getContentResolver(), Settings.Secure.DEFAULT_INPUT_METHOD);
-        List<InputMethodInfo> imis = mImm.getEnabledInputMethodList();
-        if (curInputMethodId != null) {
-            for (InputMethodInfo imi: imis) {
-                if (imi.getId().equals(curInputMethodId)) {
-                    return imi;
-                }
+        if (!mInputMethodsInfo.containsKey(curInputMethodId)) {
+            mInputMethodsInfo.clear();
+            List<InputMethodInfo> imis = mImm.getInputMethodList();
+            for (int i = 0; i < imis.size(); ++i) {
+                InputMethodInfo imi = imis.get(i);
+                mInputMethodsInfo.put(imi.getId(), imi);
+            }
+        }
+        return mInputMethodsInfo.get(curInputMethodId);
+    }
+
+    // TODO: Need to show an appropriate drawable for this shortcut button,
+    // if there are two or more shortcut input methods contained in this button.
+    // And need to add other methods to handle multiple shortcuts as appropriate.
+    private Drawable getShortcutInputMethodAndSubtypeDrawable() {
+        Map<InputMethodInfo, List<InputMethodSubtype>> shortcuts =
+                mImm.getShortcutInputMethodsAndSubtypes();
+        if (shortcuts.size() > 0) {
+            for (InputMethodInfo imi: shortcuts.keySet()) {
+                List<InputMethodSubtype> subtypes = shortcuts.get(imi);
+                // TODO: Returns the first found IMI for now. Should handle all shortcuts as
+                // appropriate.
+                mShortcutInfo = imi;
+                // TODO: Pick up the first found subtype for now. Should handle all subtypes
+                // as appropriate.
+                mShortcutSubtype = subtypes.size() > 0 ? subtypes.get(0) : null;
+                return getSubtypeIcon(mShortcutInfo, mShortcutSubtype);
             }
         }
         return null;
     }
 
-    private Drawable getCurrentSubtypeIcon() {
+    private Drawable getSubtypeIcon(InputMethodInfo imi, InputMethodSubtype subtype) {
         final PackageManager pm = getContext().getPackageManager();
-        InputMethodInfo imi = getCurrentInputMethodInfo();
-        InputMethodSubtype subtype = mImm.getCurrentInputMethodSubtype();
-        Drawable icon = null;
         if (imi != null) {
             if (DEBUG) {
-                Log.d(TAG, "--- Update icons of IME: " + imi.getPackageName() + "," + subtype);
+                Log.d(TAG, "Update icons of IME: " + imi.getPackageName() + ","
+                        + subtype.getLocale() + "," + subtype.getMode());
             }
             if (subtype != null) {
                 return pm.getDrawable(imi.getPackageName(), subtype.getIconResId(),
@@ -104,7 +149,7 @@
                 try {
                     return pm.getApplicationInfo(imi.getPackageName(), 0).loadIcon(pm);
                 } catch (PackageManager.NameNotFoundException e) {
-                    Log.w(TAG, "Current IME cann't be found: " + imi.getPackageName());
+                    Log.w(TAG, "IME can't be found: " + imi.getPackageName());
                 }
             }
         }
@@ -118,7 +163,18 @@
         } else {
             setVisibility(View.VISIBLE);
         }
-        Drawable icon = getCurrentSubtypeIcon();
+        Drawable icon = null;
+        switch (mId) {
+            case ID_IME_SWITCH_BUTTON:
+                // TODO: Just showing the first shortcut IME subtype for now. Should handle all
+                // shortcuts as appropriate.
+                icon = getSubtypeIcon(getCurrentInputMethodInfo(),
+                        mImm.getCurrentInputMethodSubtype());
+                break;
+            case ID_IME_SHORTCUT_BUTTON:
+                icon = getShortcutInputMethodAndSubtypeDrawable();
+                break;
+        }
         if (icon == null) {
             mIcon.setImageResource(R.drawable.ic_sysbar_ime_default);
         } else {
@@ -126,7 +182,8 @@
         }
     }
 
-    public void setIMEButtonVisible(boolean visible) {
+    public void setIMEButtonVisible(IBinder token, boolean visible) {
+        mToken = token;
         mKeyboardShown = visible;
         refreshStatusIcon(mKeyboardShown);
     }
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 5f49d8c..baf4a0f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/NotificationPanel.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/NotificationPanel.java
@@ -37,7 +37,7 @@
     View mNotificationButton;
     View mNotificationScroller;
     FrameLayout mContentFrame;
-    View mSettingsPanel;
+    View mSettingsView;
 
     public NotificationPanel(Context context, AttributeSet attrs) {
         this(context, attrs, 0);
@@ -68,6 +68,7 @@
         // when we hide, put back the notifications
         if (!isShown()) {
             switchToNotificationMode();
+            mNotificationScroller.scrollTo(0, 0);
         }
     }
 
@@ -103,15 +104,15 @@
     }
 
     public void switchToSettingsMode() {
-        removeSettingsPanel();
-        addSettingsPanel();
+        removeSettingsView();
+        addSettingsView();
         mSettingsButton.setVisibility(View.INVISIBLE);
         mNotificationScroller.setVisibility(View.GONE);
         mNotificationButton.setVisibility(View.VISIBLE);
     }
 
     public void switchToNotificationMode() {
-        removeSettingsPanel();
+        removeSettingsView();
         mSettingsButton.setVisibility(View.VISIBLE);
         mNotificationScroller.setVisibility(View.VISIBLE);
         mNotificationButton.setVisibility(View.INVISIBLE);
@@ -125,17 +126,17 @@
         return x >= l && x < r && y >= t && y < b;
     }
 
-    void removeSettingsPanel() {
-        if (mSettingsPanel != null) {
-            mContentFrame.removeView(mSettingsPanel);
-            mSettingsPanel = null;
+    void removeSettingsView() {
+        if (mSettingsView != null) {
+            mContentFrame.removeView(mSettingsView);
+            mSettingsView = null;
         }
     }
 
-    void addSettingsPanel() {
+    void addSettingsView() {
         LayoutInflater infl = LayoutInflater.from(getContext());
-        mSettingsPanel = infl.inflate(R.layout.sysbar_panel_settings, mContentFrame, false);
-        mContentFrame.addView(mSettingsPanel);
+        mSettingsView = infl.inflate(R.layout.status_bar_settings_view, mContentFrame, false);
+        mContentFrame.addView(mSettingsView);
     }
 }
 
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/RecentAppsPanel.java b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/RecentAppsPanel.java
index 0c31304..546750b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/RecentAppsPanel.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/RecentAppsPanel.java
@@ -224,7 +224,7 @@
         final int last = Math.min(mActivityDescriptions.size(), DISPLAY_TASKS) - 1;
         for (int i = last; i >= first; i--) {
             ActivityDescription activityDescription = mActivityDescriptions.get(i);
-            View view = View.inflate(mContext, R.layout.sysbar_panel_recent_item, null);
+            View view = View.inflate(mContext, R.layout.status_bar_recent_item, null);
             ImageView appThumbnail = (ImageView) view.findViewById(R.id.app_thumbnail);
             ImageView appIcon = (ImageView) view.findViewById(R.id.app_icon);
             TextView appDescription = (TextView) view.findViewById(R.id.app_label);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/SettingsPanel.java b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/SettingsPanel.java
deleted file mode 100644
index 9013f5c..0000000
--- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/SettingsPanel.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.systemui.statusbar.tablet;
-
-import android.content.Context;
-import android.util.AttributeSet;
-import android.util.Slog;
-import android.widget.LinearLayout;
-import android.view.View;
-
-import com.android.systemui.R;
-
-public class SettingsPanel extends LinearLayout {
-    static final String TAG = "SettingsPanel";
-
-    public SettingsPanel(Context context, AttributeSet attrs) {
-        this(context, attrs, 0);
-    }
-
-    public SettingsPanel(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
-    }
-}
-
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/SettingsView.java b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/SettingsView.java
new file mode 100644
index 0000000..f9ba908
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/SettingsView.java
@@ -0,0 +1,99 @@
+/*
+ * 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.
+ */
+
+package com.android.systemui.statusbar.tablet;
+
+import android.app.StatusBarManager;
+import android.content.Context;
+import android.content.Intent;
+import android.provider.Settings;
+import android.util.AttributeSet;
+import android.util.Slog;
+import android.widget.LinearLayout;
+import android.view.View;
+import android.widget.CompoundButton;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.android.systemui.R;
+import com.android.systemui.statusbar.policy.AirplaneModeController;
+import com.android.systemui.statusbar.policy.AutoRotateController;
+
+public class SettingsView extends LinearLayout implements View.OnClickListener {
+    static final String TAG = "SettingsView";
+
+    AirplaneModeController mAirplane;
+    AutoRotateController mRotate;
+
+    public SettingsView(Context context, AttributeSet attrs) {
+        this(context, attrs, 0);
+    }
+
+    public SettingsView(Context context, AttributeSet attrs, int defStyle) {
+        super(context, attrs, defStyle);
+    }
+
+    @Override
+    protected void onFinishInflate() {
+        super.onFinishInflate();
+
+        final Context context = getContext();
+
+        mAirplane = new AirplaneModeController(context,
+                (CompoundButton)findViewById(R.id.airplane_checkbox));
+        findViewById(R.id.network).setOnClickListener(this);
+        mRotate = new AutoRotateController(context,
+                (CompoundButton)findViewById(R.id.rotate_checkbox));
+        findViewById(R.id.settings).setOnClickListener(this);
+    }
+
+    @Override
+    protected void onDetachedFromWindow() {
+        super.onDetachedFromWindow();
+        mAirplane.release();
+    }
+
+    public void onClick(View v) {
+        switch (v.getId()) {
+            case R.id.network:
+                onClickNetwork();
+                break;
+            case R.id.settings:
+                onClickSettings();
+                break;
+        }
+    }
+
+    private StatusBarManager getStatusBarManager() {
+        return (StatusBarManager)getContext().getSystemService(Context.STATUS_BAR_SERVICE);
+    }
+
+    // Network
+    // ----------------------------
+    private void onClickNetwork() {
+        Slog.d(TAG, "onClickNetwork");
+    }
+
+    // Settings
+    // ----------------------------
+    private void onClickSettings() {
+        Slog.d(TAG, "onClickSettings");
+        getContext().startActivity(new Intent(Settings.ACTION_SETTINGS)
+                .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
+        getStatusBarManager().collapse();
+    }
+}
+
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/ShirtPocket.java b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/ShirtPocket.java
index 0cb9249..d1e61a9 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/ShirtPocket.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/ShirtPocket.java
@@ -184,7 +184,7 @@
     };
 
     private void setupWindow() {
-        mWindow = View.inflate(getContext(), R.layout.sysbar_panel_pocket, null);
+        mWindow = View.inflate(getContext(), R.layout.status_bar_pocket_panel, null);
 
         mPreviewIcon = (ImageView) mWindow.findViewById(R.id.icon);
         mDescription = (TextView) mWindow.findViewById(R.id.description);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/SystemPanel.java b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/SystemPanel.java
deleted file mode 100644
index 41b44c2..0000000
--- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/SystemPanel.java
+++ /dev/null
@@ -1,403 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.systemui.statusbar.tablet;
-
-import android.bluetooth.BluetoothAdapter;
-import android.content.BroadcastReceiver;
-import android.content.ContentResolver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.location.LocationManager;
-import android.media.AudioManager;
-import android.telephony.PhoneStateListener;
-import android.telephony.ServiceState;
-import android.os.IPowerManager;
-import android.os.RemoteException;
-import android.os.ServiceManager;
-import android.provider.Settings;
-import android.util.AttributeSet;
-import android.util.Slog;
-import android.view.View;
-import android.view.IWindowManager;
-import android.view.WindowManager;
-import android.view.WindowManagerImpl;
-import android.widget.ImageButton;
-import android.widget.LinearLayout;
-import android.widget.TextView;
-import android.widget.Toast;
-
-import com.android.internal.telephony.IccCard;
-import com.android.internal.telephony.TelephonyIntents;
-import com.android.internal.telephony.cdma.EriInfo;
-import com.android.internal.telephony.cdma.TtyIntent;
-
-import com.android.server.WindowManagerService;
-
-import com.android.systemui.statusbar.*;
-import com.android.systemui.R;
-
-public class SystemPanel extends LinearLayout implements StatusBarPanel {
-    private static final String TAG = "SystemPanel";
-    private static final boolean DEBUG = TabletStatusBar.DEBUG;
-
-    private static final int MINIMUM_BACKLIGHT = android.os.Power.BRIGHTNESS_DIM + 5;
-    private static final int MAXIMUM_BACKLIGHT = android.os.Power.BRIGHTNESS_ON;
-    private static final int DEFAULT_BACKLIGHT = (int) (android.os.Power.BRIGHTNESS_ON * 0.4f);
-
-    private TabletStatusBar mBar;
-    private boolean mAirplaneMode;
-
-    private ImageButton mBrightnessButton;
-    private ImageButton mSoundButton;
-    private ImageButton mOrientationButton;
-    private ImageButton mAirplaneButton;
-    private ImageButton mGpsButton;
-    private ImageButton mBluetoothButton;
-
-    private final IWindowManager mWM;
-
-    private final AudioManager mAudioManager;
-    private final BluetoothAdapter mBluetoothAdapter;
-
-    public boolean isInContentArea(int x, int y) {
-        final int l = getPaddingLeft();
-        final int r = getWidth() - getPaddingRight();
-        final int t = getPaddingTop();
-        final int b = getHeight() - getPaddingBottom();
-        return x >= l && x < r && y >= t && y < b;
-    }
-
-    private BroadcastReceiver mReceiver = new BroadcastReceiver() {
-        @Override
-        public void onReceive(Context context, Intent intent) {
-            final String action = intent.getAction();
-            if (action.equals(AudioManager.RINGER_MODE_CHANGED_ACTION)) {
-                refreshSound();
-            } else if (action.equals(BluetoothAdapter.ACTION_STATE_CHANGED)) {
-                refreshBluetooth();
-            }
-        }
-    };
-
-    public void setBar(TabletStatusBar bar) {
-        mBar = bar;
-    }
-
-    public SystemPanel(Context context, AttributeSet attrs) {
-        this(context, attrs, 0);
-    }
-
-    public SystemPanel(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
-
-        // our mighty overlord
-        mWM = IWindowManager.Stub.asInterface(
-                    ServiceManager.getService("window"));
-
-        // audio status 
-        mAudioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
-
-        // Bluetooth
-        mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
-    }
-
-    public void onAttachedToWindow() {
-        TextView settingsButton = (TextView)findViewById(R.id.settings_button);
-        settingsButton.setOnClickListener(new View.OnClickListener() {
-            public void onClick(View v) {
-                getContext().startActivity(new Intent(android.provider.Settings.ACTION_SETTINGS)
-                        .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
-                mBar.animateCollapse();
-            }});
-
-        mBrightnessButton = (ImageButton)findViewById(R.id.brightness);
-        mBrightnessButton.setOnClickListener(new View.OnClickListener() {
-            public void onClick(View v) {
-                rotateBrightness();
-            }
-        });
-
-        mSoundButton = (ImageButton)findViewById(R.id.sound);
-        mSoundButton.setAlpha(getSilentMode() ? 0x7F : 0xFF);
-        mSoundButton.setOnClickListener(new View.OnClickListener() {
-            public void onClick(View v) {
-                setSilentMode(!getSilentMode());
-                mSoundButton.setAlpha(getSilentMode() ? 0x7F : 0xFF);
-            }
-        });
-        mOrientationButton = (ImageButton)findViewById(R.id.orientation);
-        mOrientationButton.setImageResource(
-            getAutoRotate()
-                ? R.drawable.ic_sysbar_rotate_on
-                : R.drawable.ic_sysbar_rotate_off);
-        mOrientationButton.setOnClickListener(new View.OnClickListener() {
-            public void onClick(View v) {
-                setAutoRotate(!getAutoRotate());
-                mOrientationButton.setImageResource(
-                    getAutoRotate()
-                        ? R.drawable.ic_sysbar_rotate_on
-                        : R.drawable.ic_sysbar_rotate_off);
-                Toast.makeText(getContext(), 
-                    getAutoRotate() 
-                        ? R.string.toast_rotation_free
-                        : R.string.toast_rotation_locked,
-                    Toast.LENGTH_SHORT).show();
-            }
-        });
-
-        mAirplaneButton = (ImageButton)findViewById(R.id.airplane);
-        mAirplaneButton.setAlpha(mAirplaneMode ? 0xFF : 0x7F);
-        mAirplaneButton.setOnClickListener(new View.OnClickListener() {
-            public void onClick(View v) {
-                boolean newMode = !getAirplaneMode();
-                Toast.makeText(getContext(), "Attempting to turn "
-                    + (newMode ? "on" : "off") + " airplane mode (flaky).",
-                    Toast.LENGTH_SHORT).show();
-                setAirplaneMode(newMode);
-            }
-        });
-
-        mGpsButton = (ImageButton)findViewById(R.id.gps);
-        mGpsButton.setOnClickListener(new View.OnClickListener() {
-            public void onClick(View v) {
-                toggleGps();
-                refreshGps();
-            }
-        });
-
-        mBluetoothButton = (ImageButton)findViewById(R.id.bluetooth);
-        mBluetoothButton.setOnClickListener(new View.OnClickListener() {
-            public void onClick(View v) {
-                toggleBluetooth();
-                refreshBluetooth();
-            }
-        });
-
-        // register for broadcasts
-        IntentFilter filter = new IntentFilter();
-        filter.addAction(AudioManager.RINGER_MODE_CHANGED_ACTION);
-        filter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);
-        getContext().registerReceiver(mReceiver, filter);
-        
-        refreshBluetooth();
-        refreshGps();
-    }
-
-    public void onDetachedFromWindow() {
-        getContext().unregisterReceiver(mReceiver);
-    }
-
-    // ----------------------------------------------------------------------
-
-//    private boolean isAutoBrightness() {
-//        Context context = getContext();
-//        try {
-//            IPowerManager power = IPowerManager.Stub.asInterface(
-//                    ServiceManager.getService("power"));
-//            if (power != null) {
-//                int brightnessMode = Settings.System.getInt(context.getContentResolver(),
-//                        Settings.System.SCREEN_BRIGHTNESS_MODE);
-//                return brightnessMode == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC;
-//            }
-//        } catch (RemoteException e) {
-//        } catch (Settings.SettingNotFoundException e) {
-//        }
-//        return false;
-//    }
-
-    private void rotateBrightness() {
-        int icon = R.drawable.ic_sysbar_brightness;
-        int bg = R.drawable.sysbar_toggle_bg_on;
-        Context context = getContext();
-        try {
-            IPowerManager power = IPowerManager.Stub.asInterface(
-                    ServiceManager.getService("power"));
-            if (power != null) {
-                ContentResolver cr = context.getContentResolver();
-                int brightness = Settings.System.getInt(cr,
-                        Settings.System.SCREEN_BRIGHTNESS);
-                int brightnessMode = Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL;
-                //Only get brightness setting if available
-                if (context.getResources().getBoolean(
-                        com.android.internal.R.bool.config_automatic_brightness_available)) {
-                    brightnessMode = Settings.System.getInt(cr,
-                            Settings.System.SCREEN_BRIGHTNESS_MODE);
-                }
-
-                // Rotate AUTO -> MINIMUM -> DEFAULT -> MAXIMUM
-                // Technically, not a toggle...
-                if (brightnessMode == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC) {
-                    brightness = MINIMUM_BACKLIGHT;
-                    icon = R.drawable.ic_sysbar_brightness_low;
-                    brightnessMode = Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL;
-                } else if (brightness < DEFAULT_BACKLIGHT) {
-                    brightness = DEFAULT_BACKLIGHT;
-                } else if (brightness < MAXIMUM_BACKLIGHT) {
-                    brightness = MAXIMUM_BACKLIGHT;
-                } else {
-                    brightnessMode = Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC;
-                    brightness = MINIMUM_BACKLIGHT;
-                    icon = R.drawable.ic_sysbar_brightness_auto;
-                }
-
-                if (context.getResources().getBoolean(
-                        com.android.internal.R.bool.config_automatic_brightness_available)) {
-                    // Set screen brightness mode (automatic or manual)
-                    Settings.System.putInt(context.getContentResolver(),
-                            Settings.System.SCREEN_BRIGHTNESS_MODE,
-                            brightnessMode);
-                } else {
-                    // Make sure we set the brightness if automatic mode isn't available
-                    brightnessMode = Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL;
-                }
-                if (brightnessMode == Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL) {
-                    power.setBacklightBrightness(brightness);
-                    Settings.System.putInt(cr, Settings.System.SCREEN_BRIGHTNESS, brightness);
-                }
-            }
-        } catch (RemoteException e) {
-        } catch (Settings.SettingNotFoundException e) {
-        }
-
-        mBrightnessButton.setImageResource(icon);
-        mBrightnessButton.setBackgroundResource(bg);
-    }
-
-    PhoneStateListener mPhoneStateListener = new PhoneStateListener() {
-        @Override
-        public void onServiceStateChanged(ServiceState serviceState) {
-            if (DEBUG) {
-                Slog.d(TAG, "phone service state changed: " + serviceState.getState());
-            }
-            mAirplaneMode = serviceState.getState() == ServiceState.STATE_POWER_OFF;
-            if (mAirplaneButton != null) {
-                mAirplaneButton.setImageResource(mAirplaneMode 
-                                                 ? R.drawable.ic_sysbar_airplane_on
-                                                 : R.drawable.ic_sysbar_airplane_off);
-                mAirplaneButton.setBackgroundResource(mAirplaneMode 
-                                                 ? R.drawable.sysbar_toggle_bg_on
-                                                 : R.drawable.sysbar_toggle_bg_off);
-            }
-        }
-    };
-
-    private boolean getAirplaneMode() {
-        return mAirplaneMode;
-    }
-
-    private void setAirplaneMode(boolean on) {
-        Settings.System.putInt(
-                mContext.getContentResolver(),
-                Settings.System.AIRPLANE_MODE_ON,
-                on ? 1 : 0);
-        Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
-        intent.addFlags(Intent.FLAG_RECEIVER_REPLACE_PENDING);
-        intent.putExtra("state", on);
-        getContext().sendBroadcast(intent);
-    }
-
-    boolean getSilentMode() {
-        return mAudioManager.getRingerMode() != AudioManager.RINGER_MODE_NORMAL;
-    }
-
-    void setSilentMode(boolean on) {
-        if (on) {
-            mAudioManager.setRingerMode((Settings.System.getInt(mContext.getContentResolver(),
-                Settings.System.VIBRATE_IN_SILENT, 1) == 1)
-                ? AudioManager.RINGER_MODE_VIBRATE
-                : AudioManager.RINGER_MODE_SILENT);
-        } else {
-            mAudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
-        }
-    }
-
-    void refreshSound() {
-        boolean silent = getSilentMode();
-        mSoundButton.setImageResource(!silent 
-                                         ? R.drawable.ic_sysbar_sound_on
-                                         : R.drawable.ic_sysbar_sound_off);
-        mSoundButton.setBackgroundResource(!silent 
-                                         ? R.drawable.sysbar_toggle_bg_on
-                                         : R.drawable.sysbar_toggle_bg_off);
-    }
-
-    void toggleBluetooth() {
-        if (mBluetoothAdapter == null) return;
-        if (mBluetoothAdapter.isEnabled()) {
-            mBluetoothAdapter.disable();
-        } else {
-            mBluetoothAdapter.enable();
-        }
-    }
-
-    void refreshBluetooth() {
-        boolean on = mBluetoothAdapter != null && mBluetoothAdapter.isEnabled();
-        mBluetoothButton.setImageResource(on ? R.drawable.ic_sysbar_bluetooth_on
-                                             : R.drawable.ic_sysbar_bluetooth_off);
-        mBluetoothButton.setBackgroundResource(on
-                                         ? R.drawable.sysbar_toggle_bg_on
-                                         : R.drawable.sysbar_toggle_bg_off);
-    }
-
-    private boolean isGpsEnabled() {
-        ContentResolver res = mContext.getContentResolver();
-        return Settings.Secure.isLocationProviderEnabled(
-                                res, LocationManager.GPS_PROVIDER);
-    }
-
-    private void toggleGps() {
-        Settings.Secure.setLocationProviderEnabled(mContext.getContentResolver(),
-                LocationManager.GPS_PROVIDER, !isGpsEnabled());
-    }
-
-    private void refreshGps() {
-        boolean on = isGpsEnabled();
-        mGpsButton.setImageResource(on ? R.drawable.ic_sysbar_gps_on
-                                       : R.drawable.ic_sysbar_gps_off);
-        mGpsButton.setBackgroundResource(on
-                                         ? R.drawable.sysbar_toggle_bg_on
-                                         : R.drawable.sysbar_toggle_bg_off);
-    }
-
-    void setAutoRotate(boolean rot) {
-        try {
-            ContentResolver cr = getContext().getContentResolver();
-            if (rot) {
-                mWM.thawRotation();
-            } else {
-                mWM.freezeRotation();
-            }
-        } catch (RemoteException exc) {
-        }
-    }
-
-    boolean getAutoRotate() {
-        ContentResolver cr = getContext().getContentResolver();
-        return 1 == Settings.System.getInt(cr,
-                Settings.System.ACCELEROMETER_ROTATION,
-                1);
-    }
-
-    int getDisplayRotation() {
-        try {
-            return mWM.getRotation();
-        } catch (RemoteException exc) {
-            return 0;
-        }
-    }
-}
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 a934cd7..3cae088 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java
@@ -102,12 +102,13 @@
     NotificationIconArea mNotificationIconArea;
     View mNavigationArea;
 
-    View mBackButton;
+    ImageView mBackButton;
     View mHomeButton;
     View mMenuButton;
     View mRecentButton;
 
-    InputMethodButton mInputMethodButton;
+    InputMethodButton mInputMethodSwitchButton;
+    InputMethodButton mInputMethodShortcutButton;
 
     NotificationPanel mNotificationPanel;
     NotificationPeekPanel mNotificationPeekWindow;
@@ -144,11 +145,11 @@
 
         final Resources res = context.getResources();
         final int barHeight= res.getDimensionPixelSize(
-            com.android.internal.R.dimen.status_bar_height);
+                com.android.internal.R.dimen.status_bar_height);
 
         // Notification Panel
         mNotificationPanel = (NotificationPanel)View.inflate(context,
-                R.layout.sysbar_panel_notifications, null);
+                R.layout.status_bar_notification_panel, null);
         mNotificationPanel.setVisibility(View.GONE);
         mNotificationPanel.setOnTouchListener(
                 new TouchOutsideListener(MSG_CLOSE_NOTIFICATION_PANEL, mNotificationPanel));
@@ -179,11 +180,11 @@
 
         // Notification preview window
         mNotificationPeekWindow = (NotificationPeekPanel) View.inflate(context,
-                R.layout.sysbar_panel_notification_peek, null);
+                R.layout.status_bar_notification_peek, null);
         mNotificationPeekRow = (ViewGroup) mNotificationPeekWindow.findViewById(R.id.content);
         mNotificationPeekWindow.setVisibility(View.GONE);
         mNotificationPeekWindow.setOnTouchListener(
-                new TouchOutsideListener(MSG_CLOSE_NOTIFICATION_PANEL, mNotificationPeekWindow));
+                new TouchOutsideListener(MSG_CLOSE_NOTIFICATION_PEEK, mNotificationPeekWindow));
         mNotificationPeekScrubRight = new LayoutTransition();
         mNotificationPeekScrubRight.setAnimator(LayoutTransition.APPEARING, 
                 ObjectAnimator.ofInt(null, "left", -512, 0));
@@ -215,8 +216,8 @@
 
         // Recents Panel
         if (USE_2D_RECENTS) {
-            mRecentsPanel = (RecentAppsPanel) View.inflate(context, R.layout.sysbar_panel_recent,
-                    null);
+            mRecentsPanel = (RecentAppsPanel) View.inflate(context,
+                    R.layout.status_bar_recent_panel, null);
             mRecentsPanel.setVisibility(View.GONE);
             mRecentsPanel.setOnTouchListener(new TouchOutsideListener(MSG_CLOSE_RECENTS_PANEL,
                     mRecentsPanel));
@@ -286,7 +287,7 @@
 
         // The navigation buttons
         mNavigationArea = sb.findViewById(R.id.navigationArea);
-        mBackButton = mNavigationArea.findViewById(R.id.back);
+        mBackButton = (ImageView)mNavigationArea.findViewById(R.id.back);
         mHomeButton = mNavigationArea.findViewById(R.id.home);
         mMenuButton = mNavigationArea.findViewById(R.id.menu);
         mRecentButton = mNavigationArea.findViewById(R.id.recent_apps);
@@ -294,7 +295,8 @@
         mRecentButton.setOnClickListener(mOnClickListener);
 
         // The bar contents buttons
-        mInputMethodButton = (InputMethodButton) sb.findViewById(R.id.imeButton);
+        mInputMethodSwitchButton = (InputMethodButton) sb.findViewById(R.id.imeSwitchButton);
+        mInputMethodShortcutButton = (InputMethodButton) sb.findViewById(R.id.imeShortcutButton);
 
         // "shadows" of the status bar features, for lights-out mode
         mBackShadow = sb.findViewById(R.id.back_shadow);
@@ -386,6 +388,7 @@
                         mNotificationPanel.setVisibility(View.VISIBLE);
                         // synchronize with current shadow state
                         mShadowController.hideElement(mNotificationArea);
+                        mTicker.halt();
                     }
                     break;
                 case MSG_CLOSE_NOTIFICATION_PANEL:
@@ -456,12 +459,7 @@
         if (DEBUG) Slog.d(TAG, "addNotification(" + key + " -> " + notification + ")");
         addNotificationViews(key, notification);
 
-        boolean immersive = false;
-        try {
-            immersive = ActivityManagerNative.getDefault().isTopActivityImmersive();
-            //Slog.d(TAG, "Top activity is " + (immersive?"immersive":"not immersive"));
-        } catch (RemoteException ex) {
-        }
+        final boolean immersive = isImmersive();
         if (false && immersive) {
             // TODO: immersive mode popups for tablet
         } else if (notification.notification.fullScreenIntent != null) {
@@ -473,7 +471,7 @@
             } catch (PendingIntent.CanceledException e) {
             }
         } else {
-            tick(notification);
+            tick(key, notification);
         }
 
         setAreThereNotifications();
@@ -547,7 +545,14 @@
             removeNotificationViews(key);
             addNotificationViews(key, notification);
         }
-        // TODO: ticker; immersive mode
+        // fullScreenIntent doesn't happen on updates.  You need to clear & repost a new
+        // notification.
+        final boolean immersive = isImmersive();
+        if (false && immersive) {
+            // TODO: immersive mode
+        } else {
+            tick(key, notification);
+        }
 
         setAreThereNotifications();
     }
@@ -555,6 +560,7 @@
     public void removeNotification(IBinder key) {
         if (DEBUG) Slog.d(TAG, "removeNotification(" + key + ") // TODO");
         removeNotificationViews(key);
+        mTicker.remove(key);
         setAreThereNotifications();
     }
 
@@ -601,7 +607,7 @@
         return n.tickerView != null || !TextUtils.isEmpty(n.tickerText);
     }
 
-    private void tick(StatusBarNotification n) {
+    private void tick(IBinder key, StatusBarNotification n) {
         // Don't show the ticker when the windowshade is open.
         if (mNotificationPanel.getVisibility() == View.VISIBLE) {
             return;
@@ -613,7 +619,7 @@
         if (hasTicker(n.notification) && mStatusBarView.getWindowToken() != null) {
             if (0 == (mDisabled & (StatusBarManager.DISABLE_NOTIFICATION_ICONS
                             | StatusBarManager.DISABLE_NOTIFICATION_TICKER))) {
-                mTicker.add(n);
+                mTicker.add(key, n);
             }
         }
     }
@@ -645,13 +651,26 @@
         mMenuButton.setVisibility(visible ? View.VISIBLE : View.GONE);
     }
 
-    public void setIMEButtonVisible(boolean visible) {
+    public void setIMEButtonVisible(IBinder token, boolean visible) {
         if (DEBUG) {
             Slog.d(TAG, (visible?"showing":"hiding") + " the IME button");
         }
-        mInputMethodButton.setIMEButtonVisible(visible);
+        mInputMethodSwitchButton.setIMEButtonVisible(token, visible);
+        mInputMethodShortcutButton.setIMEButtonVisible(token, visible);
+        mBackButton.setImageResource(
+                visible ? R.drawable.ic_sysbar_back_ime : R.drawable.ic_sysbar_back);
     }
 
+    private boolean isImmersive() {
+        try {
+            return ActivityManagerNative.getDefault().isTopActivityImmersive();
+            //Slog.d(TAG, "Top activity is " + (immersive?"immersive":"not immersive"));
+        } catch (RemoteException ex) {
+            // the end is nigh
+            return false;
+        }
+    }
+    
     private void setAreThereNotifications() {
         final boolean hasClearable = mNotns.hasClearableItems();
 
@@ -815,8 +834,7 @@
                 case MotionEvent.ACTION_MOVE:
                     // peek and switch icons if necessary
                     int numIcons = mIconLayout.getChildCount();
-                    int peekIndex = 
-                            (int)((float)event.getX() * numIcons / mIconLayout.getWidth());
+                    int peekIndex = (int)((float)event.getX() * numIcons / mIconLayout.getWidth());
                     if (peekIndex > numIcons - 1) peekIndex = numIcons - 1;
                     else if (peekIndex < 0) peekIndex = 0;
 
@@ -828,8 +846,7 @@
                         mHandler.removeMessages(MSG_OPEN_NOTIFICATION_PEEK);
 
                         // no delay if we're scrubbing left-right
-                        mHandler.sendMessageDelayed(peekMsg,
-                                peeking ? 0 : mNotificationPeekTapDuration);
+                        mHandler.sendMessage(peekMsg);
                     }
 
                     // check for fling
@@ -851,7 +868,7 @@
                 case MotionEvent.ACTION_CANCEL:
                     mHandler.removeMessages(MSG_OPEN_NOTIFICATION_PEEK);
                     if (peeking) {
-                        mHandler.sendEmptyMessageDelayed(MSG_CLOSE_NOTIFICATION_PEEK, 250);
+                        mHandler.sendEmptyMessageDelayed(MSG_CLOSE_NOTIFICATION_PEEK, 5000);
                     }
                     mVT.recycle();
                     mVT = null;
@@ -984,7 +1001,7 @@
         // create the row view
         LayoutInflater inflater = (LayoutInflater)mContext.getSystemService(
                 Context.LAYOUT_INFLATER_SERVICE);
-        View row = inflater.inflate(R.layout.status_bar_latest_event, parent, false);
+        View row = inflater.inflate(R.layout.status_bar_notification_row, parent, false);
         workAroundBadLayerDrawableOpacity(row);
         View vetoButton = row.findViewById(R.id.veto);
         if (entry.notification.isClearable()) {
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 b05fe1a..b3aed03 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletTicker.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletTicker.java
@@ -25,6 +25,7 @@
 import android.graphics.PixelFormat;
 import android.graphics.drawable.Drawable;
 import android.os.Handler;
+import android.os.IBinder;
 import android.os.Message;
 import android.util.Slog;
 import android.view.Gravity;
@@ -47,6 +48,9 @@
 public class TabletTicker extends Handler {
     private static final String TAG = "StatusBar.TabletTicker";
 
+    // 3 is enough to let us see most cases, but not get so far behind that it's too annoying.
+    private static final int QUEUE_LENGTH = 3;
+
     private static final int MSG_ADVANCE = 1;
 
     private static final int ADVANCE_DELAY = 5000; // 5 seconds
@@ -54,42 +58,77 @@
     private Context mContext;
 
     private ViewGroup mWindow;
+    private IBinder mCurrentKey;
     private StatusBarNotification mCurrentNotification;
     private View mCurrentView;
 
-    private StatusBarNotification[] mQueue;
+    private IBinder[] mKeys = new IBinder[QUEUE_LENGTH];
+    private StatusBarNotification[] mQueue = new StatusBarNotification[QUEUE_LENGTH];
     private int mQueuePos;
 
     public TabletTicker(Context context) {
         mContext = context;
-
-        // TODO: Make this a configuration value.
-        // 3 is enough to let us see most cases, but not get so far behind that it's annoying.
-        mQueue = new StatusBarNotification[3];
     }
 
-    public void add(StatusBarNotification notification) {
+    public void add(IBinder key, StatusBarNotification notification) {
         if (false) {
-            Slog.d(TAG, "add mCurrentNotification=" + mCurrentNotification
+            Slog.d(TAG, "add 1 mCurrentNotification=" + mCurrentNotification
                     + " mQueuePos=" + mQueuePos + " mQueue=" + Arrays.toString(mQueue));
         }
+
+        // If it's already in here, remove whatever's in there and put the new one at the end.
+        remove(key, false);
+
+        mKeys[mQueuePos] = key;
         mQueue[mQueuePos] = notification;
 
-        // If nothing is running now, start the next one
-        if (mCurrentNotification == null) {
+        // If nothing is running now, start the next one.
+        if (mQueuePos == 0 && mCurrentNotification == null) {
             sendEmptyMessage(MSG_ADVANCE);
         }
 
-        if (mQueuePos < mQueue.length - 1) {
+        if (mQueuePos < QUEUE_LENGTH - 1) {
             mQueuePos++;
         }
     }
 
+    public void remove(IBinder key) {
+        remove(key, true);
+    }
+
+    public void remove(IBinder key, boolean advance) {
+        if (mCurrentKey == key) {
+            Slog.d(TAG, "removed current");
+            // Showing now
+            if (advance) {
+                removeMessages(MSG_ADVANCE);
+                sendEmptyMessage(MSG_ADVANCE);
+            }
+        } else {
+            // In the queue
+            for (int i=0; i<QUEUE_LENGTH; i++) {
+                if (mKeys[i] == key) {
+                    Slog.d(TAG, "removed from queue: " + i);
+                    for (; i<QUEUE_LENGTH-1; i++) {
+                        mKeys[i] = mKeys[i+1];
+                        mQueue[i] = mQueue[i+1];
+                    }
+                    mKeys[QUEUE_LENGTH-1] = null;
+                    mQueue[QUEUE_LENGTH-1] = null;
+                    if (mQueuePos > 0) {
+                        mQueuePos--;
+                    }
+                    break;
+                }
+            }
+        }
+    }
+
     public void halt() {
         removeMessages(MSG_ADVANCE);
-        if (mCurrentView != null) {
-            final int N = mQueue.length;
-            for (int i=0; i<N; i++) {
+        if (mCurrentView != null || mQueuePos != 0) {
+            for (int i=0; i<QUEUE_LENGTH; i++) {
+                mKeys[i] = null;
                 mQueue[i] = null;
             }
             mQueuePos = 0;
@@ -110,14 +149,14 @@
         if (mCurrentView != null) {
             mWindow.removeView(mCurrentView);
             mCurrentView = null;
+            mCurrentKey = null;
             mCurrentNotification = null;
         }
 
         // In with the new...
-        StatusBarNotification next = dequeue();
-        while (next != null) {
-            mCurrentNotification = next;
-            mCurrentView = makeTickerView(next);
+        dequeue();
+        while (mCurrentNotification != null) {
+            mCurrentView = makeTickerView(mCurrentNotification);
             if (mCurrentView != null) {
                 if (mWindow == null) {
                     mWindow = makeWindow();
@@ -127,31 +166,33 @@
                 sendEmptyMessageDelayed(MSG_ADVANCE, ADVANCE_DELAY);
                 break;
             }
-            next = dequeue();
+            dequeue();
         }
 
         // if there's nothing left, close the window
         // TODO: Do this when the animation is done instead
-        if (mCurrentView == null) {
+        if (mCurrentView == null && mWindow != null) {
             WindowManagerImpl.getDefault().removeView(mWindow);
             mWindow = null;
         }
     }
 
-    private StatusBarNotification dequeue() {
-        StatusBarNotification notification = mQueue[0];
+    private void dequeue() {
+        mCurrentKey = mKeys[0];
+        mCurrentNotification = mQueue[0];
         if (false) {
             Slog.d(TAG, "dequeue mQueuePos=" + mQueuePos + " mQueue=" + Arrays.toString(mQueue));
         }
         final int N = mQueuePos;
         for (int i=0; i<N; i++) {
+            mKeys[i] = mKeys[i+1];
             mQueue[i] = mQueue[i+1];
         }
+        mKeys[N] = null;
         mQueue[N] = null;
         if (mQueuePos > 0) {
             mQueuePos--;
         }
-        return notification;
     }
 
     private ViewGroup makeWindow() {
@@ -187,7 +228,7 @@
             iconId = R.id.left_icon;
         }
         if (n.tickerView != null) {
-            group = (ViewGroup)inflater.inflate(R.layout.ticker, null, false);
+            group = (ViewGroup)inflater.inflate(R.layout.status_bar_ticker_panel, null, false);
             View expanded = null;
             Exception exception = null;
             try {
@@ -209,7 +250,7 @@
             lp.gravity = Gravity.BOTTOM;
             group.addView(expanded, lp);
         } else if (n.tickerText != null) {
-            group = (ViewGroup)inflater.inflate(R.layout.ticker_compat, mWindow, false);
+            group = (ViewGroup)inflater.inflate(R.layout.status_bar_ticker_compat, mWindow, false);
             final Drawable icon = StatusBarIconView.getIcon(mContext,
                     new StatusBarIcon(notification.pkg, n.icon, n.iconLevel, 0));
             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 f892e9e..1373627 100755
--- a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
+++ b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
@@ -588,7 +588,7 @@
         // We can't initialize this in init() since the configuration hasn't been loaded yet.
         if (mLongPressOnHomeBehavior < 0) {
             mLongPressOnHomeBehavior
-                    = mContext.getResources().getInteger(R.integer.config_longPressOnPowerBehavior);
+                    = mContext.getResources().getInteger(R.integer.config_longPressOnHomeBehavior);
             if (mLongPressOnHomeBehavior < LONG_PRESS_HOME_NOTHING ||
                     mLongPressOnHomeBehavior > LONG_PRESS_HOME_RECENT_ACTIVITY) {
                 mLongPressOnHomeBehavior = LONG_PRESS_HOME_NOTHING;
@@ -600,7 +600,6 @@
             sendCloseSystemWindows(SYSTEM_DIALOG_REASON_RECENT_APPS);
         }
         
-        // Use 3d Recents dialog
         if (mLongPressOnHomeBehavior == LONG_PRESS_HOME_RECENT_DIALOG) {
             // Fallback to dialog if we fail to launch the above.
             if (mRecentAppsDialog == null) {
diff --git a/services/audioflinger/A2dpAudioInterface.cpp b/services/audioflinger/A2dpAudioInterface.cpp
index 995e31c..aee01ab 100644
--- a/services/audioflinger/A2dpAudioInterface.cpp
+++ b/services/audioflinger/A2dpAudioInterface.cpp
@@ -23,10 +23,13 @@
 
 #include "A2dpAudioInterface.h"
 #include "audio/liba2dp.h"
-
+#include <hardware_legacy/power.h>
 
 namespace android {
 
+static const char *sA2dpWakeLock = "A2dpOutputStream";
+#define MAX_WRITE_RETRIES  5
+
 // ----------------------------------------------------------------------------
 
 //AudioHardwareInterface* A2dpAudioInterface::createA2dpInterface()
@@ -263,44 +266,55 @@
 A2dpAudioInterface::A2dpAudioStreamOut::~A2dpAudioStreamOut()
 {
     LOGV("A2dpAudioStreamOut destructor");
-    standby();
     close();
     LOGV("A2dpAudioStreamOut destructor returning from close()");
 }
 
 ssize_t A2dpAudioInterface::A2dpAudioStreamOut::write(const void* buffer, size_t bytes)
 {
-    Mutex::Autolock lock(mLock);
-
-    size_t remaining = bytes;
     status_t status = -1;
+    {
+        Mutex::Autolock lock(mLock);
 
-    if (!mBluetoothEnabled || mClosing || mSuspended) {
-        LOGV("A2dpAudioStreamOut::write(), but bluetooth disabled \
-               mBluetoothEnabled %d, mClosing %d, mSuspended %d",
-                mBluetoothEnabled, mClosing, mSuspended);
-        goto Error;
-    }
+        size_t remaining = bytes;
 
-    status = init();
-    if (status < 0)
-        goto Error;
-
-    while (remaining > 0) {
-        status = a2dp_write(mData, buffer, remaining);
-        if (status <= 0) {
-            LOGE("a2dp_write failed err: %d\n", status);
+        if (!mBluetoothEnabled || mClosing || mSuspended) {
+            LOGV("A2dpAudioStreamOut::write(), but bluetooth disabled \
+                   mBluetoothEnabled %d, mClosing %d, mSuspended %d",
+                    mBluetoothEnabled, mClosing, mSuspended);
             goto Error;
         }
-        remaining -= status;
-        buffer = ((char *)buffer) + status;
+
+        if (mStandby) {
+            acquire_wake_lock (PARTIAL_WAKE_LOCK, sA2dpWakeLock);
+            mStandby = false;
+        }
+
+        status = init();
+        if (status < 0)
+            goto Error;
+
+        int retries = MAX_WRITE_RETRIES;
+        while (remaining > 0 && retries) {
+            status = a2dp_write(mData, buffer, remaining);
+            if (status < 0) {
+                LOGE("a2dp_write failed err: %d\n", status);
+                goto Error;
+            }
+            if (status == 0) {
+                retries--;
+            }
+            remaining -= status;
+            buffer = (char *)buffer + status;
+        }
+
+        return bytes;
+
     }
-
-    mStandby = false;
-
-    return bytes;
-
 Error:
+
+    standby();
+
     // Simulate audio output timing in case of error
     usleep(((bytes * 1000 )/ frameSize() / sampleRate()) * 1000);
 
@@ -324,19 +338,22 @@
 
 status_t A2dpAudioInterface::A2dpAudioStreamOut::standby()
 {
-    int result = 0;
-
-    if (mClosing) {
-        LOGV("Ignore standby, closing");
-        return result;
-    }
-
     Mutex::Autolock lock(mLock);
+    return standby_l();
+}
+
+status_t A2dpAudioInterface::A2dpAudioStreamOut::standby_l()
+{
+    int result = NO_ERROR;
 
     if (!mStandby) {
-        result = a2dp_stop(mData);
-        if (result == 0)
-            mStandby = true;
+        LOGV_IF(mClosing || !mBluetoothEnabled, "Standby skip stop: closing %d enabled %d",
+                mClosing, mBluetoothEnabled);
+        if (!mClosing && mBluetoothEnabled) {
+            result = a2dp_stop(mData);
+        }
+        release_wake_lock(sA2dpWakeLock);
+        mStandby = true;
     }
 
     return result;
@@ -362,6 +379,9 @@
     key = String8("closing");
     if (param.get(key, value) == NO_ERROR) {
         mClosing = (value == "true");
+        if (mClosing) {
+            standby();
+        }
         param.remove(key);
     }
     key = AudioParameter::keyRouting;
@@ -444,6 +464,7 @@
 
 status_t A2dpAudioInterface::A2dpAudioStreamOut::close_l()
 {
+    standby_l();
     if (mData) {
         LOGV("A2dpAudioStreamOut::close_l() calling a2dp_cleanup(mData)");
         a2dp_cleanup(mData);
diff --git a/services/audioflinger/A2dpAudioInterface.h b/services/audioflinger/A2dpAudioInterface.h
index 48154f9..cef1926 100644
--- a/services/audioflinger/A2dpAudioInterface.h
+++ b/services/audioflinger/A2dpAudioInterface.h
@@ -103,6 +103,7 @@
                 status_t    setAddress(const char* address);
                 status_t    setBluetoothEnabled(bool enabled);
                 status_t    setSuspended(bool onOff);
+                status_t    standby_l();
 
     private:
                 int         mFd;
diff --git a/services/camera/libcameraservice/CameraService.cpp b/services/camera/libcameraservice/CameraService.cpp
index a0013d0..535f07f 100644
--- a/services/camera/libcameraservice/CameraService.cpp
+++ b/services/camera/libcameraservice/CameraService.cpp
@@ -277,10 +277,6 @@
 
 void CameraService::playSound(sound_kind kind) {
     LOG1("playSound(%d)", kind);
-    // FIXME: temporarily disable sound while working on audio HAL issues preventing simultaneous
-    // playback and record
-    if (kind == SOUND_RECORDING) return;
-
     Mutex::Autolock lock(mSoundLock);
     sp<MediaPlayer> player = mSoundPlayer[kind];
     if (player != 0) {
diff --git a/services/java/com/android/server/InputMethodManagerService.java b/services/java/com/android/server/InputMethodManagerService.java
index 723432d..c7bfdc8 100644
--- a/services/java/com/android/server/InputMethodManagerService.java
+++ b/services/java/com/android/server/InputMethodManagerService.java
@@ -964,7 +964,7 @@
             }
 
             synchronized (mMethodMap) {
-                mStatusBar.setIMEButtonVisible(visible);
+                mStatusBar.setIMEButtonVisible(token, visible);
             }
         } finally {
             Binder.restoreCallingIdentity(ident);
@@ -1007,23 +1007,29 @@
 
         if (id.equals(mCurMethodId)) {
             ArrayList<InputMethodSubtype> subtypes = info.getSubtypes();
+            InputMethodSubtype subtype = null;
             if (subtypeId >= 0 && subtypeId < subtypes.size()) {
-                InputMethodSubtype subtype = subtypes.get(subtypeId);
-                if (subtype != mCurrentSubtype) {
-                    synchronized (mMethodMap) {
-                        if (mCurMethod != null) {
-                            try {
-                                setSelectedInputMethodAndSubtypeLocked(info, subtypeId, true);
-                                if (mInputShown) {
-                                    // If mInputShown is false, there is no IME button on the
-                                    // system bar.
-                                    // Thus there is no need to make it invisible explicitly.
-                                    mStatusBar.setIMEButtonVisible(true);
-                                }
-                                mCurMethod.changeInputMethodSubtype(subtype);
-                            } catch (RemoteException e) {
-                                return;
+                subtype = subtypes.get(subtypeId);
+            }
+            if (subtype != mCurrentSubtype) {
+                synchronized (mMethodMap) {
+                    if (mCurMethod != null) {
+                        try {
+                            setSelectedInputMethodAndSubtypeLocked(info, subtypeId, true);
+                            if (mInputShown) {
+                                // If mInputShown is false, there is no IME button on the
+                                // system bar.
+                                // Thus there is no need to make it invisible explicitly.
+                                mStatusBar.setIMEButtonVisible(mCurToken, true);
                             }
+                            // If subtype is null, try to find the most applicable one from
+                            // getCurrentInputMethodSubtype.
+                            if (subtype == null) {
+                                subtype = getCurrentInputMethodSubtype();
+                            }
+                            mCurMethod.changeInputMethodSubtype(subtype);
+                        } catch (RemoteException e) {
+                            return;
                         }
                     }
                 }
@@ -1271,34 +1277,12 @@
                         + Binder.getCallingUid() + ": " + client);
             }
 
-            mHandler.sendEmptyMessage(MSG_SHOW_IM_PICKER);
-        }
-    }
-
-    public void showInputMethodSubtypePickerFromClient(IInputMethodClient client) {
-        synchronized (mMethodMap) {
-            if (mCurClient == null || client == null
-                    || mCurClient.client.asBinder() != client.asBinder()) {
-                Slog.w(TAG, "Ignoring showInputMethodSubtypePickerFromClient of: " + client);
-            }
-
+            // Always call subtype picker, because subtype picker is a superset of input method
+            // picker.
             mHandler.sendEmptyMessage(MSG_SHOW_IM_SUBTYPE_PICKER);
         }
     }
 
-    public void showInputMethodAndSubtypeEnablerFromClient(
-            IInputMethodClient client, String topId) {
-        // TODO: Handle topId for setting the top position of the list activity
-        synchronized (mMethodMap) {
-            if (mCurClient == null || client == null
-                    || mCurClient.client.asBinder() != client.asBinder()) {
-                Slog.w(TAG, "Ignoring showInputMethodAndSubtypeEnablerFromClient of: " + client);
-            }
-
-            mHandler.sendEmptyMessage(MSG_SHOW_IM_SUBTYPE_ENABLER);
-        }
-    }
-
     public void setInputMethod(IBinder token, String id) {
         setInputMethodWithSubtypeId(token, id, NOT_A_SUBTYPE_ID);
     }
@@ -1314,6 +1298,18 @@
         }
     }
 
+    public void showInputMethodAndSubtypeEnablerFromClient(
+            IInputMethodClient client, String topId) {
+        // TODO: Handle topId for setting the top position of the list ActivityManagerNative
+        synchronized (mMethodMap) {
+            if (mCurClient == null || client == null
+                || mCurClient.client.asBinder() != client.asBinder()) {
+                Slog.w(TAG, "Ignoring showInputMethodAndSubtypeEnablerFromClient of: " + client);
+            }
+            mHandler.sendEmptyMessage(MSG_SHOW_IM_SUBTYPE_ENABLER);
+        }
+    }
+
     public boolean switchToLastInputMethod(IBinder token) {
         synchronized (mMethodMap) {
             Pair<String, String> lastIme = mSettings.getLastInputMethodAndSubtypeLocked();
@@ -1942,28 +1938,29 @@
      * return defaultSubtypeId
      * @return the most applicable subtypeId
      */
-    private int findLastResortApplicableSubtypeLocked(
+    private InputMethodSubtype findLastResortApplicableSubtypeLocked(
             List<InputMethodSubtype> subtypes, String mode, String locale, int defaultSubtypeId) {
         if (subtypes == null || subtypes.size() == 0) {
-            return NOT_A_SUBTYPE_ID;
+            return null;
         }
         if (TextUtils.isEmpty(locale)) {
             locale = mContext.getResources().getConfiguration().locale.toString();
         }
         final String language = locale.substring(0, 2);
         boolean partialMatchFound = false;
-        int applicableSubtypeId = defaultSubtypeId;
+        InputMethodSubtype applicableSubtype = null;
         for (int i = 0; i < subtypes.size(); ++i) {
-            final String subtypeLocale = subtypes.get(i).getLocale();
+            InputMethodSubtype subtype = subtypes.get(i);
+            final String subtypeLocale = subtype.getLocale();
             // An applicable subtype should match "mode".
             if (subtypes.get(i).getMode().equalsIgnoreCase(mode)) {
                 if (locale.equals(subtypeLocale)) {
                     // Exact match (e.g. system locale is "en_US" and subtype locale is "en_US")
-                    applicableSubtypeId = i;
+                    applicableSubtype = subtype;
                     break;
                 } else if (!partialMatchFound && subtypeLocale.startsWith(language)) {
                     // Partial match (e.g. system locale is "en_US" and subtype locale is "en")
-                    applicableSubtypeId = i;
+                    applicableSubtype = subtype;
                     partialMatchFound = true;
                 }
             }
@@ -1972,10 +1969,10 @@
         // The first subtype applicable to the system locale will be defined as the most applicable
         // subtype.
         if (DEBUG) {
-            Slog.d(TAG, "Applicable InputMethodSubtype was found: " + applicableSubtypeId + ","
-                    + subtypes.get(applicableSubtypeId).getLocale());
+            Slog.d(TAG, "Applicable InputMethodSubtype was found: " + applicableSubtype.getMode()
+                    + "," + applicableSubtype.getLocale());
         }
-        return applicableSubtypeId;
+        return applicableSubtype;
     }
 
     // If there are no selected shortcuts, tries finding the most applicable ones.
@@ -1983,59 +1980,66 @@
             findLastResortApplicableShortcutInputMethodAndSubtypeLocked(String mode) {
         List<InputMethodInfo> imis = mSettings.getEnabledInputMethodListLocked();
         InputMethodInfo mostApplicableIMI = null;
-        int mostApplicableSubtypeId = NOT_A_SUBTYPE_ID;
+        InputMethodSubtype mostApplicableSubtype = null;
         boolean foundInSystemIME = false;
 
         // Search applicable subtype for each InputMethodInfo
         for (InputMethodInfo imi: imis) {
-            int subtypeId = NOT_A_SUBTYPE_ID;
+            InputMethodSubtype subtype = null;
             if (mCurrentSubtype != null) {
                 // 1. Search with the current subtype's locale and the enabled subtypes
-                subtypeId = findLastResortApplicableSubtypeLocked(
+                subtype = findLastResortApplicableSubtypeLocked(
                         mSettings.getEnabledInputMethodSubtypeListLocked(
                         imi), mode, mCurrentSubtype.getLocale(), NOT_A_SUBTYPE_ID);
-                if (subtypeId == NOT_A_SUBTYPE_ID) {
+                if (subtype == null) {
                     // 2. Search with the current subtype's locale and all subtypes
-                    subtypeId = findLastResortApplicableSubtypeLocked(imi.getSubtypes(),
+                    subtype = findLastResortApplicableSubtypeLocked(imi.getSubtypes(),
                             mode, mCurrentSubtype.getLocale(), NOT_A_SUBTYPE_ID);
                 }
             }
             // 3. Search with the system locale and the enabled subtypes
-            if (subtypeId == NOT_A_SUBTYPE_ID) {
-                subtypeId = findLastResortApplicableSubtypeLocked(
+            if (subtype == null) {
+                subtype = findLastResortApplicableSubtypeLocked(
                         mSettings.getEnabledInputMethodSubtypeListLocked(
                         imi), mode, null, NOT_A_SUBTYPE_ID);
             }
-            if (subtypeId == NOT_A_SUBTYPE_ID) {
+            if (subtype == null) {
                 // 4. Search with the system locale and all subtypes
-                subtypeId = findLastResortApplicableSubtypeLocked(imi.getSubtypes(),
+                subtype = findLastResortApplicableSubtypeLocked(imi.getSubtypes(),
                         mode, null, NOT_A_SUBTYPE_ID);
             }
-            if (subtypeId != NOT_A_SUBTYPE_ID) {
+            if (subtype != null) {
                 if (imi.getId().equals(mCurMethodId)) {
                     // The current input method is the most applicable IME.
                     mostApplicableIMI = imi;
-                    mostApplicableSubtypeId = subtypeId;
+                    mostApplicableSubtype = subtype;
                     break;
                 } else if ((imi.getServiceInfo().applicationInfo.flags
                         & ApplicationInfo.FLAG_SYSTEM) != 0) {
                     // The system input method is 2nd applicable IME.
                     mostApplicableIMI = imi;
-                    mostApplicableSubtypeId = subtypeId;
+                    mostApplicableSubtype = subtype;
                     foundInSystemIME = true;
                 } else if (!foundInSystemIME) {
                     mostApplicableIMI = imi;
-                    mostApplicableSubtypeId = subtypeId;
+                    mostApplicableSubtype = subtype;
                 }
             }
         }
         if (DEBUG) {
-            Slog.w(TAG, "Most applicable shortcut input method subtype was:"
-                    + mostApplicableIMI.getId() + "," + mostApplicableSubtypeId);
+            if (mostApplicableIMI != null) {
+                Slog.w(TAG, "Most applicable shortcut input method was:"
+                        + mostApplicableIMI.getId());
+                if (mostApplicableSubtype != null) {
+                    Slog.w(TAG, "Most applicable shortcut input method subtype was:"
+                            + "," + mostApplicableSubtype.getMode() + ","
+                            + mostApplicableSubtype.getLocale());
+                }
+            }
         }
-        if (mostApplicableIMI != null && mostApplicableSubtypeId != NOT_A_SUBTYPE_ID) {
+        if (mostApplicableIMI != null) {
             return new Pair<InputMethodInfo, InputMethodSubtype> (mostApplicableIMI,
-                    mostApplicableIMI.getSubtypes().get(mostApplicableSubtypeId));
+                    mostApplicableSubtype);
         } else {
             return null;
         }
@@ -2063,15 +2067,12 @@
                         // the most applicable subtype from all subtypes whose mode is
                         // SUBTYPE_MODE_KEYBOARD. This is an exceptional case, so we will hardcode
                         // the mode.
-                        subtypeId = findLastResortApplicableSubtypeLocked(imi.getSubtypes(),
+                        mCurrentSubtype = findLastResortApplicableSubtypeLocked(imi.getSubtypes(),
                                 SUBTYPE_MODE_KEYBOARD, null, DEFAULT_SUBTYPE_ID);
                     }
-                }
-                if (subtypeId != NOT_A_SUBTYPE_ID) {
+                } else {
                     mCurrentSubtype =
                             mMethodMap.get(lastInputMethodId).getSubtypes().get(subtypeId);
-                } else {
-                    mCurrentSubtype = null;
                 }
             }
             return mCurrentSubtype;
@@ -2101,7 +2102,7 @@
                             SUBTYPE_MODE_VOICE);
                 addShortcutInputMethodAndSubtypes(info.first, info.second);
             }
-            ArrayList ret = new ArrayList<Object>();
+            ArrayList<Object> ret = new ArrayList<Object>();
             for (InputMethodInfo imi: mShortcutInputMethodsAndSubtypes.keySet()) {
                 ret.add(imi);
                 for (InputMethodSubtype subtype: mShortcutInputMethodsAndSubtypes.get(imi)) {
diff --git a/services/java/com/android/server/ScreenRotationAnimation.java b/services/java/com/android/server/ScreenRotationAnimation.java
index 299567a..1cc6a2a 100644
--- a/services/java/com/android/server/ScreenRotationAnimation.java
+++ b/services/java/com/android/server/ScreenRotationAnimation.java
@@ -16,6 +16,7 @@
 
 package com.android.server;  // TODO: use com.android.server.wm, once things move there
 
+import android.content.Context;
 import android.graphics.Bitmap;
 import android.graphics.Canvas;
 import android.graphics.Color;
@@ -28,38 +29,60 @@
 import android.view.Display;
 import android.view.Surface;
 import android.view.SurfaceSession;
+import android.view.animation.Animation;
+import android.view.animation.AnimationUtils;
+import android.view.animation.Transformation;
 
 class ScreenRotationAnimation {
-    private static final String TAG = "ScreenRotationAnimation";
+    static final String TAG = "ScreenRotationAnimation";
+    static final boolean DEBUG = false;
 
+    final Context mContext;
+    final Display mDisplay;
     Surface mSurface;
     int mWidth, mHeight;
 
-    int mBaseRotation;
+    int mSnapshotRotation;
+    int mSnapshotDeltaRotation;
+    int mOriginalRotation;
+    int mOriginalWidth, mOriginalHeight;
     int mCurRotation;
-    int mDeltaRotation;
 
-    final Matrix mMatrix = new Matrix();
+    Animation mExitAnimation;
+    final Transformation mExitTransformation = new Transformation();
+    Animation mEnterAnimation;
+    final Transformation mEnterTransformation = new Transformation();
+    boolean mStarted;
+
+    final DisplayMetrics mDisplayMetrics = new DisplayMetrics();
+    final Matrix mSnapshotInitialMatrix = new Matrix();
+    final Matrix mSnapshotFinalMatrix = new Matrix();
     final float[] mTmpFloats = new float[9];
 
-    public ScreenRotationAnimation(Display display, SurfaceSession session) {
-        final DisplayMetrics dm = new DisplayMetrics();
-        display.getMetrics(dm);
+    public ScreenRotationAnimation(Context context, Display display, SurfaceSession session) {
+        mContext = context;
+        mDisplay = display;
+
+        display.getMetrics(mDisplayMetrics);
 
         Bitmap screenshot = Surface.screenshot(0, 0);
 
         if (screenshot != null) {
             // Screenshot does NOT include rotation!
-            mBaseRotation = 0;
+            mSnapshotRotation = 0;
             mWidth = screenshot.getWidth();
             mHeight = screenshot.getHeight();
         } else {
             // Just in case.
-            mBaseRotation = display.getRotation();
-            mWidth = dm.widthPixels;
-            mHeight = dm.heightPixels;
+            mSnapshotRotation = display.getRotation();
+            mWidth = mDisplayMetrics.widthPixels;
+            mHeight = mDisplayMetrics.heightPixels;
         }
 
+        mOriginalRotation = display.getRotation();
+        mOriginalWidth = mDisplayMetrics.widthPixels;
+        mOriginalHeight = mDisplayMetrics.heightPixels;
+
         Surface.openTransaction();
         if (mSurface != null) {
             mSurface.destroy();
@@ -102,43 +125,24 @@
         screenshot.recycle();
     }
 
-    // Must be called while in a transaction.
-    public void setRotation(int rotation) {
-        mCurRotation = rotation;
-        int delta = mCurRotation - mBaseRotation;
+    static int deltaRotation(int oldRotation, int newRotation) {
+        int delta = newRotation - oldRotation;
         if (delta < 0) delta += 4;
-        mDeltaRotation = delta;
+        return delta;
+    }
 
-        switch (delta) {
-            case Surface.ROTATION_0:
-                mMatrix.reset();
-                break;
-            case Surface.ROTATION_90:
-                mMatrix.setRotate(90, 0, 0);
-                mMatrix.postTranslate(0, mWidth);
-                break;
-            case Surface.ROTATION_180:
-                mMatrix.setRotate(180, 0, 0);
-                mMatrix.postTranslate(mWidth, mHeight);
-                break;
-            case Surface.ROTATION_270:
-                mMatrix.setRotate(270, 0, 0);
-                mMatrix.postTranslate(mHeight, 0);
-                break;
-        }
-
-        mMatrix.getValues(mTmpFloats);
+    void setSnapshotTransform(Matrix matrix, float alpha) {
+        matrix.getValues(mTmpFloats);
         mSurface.setPosition((int)mTmpFloats[Matrix.MTRANS_X],
                 (int)mTmpFloats[Matrix.MTRANS_Y]);
         mSurface.setMatrix(
-                mTmpFloats[Matrix.MSCALE_X], mTmpFloats[Matrix.MSKEW_X],
-                mTmpFloats[Matrix.MSKEW_Y], mTmpFloats[Matrix.MSCALE_Y]);
-
-        if (false) {
+                mTmpFloats[Matrix.MSCALE_X], mTmpFloats[Matrix.MSKEW_Y],
+                mTmpFloats[Matrix.MSKEW_X], mTmpFloats[Matrix.MSCALE_Y]);
+        mSurface.setAlpha(alpha);
+        if (DEBUG) {
             float[] srcPnts = new float[] { 0, 0, mWidth, mHeight };
-            float[] dstPnts = new float[8];
-            mMatrix.mapPoints(dstPnts, srcPnts);
-            Slog.i(TAG, "**** ROTATION: " + delta);
+            float[] dstPnts = new float[4];
+            matrix.mapPoints(dstPnts, srcPnts);
             Slog.i(TAG, "Original  : (" + srcPnts[0] + "," + srcPnts[1]
                     + ")-(" + srcPnts[2] + "," + srcPnts[3] + ")");
             Slog.i(TAG, "Transformed: (" + dstPnts[0] + "," + dstPnts[1]
@@ -146,7 +150,165 @@
         }
     }
 
-    public void dismiss() {
-        mSurface.destroy();
+    // Must be called while in a transaction.
+    public void setRotation(int rotation) {
+        mCurRotation = rotation;
+
+        // Compute the transformation matrix that must be applied
+        // to the snapshot to make it stay in the same original position
+        // with the current screen rotation.
+        int delta = deltaRotation(rotation, mSnapshotRotation);
+        switch (delta) {
+            case Surface.ROTATION_0:
+                mSnapshotInitialMatrix.reset();
+                break;
+            case Surface.ROTATION_90:
+                mSnapshotInitialMatrix.setRotate(90, 0, 0);
+                mSnapshotInitialMatrix.postTranslate(mHeight, 0);
+                break;
+            case Surface.ROTATION_180:
+                mSnapshotInitialMatrix.setRotate(180, 0, 0);
+                mSnapshotInitialMatrix.postTranslate(mWidth, mHeight);
+                break;
+            case Surface.ROTATION_270:
+                mSnapshotInitialMatrix.setRotate(270, 0, 0);
+                mSnapshotInitialMatrix.postTranslate(0, mWidth);
+                break;
+        }
+
+        if (DEBUG) Slog.v(TAG, "**** ROTATION: " + delta);
+        setSnapshotTransform(mSnapshotInitialMatrix, 1.0f);
+    }
+
+    /**
+     * Returns true if animating.
+     */
+    public boolean dismiss(long maxAnimationDuration, float animationScale) {
+        // Figure out how the screen has moved from the original rotation.
+        int delta = deltaRotation(mCurRotation, mOriginalRotation);
+        if (false && delta == 0) {
+            // Nothing changed, just remove the snapshot.
+            if (mSurface != null) {
+                mSurface.destroy();
+                mSurface = null;
+            }
+            return false;
+        }
+
+        switch (delta) {
+            case Surface.ROTATION_0:
+                mExitAnimation = AnimationUtils.loadAnimation(mContext,
+                        com.android.internal.R.anim.screen_rotate_0_exit);
+                mEnterAnimation = AnimationUtils.loadAnimation(mContext,
+                        com.android.internal.R.anim.screen_rotate_0_enter);
+                break;
+            case Surface.ROTATION_90:
+                mExitAnimation = AnimationUtils.loadAnimation(mContext,
+                        com.android.internal.R.anim.screen_rotate_plus_90_exit);
+                mEnterAnimation = AnimationUtils.loadAnimation(mContext,
+                        com.android.internal.R.anim.screen_rotate_plus_90_enter);
+                break;
+            case Surface.ROTATION_180:
+                mExitAnimation = AnimationUtils.loadAnimation(mContext,
+                        com.android.internal.R.anim.screen_rotate_180_exit);
+                mEnterAnimation = AnimationUtils.loadAnimation(mContext,
+                        com.android.internal.R.anim.screen_rotate_180_enter);
+                break;
+            case Surface.ROTATION_270:
+                mExitAnimation = AnimationUtils.loadAnimation(mContext,
+                        com.android.internal.R.anim.screen_rotate_minus_90_exit);
+                mEnterAnimation = AnimationUtils.loadAnimation(mContext,
+                        com.android.internal.R.anim.screen_rotate_minus_90_enter);
+                break;
+        }
+
+        mDisplay.getMetrics(mDisplayMetrics);
+
+        // Initialize the animations.  This is a hack, redefining what "parent"
+        // means to allow supplying the last and next size.  In this definition
+        // "%p" is the original (let's call it "previous") size, and "%" is the
+        // screen's current/new size.
+        mEnterAnimation.initialize(mDisplayMetrics.widthPixels, mDisplayMetrics.heightPixels,
+                mOriginalWidth, mOriginalHeight);
+        mExitAnimation.initialize(mDisplayMetrics.widthPixels, mDisplayMetrics.heightPixels,
+                mOriginalWidth, mOriginalHeight);
+        mStarted = false;
+
+        mExitAnimation.restrictDuration(maxAnimationDuration);
+        mExitAnimation.scaleCurrentDuration(animationScale);
+        mEnterAnimation.restrictDuration(maxAnimationDuration);
+        mEnterAnimation.scaleCurrentDuration(animationScale);
+
+        return true;
+    }
+
+    public void kill() {
+        if (mSurface != null) {
+            mSurface.destroy();
+            mSurface = null;
+        }
+        if (mExitAnimation != null) {
+            mExitAnimation.cancel();
+            mExitAnimation = null;
+        }
+        if (mEnterAnimation != null) {
+            mEnterAnimation.cancel();
+            mEnterAnimation = null;
+        }
+    }
+
+    public boolean isAnimating() {
+        return mEnterAnimation != null || mExitAnimation != null;
+    }
+
+    public boolean stepAnimation(long now) {
+        if (mEnterAnimation == null && mExitAnimation == null) {
+            return false;
+        }
+
+        if (!mStarted) {
+            mEnterAnimation.setStartTime(now);
+            mExitAnimation.setStartTime(now);
+            mStarted = true;
+        }
+
+        mExitTransformation.clear();
+        boolean moreExit = false;
+        if (mExitAnimation != null) {
+            moreExit = mExitAnimation.getTransformation(now, mExitTransformation);
+            if (DEBUG) Slog.v(TAG, "Stepped exit: " + mExitTransformation);
+            if (!moreExit) {
+                if (DEBUG) Slog.v(TAG, "Exit animation done!");
+                mExitAnimation.cancel();
+                mExitAnimation = null;
+                mExitTransformation.clear();
+                if (mSurface != null) {
+                    mSurface.destroy();
+                    mSurface = null;
+                }
+            }
+        }
+
+        mEnterTransformation.clear();
+        boolean moreEnter = false;
+        if (mEnterAnimation != null) {
+            moreEnter = mEnterAnimation.getTransformation(now, mEnterTransformation);
+            if (!moreEnter) {
+                mEnterAnimation.cancel();
+                mEnterAnimation = null;
+                mEnterTransformation.clear();
+            }
+        }
+
+        if (mSurface != null) {
+            mSnapshotFinalMatrix.setConcat(mExitTransformation.getMatrix(), mSnapshotInitialMatrix);
+            setSnapshotTransform(mSnapshotFinalMatrix, mExitTransformation.getAlpha());
+        }
+
+        return moreEnter || moreExit;
+    }
+
+    public Transformation getEnterTransformation() {
+        return mEnterTransformation;
     }
 }
diff --git a/services/java/com/android/server/StatusBarManagerService.java b/services/java/com/android/server/StatusBarManagerService.java
index 596db57..cbfa4ee 100644
--- a/services/java/com/android/server/StatusBarManagerService.java
+++ b/services/java/com/android/server/StatusBarManagerService.java
@@ -73,6 +73,7 @@
     boolean mLightsOn = true;
     boolean mMenuVisible = false;
     boolean mIMEButtonVisible = false;
+    IBinder mIMEToken = null;
 
     private class DisableRecord implements IBinder.DeathRecipient {
         String pkg;
@@ -257,7 +258,7 @@
         }
     }
 
-    public void setIMEButtonVisible(final boolean visible) {
+    public void setIMEButtonVisible(final IBinder token, final boolean visible) {
         enforceStatusBar();
 
         if (SPEW) Slog.d(TAG, (visible?"showing":"hiding") + " IME Button");
@@ -267,11 +268,12 @@
             // mIMEButtonVisible because mIMEButtonVisible may not have been set to false when the
             // previous IME was destroyed.
             mIMEButtonVisible = visible;
+            mIMEToken = token;
             mHandler.post(new Runnable() {
                 public void run() {
                     if (mBar != null) {
                         try {
-                            mBar.setIMEButtonVisible(visible);
+                            mBar.setIMEButtonVisible(token, visible);
                         } catch (RemoteException ex) {
                         }
                     }
@@ -351,7 +353,7 @@
     // ================================================================================
     public void registerStatusBar(IStatusBar bar, StatusBarIconList iconList,
             List<IBinder> notificationKeys, List<StatusBarNotification> notifications,
-            int switches[]) {
+            int switches[], List<IBinder> binders) {
         enforceStatusBarService();
 
         Slog.i(TAG, "registerStatusBar bar=" + bar);
@@ -370,6 +372,7 @@
             switches[1] = mLightsOn ? 1 : 0;
             switches[2] = mMenuVisible ? 1 : 0;
             switches[3] = mIMEButtonVisible ? 1 : 0;
+            binders.add(mIMEToken);
         }
     }
 
diff --git a/services/java/com/android/server/TelephonyRegistry.java b/services/java/com/android/server/TelephonyRegistry.java
index 689b1c6..e881523 100644
--- a/services/java/com/android/server/TelephonyRegistry.java
+++ b/services/java/com/android/server/TelephonyRegistry.java
@@ -388,8 +388,8 @@
             return;
         }
         Slog.i(TAG, "notifyDataConnection: state=" + state + " isDataConnectivityPossible="
-                + isDataConnectivityPossible + " reason=" + reason
-                + " apn=" + apn + " networkType=" + networkType);
+                + isDataConnectivityPossible + " reason='" + reason
+                + "' apn='" + apn + "' apnType=" + apnType + " networkType=" + networkType);
         synchronized (mRecords) {
             boolean modified = false;
             if (state == TelephonyManager.DATA_CONNECTED) {
diff --git a/services/java/com/android/server/WindowManagerService.java b/services/java/com/android/server/WindowManagerService.java
index 5c32c38..cbb35c6 100644
--- a/services/java/com/android/server/WindowManagerService.java
+++ b/services/java/com/android/server/WindowManagerService.java
@@ -4918,6 +4918,10 @@
         }
     }
 
+    public void setStrictModeVisualIndicatorPreference(String value) {
+        SystemProperties.set(StrictMode.VISUAL_PROPERTY, value);
+    }
+
     public void freezeRotation() {
         if (!checkCallingPermission(android.Manifest.permission.SET_ORIENTATION,
                 "setRotation()")) {
@@ -7483,8 +7487,10 @@
                 }
             }
 
+            final boolean screenAnimation = mScreenRotationAnimation != null
+                    && mScreenRotationAnimation.isAnimating();
             if (selfTransformation || attachedTransformation != null
-                    || appTransformation != null) {
+                    || appTransformation != null || screenAnimation) {
                 // cache often used attributes locally
                 final Rect frame = mFrame;
                 final float tmpFloats[] = mTmpFloats;
@@ -7502,6 +7508,10 @@
                 if (appTransformation != null) {
                     tmpMatrix.postConcat(appTransformation.getMatrix());
                 }
+                if (screenAnimation) {
+                    tmpMatrix.postConcat(
+                            mScreenRotationAnimation.getEnterTransformation().getMatrix());
+                }
 
                 // "convert" it into SurfaceFlinger's format
                 // (a 2x2 matrix + an offset)
@@ -7511,8 +7521,8 @@
 
                 tmpMatrix.getValues(tmpFloats);
                 mDsDx = tmpFloats[Matrix.MSCALE_X];
-                mDtDx = tmpFloats[Matrix.MSKEW_X];
-                mDsDy = tmpFloats[Matrix.MSKEW_Y];
+                mDtDx = tmpFloats[Matrix.MSKEW_Y];
+                mDsDy = tmpFloats[Matrix.MSKEW_X];
                 mDtDy = tmpFloats[Matrix.MSCALE_Y];
                 int x = (int)tmpFloats[Matrix.MTRANS_X] + mXOffset;
                 int y = (int)tmpFloats[Matrix.MTRANS_Y] + mYOffset;
@@ -7540,6 +7550,10 @@
                     if (appTransformation != null) {
                         mShownAlpha *= appTransformation.getAlpha();
                     }
+                    if (screenAnimation) {
+                        mShownAlpha *=
+                            mScreenRotationAnimation.getEnterTransformation().getAlpha();
+                    }
                 } else {
                     //Slog.i(TAG, "Not applying alpha transform");
                 }
@@ -9393,6 +9407,16 @@
                         
                 animating = tokensAnimating;
 
+                if (mScreenRotationAnimation != null) {
+                    if (mScreenRotationAnimation.isAnimating()) {
+                        if (mScreenRotationAnimation.stepAnimation(currentTime)) {
+                            animating = true;
+                        } else {
+                            mScreenRotationAnimation = null;
+                        }
+                    }
+                }
+
                 boolean tokenMayBeDrawn = false;
                 boolean wallpaperMayChange = false;
                 boolean forceHiding = false;
@@ -10837,8 +10861,13 @@
         }
 
         if (CUSTOM_SCREEN_ROTATION) {
+            if (mScreenRotationAnimation != null && mScreenRotationAnimation.isAnimating()) {
+                mScreenRotationAnimation.kill();
+                mScreenRotationAnimation = null;
+            }
             if (mScreenRotationAnimation == null) {
-                mScreenRotationAnimation = new ScreenRotationAnimation(mDisplay, mFxSession);
+                mScreenRotationAnimation = new ScreenRotationAnimation(mContext,
+                        mDisplay, mFxSession);
             }
         } else {
             Surface.freezeDisplay(0);
@@ -10862,8 +10891,12 @@
 
         if (CUSTOM_SCREEN_ROTATION) {
             if (mScreenRotationAnimation != null) {
-                mScreenRotationAnimation.dismiss();
-                mScreenRotationAnimation = null;
+                if (mScreenRotationAnimation.dismiss(MAX_ANIMATION_DURATION,
+                        mTransitionAnimationScale)) {
+                    requestAnimationLocked(0);
+                } else {
+                    mScreenRotationAnimation = null;
+                }
             }
         } else {
             Surface.unfreezeDisplay(0);
diff --git a/telephony/java/com/android/internal/telephony/DataConnectionTracker.java b/telephony/java/com/android/internal/telephony/DataConnectionTracker.java
index 9c738ec..069e1b8 100644
--- a/telephony/java/com/android/internal/telephony/DataConnectionTracker.java
+++ b/telephony/java/com/android/internal/telephony/DataConnectionTracker.java
@@ -16,8 +16,6 @@
 
 package com.android.internal.telephony;
 
-import com.android.internal.telephony.cdma.CDMAPhone;
-
 import android.app.PendingIntent;
 import android.content.BroadcastReceiver;
 import android.content.Context;
@@ -112,7 +110,7 @@
     public static final int EVENT_CLEAN_UP_CONNECTION = 34;
     protected static final int EVENT_CDMA_OTA_PROVISION = 35;
     protected static final int EVENT_RESTART_RADIO = 36;
-    protected static final int EVENT_SET_MASTER_DATA_ENABLE = 37;
+    protected static final int EVENT_SET_INTERNAL_DATA_ENABLE = 37;
     protected static final int EVENT_RESET_DONE = 38;
 
     /***** Constants *****/
@@ -128,8 +126,9 @@
     protected static final int DISABLED = 0;
     protected static final int ENABLED = 1;
 
-    // responds to the setDataEnabled call - used independently from the APN requests
-    protected boolean mMasterDataEnabled = true;
+    // responds to the setInternalDataEnabled call - used internally to turn off data
+    // for example during emergency calls
+    protected boolean mInternalDataEnabled = true;
 
     protected boolean[] dataEnabled = new boolean[APN_NUM_TYPES];
 
@@ -231,6 +230,9 @@
     protected HashMap<Integer, DataConnection> mDataConnections =
         new HashMap<Integer, DataConnection>();
 
+    /* Currently active APN */
+    protected ApnSetting mActiveApn;
+
     protected BroadcastReceiver mIntentReceiver = new BroadcastReceiver ()
     {
         @Override
@@ -343,6 +345,40 @@
         return new ArrayList<DataConnection>(mDataConnections.values());
     }
 
+    protected boolean isApnTypeActive(String type) {
+        // TODO: support simultaneous with List instead
+        return mActiveApn != null && mActiveApn.canHandleType(type);
+    }
+
+    public String[] getActiveApnTypes() {
+        String[] result;
+        if (mActiveApn != null) {
+            result = mActiveApn.types;
+        } else {
+            result = new String[1];
+            result[0] = Phone.APN_TYPE_DEFAULT;
+        }
+        return result;
+    }
+
+    public String getActiveApnType() {
+        String result;
+        if (mActiveApn != null) {
+            result = apnIdToType(mActiveApn.id);
+        } else {
+            result = null;
+        }
+        return result;
+    }
+
+    protected String getActiveApnString() {
+        String result = null;
+        if (mActiveApn != null) {
+            result = mActiveApn.apn;
+        }
+        return result;
+    }
+
     /**
      * The data connection is expected to be setup while device
      *  1. has Icc card
@@ -454,9 +490,9 @@
                 onCleanUpConnection(tearDown, (String) msg.obj);
                 break;
 
-            case EVENT_SET_MASTER_DATA_ENABLE:
+            case EVENT_SET_INTERNAL_DATA_ENABLE:
                 boolean enabled = (msg.arg1 == ENABLED) ? true : false;
-                onSetDataEnabled(enabled);
+                onSetInternalDataEnabled(enabled);
                 break;
 
             case EVENT_RESET_DONE:
@@ -470,23 +506,13 @@
     }
 
     /**
-     * Report the current state of data connectivity (enabled or disabled)
-     *
-     * @return {@code false} if data connectivity has been explicitly disabled,
-     *         {@code true} otherwise.
-     */
-    public synchronized boolean getDataEnabled() {
-        return (mMasterDataEnabled && dataEnabled[APN_DEFAULT_ID]);
-    }
-
-    /**
      * Report on whether data connectivity is enabled
      *
      * @return {@code false} if data connectivity has been explicitly disabled,
      *         {@code true} otherwise.
      */
     public synchronized boolean getAnyDataEnabled() {
-        return (mMasterDataEnabled && (enabledCount != 0));
+        return (mInternalDataEnabled && (enabledCount != 0));
     }
 
     protected abstract void startNetStatPoll();
@@ -533,14 +559,8 @@
         }
     }
 
-    protected abstract boolean isApnTypeActive(String type);
-
     protected abstract boolean isApnTypeAvailable(String type);
 
-    protected abstract String[] getActiveApnTypes();
-
-    protected abstract String getActiveApnString();
-
     protected abstract void setState(State s);
 
     protected LinkProperties getLinkProperties(String apnType) {
@@ -647,7 +667,7 @@
      */
     protected boolean isDataPossible() {
         boolean possible = (isDataAllowed()
-                && !(getDataEnabled() && (mState == State.FAILED || mState == State.IDLE)));
+                && !(getAnyDataEnabled() && (mState == State.FAILED || mState == State.IDLE)));
         if (!possible && DBG && isDataAllowed()) {
             log("Data not possible.  No coverage: dataState = " + mState);
         }
@@ -658,7 +678,7 @@
 
     public boolean isApnTypeEnabled(String apnType) {
         if (apnType == null) {
-            apnType = getActiveApnString();
+            apnType = getActiveApnType();
         }
         return isApnIdEnabled(apnTypeToId(apnType));
     }
@@ -818,20 +838,20 @@
      *            {@code false}) data
      * @return {@code true} if the operation succeeded
      */
-    public boolean setDataEnabled(boolean enable) {
+    public boolean setInternalDataEnabled(boolean enable) {
         if (DBG)
-            log("setDataEnabled(" + enable + ")");
+            log("setInternalDataEnabled(" + enable + ")");
 
-        Message msg = obtainMessage(EVENT_SET_MASTER_DATA_ENABLE);
+        Message msg = obtainMessage(EVENT_SET_INTERNAL_DATA_ENABLE);
         msg.arg1 = (enable ? ENABLED : DISABLED);
         sendMessage(msg);
         return true;
     }
 
-    protected void onSetDataEnabled(boolean enable) {
-        if (mMasterDataEnabled != enable) {
+    protected void onSetInternalDataEnabled(boolean enable) {
+        if (mInternalDataEnabled != enable) {
             synchronized (this) {
-                mMasterDataEnabled = enable;
+                mInternalDataEnabled = enable;
             }
             if (enable) {
                 mRetryMgr.resetRetryCount();
diff --git a/telephony/java/com/android/internal/telephony/DefaultPhoneNotifier.java b/telephony/java/com/android/internal/telephony/DefaultPhoneNotifier.java
index 52cbd7c..83db3d1 100644
--- a/telephony/java/com/android/internal/telephony/DefaultPhoneNotifier.java
+++ b/telephony/java/com/android/internal/telephony/DefaultPhoneNotifier.java
@@ -115,7 +115,7 @@
             mRegistry.notifyDataConnection(
                     convertDataState(state),
                     sender.isDataConnectivityPossible(), reason,
-                    sender.getActiveApn(),
+                    sender.getActiveApnHost(),
                     apnType,
                     linkProperties,
                     linkCapabilities,
diff --git a/telephony/java/com/android/internal/telephony/Phone.java b/telephony/java/com/android/internal/telephony/Phone.java
index 2957c7e..25ad48d 100644
--- a/telephony/java/com/android/internal/telephony/Phone.java
+++ b/telephony/java/com/android/internal/telephony/Phone.java
@@ -309,16 +309,17 @@
 
     /**
      * Returns an array of string identifiers for the APN types serviced by the
-     * currently active or last connected APN.
-     *  @return The string array.
+     * currently active.
+     *  @return The string array will always return at least one entry, Phone.APN_TYPE_DEFAULT.
+     * TODO: Revisit if we always should return at least one entry.
      */
     String[] getActiveApnTypes();
 
     /**
-     * Returns a string identifier for currently active or last connected APN.
-     *  @return The string name.
+     * Returns string for the active APN host.
+     *  @return type as a string or null if none.
      */
-    String getActiveApn();
+    String getActiveApnHost();
 
     /**
      * Return the LinkProperties for the named apn or null if not available
@@ -1324,36 +1325,6 @@
     SimulatedRadioControl getSimulatedRadioControl();
 
     /**
-     * Allow mobile data connections.
-     * @return {@code true} if the operation started successfully
-     * <br/>{@code false} if it
-     * failed immediately.<br/>
-     * Even in the {@code true} case, it may still fail later
-     * during setup, in which case an asynchronous indication will
-     * be supplied.
-     */
-    boolean enableDataConnectivity();
-
-    /**
-     * Disallow mobile data connections, and terminate any that
-     * are in progress.
-     * @return {@code true} if the operation started successfully
-     * <br/>{@code false} if it
-     * failed immediately.<br/>
-     * Even in the {@code true} case, it may still fail later
-     * during setup, in which case an asynchronous indication will
-     * be supplied.
-     */
-    boolean disableDataConnectivity();
-
-    /**
-     * Report the current state of data connectivity (enabled or disabled)
-     * @return {@code false} if data connectivity has been explicitly disabled,
-     * {@code true} otherwise.
-     */
-    boolean isDataConnectivityEnabled();
-
-    /**
      * Enables the specified APN type. Only works for "special" APN types,
      * i.e., not the default APN.
      * @param type The desired APN type. Cannot be {@link #APN_TYPE_DEFAULT}.
diff --git a/telephony/java/com/android/internal/telephony/PhoneBase.java b/telephony/java/com/android/internal/telephony/PhoneBase.java
index 83080ee..fce7b9b 100644
--- a/telephony/java/com/android/internal/telephony/PhoneBase.java
+++ b/telephony/java/com/android/internal/telephony/PhoneBase.java
@@ -746,8 +746,10 @@
     }
 
     public void notifyDataConnection() {
-        String apn = getActiveApn();
-        mNotifier.notifyDataConnection(this, null, apn, getDataConnectionState(apn));
+        String types[] = getActiveApnTypes();
+        for (String apnType : types) {
+            mNotifier.notifyDataConnection(this, null, apnType, getDataConnectionState(apnType));
+        }
     }
 
     public void notifyOtaspChanged(int otaspMode) {
@@ -939,14 +941,14 @@
          logUnexpectedCdmaMethodCall("unsetOnEcbModeExitResponse");
      }
 
-    public boolean isDataConnectivityEnabled() {
-        return mDataConnection.getDataEnabled();
-    }
-
     public String[] getActiveApnTypes() {
         return mDataConnection.getActiveApnTypes();
     }
 
+    public String getActiveApnHost() {
+        return mDataConnection.getActiveApnString();
+    }
+
     public LinkProperties getLinkProperties(String apnType) {
         return mDataConnection.getLinkProperties(apnType);
     }
@@ -955,10 +957,6 @@
         return mDataConnection.getLinkCapabilities(apnType);
     }
 
-    public String getActiveApn() {
-        return mDataConnection.getActiveApnString();
-    }
-
     public int enableApnType(String type) {
         return mDataConnection.enableApnType(type);
     }
diff --git a/telephony/java/com/android/internal/telephony/PhoneProxy.java b/telephony/java/com/android/internal/telephony/PhoneProxy.java
index 02fdf28..219efbb 100644
--- a/telephony/java/com/android/internal/telephony/PhoneProxy.java
+++ b/telephony/java/com/android/internal/telephony/PhoneProxy.java
@@ -209,6 +209,10 @@
         return mActivePhone.getActiveApnTypes();
     }
 
+    public String getActiveApnHost() {
+        return mActivePhone.getActiveApnHost();
+    }
+
     public LinkProperties getLinkProperties(String apnType) {
         return mActivePhone.getLinkProperties(apnType);
     }
@@ -217,10 +221,6 @@
         return mActivePhone.getLinkCapabilities(apnType);
     }
 
-    public String getActiveApn() {
-        return mActivePhone.getActiveApn();
-    }
-
     public SignalStrength getSignalStrength() {
         return mActivePhone.getSignalStrength();
     }
@@ -650,14 +650,6 @@
         return mActivePhone.getSimulatedRadioControl();
     }
 
-    public boolean enableDataConnectivity() {
-        return mActivePhone.enableDataConnectivity();
-    }
-
-    public boolean disableDataConnectivity() {
-        return mActivePhone.disableDataConnectivity();
-    }
-
     public int enableApnType(String type) {
         return mActivePhone.enableApnType(type);
     }
@@ -666,10 +658,6 @@
         return mActivePhone.disableApnType(type);
     }
 
-    public boolean isDataConnectivityEnabled() {
-        return mActivePhone.isDataConnectivityEnabled();
-    }
-
     public boolean isDataConnectivityPossible() {
         return mActivePhone.isDataConnectivityPossible();
     }
diff --git a/telephony/java/com/android/internal/telephony/cdma/CDMAPhone.java b/telephony/java/com/android/internal/telephony/cdma/CDMAPhone.java
index 099bc30..1e77589 100755
--- a/telephony/java/com/android/internal/telephony/cdma/CDMAPhone.java
+++ b/telephony/java/com/android/internal/telephony/cdma/CDMAPhone.java
@@ -478,10 +478,6 @@
         return mSST.cellLoc;
     }
 
-    public boolean disableDataConnectivity() {
-        return mDataConnection.setDataEnabled(false);
-    }
-
     public CdmaCall getForegroundCall() {
         return mCT.foregroundCall;
     }
@@ -761,21 +757,6 @@
         return ret;
     }
 
-    public boolean enableDataConnectivity() {
-
-        // block data activities when phone is in emergency callback mode
-        if (mIsPhoneInEcmState) {
-            Intent intent = new Intent(TelephonyIntents.ACTION_SHOW_NOTICE_ECM_BLOCK_OTHERS);
-            ActivityManagerNative.broadcastStickyIntent(intent, null);
-            return false;
-        } else if ((mCT.state == Phone.State.OFFHOOK) && mCT.isInEmergencyCall()) {
-            // Do not allow data call to be enabled when emergency call is going on
-            return false;
-        } else {
-            return mDataConnection.setDataEnabled(true);
-        }
-    }
-
     public boolean getIccRecordsLoaded() {
         return mRuimRecords.getRecordsLoaded();
     }
@@ -921,7 +902,7 @@
             // send an Intent
             sendEmergencyCallbackModeChange();
             // Re-initiate data connection
-            mDataConnection.setDataEnabled(true);
+            mDataConnection.setInternalDataEnabled(true);
         }
     }
 
diff --git a/telephony/java/com/android/internal/telephony/cdma/CdmaCallTracker.java b/telephony/java/com/android/internal/telephony/cdma/CdmaCallTracker.java
index 325c2e1..a89f783 100644
--- a/telephony/java/com/android/internal/telephony/cdma/CdmaCallTracker.java
+++ b/telephony/java/com/android/internal/telephony/cdma/CdmaCallTracker.java
@@ -1058,7 +1058,7 @@
         if (PhoneNumberUtils.isEmergencyNumber(dialString)) {
             if (Phone.DEBUG_PHONE) log("disableDataCallInEmergencyCall");
             mIsInEmergencyCall = true;
-            phone.disableDataConnectivity();
+            phone.mDataConnection.setInternalDataEnabled(false);
         }
     }
 
@@ -1075,8 +1075,7 @@
             }
             if (inEcm.compareTo("false") == 0) {
                 // Re-initiate data connection
-                // TODO - can this be changed to phone.enableDataConnectivity();
-                phone.mDataConnection.setDataEnabled(true);
+                phone.mDataConnection.setInternalDataEnabled(true);
             }
         }
     }
diff --git a/telephony/java/com/android/internal/telephony/cdma/CdmaDataConnectionTracker.java b/telephony/java/com/android/internal/telephony/cdma/CdmaDataConnectionTracker.java
index e003a73..b005cd3 100644
--- a/telephony/java/com/android/internal/telephony/cdma/CdmaDataConnectionTracker.java
+++ b/telephony/java/com/android/internal/telephony/cdma/CdmaDataConnectionTracker.java
@@ -89,8 +89,7 @@
             Phone.APN_TYPE_MMS,
             Phone.APN_TYPE_HIPRI };
 
-    // if we have no active Apn this is null
-    protected ApnSetting mActiveApn;
+    private static final int mDefaultApnId = DataConnectionTracker.APN_DEFAULT_ID;
 
     /* Constructor */
 
@@ -158,11 +157,6 @@
     }
 
     @Override
-    protected boolean isApnTypeActive(String type) {
-        return mActiveApn != null && mActiveApn.canHandleType(type);
-    }
-
-    @Override
     protected boolean isApnTypeAvailable(String type) {
         for (String s : mSupportedApnTypes) {
             if (TextUtils.equals(type, s)) {
@@ -172,23 +166,6 @@
         return false;
     }
 
-    @Override
-    protected String[] getActiveApnTypes() {
-        String[] result;
-        if (mActiveApn != null) {
-            result = mActiveApn.types;
-        } else {
-            result = new String[1];
-            result[0] = Phone.APN_TYPE_DEFAULT;
-        }
-        return result;
-    }
-
-    @Override
-    protected String getActiveApnString() {
-        return null;
-    }
-
     /**
      * The data connection is expected to be setup while device
      *  1. has ruim card or non-volatile data store
@@ -227,7 +204,7 @@
                     (mCdmaPhone.mSST.isConcurrentVoiceAndData() ||
                             mPhone.getState() == Phone.State.IDLE) &&
                     !roaming &&
-                    mMasterDataEnabled &&
+                    mInternalDataEnabled &&
                     desiredPowerState &&
                     !mPendingRestartRadio &&
                     !mCdmaPhone.needsOtaServiceProvisioning();
@@ -245,7 +222,7 @@
                 reason += " - concurrentVoiceAndData not allowed and state= " + mPhone.getState();
             }
             if (roaming) reason += " - Roaming";
-            if (!mMasterDataEnabled) reason += " - mMasterDataEnabled= false";
+            if (!mInternalDataEnabled) reason += " - mInternalDataEnabled= false";
             if (!desiredPowerState) reason += " - desiredPowerState= false";
             if (mPendingRestartRadio) reason += " - mPendingRestartRadio= true";
             if (mCdmaPhone.needsOtaServiceProvisioning()) reason += " - needs Provisioning";
@@ -349,13 +326,17 @@
         /** TODO: We probably want the connection being setup to a parameter passed around */
         mPendingDataConnection = conn;
         String[] types;
+        int apnId;
         if (mRequestedApnType.equals(Phone.APN_TYPE_DUN)) {
             types = new String[1];
             types[0] = Phone.APN_TYPE_DUN;
+            apnId = DataConnectionTracker.APN_DUN_ID;
         } else {
             types = mDefaultApnTypes;
+            apnId = mDefaultApnId;
         }
-        mActiveApn = new ApnSetting(0, "", "", "", "", "", "", "", "", "", "", 0, types);
+        mActiveApn = new ApnSetting(apnId, "", "", "", "", "", "", "", "", "", "", 0, types);
+        if (DBG) log("setupData: mActiveApn=" + mActiveApn);
 
         Message msg = obtainMessage();
         msg.what = EVENT_DATA_SETUP_COMPLETE;
diff --git a/telephony/java/com/android/internal/telephony/gsm/GSMPhone.java b/telephony/java/com/android/internal/telephony/gsm/GSMPhone.java
index fc03d1a..628f11a 100644
--- a/telephony/java/com/android/internal/telephony/gsm/GSMPhone.java
+++ b/telephony/java/com/android/internal/telephony/gsm/GSMPhone.java
@@ -1084,14 +1084,6 @@
         mDataConnection.setDataOnRoamingEnabled(enable);
     }
 
-    public boolean enableDataConnectivity() {
-        return mDataConnection.setDataEnabled(true);
-    }
-
-    public boolean disableDataConnectivity() {
-        return mDataConnection.setDataEnabled(false);
-    }
-
     /**
      * Removes the given MMI from the pending list and notifies
      * registrants that it is complete.
diff --git a/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java b/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java
index 5c229b6..4713c24 100644
--- a/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java
+++ b/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java
@@ -109,9 +109,6 @@
     private int mWaitingApnsPermanentFailureCountDown = 0;
     private ApnSetting mPreferredApn = null;
 
-    /* Currently active APN */
-    protected ApnSetting mActiveApn;
-
       /** The DataConnection being setup */
     private GsmDataConnection mPendingDataConnection;
 
@@ -212,27 +209,6 @@
         }
     }
 
-    @Override
-    public String[] getActiveApnTypes() {
-        String[] result;
-        if (mActiveApn != null) {
-            result = mActiveApn.types;
-        } else {
-            result = new String[1];
-            result[0] = Phone.APN_TYPE_DEFAULT;
-        }
-        return result;
-    }
-
-    @Override
-    protected String getActiveApnString() {
-        String result = null;
-        if (mActiveApn != null) {
-            result = mActiveApn.apn;
-        }
-        return result;
-    }
-
     /**
      * The data connection is expected to be setup while device
      *  1. has sim card
@@ -257,12 +233,6 @@
     }
 
     @Override
-    protected boolean isApnTypeActive(String type) {
-        // TODO: support simultaneous with List instead
-        return mActiveApn != null && mActiveApn.canHandleType(type);
-    }
-
-    @Override
     protected boolean isApnTypeAvailable(String type) {
         if (type.equals(Phone.APN_TYPE_DUN)) {
             return (fetchDunApn() != null);
@@ -314,7 +284,7 @@
                     (gprsState == ServiceState.STATE_IN_SERVICE || mAutoAttachOnCreation) &&
                     mGsmPhone.mSIMRecords.getRecordsLoaded() &&
                     mPhone.getState() == Phone.State.IDLE &&
-                    mMasterDataEnabled &&
+                    mInternalDataEnabled &&
                     (!mPhone.getServiceState().getRoaming() || getDataOnRoamingEnabled()) &&
                     !mIsPsRestricted &&
                     desiredPowerState;
@@ -327,7 +297,7 @@
             if (mPhone.getState() != Phone.State.IDLE) {
                 reason += " - PhoneState= " + mPhone.getState();
             }
-            if (!mMasterDataEnabled) reason += " - mMasterDataEnabled= false";
+            if (!mInternalDataEnabled) reason += " - mInternalDataEnabled= false";
             if (mPhone.getServiceState().getRoaming() && !getDataOnRoamingEnabled()) {
                 reason += " - Roaming and data roaming not enabled";
             }
