Merge "Log only 1 line per process when using OpenGLRenderer." into honeycomb
diff --git a/api/current.xml b/api/current.xml
index 52d48b6..9520f19 100644
--- a/api/current.xml
+++ b/api/current.xml
@@ -9926,6 +9926,28 @@
  visibility="public"
 >
 </field>
+<field name="textEditSideNoPasteWindowLayout"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="16843615"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="textEditSidePasteWindowLayout"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="16843614"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
 <field name="textFilterEnabled"
  type="int"
  transient="false"
@@ -234839,6 +234861,17 @@
  visibility="public"
 >
 </method>
+<method name="getDisplayZoomControls"
+ return="boolean"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
 <method name="getDomStorageEnabled"
  return="boolean"
  abstract="false"
@@ -235333,6 +235366,19 @@
 <parameter name="zoom" type="android.webkit.WebSettings.ZoomDensity">
 </parameter>
 </method>
+<method name="setDisplayZoomControls"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="enabled" type="boolean">
+</parameter>
+</method>
 <method name="setDomStorageEnabled"
  return="void"
  abstract="false"
diff --git a/core/java/android/accounts/ChooseAccountActivity.java b/core/java/android/accounts/ChooseAccountActivity.java
index 0bbb6fc..293df78 100644
--- a/core/java/android/accounts/ChooseAccountActivity.java
+++ b/core/java/android/accounts/ChooseAccountActivity.java
@@ -15,23 +15,39 @@
  */
 package android.accounts;
 
-import android.app.ListActivity;
+import android.app.Activity;
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.graphics.drawable.Drawable;
 import android.os.Bundle;
 import android.os.Parcelable;
-import android.widget.ArrayAdapter;
-import android.widget.ListView;
-import android.view.View;
 import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.AdapterView;
+import android.widget.ArrayAdapter;
+import android.widget.ImageView;
+import android.widget.ListView;
+import android.widget.TextView;
+import com.android.internal.R;
+
+import java.util.HashMap;
 
 /**
  * @hide
  */
-public class ChooseAccountActivity extends ListActivity {
+public class ChooseAccountActivity extends Activity {
+
     private static final String TAG = "AccountManager";
+
     private Parcelable[] mAccounts = null;
     private AccountManagerResponse mAccountManagerResponse = null;
     private Bundle mResult;
 
+    private HashMap<String, AuthenticatorDescription> mTypeToAuthDescription
+            = new HashMap<String, AuthenticatorDescription>();
+
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -47,16 +63,51 @@
             return;
         }
 
-        String[] mAccountNames = new String[mAccounts.length];
+        getAuthDescriptions();
+
+        AccountInfo[] mAccountInfos = new AccountInfo[mAccounts.length];
         for (int i = 0; i < mAccounts.length; i++) {
-            mAccountNames[i] = ((Account) mAccounts[i]).name;
+            mAccountInfos[i] = new AccountInfo(((Account) mAccounts[i]).name,
+                    getDrawableForType(((Account) mAccounts[i]).type));
         }
 
-        // Use an existing ListAdapter that will map an array
-        // of strings to TextViews
-        setListAdapter(new ArrayAdapter<String>(this,
-                android.R.layout.simple_list_item_1, mAccountNames));
-        getListView().setTextFilterEnabled(true);
+        setContentView(R.layout.choose_account);
+
+        // Setup the list
+        ListView list = (ListView) findViewById(android.R.id.list);
+        // Use an existing ListAdapter that will map an array of strings to TextViews
+        list.setAdapter(new AccountArrayAdapter(this,
+                android.R.layout.simple_list_item_1, mAccountInfos));
+        list.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
+        list.setTextFilterEnabled(true);
+        list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
+            public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
+                onListItemClick((ListView)parent, v, position, id);
+            }
+        });
+    }
+
+    private void getAuthDescriptions() {
+        for(AuthenticatorDescription desc : AccountManager.get(this).getAuthenticatorTypes()) {
+            mTypeToAuthDescription.put(desc.type, desc);
+        }
+    }
+
+    private Drawable getDrawableForType(String accountType) {
+        Drawable icon = null;
+        if(mTypeToAuthDescription.containsKey(accountType)) {
+            try {
+                AuthenticatorDescription desc = mTypeToAuthDescription.get(accountType);
+                Context authContext = createPackageContext(desc.packageName, 0);
+                icon = authContext.getResources().getDrawable(desc.iconId);
+            } catch (PackageManager.NameNotFoundException e) {
+                // Nothing we can do much here, just log
+                if (Log.isLoggable(TAG, Log.WARN)) {
+                    Log.w(TAG, "No icon for account type " + accountType);
+                }
+            }
+        }
+        return icon;
     }
 
     protected void onListItemClick(ListView l, View v, int position, long id) {
@@ -79,4 +130,51 @@
         }
         super.finish();
     }
+
+    private static class AccountInfo {
+        final String name;
+        final Drawable drawable;
+
+        AccountInfo(String name, Drawable drawable) {
+            this.name = name;
+            this.drawable = drawable;
+        }
+    }
+
+    private static class ViewHolder {
+        ImageView icon;
+        TextView text;
+    }
+
+    private static class AccountArrayAdapter extends ArrayAdapter<AccountInfo> {
+        private LayoutInflater mLayoutInflater;
+        private AccountInfo[] mInfos;
+
+        public AccountArrayAdapter(Context context, int textViewResourceId, AccountInfo[] infos) {
+            super(context, textViewResourceId, infos);
+            mInfos = infos;
+            mLayoutInflater = (LayoutInflater) context.getSystemService(
+                    Context.LAYOUT_INFLATER_SERVICE);
+        }
+
+        @Override
+        public View getView(int position, View convertView, ViewGroup parent) {
+            ViewHolder holder;
+
+            if (convertView == null) {
+                convertView = mLayoutInflater.inflate(R.layout.choose_account_row, null);
+                holder = new ViewHolder();
+                holder.text = (TextView) convertView.findViewById(R.id.account_row_text);
+                holder.icon = (ImageView) convertView.findViewById(R.id.account_row_icon);
+                convertView.setTag(holder);
+            } else {
+                holder = (ViewHolder) convertView.getTag();
+            }
+
+            holder.text.setText(mInfos[position].name);
+            holder.icon.setImageDrawable(mInfos[position].drawable);
+
+            return convertView;
+        }
+    }
 }
diff --git a/core/java/android/app/FragmentManager.java b/core/java/android/app/FragmentManager.java
index bce240f..e729805 100644
--- a/core/java/android/app/FragmentManager.java
+++ b/core/java/android/app/FragmentManager.java
@@ -332,7 +332,7 @@
  * Container for fragments associated with an activity.
  */
 final class FragmentManagerImpl extends FragmentManager {
-    static boolean DEBUG = true;
+    static boolean DEBUG = false;
     static final String TAG = "FragmentManager";
     
     static final String TARGET_REQUEST_CODE_STATE_TAG = "android:target_req_state";
@@ -747,7 +747,7 @@
                         f.onActivityCreated(f.mSavedFragmentState);
                         if (!f.mCalled) {
                             throw new SuperNotCalledException("Fragment " + f
-                                    + " did not call through to super.onReady()");
+                                    + " did not call through to super.onActivityCreated()");
                         }
                         f.mSavedFragmentState = null;
                     }
@@ -810,7 +810,7 @@
                         f.onDestroyView();
                         if (!f.mCalled) {
                             throw new SuperNotCalledException("Fragment " + f
-                                    + " did not call through to super.onDestroyedView()");
+                                    + " did not call through to super.onDestroyView()");
                         }
                         if (f.mView != null && f.mContainer != null) {
                             Animator anim = null;
diff --git a/core/java/android/app/LoaderManager.java b/core/java/android/app/LoaderManager.java
index fc5f5fc..431be05 100644
--- a/core/java/android/app/LoaderManager.java
+++ b/core/java/android/app/LoaderManager.java
@@ -186,7 +186,7 @@
 
 class LoaderManagerImpl extends LoaderManager {
     static final String TAG = "LoaderManager";
-    static boolean DEBUG = true;
+    static boolean DEBUG = false;
 
     // These are the currently active loaders.  A loader is here
     // from the time its load is started until it has been explicitly
diff --git a/core/java/android/bluetooth/BluetoothHeadset.java b/core/java/android/bluetooth/BluetoothHeadset.java
index d5b0042..2959fc0 100644
--- a/core/java/android/bluetooth/BluetoothHeadset.java
+++ b/core/java/android/bluetooth/BluetoothHeadset.java
@@ -670,6 +670,26 @@
         return false;
     }
 
+    /**
+     * Send a AT command message to the headset.
+     * @param device Remote Bluetooth Device
+     * @param cmd The String to send.
+     * @hide
+     */
+    public void sendAtCommand(BluetoothDevice device, String command) {
+        if (DBG) log("sendAtCommand()");
+        if (mService != null && isEnabled() && isValidDevice(device)) {
+            try {
+                mService.sendAtCommand(device, command);
+            } catch (RemoteException e) {
+                Log.e(TAG, e.toString());
+            }
+        } else {
+            Log.w(TAG, "Proxy not attached to service");
+            if (DBG) Log.d(TAG, Log.getStackTraceString(new Throwable()));
+        }
+    }
+
     private ServiceConnection mConnection = new ServiceConnection() {
         public void onServiceConnected(ComponentName className, IBinder service) {
             if (DBG) Log.d(TAG, "Proxy object connected");
diff --git a/core/java/android/bluetooth/IBluetoothHeadset.aidl b/core/java/android/bluetooth/IBluetoothHeadset.aidl
index e952193..3c6cf77 100644
--- a/core/java/android/bluetooth/IBluetoothHeadset.aidl
+++ b/core/java/android/bluetooth/IBluetoothHeadset.aidl
@@ -50,4 +50,6 @@
 
     boolean startVirtualVoiceCall(in BluetoothDevice device);
     boolean stopVirtualVoiceCall(in BluetoothDevice device);
+
+    void sendAtCommand(in BluetoothDevice device, String urc);
 }
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 6f23215..4f21265 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -1801,7 +1801,6 @@
             SCREEN_BRIGHTNESS,
             SCREEN_BRIGHTNESS_MODE,
             VIBRATE_ON,
-            NOTIFICATIONS_USE_RING_VOLUME,
             MODE_RINGER,
             MODE_RINGER_STREAMS_AFFECTED,
             MUTE_STREAMS_AFFECTED,
diff --git a/core/java/android/text/method/Touch.java b/core/java/android/text/method/Touch.java
index 78cbdcf..a528044 100644
--- a/core/java/android/text/method/Touch.java
+++ b/core/java/android/text/method/Touch.java
@@ -77,24 +77,6 @@
     }
 
     /**
-     * @hide
-     * Returns the maximum scroll value in x.
-     */
-    public static int getMaxScrollX(TextView widget, Layout layout, int y) {
-        int top = layout.getLineForVertical(y);
-        int bottom = layout.getLineForVertical(y + widget.getHeight()
-                - widget.getTotalPaddingTop() -widget.getTotalPaddingBottom());
-        int left = Integer.MAX_VALUE;
-        int right = 0;
-        for (int i = top; i <= bottom; i++) {
-            left = (int) Math.min(left, layout.getLineLeft(i));
-            right = (int) Math.max(right, layout.getLineRight(i));
-        }
-        return right - left - widget.getWidth() - widget.getTotalPaddingLeft()
-                - widget.getTotalPaddingRight();
-    }
-
-    /**
      * Handles touch events for dragging.  You may want to do other actions
      * like moving the cursor on touch as well.
      */
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index 811a633..469bbaa 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -1813,6 +1813,8 @@
     private int mPrevWidth = -1;
     private int mPrevHeight = -1;
 
+    private boolean mLastIsOpaque;    
+    
     /**
      * Convenience value to check for float values that are close enough to zero to be considered
      * zero.
@@ -5117,7 +5119,16 @@
           removeCallbacks(mPendingCheckForLongPress);
         }
     }
-    
+
+    /**
+     * Remove the pending click action
+     */
+    private void removePerformClickCallback() {
+        if (mPerformClick != null) {
+            removeCallbacks(mPerformClick);
+        }
+    }
+
     /**
      * Remove the prepress detection timer.
      */
@@ -6717,7 +6728,7 @@
     public void invalidate() {
         invalidate(true);
     }
-
+    
     /**
      * This is where the invalidate() work actually happens. A full invalidate()
      * causes the drawing cache to be invalidated, but this function can be called with
@@ -6734,8 +6745,11 @@
             ViewDebug.trace(this, ViewDebug.HierarchyTraceType.INVALIDATE);
         }
 
+        boolean opaque = isOpaque();
         if ((mPrivateFlags & (DRAWN | HAS_BOUNDS)) == (DRAWN | HAS_BOUNDS) ||
-                (invalidateCache && (mPrivateFlags & DRAWING_CACHE_VALID) == DRAWING_CACHE_VALID)) {
+                (invalidateCache && (mPrivateFlags & DRAWING_CACHE_VALID) == DRAWING_CACHE_VALID) ||
+                opaque != mLastIsOpaque) {
+            mLastIsOpaque = opaque;
             mPrivateFlags &= ~DRAWN;
             if (invalidateCache) {
                 mPrivateFlags &= ~DRAWING_CACHE_VALID;
@@ -7579,6 +7593,7 @@
 
         removeUnsetPressCallback();
         removeLongPressCallback();
+        removePerformClickCallback();
 
         destroyDrawingCache();
 
diff --git a/core/java/android/view/ViewRoot.java b/core/java/android/view/ViewRoot.java
index 2c6ec71..ad101f8 100644
--- a/core/java/android/view/ViewRoot.java
+++ b/core/java/android/view/ViewRoot.java
@@ -710,8 +710,10 @@
             // object is not initialized to its backing store, but soon it
             // will be (assuming the window is visible).
             attachInfo.mSurface = mSurface;
-            attachInfo.mUse32BitDrawingCache = PixelFormat.formatHasAlpha(lp.format) ||
-                    lp.format == PixelFormat.RGBX_8888;
+            // We used to use the following condition to choose 32 bits drawing caches:
+            // PixelFormat.hasAlpha(lp.format) || lp.format == PixelFormat.RGBX_8888
+            // However, windows are now always 32 bits by default, so choose 32 bits
+            attachInfo.mUse32BitDrawingCache = true;
             attachInfo.mHasWindowFocus = false;
             attachInfo.mWindowVisibility = viewVisibility;
             attachInfo.mRecomputeGlobalAttributes = false;
diff --git a/core/java/android/view/inputmethod/InputMethodSubtype.java b/core/java/android/view/inputmethod/InputMethodSubtype.java
index 39a0c19..ba425a6 100644
--- a/core/java/android/view/inputmethod/InputMethodSubtype.java
+++ b/core/java/android/view/inputmethod/InputMethodSubtype.java
@@ -22,13 +22,10 @@
 import java.util.Arrays;
 
 /**
- * Information given to an {@link InputMethod} about a client connecting
- * to it.
- */
-/**
- * InputMethodSubtype is a subtype contained in the input method. Subtype can describe
- * locales (e.g. en_US, fr_FR...) and modes (e.g. voice, keyboard...), and is used for
- * IME switch. The subtype allows the system to call the specified subtype of IME directly.
+ * This class is used to specify meta information of a subtype contained in an input method.
+ * Subtype can describe locale (e.g. en_US, fr_FR...) and mode (e.g. voice, keyboard...), and is
+ * used for IME switch and settings. The input method subtype allows the system to bring up the
+ * specified subtype of the designated input method directly.
  */
 public final class InputMethodSubtype implements Parcelable {
     private final int mSubtypeNameResId;
diff --git a/core/java/android/webkit/WebSettings.java b/core/java/android/webkit/WebSettings.java
index 518ba69..0bf0eab 100644
--- a/core/java/android/webkit/WebSettings.java
+++ b/core/java/android/webkit/WebSettings.java
@@ -571,7 +571,6 @@
      * A combination of built in zoom controls enabled
      * and on screen zoom controls disabled allows for pinch to zoom
      * to work without the on screen controls
-     * @hide
      */
     public void setDisplayZoomControls(boolean enabled) {
         mDisplayZoomControls = enabled;
@@ -580,7 +579,6 @@
 
     /**
      * Returns true if the on screen zoom buttons are being used.
-     * @hide
      */
     public boolean getDisplayZoomControls() {
         return mDisplayZoomControls;
diff --git a/core/java/android/webkit/WebTextView.java b/core/java/android/webkit/WebTextView.java
index 72b0023..6e1a6fc 100644
--- a/core/java/android/webkit/WebTextView.java
+++ b/core/java/android/webkit/WebTextView.java
@@ -135,7 +135,6 @@
     // Used to determine whether onFocusChanged was called as a result of
     // calling remove().
     private boolean mInsideRemove;
-    private boolean mInPassword;
 
     // Types used with setType.  Keep in sync with CachedInput.h
     private static final int NORMAL_TEXT_FIELD = 0;
@@ -374,18 +373,24 @@
     }
 
     /**
-     * Ensure that the underlying textfield is lined up with the WebTextView.
+     * Ensure that the underlying text field/area is lined up with the WebTextView.
      */
     private void lineUpScroll() {
         Layout layout = getLayout();
         if (mWebView != null && layout != null) {
-            float maxScrollX = Touch.getMaxScrollX(this, layout, mScrollY);
-            if (DebugFlags.WEB_TEXT_VIEW) {
-                Log.v(LOGTAG, "onTouchEvent x=" + mScrollX + " y="
-                        + mScrollY + " maxX=" + maxScrollX);
+            if (mSingle) {
+                // textfields only need to be lined up horizontally.
+                float maxScrollX = layout.getLineRight(0) - getWidth();
+                if (DebugFlags.WEB_TEXT_VIEW) {
+                    Log.v(LOGTAG, "onTouchEvent x=" + mScrollX + " y="
+                            + mScrollY + " maxX=" + maxScrollX);
+                }
+                mWebView.scrollFocusedTextInputX(maxScrollX > 0 ?
+                        mScrollX / maxScrollX : 0);
+            } else {
+                // textareas only need to be lined up vertically.
+                mWebView.scrollFocusedTextInputY(mScrollY);
             }
-            mWebView.scrollFocusedTextInput(maxScrollX > 0 ?
-                    mScrollX / maxScrollX : 0, mScrollY);
         }
     }
 
@@ -414,6 +419,7 @@
                     mLayout.getSpacingAdd(), false, null, ellipsisWidth,
                     lineHeight);
         }
+        lineUpScroll();
     }
 
     /**
@@ -786,10 +792,8 @@
     }
 
     @Override
-    public boolean bringPointIntoView(int offset) {
-        if (mInPassword) {
-            return getLayout() != null && super.bringPointIntoView(offset);
-        }
+    public boolean requestRectangleOnScreen(Rect rectangle, boolean immediate) {
+        // Do nothing, since webkit will put the textfield on screen.
         return true;
     }
 
@@ -904,7 +908,6 @@
      * @param   inPassword  True if the textfield is a password field.
      */
     /* package */ void setInPassword(boolean inPassword) {
-        mInPassword = inPassword;
         if (inPassword) {
             setInputType(EditorInfo.TYPE_CLASS_TEXT | EditorInfo.
                 TYPE_TEXT_VARIATION_WEB_PASSWORD);
@@ -1084,7 +1087,7 @@
      */
     /* package */ void setTextAndKeepSelection(String text) {
         mPreChange = text.toString();
-        Editable edit = (Editable) getText();
+        Editable edit = getText();
         int selStart = Selection.getSelectionStart(edit);
         int selEnd = Selection.getSelectionEnd(edit);
         mInSetTextAndKeepSelection = true;
@@ -1094,6 +1097,12 @@
         if (selEnd > newLength) selEnd = newLength;
         Selection.setSelection(edit, selStart, selEnd);
         mInSetTextAndKeepSelection = false;
+        InputMethodManager imm = InputMethodManager.peekInstance();
+        if (imm != null && imm.isActive(this)) {
+            // Since the text has changed, do not allow the IME to replace the
+            // existing text as though it were a completion.
+            imm.restartInput(this);
+        }
         updateCachedTextfield();
     }
 
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java
index f5ad6fe..3102ee9 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -476,6 +476,7 @@
     private static final int TOUCH_DRAG_LAYER_MODE = 9;
 
     // Whether to forward the touch events to WebCore
+    // Can only be set by WebKit via JNI.
     private boolean mForwardTouchEvents = false;
 
     // Whether to prevent default during touch. The initial value depends on
@@ -5358,26 +5359,26 @@
                 + " numPointers=" + ev.getPointerCount());
         }
 
-        // Always pass multi-touch event to WebKit first.
-        // If WebKit doesn't consume it and set preventDefault to true,
-        // WebView's private handler will handle it.
-        if (ev.getPointerCount() > 1) {
-            if (DebugFlags.WEB_VIEW) {
-                Log.v(LOGTAG, "passing " + ev.getPointerCount() + " points to webkit");
+        int action = ev.getActionMasked();
+        if (ev.getPointerCount() > 1) {  // Multi-touch
+            mIsHandlingMultiTouch = true;
+
+            // If WebKit already showed no interests in this sequence of events,
+            // WebView handles them directly.
+            if (mPreventDefault == PREVENT_DEFAULT_NO && action == MotionEvent.ACTION_MOVE) {
+                handleMultiTouchInWebView(ev);
+            } else {
+                passMultiTouchToWebKit(ev);
             }
-            if (!mIsHandlingMultiTouch) {
-                mIsHandlingMultiTouch = true;
-            }
-            passMultiTouchToWebKit(ev);
             return true;
-        } else {
-            // Skip ACTION_MOVE for single touch if it's still handling multi-touch.
-            if (mIsHandlingMultiTouch && ev.getActionMasked() == MotionEvent.ACTION_MOVE) {
-                return false;
-            }
         }
 
-        return handleTouchEventCommon(ev, ev.getActionMasked(), Math.round(ev.getX()), Math.round(ev.getY()));
+        // Skip ACTION_MOVE for single touch if it's still handling multi-touch.
+        if (mIsHandlingMultiTouch && action == MotionEvent.ACTION_MOVE) {
+            return false;
+        }
+
+        return handleTouchEventCommon(ev, action, Math.round(ev.getX()), Math.round(ev.getY()));
     }
 
     /*
@@ -6616,23 +6617,34 @@
     }
 
     /**
-     * Scroll the focused text field/area to match the WebTextView
+     * Scroll the focused text field to match the WebTextView
      * @param xPercent New x position of the WebTextView from 0 to 1.
-     * @param y New y position of the WebTextView in view coordinates
      */
-    /*package*/ void scrollFocusedTextInput(float xPercent, int y) {
+    /*package*/ void scrollFocusedTextInputX(float xPercent) {
         if (!inEditingMode() || mWebViewCore == null) {
             return;
         }
-        mWebViewCore.sendMessage(EventHub.SCROLL_TEXT_INPUT,
-                // Since this position is relative to the top of the text input
-                // field, we do not need to take the title bar's height into
-                // consideration.
-                viewToContentDimension(y),
+        mWebViewCore.sendMessage(EventHub.SCROLL_TEXT_INPUT, 0,
                 new Float(xPercent));
     }
 
     /**
+     * Scroll the focused textarea vertically to match the WebTextView
+     * @param y New y position of the WebTextView in view coordinates
+     */
+    /* package */ void scrollFocusedTextInputY(int y) {
+        if (!inEditingMode()) {
+            return;
+        }
+        int xPos = viewToContentX((mWebTextView.getLeft() + mWebTextView.getRight()) / 2);
+        int yPos = viewToContentY((mWebTextView.getTop() + mWebTextView.getBottom()) / 2);
+        int layer = nativeScrollableLayer(xPos, yPos, null, null);
+        if (layer != 0) {
+            nativeScrollLayer(layer, 0, viewToContentDimension(y));
+        }
+    }
+
+    /**
      * Set our starting point and time for a drag from the WebTextView.
      */
     /*package*/ void initiateTextFieldDrag(float x, float y, long eventTime) {
@@ -7346,75 +7358,85 @@
                         if (mPreventDefault == PREVENT_DEFAULT_YES) {
                             mTouchHighlightRegion.setEmpty();
                         }
-                    } else if (msg.arg2 == 0) {
-                        // prevent default is not called in WebCore, so the
-                        // message needs to be reprocessed in UI
+                    } else {
                         TouchEventData ted = (TouchEventData) msg.obj;
 
-                        if (ted.mPoints.length > 1) {  // for multi-touch.
-                            handleMultiTouchInWebView(ted.mMotionEvent);
+                        if (ted.mPoints.length > 1) {  // multi-touch
+                            if (ted.mAction == MotionEvent.ACTION_POINTER_UP) {
+                                mIsHandlingMultiTouch = false;
+                            }
+                            if (msg.arg2 == 0) {
+                                mPreventDefault = PREVENT_DEFAULT_NO;
+                                handleMultiTouchInWebView(ted.mMotionEvent);
+                            } else {
+                                mPreventDefault = PREVENT_DEFAULT_YES;
+                            }
                             break;
                         }
 
-                        // Following is for single touch.
-                        switch (ted.mAction) {
-                            case MotionEvent.ACTION_DOWN:
-                                mLastDeferTouchX = contentToViewX(ted.mPoints[0].x)
-                                        - mScrollX;
-                                mLastDeferTouchY = contentToViewY(ted.mPoints[0].y)
-                                        - mScrollY;
-                                mDeferTouchMode = TOUCH_INIT_MODE;
-                                break;
-                            case MotionEvent.ACTION_MOVE: {
-                                // no snapping in defer process
-                                int x = contentToViewX(ted.mPoints[0].x) - mScrollX;
-                                int y = contentToViewY(ted.mPoints[0].y) - mScrollY;
-                                if (mDeferTouchMode != TOUCH_DRAG_MODE) {
-                                    mDeferTouchMode = TOUCH_DRAG_MODE;
-                                    mLastDeferTouchX = x;
-                                    mLastDeferTouchY = y;
-                                    startScrollingLayer(x, y);
-                                    startDrag();
+                        // prevent default is not called in WebCore, so the
+                        // message needs to be reprocessed in UI
+                        if (msg.arg2 == 0) {
+                            // Following is for single touch.
+                            switch (ted.mAction) {
+                                case MotionEvent.ACTION_DOWN:
+                                    mLastDeferTouchX = contentToViewX(ted.mPoints[0].x)
+                                            - mScrollX;
+                                    mLastDeferTouchY = contentToViewY(ted.mPoints[0].y)
+                                            - mScrollY;
+                                    mDeferTouchMode = TOUCH_INIT_MODE;
+                                    break;
+                                case MotionEvent.ACTION_MOVE: {
+                                    // no snapping in defer process
+                                    int x = contentToViewX(ted.mPoints[0].x) - mScrollX;
+                                    int y = contentToViewY(ted.mPoints[0].y) - mScrollY;
+                                    if (mDeferTouchMode != TOUCH_DRAG_MODE) {
+                                        mDeferTouchMode = TOUCH_DRAG_MODE;
+                                        mLastDeferTouchX = x;
+                                        mLastDeferTouchY = y;
+                                        startScrollingLayer(x, y);
+                                        startDrag();
+                                    }
+                                    int deltaX = pinLocX((int) (mScrollX
+                                            + mLastDeferTouchX - x))
+                                            - mScrollX;
+                                    int deltaY = pinLocY((int) (mScrollY
+                                            + mLastDeferTouchY - y))
+                                            - mScrollY;
+                                    doDrag(deltaX, deltaY);
+                                    if (deltaX != 0) mLastDeferTouchX = x;
+                                    if (deltaY != 0) mLastDeferTouchY = y;
+                                    break;
                                 }
-                                int deltaX = pinLocX((int) (mScrollX
-                                        + mLastDeferTouchX - x))
-                                        - mScrollX;
-                                int deltaY = pinLocY((int) (mScrollY
-                                        + mLastDeferTouchY - y))
-                                        - mScrollY;
-                                doDrag(deltaX, deltaY);
-                                if (deltaX != 0) mLastDeferTouchX = x;
-                                if (deltaY != 0) mLastDeferTouchY = y;
-                                break;
+                                case MotionEvent.ACTION_UP:
+                                case MotionEvent.ACTION_CANCEL:
+                                    if (mDeferTouchMode == TOUCH_DRAG_MODE) {
+                                        // no fling in defer process
+                                        mScroller.springBack(mScrollX, mScrollY, 0,
+                                                computeMaxScrollX(), 0,
+                                                computeMaxScrollY());
+                                        invalidate();
+                                        WebViewCore.resumePriority();
+                                        WebViewCore.resumeUpdatePicture(mWebViewCore);
+                                    }
+                                    mDeferTouchMode = TOUCH_DONE_MODE;
+                                    break;
+                                case WebViewCore.ACTION_DOUBLETAP:
+                                    // doDoubleTap() needs mLastTouchX/Y as anchor
+                                    mLastTouchX = contentToViewX(ted.mPoints[0].x) - mScrollX;
+                                    mLastTouchY = contentToViewY(ted.mPoints[0].y) - mScrollY;
+                                    mZoomManager.handleDoubleTap(mLastTouchX, mLastTouchY);
+                                    mDeferTouchMode = TOUCH_DONE_MODE;
+                                    break;
+                                case WebViewCore.ACTION_LONGPRESS:
+                                    HitTestResult hitTest = getHitTestResult();
+                                    if (hitTest != null && hitTest.mType
+                                            != HitTestResult.UNKNOWN_TYPE) {
+                                        performLongClick();
+                                    }
+                                    mDeferTouchMode = TOUCH_DONE_MODE;
+                                    break;
                             }
-                            case MotionEvent.ACTION_UP:
-                            case MotionEvent.ACTION_CANCEL:
-                                if (mDeferTouchMode == TOUCH_DRAG_MODE) {
-                                    // no fling in defer process
-                                    mScroller.springBack(mScrollX, mScrollY, 0,
-                                            computeMaxScrollX(), 0,
-                                            computeMaxScrollY());
-                                    invalidate();
-                                    WebViewCore.resumePriority();
-                                    WebViewCore.resumeUpdatePicture(mWebViewCore);
-                                }
-                                mDeferTouchMode = TOUCH_DONE_MODE;
-                                break;
-                            case WebViewCore.ACTION_DOUBLETAP:
-                                // doDoubleTap() needs mLastTouchX/Y as anchor
-                                mLastTouchX = contentToViewX(ted.mPoints[0].x) - mScrollX;
-                                mLastTouchY = contentToViewY(ted.mPoints[0].y) - mScrollY;
-                                mZoomManager.handleDoubleTap(mLastTouchX, mLastTouchY);
-                                mDeferTouchMode = TOUCH_DONE_MODE;
-                                break;
-                            case WebViewCore.ACTION_LONGPRESS:
-                                HitTestResult hitTest = getHitTestResult();
-                                if (hitTest != null && hitTest.mType
-                                        != HitTestResult.UNKNOWN_TYPE) {
-                                    performLongClick();
-                                }
-                                mDeferTouchMode = TOUCH_DONE_MODE;
-                                break;
                         }
                     }
                     break;
@@ -7967,15 +7989,27 @@
         }
     }
 
-    // called by JNI
+    /**
+     * Called by JNI to send a message to the webcore thread that the user
+     * touched the webpage.
+     * @param touchGeneration Generation number of the touch, to ignore touches
+     *      after a new one has been generated.
+     * @param frame Pointer to the frame holding the node that was touched.
+     * @param node Pointer to the node touched.
+     * @param x x-position of the touch.
+     * @param y y-position of the touch.
+     * @param scrollY Only used when touching on a textarea.  Otherwise, use -1.
+     *      Tells how much the textarea is scrolled.
+     */
     private void sendMotionUp(int touchGeneration,
-            int frame, int node, int x, int y) {
+            int frame, int node, int x, int y, int scrollY) {
         WebViewCore.TouchUpData touchUpData = new WebViewCore.TouchUpData();
         touchUpData.mMoveGeneration = touchGeneration;
         touchUpData.mFrame = frame;
         touchUpData.mNode = node;
         touchUpData.mX = x;
         touchUpData.mY = y;
+        touchUpData.mScrollY = scrollY;
         mWebViewCore.sendMessage(EventHub.TOUCH_UP, touchUpData);
     }
 
@@ -8151,8 +8185,8 @@
      * @hide This is only used by the webkit layout test.
      */
     public void setDeferMultiTouch(boolean value) {
-        mDeferMultitouch = value;
-        Log.v(LOGTAG, "set mDeferMultitouch to " + value);
+      mDeferMultitouch = value;
+      Log.v(LOGTAG, "set mDeferMultitouch to " + value);
     }
 
     /**
@@ -8301,5 +8335,12 @@
     // Returns a pointer to the scrollable LayerAndroid at the given point.
     private native int      nativeScrollableLayer(int x, int y, Rect scrollRect,
             Rect scrollBounds);
-    private native boolean  nativeScrollLayer(int layer, int dx, int dy);
+    /**
+     * Scroll the specified layer.
+     * @param layer Id of the layer to scroll, as determined by nativeScrollableLayer.
+     * @param newX Destination x position to which to scroll.
+     * @param newY Destination y position to which to scroll.
+     * @return True if the layer is successfully scrolled.
+     */
+    private native boolean  nativeScrollLayer(int layer, int newX, int newY);
 }
diff --git a/core/java/android/webkit/WebViewCore.java b/core/java/android/webkit/WebViewCore.java
index 4fe1678..bb4441f 100644
--- a/core/java/android/webkit/WebViewCore.java
+++ b/core/java/android/webkit/WebViewCore.java
@@ -560,7 +560,7 @@
     private native String nativeRetrieveImageSource(int x, int y);
 
     private native void nativeTouchUp(int touchGeneration,
-            int framePtr, int nodePtr, int x, int y);
+            int framePtr, int nodePtr, int x, int y, int scrollY);
 
     private native boolean nativeHandleTouchEvent(int action, int[] idArray,
             int[] xArray, int[] yArray, int count, int metaState);
@@ -790,6 +790,8 @@
         int mNode;
         int mX;
         int mY;
+        // Used in the case of a scrolled textarea
+        int mScrollY;
     }
 
     static class TouchHighlightData {
@@ -1321,7 +1323,8 @@
                             TouchUpData touchUpData = (TouchUpData) msg.obj;
                             nativeTouchUp(touchUpData.mMoveGeneration,
                                     touchUpData.mFrame, touchUpData.mNode,
-                                    touchUpData.mX, touchUpData.mY);
+                                    touchUpData.mX, touchUpData.mY,
+                                    touchUpData.mScrollY);
                             break;
 
                         case TOUCH_EVENT: {
diff --git a/core/java/android/webkit/ZoomManager.java b/core/java/android/webkit/ZoomManager.java
index 9a050c5..b47fe86 100644
--- a/core/java/android/webkit/ZoomManager.java
+++ b/core/java/android/webkit/ZoomManager.java
@@ -232,12 +232,26 @@
     }
 
     private void setDefaultZoomScale(float defaultScale) {
+        final float originalDefault = mDefaultScale;
         mDefaultScale = defaultScale;
         mInvDefaultScale = 1 / defaultScale;
         mDefaultMaxZoomScale = defaultScale * DEFAULT_MAX_ZOOM_SCALE_FACTOR;
         mDefaultMinZoomScale = defaultScale * DEFAULT_MIN_ZOOM_SCALE_FACTOR;
-        mMaxZoomScale = mDefaultMaxZoomScale;
-        mMinZoomScale = mDefaultMinZoomScale;
+        if (originalDefault > 0.0 && mMaxZoomScale > 0.0) {
+            // Keeps max zoom scale when zoom density changes.
+            mMaxZoomScale = defaultScale / originalDefault * mMaxZoomScale;
+        } else {
+            mMaxZoomScale = mDefaultMaxZoomScale;
+        }
+        if (originalDefault > 0.0 && mMinZoomScale > 0.0) {
+            // Keeps min zoom scale when zoom density changes.
+            mMinZoomScale = defaultScale / originalDefault * mMinZoomScale;
+        } else {
+            mMinZoomScale = mDefaultMinZoomScale;
+        }
+        if (!exceedsMinScaleIncrement(mMinZoomScale, mMaxZoomScale)) {
+            mMaxZoomScale = mMinZoomScale;
+        }
     }
 
     public final float getScale() {
@@ -468,7 +482,7 @@
             mTextWrapScale = scale;
         }
 
-        if (scale != mActualScale || force) {
+        if (exceedsMinScaleIncrement(scale, mActualScale) || force) {
             float oldScale = mActualScale;
             float oldInvScale = mInvActualScale;
 
diff --git a/core/java/android/widget/AdapterViewAnimator.java b/core/java/android/widget/AdapterViewAnimator.java
index 6eb06ad..e34a204 100644
--- a/core/java/android/widget/AdapterViewAnimator.java
+++ b/core/java/android/widget/AdapterViewAnimator.java
@@ -696,6 +696,8 @@
                         mWhichChild = 0;
 
                         showOnly(mWhichChild, true);
+                    } else if (mOldItemCount != getCount()) {
+                        showOnly(mWhichChild, true);
                     }
                     refreshChildren();
                     requestLayout();
diff --git a/core/java/android/widget/StackView.java b/core/java/android/widget/StackView.java
index 9ec4b74..03c073c 100644
--- a/core/java/android/widget/StackView.java
+++ b/core/java/android/widget/StackView.java
@@ -454,9 +454,13 @@
         canvas.getClipBounds(stackInvalidateRect);
         final int childCount = getChildCount();
         for (int i = 0; i < childCount; i++) {
-            LayoutParams lp = (LayoutParams) getChildAt(i).getLayoutParams();
+            final View child =  getChildAt(i);
+            LayoutParams lp = (LayoutParams) child.getLayoutParams();
+            if ((lp.horizontalOffset == 0 && lp.verticalOffset == 0) ||
+                    child.getAlpha() == 0f || child.getVisibility() != VISIBLE) {
+                lp.resetInvalidateRect();
+            }
             stackInvalidateRect.union(lp.getInvalidateRect());
-            lp.resetInvalidateRect();
         }
         canvas.save(Canvas.CLIP_SAVE_FLAG);
         canvas.clipRect(stackInvalidateRect, Region.Op.UNION);
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index d09e52f..aac57ed 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -307,8 +307,8 @@
     int mTextSelectHandleLeftRes;
     int mTextSelectHandleRightRes;
     int mTextSelectHandleRes;
-    int mTextEditPasteWindowLayout;
-    int mTextEditNoPasteWindowLayout;
+    int mTextEditPasteWindowLayout, mTextEditSidePasteWindowLayout;
+    int mTextEditNoPasteWindowLayout, mTextEditSideNoPasteWindowLayout;
 
     Drawable mSelectHandleLeft;
     Drawable mSelectHandleRight;
@@ -762,6 +762,14 @@
                 mTextEditNoPasteWindowLayout = a.getResourceId(attr, 0);
                 break;
 
+            case com.android.internal.R.styleable.TextView_textEditSidePasteWindowLayout:
+                mTextEditSidePasteWindowLayout = a.getResourceId(attr, 0);
+                break;
+
+            case com.android.internal.R.styleable.TextView_textEditSideNoPasteWindowLayout:
+                mTextEditSideNoPasteWindowLayout = a.getResourceId(attr, 0);
+                break;
+
             case com.android.internal.R.styleable.TextView_textIsSelectable:
                 mTextIsSelectable = a.getBoolean(attr, false);
                 break;
@@ -4783,8 +4791,6 @@
             return super.onKeyUp(keyCode, event);
         }
 
-        hideControllers();
-
         switch (keyCode) {
             case KeyEvent.KEYCODE_DPAD_CENTER:
                 mDPadCenterIsDown = false;
@@ -7118,6 +7124,13 @@
         }
 
         super.onFocusChanged(focused, direction, previouslyFocusedRect);
+
+        // After super.onFocusChanged so that this TextView is registered and can ask for the IME
+        // Showing the IME while focus is moved using the D-Pad is a bad idea, however this does
+        // not happen in that case (using the arrows on a bluetooth keyboard).
+        if (focused) {
+            onTouchFinished(null);
+        }
     }
 
     private int getLastTapPosition() {
@@ -7260,6 +7273,9 @@
             return superResult;
         }
 
+        final boolean touchIsFinished = action == MotionEvent.ACTION_UP && !mIgnoreActionUpEvent &&
+                isFocused();
+
         if ((mMovement != null || onCheckIsTextEditor()) && isEnabled()
                 && mText instanceof Spannable && mLayout != null) {
             boolean handled = false;
@@ -7275,8 +7291,7 @@
                 handled |= mMovement.onTouchEvent(this, (Spannable) mText, event);
             }
 
-            if (mLinksClickable && mAutoLinkMask != 0 && mTextIsSelectable &&
-                    action == MotionEvent.ACTION_UP && !mIgnoreActionUpEvent && isFocused()) {
+            if (mLinksClickable && mAutoLinkMask != 0 && mTextIsSelectable && touchIsFinished) {
                 // The LinkMovementMethod which should handle taps on links has not been installed
                 // to support text selection. We reproduce its behavior here to open links.
                 ClickableSpan[] links = ((Spannable) mText).getSpans(getSelectionStart(),
@@ -7298,26 +7313,15 @@
                         mSelectionModifierCursorController.updatePosition();
                     }
                 }
-                if (action == MotionEvent.ACTION_UP && !mIgnoreActionUpEvent && isFocused()) {
-                    InputMethodManager imm = (InputMethodManager)
-                    getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
 
+                if (touchIsFinished) {
                     CommitSelectionReceiver csr = null;
                     if (getSelectionStart() != oldSelStart || getSelectionEnd() != oldSelEnd ||
                             didTouchFocusSelect()) {
                         csr = new CommitSelectionReceiver(oldSelStart, oldSelEnd);
                     }
 
-                    if (!mTextIsSelectable) {
-                        // Show the IME, except when selecting in read-only text.
-                        handled |= imm.showSoftInput(this, 0, csr) && (csr != null);
-                    }
-
-                    stopSelectionActionMode();
-                    boolean selectAllGotFocus = mSelectAllOnFocus && mTouchFocusSelected;
-                    if (hasInsertionController() && !selectAllGotFocus) {
-                        getInsertionController().show();
-                    }
+                    handled = onTouchFinished(csr);
                 }
             }
 
@@ -7329,6 +7333,35 @@
         return superResult;
     }
 
+    /** Shows the IME if applicable, ends selection mode and displays the selection controller.
+     *
+     * This method is called at the end of a touch event, when the finger is lifted up.
+     * It is also called when the TextField gains focus indirectly through a dispatched event from
+     * one of its parents. We want to have the same behavior in that case.
+     *
+     * @param csr A (possibly null) callback called if the IME has been displayed
+     * @return true if the event was properly sent to the csr
+     */
+    private boolean onTouchFinished(CommitSelectionReceiver csr) {
+        boolean handled = false;
+
+        // Show the IME, except when selecting in read-only text.
+        if (!mTextIsSelectable) {
+            final InputMethodManager imm = (InputMethodManager)
+                    getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
+
+            handled = imm.showSoftInput(this, 0, csr) && (csr != null);
+        }
+
+        stopSelectionActionMode();
+        boolean selectAllGotFocus = mSelectAllOnFocus && mTouchFocusSelected;
+        if (hasInsertionController() && !selectAllGotFocus) {
+            getInsertionController().show();
+        }
+
+        return handled;
+    }
+
     private void prepareCursorControllers() {
         boolean windowSupportsHandles = false;
 
@@ -8422,8 +8455,11 @@
         private final PopupWindow mContainer;
         private int mPositionX;
         private int mPositionY;
-        private View mPasteView, mNoPasteView;
-
+        private final View[] mPasteViews = new View[4];
+        private final int[] mPasteViewLayouts = new int[] { 
+                mTextEditPasteWindowLayout,  mTextEditNoPasteWindowLayout, 
+                mTextEditSidePasteWindowLayout, mTextEditSideNoPasteWindowLayout };
+        
         public PastePopupMenu() {
             mContainer = new PopupWindow(TextView.this.mContext, null,
                     com.android.internal.R.attr.textSelectHandleWindowStyle);
@@ -8435,12 +8471,16 @@
             mContainer.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
         }
 
-        private void updateContent() {
-            View view = canPaste() ? mPasteView : mNoPasteView;
+        private int viewIndex(boolean onTop) {
+            return (onTop ? 0 : 1<<1) + (canPaste() ? 0 : 1<<0);
+        }
+
+        private void updateContent(boolean onTop) {
+            final int viewIndex = viewIndex(onTop);
+            View view = mPasteViews[viewIndex];
 
             if (view == null) {
-                final int layout = canPaste() ? mTextEditPasteWindowLayout :
-                    mTextEditNoPasteWindowLayout;
+                final int layout = mPasteViewLayouts[viewIndex];
                 LayoutInflater inflater = (LayoutInflater)TextView.this.mContext.
                     getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                 if (inflater != null) {
@@ -8457,26 +8497,16 @@
                 view.measure(size, size);
 
                 view.setOnClickListener(this);
-
-                if (canPaste()) mPasteView = view;
-                else mNoPasteView = view;
+                
+                mPasteViews[viewIndex] = view;
             }
 
             mContainer.setContentView(view);
         }
 
         public void show() {
-            updateContent();
-            final int[] coords = mTempCoords;
-            TextView.this.getLocationInWindow(coords);
+            updateContent(true);
             positionAtCursor();
-            coords[0] += mPositionX;
-            coords[1] += mPositionY;
-            coords[0] = Math.max(0, coords[0]);
-            final int screenWidth = mContext.getResources().getDisplayMetrics().widthPixels;
-            coords[0] = Math.min(screenWidth - mContainer.getContentView().getMeasuredWidth(),
-                    coords[0]);
-            mContainer.showAtLocation(TextView.this, Gravity.NO_GRAVITY, coords[0], coords[1]);
         }
 
         public void hide() {
@@ -8496,15 +8526,16 @@
         }
 
         void positionAtCursor() {
-            final int offset = TextView.this.getSelectionStart();
             View contentView = mContainer.getContentView();
-            final int width = contentView.getMeasuredWidth();
-            final int height = contentView.getMeasuredHeight();
+            int width = contentView.getMeasuredWidth();
+            int height = contentView.getMeasuredHeight();
+            final int offset = TextView.this.getSelectionStart();
             final int line = mLayout.getLineForOffset(offset);
             final int lineTop = mLayout.getLineTop(line);
+            float primaryHorizontal = mLayout.getPrimaryHorizontal(offset);
 
             final Rect bounds = sCursorControllerTempRect;
-            bounds.left = (int) (mLayout.getPrimaryHorizontal(offset) - width / 2.0f);
+            bounds.left = (int) (primaryHorizontal - width / 2.0f);
             bounds.top = lineTop - height;
 
             bounds.right = bounds.left + width;
@@ -8514,6 +8545,44 @@
 
             mPositionX = bounds.left;
             mPositionY = bounds.top;
+
+
+            final int[] coords = mTempCoords;
+            TextView.this.getLocationInWindow(coords);
+            coords[0] += mPositionX;
+            coords[1] += mPositionY;
+
+            final int screenWidth = mContext.getResources().getDisplayMetrics().widthPixels;
+            if (coords[1] < 0) {
+                updateContent(false);
+                // Update dimensions from new view
+                contentView = mContainer.getContentView();
+                width = contentView.getMeasuredWidth();
+                height = contentView.getMeasuredHeight();
+
+                // Vertical clipping, move under edited line and to the side of insertion cursor 
+                // TODO bottom clipping in case there is no system bar
+                coords[1] += height;
+                final int lineBottom = mLayout.getLineBottom(line);
+                final int lineHeight = lineBottom - lineTop;
+                coords[1] += lineHeight;
+
+                // Move to right hand side of insertion cursor by default. TODO RTL text.
+                final Drawable handle = mContext.getResources().getDrawable(mTextSelectHandleRes);
+                final int handleHalfWidth = handle.getIntrinsicWidth() / 2;
+
+                if (primaryHorizontal + handleHalfWidth + width < screenWidth) {
+                    coords[0] += handleHalfWidth + width / 2;
+                } else {
+                    coords[0] -= handleHalfWidth + width / 2;                    
+                }
+            } else {
+                // Horizontal clipping
+                coords[0] = Math.max(0, coords[0]);
+                coords[0] = Math.min(screenWidth - width, coords[0]);
+            }
+
+            mContainer.showAtLocation(TextView.this, Gravity.NO_GRAVITY, coords[0], coords[1]);
         }
     }
 
@@ -8915,11 +8984,11 @@
             hideDelayed();
             getHandle().show();
             removePastePopupCallback();
-            if (canPaste()) {
-                final long durationSinceCutOrCopy = SystemClock.uptimeMillis() - sLastCutOrCopyTime;
-                if (durationSinceCutOrCopy < RECENT_CUT_COPY_DURATION) {
-                    delayBeforePaste = 0;
-                }
+            final long durationSinceCutOrCopy = SystemClock.uptimeMillis() - sLastCutOrCopyTime;
+            if (durationSinceCutOrCopy < RECENT_CUT_COPY_DURATION) {
+                delayBeforePaste = 0;
+            }
+            if (delayBeforePaste == 0 || canPaste()) {
                 if (mPastePopupShower == null) {
                     mPastePopupShower = new Runnable() {
                         public void run() {
diff --git a/core/java/android/widget/Toast.java b/core/java/android/widget/Toast.java
index 6a7db1f0..bb23173 100644
--- a/core/java/android/widget/Toast.java
+++ b/core/java/android/widget/Toast.java
@@ -301,6 +301,8 @@
         final Runnable mHide = new Runnable() {
             public void run() {
                 handleHide();
+                // Don't do this in handleHide() because it is also invoked by handleShow()
+                mNextView = null;
             }
         };
 
@@ -407,7 +409,6 @@
                 }
 
                 mView = null;
-                mNextView = null;
             }
         }
     }
diff --git a/core/java/com/android/internal/view/menu/ActionMenuView.java b/core/java/com/android/internal/view/menu/ActionMenuView.java
index 8825c02..30d6878 100644
--- a/core/java/com/android/internal/view/menu/ActionMenuView.java
+++ b/core/java/com/android/internal/view/menu/ActionMenuView.java
@@ -22,6 +22,7 @@
 import android.graphics.drawable.Drawable;
 import android.util.AttributeSet;
 import android.view.Gravity;
+import android.view.SoundEffectConstants;
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.ViewParent;
@@ -328,6 +329,7 @@
                 return true;
             }
 
+            playSoundEffect(SoundEffectConstants.CLICK);
             showOverflowMenu();
             return true;
         }
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index 9b890fa..25d3aca 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -1284,6 +1284,13 @@
         android:description="@string/permlab_copyProtectedData"
         android:protectionLevel="signature" />
 
+    <!-- Internal permission protecting access to the encryption methods
+        @hide
+    -->
+    <permission android:name="android.permission.CRYPT_KEEPER"
+        android:protectionLevel="signatureOrSystem" />
+
+
     <!-- C2DM permission. 
          @hide Used internally.
      -->
@@ -1334,7 +1341,9 @@
 
         <activity android:name="android.accounts.ChooseAccountActivity"
                 android:excludeFromRecents="true"
-                android:exported="true">
+                android:exported="true"
+                android:theme="@android:style/Theme.Holo.Dialog"
+                android:label="@string/choose_account_label">
         </activity>
 
         <activity android:name="android.accounts.GrantCredentialsPermissionActivity"
diff --git a/core/res/res/drawable-hdpi/btn_code_lock_default.png b/core/res/res/drawable-hdpi/btn_code_lock_default.png
index df3137f..4469ce0 100644
--- a/core/res/res/drawable-hdpi/btn_code_lock_default.png
+++ b/core/res/res/drawable-hdpi/btn_code_lock_default.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_code_lock_touched.png b/core/res/res/drawable-hdpi/btn_code_lock_touched.png
index bf9e46a..0410dd3 100644
--- a/core/res/res/drawable-hdpi/btn_code_lock_touched.png
+++ b/core/res/res/drawable-hdpi/btn_code_lock_touched.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_disabled_focused_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_default_disabled_focused_holo_dark.9.png
index 8695c2c..3007a84 100644
--- a/core/res/res/drawable-hdpi/btn_default_disabled_focused_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/btn_default_disabled_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_disabled_focused_holo_light.9.png b/core/res/res/drawable-hdpi/btn_default_disabled_focused_holo_light.9.png
index ea187fb..5a108454 100644
--- a/core/res/res/drawable-hdpi/btn_default_disabled_focused_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/btn_default_disabled_focused_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_disabled_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_default_disabled_holo_dark.9.png
index e54105d..bc35a36 100644
--- a/core/res/res/drawable-hdpi/btn_default_disabled_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/btn_default_disabled_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_disabled_holo_light.9.png b/core/res/res/drawable-hdpi/btn_default_disabled_holo_light.9.png
index 0f1fa81..bc35a36 100644
--- a/core/res/res/drawable-hdpi/btn_default_disabled_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/btn_default_disabled_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_focused_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_default_focused_holo_dark.9.png
index 14e7608..f6380fa 100644
--- a/core/res/res/drawable-hdpi/btn_default_focused_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/btn_default_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_focused_holo_light.9.png b/core/res/res/drawable-hdpi/btn_default_focused_holo_light.9.png
index e65dcea..f6380fa 100644
--- a/core/res/res/drawable-hdpi/btn_default_focused_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/btn_default_focused_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_normal_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_default_normal_holo_dark.9.png
index 3e83236..7016db1 100644
--- a/core/res/res/drawable-hdpi/btn_default_normal_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/btn_default_normal_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_normal_holo_light.9.png b/core/res/res/drawable-hdpi/btn_default_normal_holo_light.9.png
index aa4b7ea..228af2e 100644
--- a/core/res/res/drawable-hdpi/btn_default_normal_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/btn_default_normal_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_pressed_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_default_pressed_holo_dark.9.png
index f1eb741..bc3bfc2 100644
--- a/core/res/res/drawable-hdpi/btn_default_pressed_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/btn_default_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_pressed_holo_light.9.png b/core/res/res/drawable-hdpi/btn_default_pressed_holo_light.9.png
index f1eb741..8a4759b 100644
--- a/core/res/res/drawable-hdpi/btn_default_pressed_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/btn_default_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_small_disabled_focused_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_default_small_disabled_focused_holo_dark.9.png
new file mode 100644
index 0000000..6781d79
--- /dev/null
+++ b/core/res/res/drawable-hdpi/btn_default_small_disabled_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_small_disabled_focused_holo_light.9.png b/core/res/res/drawable-hdpi/btn_default_small_disabled_focused_holo_light.9.png
new file mode 100644
index 0000000..6781d79
--- /dev/null
+++ b/core/res/res/drawable-hdpi/btn_default_small_disabled_focused_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_small_disabled_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_default_small_disabled_holo_dark.9.png
new file mode 100644
index 0000000..c8460eb
--- /dev/null
+++ b/core/res/res/drawable-hdpi/btn_default_small_disabled_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_small_disabled_holo_light.9.png b/core/res/res/drawable-hdpi/btn_default_small_disabled_holo_light.9.png
new file mode 100644
index 0000000..c8460eb
--- /dev/null
+++ b/core/res/res/drawable-hdpi/btn_default_small_disabled_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_small_focused_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_default_small_focused_holo_dark.9.png
new file mode 100644
index 0000000..a116400
--- /dev/null
+++ b/core/res/res/drawable-hdpi/btn_default_small_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_small_focused_holo_light.9.png b/core/res/res/drawable-hdpi/btn_default_small_focused_holo_light.9.png
new file mode 100644
index 0000000..0b5c05bd
--- /dev/null
+++ b/core/res/res/drawable-hdpi/btn_default_small_focused_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_small_normal_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_default_small_normal_holo_dark.9.png
new file mode 100644
index 0000000..6a55b98
--- /dev/null
+++ b/core/res/res/drawable-hdpi/btn_default_small_normal_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_small_normal_holo_light.9.png b/core/res/res/drawable-hdpi/btn_default_small_normal_holo_light.9.png
new file mode 100644
index 0000000..0371310
--- /dev/null
+++ b/core/res/res/drawable-hdpi/btn_default_small_normal_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_small_pressed_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_default_small_pressed_holo_dark.9.png
new file mode 100644
index 0000000..4d05332
--- /dev/null
+++ b/core/res/res/drawable-hdpi/btn_default_small_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_small_pressed_holo_light.9.png b/core/res/res/drawable-hdpi/btn_default_small_pressed_holo_light.9.png
new file mode 100644
index 0000000..4d05332
--- /dev/null
+++ b/core/res/res/drawable-hdpi/btn_default_small_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_dialog_disable.png b/core/res/res/drawable-hdpi/btn_dialog_disable.png
old mode 100644
new mode 100755
index 2fc5d1a..4ff634b
--- a/core/res/res/drawable-hdpi/btn_dialog_disable.png
+++ b/core/res/res/drawable-hdpi/btn_dialog_disable.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_dialog_normal.png b/core/res/res/drawable-hdpi/btn_dialog_normal.png
old mode 100644
new mode 100755
index c4a1026..e0cc339
--- a/core/res/res/drawable-hdpi/btn_dialog_normal.png
+++ b/core/res/res/drawable-hdpi/btn_dialog_normal.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_dialog_pressed.png b/core/res/res/drawable-hdpi/btn_dialog_pressed.png
old mode 100644
new mode 100755
index 846f8bf..ed8e008
--- a/core/res/res/drawable-hdpi/btn_dialog_pressed.png
+++ b/core/res/res/drawable-hdpi/btn_dialog_pressed.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_dialog_selected.png b/core/res/res/drawable-hdpi/btn_dialog_selected.png
old mode 100644
new mode 100755
index 659c289..9b1a100
--- a/core/res/res/drawable-hdpi/btn_dialog_selected.png
+++ b/core/res/res/drawable-hdpi/btn_dialog_selected.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_off.png b/core/res/res/drawable-hdpi/btn_radio_off.png
old mode 100644
new mode 100755
index c0b14aa..48ee2ba
--- a/core/res/res/drawable-hdpi/btn_radio_off.png
+++ b/core/res/res/drawable-hdpi/btn_radio_off.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_off_pressed.png b/core/res/res/drawable-hdpi/btn_radio_off_pressed.png
old mode 100644
new mode 100755
index 3189581..5a4ad89
--- a/core/res/res/drawable-hdpi/btn_radio_off_pressed.png
+++ b/core/res/res/drawable-hdpi/btn_radio_off_pressed.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_off_selected.png b/core/res/res/drawable-hdpi/btn_radio_off_selected.png
old mode 100644
new mode 100755
index f337703..7d5c676
--- a/core/res/res/drawable-hdpi/btn_radio_off_selected.png
+++ b/core/res/res/drawable-hdpi/btn_radio_off_selected.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_on.png b/core/res/res/drawable-hdpi/btn_radio_on.png
old mode 100644
new mode 100755
index c90d2eb..2472c20
--- a/core/res/res/drawable-hdpi/btn_radio_on.png
+++ b/core/res/res/drawable-hdpi/btn_radio_on.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_on_pressed.png b/core/res/res/drawable-hdpi/btn_radio_on_pressed.png
old mode 100644
new mode 100755
index d79450b8..98d74ce
--- a/core/res/res/drawable-hdpi/btn_radio_on_pressed.png
+++ b/core/res/res/drawable-hdpi/btn_radio_on_pressed.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_on_selected.png b/core/res/res/drawable-hdpi/btn_radio_on_selected.png
old mode 100644
new mode 100755
index db50c43..b6ab46c
--- a/core/res/res/drawable-hdpi/btn_radio_on_selected.png
+++ b/core/res/res/drawable-hdpi/btn_radio_on_selected.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_off_disabled_focused_holo_dark.png b/core/res/res/drawable-hdpi/btn_star_off_disabled_focused_holo_dark.png
new file mode 100644
index 0000000..46deb0f
--- /dev/null
+++ b/core/res/res/drawable-hdpi/btn_star_off_disabled_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_off_disabled_focused_holo_light.png b/core/res/res/drawable-hdpi/btn_star_off_disabled_focused_holo_light.png
new file mode 100644
index 0000000..05ac2aa
--- /dev/null
+++ b/core/res/res/drawable-hdpi/btn_star_off_disabled_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_off_disabled_holo_dark.png b/core/res/res/drawable-hdpi/btn_star_off_disabled_holo_dark.png
new file mode 100644
index 0000000..c2308d4
--- /dev/null
+++ b/core/res/res/drawable-hdpi/btn_star_off_disabled_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_off_disabled_holo_light.png b/core/res/res/drawable-hdpi/btn_star_off_disabled_holo_light.png
new file mode 100644
index 0000000..38fc2b4
--- /dev/null
+++ b/core/res/res/drawable-hdpi/btn_star_off_disabled_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_off_focused_holo_dark.png b/core/res/res/drawable-hdpi/btn_star_off_focused_holo_dark.png
index 15feef1..5bd7993 100644
--- a/core/res/res/drawable-hdpi/btn_star_off_focused_holo_dark.png
+++ b/core/res/res/drawable-hdpi/btn_star_off_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_off_focused_holo_light.png b/core/res/res/drawable-hdpi/btn_star_off_focused_holo_light.png
index 0cff364..54f156b 100644
--- a/core/res/res/drawable-hdpi/btn_star_off_focused_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_star_off_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_off_normal_holo_dark.png b/core/res/res/drawable-hdpi/btn_star_off_normal_holo_dark.png
index f480729..c56b737 100644
--- a/core/res/res/drawable-hdpi/btn_star_off_normal_holo_dark.png
+++ b/core/res/res/drawable-hdpi/btn_star_off_normal_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_off_normal_holo_light.png b/core/res/res/drawable-hdpi/btn_star_off_normal_holo_light.png
index 1c632e8..d610fc4 100644
--- a/core/res/res/drawable-hdpi/btn_star_off_normal_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_star_off_normal_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_off_pressed_holo_dark.png b/core/res/res/drawable-hdpi/btn_star_off_pressed_holo_dark.png
new file mode 100644
index 0000000..3117c23
--- /dev/null
+++ b/core/res/res/drawable-hdpi/btn_star_off_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_off_pressed_holo_light.png b/core/res/res/drawable-hdpi/btn_star_off_pressed_holo_light.png
new file mode 100644
index 0000000..4bae941
--- /dev/null
+++ b/core/res/res/drawable-hdpi/btn_star_off_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_on_disabled_focused_holo_dark.png b/core/res/res/drawable-hdpi/btn_star_on_disabled_focused_holo_dark.png
new file mode 100644
index 0000000..0bb267b
--- /dev/null
+++ b/core/res/res/drawable-hdpi/btn_star_on_disabled_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_on_disabled_focused_holo_light.png b/core/res/res/drawable-hdpi/btn_star_on_disabled_focused_holo_light.png
new file mode 100644
index 0000000..96049ff
--- /dev/null
+++ b/core/res/res/drawable-hdpi/btn_star_on_disabled_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_on_disabled_holo_dark.png b/core/res/res/drawable-hdpi/btn_star_on_disabled_holo_dark.png
new file mode 100644
index 0000000..4019c69
--- /dev/null
+++ b/core/res/res/drawable-hdpi/btn_star_on_disabled_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_on_disabled_holo_light.png b/core/res/res/drawable-hdpi/btn_star_on_disabled_holo_light.png
new file mode 100644
index 0000000..5d61024
--- /dev/null
+++ b/core/res/res/drawable-hdpi/btn_star_on_disabled_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_on_focused_holo_dark.png b/core/res/res/drawable-hdpi/btn_star_on_focused_holo_dark.png
index 2dd3d77..a7762d9 100644
--- a/core/res/res/drawable-hdpi/btn_star_on_focused_holo_dark.png
+++ b/core/res/res/drawable-hdpi/btn_star_on_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_on_focused_holo_light.png b/core/res/res/drawable-hdpi/btn_star_on_focused_holo_light.png
index 7b10118..aee8d2a 100644
--- a/core/res/res/drawable-hdpi/btn_star_on_focused_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_star_on_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_on_normal_holo_dark.png b/core/res/res/drawable-hdpi/btn_star_on_normal_holo_dark.png
index 2f863bb..71c190d 100644
--- a/core/res/res/drawable-hdpi/btn_star_on_normal_holo_dark.png
+++ b/core/res/res/drawable-hdpi/btn_star_on_normal_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_on_normal_holo_light.png b/core/res/res/drawable-hdpi/btn_star_on_normal_holo_light.png
index 1220c20..6d559c6 100644
--- a/core/res/res/drawable-hdpi/btn_star_on_normal_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_star_on_normal_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_on_pressed_holo_dark.png b/core/res/res/drawable-hdpi/btn_star_on_pressed_holo_dark.png
new file mode 100644
index 0000000..d14dafe
--- /dev/null
+++ b/core/res/res/drawable-hdpi/btn_star_on_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_on_pressed_holo_light.png b/core/res/res/drawable-hdpi/btn_star_on_pressed_holo_light.png
new file mode 100644
index 0000000..a065173
--- /dev/null
+++ b/core/res/res/drawable-hdpi/btn_star_on_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_toggle_off_disabled_focused_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_toggle_off_disabled_focused_holo_dark.9.png
index 5a8c8e5..8f95407 100755
--- a/core/res/res/drawable-hdpi/btn_toggle_off_disabled_focused_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/btn_toggle_off_disabled_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_toggle_off_disabled_focused_holo_light.9.png b/core/res/res/drawable-hdpi/btn_toggle_off_disabled_focused_holo_light.9.png
index 2263153..408d3d7 100755
--- a/core/res/res/drawable-hdpi/btn_toggle_off_disabled_focused_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/btn_toggle_off_disabled_focused_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_toggle_off_disabled_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_toggle_off_disabled_holo_dark.9.png
index dbfa16a..092fea0 100755
--- a/core/res/res/drawable-hdpi/btn_toggle_off_disabled_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/btn_toggle_off_disabled_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_toggle_off_disabled_holo_light.9.png b/core/res/res/drawable-hdpi/btn_toggle_off_disabled_holo_light.9.png
index 47a43e9..2e310a4 100755
--- a/core/res/res/drawable-hdpi/btn_toggle_off_disabled_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/btn_toggle_off_disabled_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_toggle_off_focused_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_toggle_off_focused_holo_dark.9.png
index 2787a4b..127b7e2 100755
--- a/core/res/res/drawable-hdpi/btn_toggle_off_focused_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/btn_toggle_off_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_toggle_off_focused_holo_light.9.png b/core/res/res/drawable-hdpi/btn_toggle_off_focused_holo_light.9.png
index c8bf8b1..a5bde58 100755
--- a/core/res/res/drawable-hdpi/btn_toggle_off_focused_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/btn_toggle_off_focused_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_toggle_off_normal_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_toggle_off_normal_holo_dark.9.png
index eb4f17a..e46c1af 100755
--- a/core/res/res/drawable-hdpi/btn_toggle_off_normal_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/btn_toggle_off_normal_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_toggle_off_normal_holo_light.9.png b/core/res/res/drawable-hdpi/btn_toggle_off_normal_holo_light.9.png
index 42b434c..8756b62 100755
--- a/core/res/res/drawable-hdpi/btn_toggle_off_normal_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/btn_toggle_off_normal_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_toggle_off_pressed_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_toggle_off_pressed_holo_dark.9.png
index e362aa1..b5e1e9c 100755
--- a/core/res/res/drawable-hdpi/btn_toggle_off_pressed_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/btn_toggle_off_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_toggle_off_pressed_holo_light.9.png b/core/res/res/drawable-hdpi/btn_toggle_off_pressed_holo_light.9.png
index cc61414..46ea0d6 100755
--- a/core/res/res/drawable-hdpi/btn_toggle_off_pressed_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/btn_toggle_off_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_toggle_on_disabled_focused_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_toggle_on_disabled_focused_holo_dark.9.png
index 8b813b9..4593375 100755
--- a/core/res/res/drawable-hdpi/btn_toggle_on_disabled_focused_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/btn_toggle_on_disabled_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_toggle_on_disabled_focused_holo_light.9.png b/core/res/res/drawable-hdpi/btn_toggle_on_disabled_focused_holo_light.9.png
index 54686cd..4593375 100755
--- a/core/res/res/drawable-hdpi/btn_toggle_on_disabled_focused_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/btn_toggle_on_disabled_focused_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_toggle_on_disabled_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_toggle_on_disabled_holo_dark.9.png
index 056f451..df2e203 100755
--- a/core/res/res/drawable-hdpi/btn_toggle_on_disabled_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/btn_toggle_on_disabled_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_toggle_on_disabled_holo_light.9.png b/core/res/res/drawable-hdpi/btn_toggle_on_disabled_holo_light.9.png
index 2c4a6dd..cd4d819 100755
--- a/core/res/res/drawable-hdpi/btn_toggle_on_disabled_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/btn_toggle_on_disabled_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_toggle_on_focused_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_toggle_on_focused_holo_dark.9.png
index 127a9be..785a9d8 100755
--- a/core/res/res/drawable-hdpi/btn_toggle_on_focused_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/btn_toggle_on_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_toggle_on_focused_holo_light.9.png b/core/res/res/drawable-hdpi/btn_toggle_on_focused_holo_light.9.png
index 4853ef4..b1a190c 100755
--- a/core/res/res/drawable-hdpi/btn_toggle_on_focused_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/btn_toggle_on_focused_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_toggle_on_normal_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_toggle_on_normal_holo_dark.9.png
index d767185..25a144b 100755
--- a/core/res/res/drawable-hdpi/btn_toggle_on_normal_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/btn_toggle_on_normal_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_toggle_on_normal_holo_light.9.png b/core/res/res/drawable-hdpi/btn_toggle_on_normal_holo_light.9.png
index 00e6105..1cf6fcd 100755
--- a/core/res/res/drawable-hdpi/btn_toggle_on_normal_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/btn_toggle_on_normal_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_toggle_on_pressed_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_toggle_on_pressed_holo_dark.9.png
index 293cad3..126dc28 100755
--- a/core/res/res/drawable-hdpi/btn_toggle_on_pressed_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/btn_toggle_on_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_toggle_on_pressed_holo_light.9.png b/core/res/res/drawable-hdpi/btn_toggle_on_pressed_holo_light.9.png
index ead4ccf..d4d3f41 100755
--- a/core/res/res/drawable-hdpi/btn_toggle_on_pressed_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/btn_toggle_on_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/expander_close_holo_dark.9.png b/core/res/res/drawable-hdpi/expander_close_holo_dark.9.png
new file mode 100644
index 0000000..6df00f2
--- /dev/null
+++ b/core/res/res/drawable-hdpi/expander_close_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/expander_close_holo_light.9.png b/core/res/res/drawable-hdpi/expander_close_holo_light.9.png
new file mode 100644
index 0000000..a63cdbb
--- /dev/null
+++ b/core/res/res/drawable-hdpi/expander_close_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/expander_open_holo_dark.9.png b/core/res/res/drawable-hdpi/expander_open_holo_dark.9.png
new file mode 100644
index 0000000..63015ec
--- /dev/null
+++ b/core/res/res/drawable-hdpi/expander_open_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/expander_open_holo_light.9.png b/core/res/res/drawable-hdpi/expander_open_holo_light.9.png
new file mode 100644
index 0000000..ca4dd76
--- /dev/null
+++ b/core/res/res/drawable-hdpi/expander_open_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/indicator_code_lock_point_area_default.png b/core/res/res/drawable-hdpi/indicator_code_lock_point_area_default.png
index 0102a61..c45b956 100644
--- a/core/res/res/drawable-hdpi/indicator_code_lock_point_area_default.png
+++ b/core/res/res/drawable-hdpi/indicator_code_lock_point_area_default.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/indicator_code_lock_point_area_green.png b/core/res/res/drawable-hdpi/indicator_code_lock_point_area_green.png
index 82ad8f7..b9fd0a4 100644
--- a/core/res/res/drawable-hdpi/indicator_code_lock_point_area_green.png
+++ b/core/res/res/drawable-hdpi/indicator_code_lock_point_area_green.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/indicator_code_lock_point_area_red.png b/core/res/res/drawable-hdpi/indicator_code_lock_point_area_red.png
index f9d0d33..94e947d 100644
--- a/core/res/res/drawable-hdpi/indicator_code_lock_point_area_red.png
+++ b/core/res/res/drawable-hdpi/indicator_code_lock_point_area_red.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/jog_tab_bar_left_end_normal.9.png b/core/res/res/drawable-hdpi/jog_tab_bar_left_end_normal.9.png
index 109be42..b9ec237 100644
--- a/core/res/res/drawable-hdpi/jog_tab_bar_left_end_normal.9.png
+++ b/core/res/res/drawable-hdpi/jog_tab_bar_left_end_normal.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/jog_tab_bar_right_end_normal.9.png b/core/res/res/drawable-hdpi/jog_tab_bar_right_end_normal.9.png
index 030c9e9..30fcda5 100644
--- a/core/res/res/drawable-hdpi/jog_tab_bar_right_end_normal.9.png
+++ b/core/res/res/drawable-hdpi/jog_tab_bar_right_end_normal.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/jog_tab_left_confirm_gray.png b/core/res/res/drawable-hdpi/jog_tab_left_confirm_gray.png
old mode 100644
new mode 100755
index 3499208..9599fb5
--- a/core/res/res/drawable-hdpi/jog_tab_left_confirm_gray.png
+++ b/core/res/res/drawable-hdpi/jog_tab_left_confirm_gray.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/jog_tab_left_confirm_green.png b/core/res/res/drawable-hdpi/jog_tab_left_confirm_green.png
old mode 100644
new mode 100755
index 91eaec8..46d9ab3
--- a/core/res/res/drawable-hdpi/jog_tab_left_confirm_green.png
+++ b/core/res/res/drawable-hdpi/jog_tab_left_confirm_green.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/jog_tab_left_confirm_red.png b/core/res/res/drawable-hdpi/jog_tab_left_confirm_red.png
old mode 100644
new mode 100755
index 8818b9e..6c0dc0a
--- a/core/res/res/drawable-hdpi/jog_tab_left_confirm_red.png
+++ b/core/res/res/drawable-hdpi/jog_tab_left_confirm_red.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/jog_tab_left_confirm_yellow.png b/core/res/res/drawable-hdpi/jog_tab_left_confirm_yellow.png
old mode 100644
new mode 100755
index e5bc5f6..3f9fb8f
--- a/core/res/res/drawable-hdpi/jog_tab_left_confirm_yellow.png
+++ b/core/res/res/drawable-hdpi/jog_tab_left_confirm_yellow.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/jog_tab_left_normal.png b/core/res/res/drawable-hdpi/jog_tab_left_normal.png
index 5326c7c..d43c5e2 100644
--- a/core/res/res/drawable-hdpi/jog_tab_left_normal.png
+++ b/core/res/res/drawable-hdpi/jog_tab_left_normal.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/jog_tab_left_pressed.png b/core/res/res/drawable-hdpi/jog_tab_left_pressed.png
old mode 100644
new mode 100755
index 7b906df..ec98790
--- a/core/res/res/drawable-hdpi/jog_tab_left_pressed.png
+++ b/core/res/res/drawable-hdpi/jog_tab_left_pressed.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/jog_tab_right_confirm_gray.png b/core/res/res/drawable-hdpi/jog_tab_right_confirm_gray.png
old mode 100644
new mode 100755
index ea8c315..2861e8d
--- a/core/res/res/drawable-hdpi/jog_tab_right_confirm_gray.png
+++ b/core/res/res/drawable-hdpi/jog_tab_right_confirm_gray.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/jog_tab_right_confirm_green.png b/core/res/res/drawable-hdpi/jog_tab_right_confirm_green.png
old mode 100644
new mode 100755
index aa0ceb9..e974bbc
--- a/core/res/res/drawable-hdpi/jog_tab_right_confirm_green.png
+++ b/core/res/res/drawable-hdpi/jog_tab_right_confirm_green.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/jog_tab_right_confirm_red.png b/core/res/res/drawable-hdpi/jog_tab_right_confirm_red.png
old mode 100644
new mode 100755
index d772fb6..9647fa6
--- a/core/res/res/drawable-hdpi/jog_tab_right_confirm_red.png
+++ b/core/res/res/drawable-hdpi/jog_tab_right_confirm_red.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/jog_tab_right_confirm_yellow.png b/core/res/res/drawable-hdpi/jog_tab_right_confirm_yellow.png
old mode 100644
new mode 100755
index 3cfeb67..ad878e1
--- a/core/res/res/drawable-hdpi/jog_tab_right_confirm_yellow.png
+++ b/core/res/res/drawable-hdpi/jog_tab_right_confirm_yellow.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/jog_tab_right_normal.png b/core/res/res/drawable-hdpi/jog_tab_right_normal.png
index da7726b..1eb4234 100644
--- a/core/res/res/drawable-hdpi/jog_tab_right_normal.png
+++ b/core/res/res/drawable-hdpi/jog_tab_right_normal.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/jog_tab_right_pressed.png b/core/res/res/drawable-hdpi/jog_tab_right_pressed.png
old mode 100644
new mode 100755
index 450a325..647e802
--- a/core/res/res/drawable-hdpi/jog_tab_right_pressed.png
+++ b/core/res/res/drawable-hdpi/jog_tab_right_pressed.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/menu_dropdown_panel_holo_dark.9.png b/core/res/res/drawable-hdpi/menu_dropdown_panel_holo_dark.9.png
index ec91bd8..b0fba52 100644
--- a/core/res/res/drawable-hdpi/menu_dropdown_panel_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/menu_dropdown_panel_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/menu_dropdown_panel_holo_light.9.png b/core/res/res/drawable-hdpi/menu_dropdown_panel_holo_light.9.png
index 67c5950..3ef8935 100644
--- a/core/res/res/drawable-hdpi/menu_dropdown_panel_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/menu_dropdown_panel_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/text_edit_side_paste_window.9.png b/core/res/res/drawable-hdpi/text_edit_side_paste_window.9.png
new file mode 100644
index 0000000..7cd000b
--- /dev/null
+++ b/core/res/res/drawable-hdpi/text_edit_side_paste_window.9.png
Binary files differ
diff --git a/core/res/res/drawable-land-mdpi/jog_tab_target_gray.png b/core/res/res/drawable-land-mdpi/jog_tab_target_gray.png
new file mode 100644
index 0000000..1319b6e
--- /dev/null
+++ b/core/res/res/drawable-land-mdpi/jog_tab_target_gray.png
Binary files differ
diff --git a/core/res/res/drawable-land-mdpi/jog_tab_target_green.png b/core/res/res/drawable-land-mdpi/jog_tab_target_green.png
new file mode 100644
index 0000000..88a3f30
--- /dev/null
+++ b/core/res/res/drawable-land-mdpi/jog_tab_target_green.png
Binary files differ
diff --git a/core/res/res/drawable-land-mdpi/jog_tab_target_red.png b/core/res/res/drawable-land-mdpi/jog_tab_target_red.png
new file mode 100644
index 0000000..300c401
--- /dev/null
+++ b/core/res/res/drawable-land-mdpi/jog_tab_target_red.png
Binary files differ
diff --git a/core/res/res/drawable-land-mdpi/jog_tab_target_yellow.png b/core/res/res/drawable-land-mdpi/jog_tab_target_yellow.png
new file mode 100644
index 0000000..efa30ee
--- /dev/null
+++ b/core/res/res/drawable-land-mdpi/jog_tab_target_yellow.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_code_lock_default.png b/core/res/res/drawable-mdpi/btn_code_lock_default.png
index c2e0b05..f524317 100755
--- a/core/res/res/drawable-mdpi/btn_code_lock_default.png
+++ b/core/res/res/drawable-mdpi/btn_code_lock_default.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_code_lock_touched.png b/core/res/res/drawable-mdpi/btn_code_lock_touched.png
index 70e95a2..5cd436c 100755
--- a/core/res/res/drawable-mdpi/btn_code_lock_touched.png
+++ b/core/res/res/drawable-mdpi/btn_code_lock_touched.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_disabled_focused_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_default_disabled_focused_holo_dark.9.png
index 537ac1a..ab5d68b 100644
--- a/core/res/res/drawable-mdpi/btn_default_disabled_focused_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/btn_default_disabled_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_disabled_focused_holo_light.9.png b/core/res/res/drawable-mdpi/btn_default_disabled_focused_holo_light.9.png
index 947715c..9421b1b 100644
--- a/core/res/res/drawable-mdpi/btn_default_disabled_focused_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/btn_default_disabled_focused_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_disabled_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_default_disabled_holo_dark.9.png
index 8e34d33..a2c9b3f 100644
--- a/core/res/res/drawable-mdpi/btn_default_disabled_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/btn_default_disabled_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_disabled_holo_light.9.png b/core/res/res/drawable-mdpi/btn_default_disabled_holo_light.9.png
index 8262a03..a2c9b3f 100644
--- a/core/res/res/drawable-mdpi/btn_default_disabled_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/btn_default_disabled_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_focused_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_default_focused_holo_dark.9.png
index 8cca841..02e3323 100644
--- a/core/res/res/drawable-mdpi/btn_default_focused_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/btn_default_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_focused_holo_light.9.png b/core/res/res/drawable-mdpi/btn_default_focused_holo_light.9.png
index 5032ed1..02e3323 100644
--- a/core/res/res/drawable-mdpi/btn_default_focused_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/btn_default_focused_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_normal_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_default_normal_holo_dark.9.png
index d608e44e..5b05722 100644
--- a/core/res/res/drawable-mdpi/btn_default_normal_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/btn_default_normal_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_normal_holo_light.9.png b/core/res/res/drawable-mdpi/btn_default_normal_holo_light.9.png
index 6ab589d..e7f1690 100644
--- a/core/res/res/drawable-mdpi/btn_default_normal_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/btn_default_normal_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_pressed_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_default_pressed_holo_dark.9.png
index 40957ee..b49a583 100644
--- a/core/res/res/drawable-mdpi/btn_default_pressed_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/btn_default_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_pressed_holo_light.9.png b/core/res/res/drawable-mdpi/btn_default_pressed_holo_light.9.png
index 40957ee..e6f1362 100644
--- a/core/res/res/drawable-mdpi/btn_default_pressed_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/btn_default_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_small_disabled_focused_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_default_small_disabled_focused_holo_dark.9.png
new file mode 100644
index 0000000..be14b35
--- /dev/null
+++ b/core/res/res/drawable-mdpi/btn_default_small_disabled_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_small_disabled_focused_holo_light.9.png b/core/res/res/drawable-mdpi/btn_default_small_disabled_focused_holo_light.9.png
new file mode 100644
index 0000000..be14b35
--- /dev/null
+++ b/core/res/res/drawable-mdpi/btn_default_small_disabled_focused_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_small_disabled_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_default_small_disabled_holo_dark.9.png
new file mode 100644
index 0000000..dd12fcb
--- /dev/null
+++ b/core/res/res/drawable-mdpi/btn_default_small_disabled_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_small_disabled_holo_light.9.png b/core/res/res/drawable-mdpi/btn_default_small_disabled_holo_light.9.png
new file mode 100644
index 0000000..dd12fcb
--- /dev/null
+++ b/core/res/res/drawable-mdpi/btn_default_small_disabled_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_small_focused_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_default_small_focused_holo_dark.9.png
new file mode 100644
index 0000000..bd9975c
--- /dev/null
+++ b/core/res/res/drawable-mdpi/btn_default_small_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_small_focused_holo_light.9.png b/core/res/res/drawable-mdpi/btn_default_small_focused_holo_light.9.png
new file mode 100644
index 0000000..703e394
--- /dev/null
+++ b/core/res/res/drawable-mdpi/btn_default_small_focused_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_small_normal_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_default_small_normal_holo_dark.9.png
new file mode 100644
index 0000000..b77faadc
--- /dev/null
+++ b/core/res/res/drawable-mdpi/btn_default_small_normal_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_small_normal_holo_light.9.png b/core/res/res/drawable-mdpi/btn_default_small_normal_holo_light.9.png
new file mode 100644
index 0000000..ead3f5e
--- /dev/null
+++ b/core/res/res/drawable-mdpi/btn_default_small_normal_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_small_pressed_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_default_small_pressed_holo_dark.9.png
new file mode 100644
index 0000000..d460d0a
--- /dev/null
+++ b/core/res/res/drawable-mdpi/btn_default_small_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_small_pressed_holo_light.9.png b/core/res/res/drawable-mdpi/btn_default_small_pressed_holo_light.9.png
new file mode 100644
index 0000000..d460d0a
--- /dev/null
+++ b/core/res/res/drawable-mdpi/btn_default_small_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_dialog_disable.png b/core/res/res/drawable-mdpi/btn_dialog_disable.png
index f041cab..3de9895 100755
--- a/core/res/res/drawable-mdpi/btn_dialog_disable.png
+++ b/core/res/res/drawable-mdpi/btn_dialog_disable.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_dialog_normal.png b/core/res/res/drawable-mdpi/btn_dialog_normal.png
index a2d27fa..eca5828 100755
--- a/core/res/res/drawable-mdpi/btn_dialog_normal.png
+++ b/core/res/res/drawable-mdpi/btn_dialog_normal.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_dialog_pressed.png b/core/res/res/drawable-mdpi/btn_dialog_pressed.png
index 9c9922a..f9c4551 100755
--- a/core/res/res/drawable-mdpi/btn_dialog_pressed.png
+++ b/core/res/res/drawable-mdpi/btn_dialog_pressed.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_dialog_selected.png b/core/res/res/drawable-mdpi/btn_dialog_selected.png
index 7656de5..b0afd7f 100755
--- a/core/res/res/drawable-mdpi/btn_dialog_selected.png
+++ b/core/res/res/drawable-mdpi/btn_dialog_selected.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_off.png b/core/res/res/drawable-mdpi/btn_radio_off.png
index 407632b..cf76ace 100644
--- a/core/res/res/drawable-mdpi/btn_radio_off.png
+++ b/core/res/res/drawable-mdpi/btn_radio_off.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_off_pressed.png b/core/res/res/drawable-mdpi/btn_radio_off_pressed.png
index d6d8a9d..e03561a 100644
--- a/core/res/res/drawable-mdpi/btn_radio_off_pressed.png
+++ b/core/res/res/drawable-mdpi/btn_radio_off_pressed.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_off_selected.png b/core/res/res/drawable-mdpi/btn_radio_off_selected.png
index 53f3e87..b3aa94e 100644
--- a/core/res/res/drawable-mdpi/btn_radio_off_selected.png
+++ b/core/res/res/drawable-mdpi/btn_radio_off_selected.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_on.png b/core/res/res/drawable-mdpi/btn_radio_on.png
index 25a3ccc..5f978c0 100644
--- a/core/res/res/drawable-mdpi/btn_radio_on.png
+++ b/core/res/res/drawable-mdpi/btn_radio_on.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_on_pressed.png b/core/res/res/drawable-mdpi/btn_radio_on_pressed.png
index c904a35..a0636fe 100644
--- a/core/res/res/drawable-mdpi/btn_radio_on_pressed.png
+++ b/core/res/res/drawable-mdpi/btn_radio_on_pressed.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_on_selected.png b/core/res/res/drawable-mdpi/btn_radio_on_selected.png
index 78e1fc0..b510d47 100644
--- a/core/res/res/drawable-mdpi/btn_radio_on_selected.png
+++ b/core/res/res/drawable-mdpi/btn_radio_on_selected.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_off_disabled_focused_holo_dark.png b/core/res/res/drawable-mdpi/btn_star_off_disabled_focused_holo_dark.png
new file mode 100644
index 0000000..8a12dfd
--- /dev/null
+++ b/core/res/res/drawable-mdpi/btn_star_off_disabled_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_off_disabled_focused_holo_light.png b/core/res/res/drawable-mdpi/btn_star_off_disabled_focused_holo_light.png
new file mode 100644
index 0000000..baac95b
--- /dev/null
+++ b/core/res/res/drawable-mdpi/btn_star_off_disabled_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_off_disabled_holo_dark.png b/core/res/res/drawable-mdpi/btn_star_off_disabled_holo_dark.png
new file mode 100644
index 0000000..bc3f302
--- /dev/null
+++ b/core/res/res/drawable-mdpi/btn_star_off_disabled_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_off_disabled_holo_light.png b/core/res/res/drawable-mdpi/btn_star_off_disabled_holo_light.png
new file mode 100644
index 0000000..2e2b37e
--- /dev/null
+++ b/core/res/res/drawable-mdpi/btn_star_off_disabled_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_off_focused_holo_dark.png b/core/res/res/drawable-mdpi/btn_star_off_focused_holo_dark.png
index 153e50d..a48684f 100644
--- a/core/res/res/drawable-mdpi/btn_star_off_focused_holo_dark.png
+++ b/core/res/res/drawable-mdpi/btn_star_off_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_off_focused_holo_light.png b/core/res/res/drawable-mdpi/btn_star_off_focused_holo_light.png
index 379fd24..8c31c3b 100644
--- a/core/res/res/drawable-mdpi/btn_star_off_focused_holo_light.png
+++ b/core/res/res/drawable-mdpi/btn_star_off_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_off_normal_holo_dark.png b/core/res/res/drawable-mdpi/btn_star_off_normal_holo_dark.png
index fe35f1c..0415db7 100644
--- a/core/res/res/drawable-mdpi/btn_star_off_normal_holo_dark.png
+++ b/core/res/res/drawable-mdpi/btn_star_off_normal_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_off_normal_holo_light.png b/core/res/res/drawable-mdpi/btn_star_off_normal_holo_light.png
index 002237f..ec8e467 100644
--- a/core/res/res/drawable-mdpi/btn_star_off_normal_holo_light.png
+++ b/core/res/res/drawable-mdpi/btn_star_off_normal_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_off_pressed_holo_dark.png b/core/res/res/drawable-mdpi/btn_star_off_pressed_holo_dark.png
new file mode 100644
index 0000000..bf4c3ba
--- /dev/null
+++ b/core/res/res/drawable-mdpi/btn_star_off_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_off_pressed_holo_light.png b/core/res/res/drawable-mdpi/btn_star_off_pressed_holo_light.png
new file mode 100644
index 0000000..0ec628e
--- /dev/null
+++ b/core/res/res/drawable-mdpi/btn_star_off_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_on_disabled_focused_holo_dark.png b/core/res/res/drawable-mdpi/btn_star_on_disabled_focused_holo_dark.png
new file mode 100644
index 0000000..f89e05d
--- /dev/null
+++ b/core/res/res/drawable-mdpi/btn_star_on_disabled_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_on_disabled_focused_holo_light.png b/core/res/res/drawable-mdpi/btn_star_on_disabled_focused_holo_light.png
new file mode 100644
index 0000000..074737c
--- /dev/null
+++ b/core/res/res/drawable-mdpi/btn_star_on_disabled_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_on_disabled_holo_dark.png b/core/res/res/drawable-mdpi/btn_star_on_disabled_holo_dark.png
new file mode 100644
index 0000000..75643be
--- /dev/null
+++ b/core/res/res/drawable-mdpi/btn_star_on_disabled_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_on_disabled_holo_light.png b/core/res/res/drawable-mdpi/btn_star_on_disabled_holo_light.png
new file mode 100644
index 0000000..9859fb5
--- /dev/null
+++ b/core/res/res/drawable-mdpi/btn_star_on_disabled_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_on_focused_holo_dark.png b/core/res/res/drawable-mdpi/btn_star_on_focused_holo_dark.png
index 0ad2583..3f496ba 100644
--- a/core/res/res/drawable-mdpi/btn_star_on_focused_holo_dark.png
+++ b/core/res/res/drawable-mdpi/btn_star_on_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_on_focused_holo_light.png b/core/res/res/drawable-mdpi/btn_star_on_focused_holo_light.png
index ce7c3b4..046b079 100644
--- a/core/res/res/drawable-mdpi/btn_star_on_focused_holo_light.png
+++ b/core/res/res/drawable-mdpi/btn_star_on_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_on_normal_holo_dark.png b/core/res/res/drawable-mdpi/btn_star_on_normal_holo_dark.png
index ee93e88..76e86eb 100644
--- a/core/res/res/drawable-mdpi/btn_star_on_normal_holo_dark.png
+++ b/core/res/res/drawable-mdpi/btn_star_on_normal_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_on_normal_holo_light.png b/core/res/res/drawable-mdpi/btn_star_on_normal_holo_light.png
index 597fd9a..2b76297 100644
--- a/core/res/res/drawable-mdpi/btn_star_on_normal_holo_light.png
+++ b/core/res/res/drawable-mdpi/btn_star_on_normal_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_on_pressed_holo_dark.png b/core/res/res/drawable-mdpi/btn_star_on_pressed_holo_dark.png
new file mode 100644
index 0000000..6335a96
--- /dev/null
+++ b/core/res/res/drawable-mdpi/btn_star_on_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_on_pressed_holo_light.png b/core/res/res/drawable-mdpi/btn_star_on_pressed_holo_light.png
new file mode 100644
index 0000000..97b0a0c
--- /dev/null
+++ b/core/res/res/drawable-mdpi/btn_star_on_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_toggle_off_disabled_focused_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_toggle_off_disabled_focused_holo_dark.9.png
index deecc51..a087fb3 100755
--- a/core/res/res/drawable-mdpi/btn_toggle_off_disabled_focused_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/btn_toggle_off_disabled_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_toggle_off_disabled_focused_holo_light.9.png b/core/res/res/drawable-mdpi/btn_toggle_off_disabled_focused_holo_light.9.png
index 76d4f05..4f0572b 100755
--- a/core/res/res/drawable-mdpi/btn_toggle_off_disabled_focused_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/btn_toggle_off_disabled_focused_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_toggle_off_disabled_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_toggle_off_disabled_holo_dark.9.png
index 0ecd1ae..a0693778 100755
--- a/core/res/res/drawable-mdpi/btn_toggle_off_disabled_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/btn_toggle_off_disabled_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_toggle_off_disabled_holo_light.9.png b/core/res/res/drawable-mdpi/btn_toggle_off_disabled_holo_light.9.png
index a7015ee..bbb7eb7 100755
--- a/core/res/res/drawable-mdpi/btn_toggle_off_disabled_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/btn_toggle_off_disabled_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_toggle_off_focused_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_toggle_off_focused_holo_dark.9.png
index 71949b2..0fc02cc 100755
--- a/core/res/res/drawable-mdpi/btn_toggle_off_focused_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/btn_toggle_off_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_toggle_off_focused_holo_light.9.png b/core/res/res/drawable-mdpi/btn_toggle_off_focused_holo_light.9.png
index 351f76b..eec3980 100755
--- a/core/res/res/drawable-mdpi/btn_toggle_off_focused_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/btn_toggle_off_focused_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_toggle_off_normal_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_toggle_off_normal_holo_dark.9.png
index 44b9503..9732a84 100755
--- a/core/res/res/drawable-mdpi/btn_toggle_off_normal_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/btn_toggle_off_normal_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_toggle_off_normal_holo_light.9.png b/core/res/res/drawable-mdpi/btn_toggle_off_normal_holo_light.9.png
index d70a1fc5..043d35a 100755
--- a/core/res/res/drawable-mdpi/btn_toggle_off_normal_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/btn_toggle_off_normal_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_toggle_off_pressed_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_toggle_off_pressed_holo_dark.9.png
index 5f9d2b1..0763b23 100755
--- a/core/res/res/drawable-mdpi/btn_toggle_off_pressed_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/btn_toggle_off_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_toggle_off_pressed_holo_light.9.png b/core/res/res/drawable-mdpi/btn_toggle_off_pressed_holo_light.9.png
index 6723757..ba93aa3 100755
--- a/core/res/res/drawable-mdpi/btn_toggle_off_pressed_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/btn_toggle_off_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_toggle_on_disabled_focused_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_toggle_on_disabled_focused_holo_dark.9.png
index 62b67a5..dcf4436 100755
--- a/core/res/res/drawable-mdpi/btn_toggle_on_disabled_focused_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/btn_toggle_on_disabled_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_toggle_on_disabled_focused_holo_light.9.png b/core/res/res/drawable-mdpi/btn_toggle_on_disabled_focused_holo_light.9.png
index b8418bc..dcf4436 100755
--- a/core/res/res/drawable-mdpi/btn_toggle_on_disabled_focused_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/btn_toggle_on_disabled_focused_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_toggle_on_disabled_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_toggle_on_disabled_holo_dark.9.png
index f9a11a5..41c3bb0 100755
--- a/core/res/res/drawable-mdpi/btn_toggle_on_disabled_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/btn_toggle_on_disabled_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_toggle_on_disabled_holo_light.9.png b/core/res/res/drawable-mdpi/btn_toggle_on_disabled_holo_light.9.png
index e983c8a..d7c7d9f 100755
--- a/core/res/res/drawable-mdpi/btn_toggle_on_disabled_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/btn_toggle_on_disabled_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_toggle_on_focused_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_toggle_on_focused_holo_dark.9.png
index ed8407b..d3d2575 100755
--- a/core/res/res/drawable-mdpi/btn_toggle_on_focused_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/btn_toggle_on_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_toggle_on_focused_holo_light.9.png b/core/res/res/drawable-mdpi/btn_toggle_on_focused_holo_light.9.png
index 31f36b7..7802e39 100755
--- a/core/res/res/drawable-mdpi/btn_toggle_on_focused_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/btn_toggle_on_focused_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_toggle_on_normal_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_toggle_on_normal_holo_dark.9.png
index e023c44..8f46c38 100755
--- a/core/res/res/drawable-mdpi/btn_toggle_on_normal_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/btn_toggle_on_normal_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_toggle_on_normal_holo_light.9.png b/core/res/res/drawable-mdpi/btn_toggle_on_normal_holo_light.9.png
index e4008cf..a38eb12 100755
--- a/core/res/res/drawable-mdpi/btn_toggle_on_normal_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/btn_toggle_on_normal_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_toggle_on_pressed_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_toggle_on_pressed_holo_dark.9.png
index 56e1157..a216e35 100755
--- a/core/res/res/drawable-mdpi/btn_toggle_on_pressed_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/btn_toggle_on_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_toggle_on_pressed_holo_light.9.png b/core/res/res/drawable-mdpi/btn_toggle_on_pressed_holo_light.9.png
index 913aed5..c9af9b2 100755
--- a/core/res/res/drawable-mdpi/btn_toggle_on_pressed_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/btn_toggle_on_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/expander_close_holo_dark.9.png b/core/res/res/drawable-mdpi/expander_close_holo_dark.9.png
new file mode 100644
index 0000000..5ea5692
--- /dev/null
+++ b/core/res/res/drawable-mdpi/expander_close_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/expander_close_holo_light.9.png b/core/res/res/drawable-mdpi/expander_close_holo_light.9.png
new file mode 100644
index 0000000..7b9805b
--- /dev/null
+++ b/core/res/res/drawable-mdpi/expander_close_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/expander_open_holo_dark.9.png b/core/res/res/drawable-mdpi/expander_open_holo_dark.9.png
new file mode 100644
index 0000000..83cb653
--- /dev/null
+++ b/core/res/res/drawable-mdpi/expander_open_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/expander_open_holo_light.9.png b/core/res/res/drawable-mdpi/expander_open_holo_light.9.png
new file mode 100644
index 0000000..bc7a117
--- /dev/null
+++ b/core/res/res/drawable-mdpi/expander_open_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/indicator_code_lock_drag_direction_green_up.png b/core/res/res/drawable-mdpi/indicator_code_lock_drag_direction_green_up.png
index ef91dc4..7ddeba5 100644
--- a/core/res/res/drawable-mdpi/indicator_code_lock_drag_direction_green_up.png
+++ b/core/res/res/drawable-mdpi/indicator_code_lock_drag_direction_green_up.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/indicator_code_lock_drag_direction_red_up.png b/core/res/res/drawable-mdpi/indicator_code_lock_drag_direction_red_up.png
index f3d4204b..7201e58 100644
--- a/core/res/res/drawable-mdpi/indicator_code_lock_drag_direction_red_up.png
+++ b/core/res/res/drawable-mdpi/indicator_code_lock_drag_direction_red_up.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/indicator_code_lock_point_area_default.png b/core/res/res/drawable-mdpi/indicator_code_lock_point_area_default.png
index 4e88b37..8546c5f 100755
--- a/core/res/res/drawable-mdpi/indicator_code_lock_point_area_default.png
+++ b/core/res/res/drawable-mdpi/indicator_code_lock_point_area_default.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/indicator_code_lock_point_area_green.png b/core/res/res/drawable-mdpi/indicator_code_lock_point_area_green.png
index 8020846..a98a29a 100755
--- a/core/res/res/drawable-mdpi/indicator_code_lock_point_area_green.png
+++ b/core/res/res/drawable-mdpi/indicator_code_lock_point_area_green.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/indicator_code_lock_point_area_red.png b/core/res/res/drawable-mdpi/indicator_code_lock_point_area_red.png
index b7aee1ba..6d579cb 100755
--- a/core/res/res/drawable-mdpi/indicator_code_lock_point_area_red.png
+++ b/core/res/res/drawable-mdpi/indicator_code_lock_point_area_red.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/jog_tab_bar_right_end_confirm_gray.9.png b/core/res/res/drawable-mdpi/jog_tab_bar_right_end_confirm_gray.9.png
index 4ce09fa..a6ee329 100644
--- a/core/res/res/drawable-mdpi/jog_tab_bar_right_end_confirm_gray.9.png
+++ b/core/res/res/drawable-mdpi/jog_tab_bar_right_end_confirm_gray.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/jog_tab_bar_right_end_confirm_green.9.png b/core/res/res/drawable-mdpi/jog_tab_bar_right_end_confirm_green.9.png
index 9d7565f..386ed9d 100644
--- a/core/res/res/drawable-mdpi/jog_tab_bar_right_end_confirm_green.9.png
+++ b/core/res/res/drawable-mdpi/jog_tab_bar_right_end_confirm_green.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/jog_tab_bar_right_end_confirm_red.9.png b/core/res/res/drawable-mdpi/jog_tab_bar_right_end_confirm_red.9.png
index d5f9bd8..0242a42 100644
--- a/core/res/res/drawable-mdpi/jog_tab_bar_right_end_confirm_red.9.png
+++ b/core/res/res/drawable-mdpi/jog_tab_bar_right_end_confirm_red.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/jog_tab_bar_right_end_confirm_yellow.9.png b/core/res/res/drawable-mdpi/jog_tab_bar_right_end_confirm_yellow.9.png
index 5b9c5b4..b8c2e18 100644
--- a/core/res/res/drawable-mdpi/jog_tab_bar_right_end_confirm_yellow.9.png
+++ b/core/res/res/drawable-mdpi/jog_tab_bar_right_end_confirm_yellow.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/jog_tab_bar_right_end_pressed.9.png b/core/res/res/drawable-mdpi/jog_tab_bar_right_end_pressed.9.png
index f41750d..8bdfd84 100644
--- a/core/res/res/drawable-mdpi/jog_tab_bar_right_end_pressed.9.png
+++ b/core/res/res/drawable-mdpi/jog_tab_bar_right_end_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/jog_tab_left_confirm_gray.png b/core/res/res/drawable-mdpi/jog_tab_left_confirm_gray.png
old mode 100644
new mode 100755
index e8544ff..3dce451
--- a/core/res/res/drawable-mdpi/jog_tab_left_confirm_gray.png
+++ b/core/res/res/drawable-mdpi/jog_tab_left_confirm_gray.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/jog_tab_left_confirm_green.png b/core/res/res/drawable-mdpi/jog_tab_left_confirm_green.png
old mode 100644
new mode 100755
index d0ba8f8..829b146
--- a/core/res/res/drawable-mdpi/jog_tab_left_confirm_green.png
+++ b/core/res/res/drawable-mdpi/jog_tab_left_confirm_green.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/jog_tab_left_confirm_red.png b/core/res/res/drawable-mdpi/jog_tab_left_confirm_red.png
index 5188c86..f2ceb2e 100644
--- a/core/res/res/drawable-mdpi/jog_tab_left_confirm_red.png
+++ b/core/res/res/drawable-mdpi/jog_tab_left_confirm_red.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/jog_tab_left_confirm_yellow.png b/core/res/res/drawable-mdpi/jog_tab_left_confirm_yellow.png
old mode 100644
new mode 100755
index 861e17a..5a29262
--- a/core/res/res/drawable-mdpi/jog_tab_left_confirm_yellow.png
+++ b/core/res/res/drawable-mdpi/jog_tab_left_confirm_yellow.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/jog_tab_left_normal.png b/core/res/res/drawable-mdpi/jog_tab_left_normal.png
old mode 100644
new mode 100755
index 7af1b85..eb91e97
--- a/core/res/res/drawable-mdpi/jog_tab_left_normal.png
+++ b/core/res/res/drawable-mdpi/jog_tab_left_normal.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/jog_tab_left_pressed.png b/core/res/res/drawable-mdpi/jog_tab_left_pressed.png
old mode 100644
new mode 100755
index b76e83e..9951992
--- a/core/res/res/drawable-mdpi/jog_tab_left_pressed.png
+++ b/core/res/res/drawable-mdpi/jog_tab_left_pressed.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/jog_tab_right_confirm_gray.png b/core/res/res/drawable-mdpi/jog_tab_right_confirm_gray.png
old mode 100644
new mode 100755
index 814a50d..d446480
--- a/core/res/res/drawable-mdpi/jog_tab_right_confirm_gray.png
+++ b/core/res/res/drawable-mdpi/jog_tab_right_confirm_gray.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/jog_tab_right_confirm_green.png b/core/res/res/drawable-mdpi/jog_tab_right_confirm_green.png
old mode 100644
new mode 100755
index cf157fc..96d7acb
--- a/core/res/res/drawable-mdpi/jog_tab_right_confirm_green.png
+++ b/core/res/res/drawable-mdpi/jog_tab_right_confirm_green.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/jog_tab_right_confirm_red.png b/core/res/res/drawable-mdpi/jog_tab_right_confirm_red.png
index 74f2935..2e1e105 100644
--- a/core/res/res/drawable-mdpi/jog_tab_right_confirm_red.png
+++ b/core/res/res/drawable-mdpi/jog_tab_right_confirm_red.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/jog_tab_right_confirm_yellow.png b/core/res/res/drawable-mdpi/jog_tab_right_confirm_yellow.png
old mode 100644
new mode 100755
index 6655731..8224c38
--- a/core/res/res/drawable-mdpi/jog_tab_right_confirm_yellow.png
+++ b/core/res/res/drawable-mdpi/jog_tab_right_confirm_yellow.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/jog_tab_right_normal.png b/core/res/res/drawable-mdpi/jog_tab_right_normal.png
old mode 100644
new mode 100755
index 479c9a5..f2113f2
--- a/core/res/res/drawable-mdpi/jog_tab_right_normal.png
+++ b/core/res/res/drawable-mdpi/jog_tab_right_normal.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/jog_tab_right_pressed.png b/core/res/res/drawable-mdpi/jog_tab_right_pressed.png
old mode 100644
new mode 100755
index 454aaf2..65cd51e
--- a/core/res/res/drawable-mdpi/jog_tab_right_pressed.png
+++ b/core/res/res/drawable-mdpi/jog_tab_right_pressed.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/menu_dropdown_panel_holo_dark.9.png b/core/res/res/drawable-mdpi/menu_dropdown_panel_holo_dark.9.png
index 3b30ee0..923f92d 100644
--- a/core/res/res/drawable-mdpi/menu_dropdown_panel_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/menu_dropdown_panel_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/menu_dropdown_panel_holo_light.9.png b/core/res/res/drawable-mdpi/menu_dropdown_panel_holo_light.9.png
index 5a3e2b1..afada39 100644
--- a/core/res/res/drawable-mdpi/menu_dropdown_panel_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/menu_dropdown_panel_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/text_edit_side_paste_window.9.png b/core/res/res/drawable-mdpi/text_edit_side_paste_window.9.png
new file mode 100644
index 0000000..d87c35b
--- /dev/null
+++ b/core/res/res/drawable-mdpi/text_edit_side_paste_window.9.png
Binary files differ
diff --git a/core/res/res/drawable-nodpi/background_holo_dark.png b/core/res/res/drawable-nodpi/background_holo_dark.png
index f2ff75a..ea85a3f 100644
--- a/core/res/res/drawable-nodpi/background_holo_dark.png
+++ b/core/res/res/drawable-nodpi/background_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable/btn_default_small_holo_dark.xml b/core/res/res/drawable/btn_default_small_holo_dark.xml
new file mode 100644
index 0000000..a5f5d46
--- /dev/null
+++ b/core/res/res/drawable/btn_default_small_holo_dark.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2011 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_window_focused="false" android:state_enabled="true"
+        android:drawable="@drawable/btn_default_small_normal_holo_dark" />
+    <item android:state_window_focused="false" android:state_enabled="false"
+        android:drawable="@drawable/btn_default_small_disabled_holo_dark" />
+    <item android:state_pressed="true" 
+        android:drawable="@drawable/btn_default_small_pressed_holo_dark" />
+    <item android:state_focused="true" android:state_enabled="true"
+        android:drawable="@drawable/btn_default_small_focused_holo_dark" />
+    <item android:state_enabled="true"
+        android:drawable="@drawable/btn_default_small_normal_holo_dark" />
+    <item android:state_focused="true"
+        android:drawable="@drawable/btn_default_small_disabled_focused_holo_dark" />
+    <item
+         android:drawable="@drawable/btn_default_small_disabled_holo_dark" />
+</selector>
diff --git a/core/res/res/drawable/btn_default_small_holo_light.xml b/core/res/res/drawable/btn_default_small_holo_light.xml
new file mode 100644
index 0000000..ed86f78
--- /dev/null
+++ b/core/res/res/drawable/btn_default_small_holo_light.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2011 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_window_focused="false" android:state_enabled="true"
+        android:drawable="@drawable/btn_default_small_normal_holo_light" />
+    <item android:state_window_focused="false" android:state_enabled="false"
+        android:drawable="@drawable/btn_default_small_disabled_holo_light" />
+    <item android:state_pressed="true" 
+        android:drawable="@drawable/btn_default_small_pressed_holo_light" />
+    <item android:state_focused="true" android:state_enabled="true"
+        android:drawable="@drawable/btn_default_small_focused_holo_light" />
+    <item android:state_enabled="true"
+        android:drawable="@drawable/btn_default_small_normal_holo_light" />
+    <item android:state_focused="true"
+        android:drawable="@drawable/btn_default_small_disabled_focused_holo_light" />
+    <item
+         android:drawable="@drawable/btn_default_small_disabled_holo_light" />
+</selector>
diff --git a/core/res/res/drawable/btn_star_holo_dark.xml b/core/res/res/drawable/btn_star_holo_dark.xml
new file mode 100644
index 0000000..4aee68d
--- /dev/null
+++ b/core/res/res/drawable/btn_star_holo_dark.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2011 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_checked="false" android:state_window_focused="false" 
+          android:drawable="@drawable/btn_star_off_normal_holo_dark" />
+    <item android:state_checked="true" android:state_window_focused="false" 
+          android:drawable="@drawable/btn_star_on_normal_holo_dark" />
+    <item android:state_checked="true" android:state_window_focused="false" 
+          android:state_enabled="false" android:drawable="@drawable/btn_star_on_disabled_holo_dark" />
+    <item android:state_checked="false" android:state_window_focused="false" 
+          android:state_enabled="false" android:drawable="@drawable/btn_star_off_disabled_holo_dark" />
+          
+    <item android:state_checked="true" android:state_pressed="true"
+          android:drawable="@drawable/btn_star_on_pressed_holo_dark" />
+    <item android:state_checked="false" android:state_pressed="true"
+          android:drawable="@drawable/btn_star_off_pressed_holo_dark" />
+
+    <item android:state_checked="true" android:state_focused="true"
+          android:drawable="@drawable/btn_star_on_focused_holo_dark" />
+    <item android:state_checked="false" android:state_focused="true"
+          android:drawable="@drawable/btn_star_off_focused_holo_dark" />
+
+    <item android:state_checked="true" android:state_focused="true" android:state_enabled="false"
+          android:drawable="@drawable/btn_star_on_disabled_focused_holo_dark" />
+    <item android:state_checked="true" android:state_focused="false" android:state_enabled="false"
+          android:drawable="@drawable/btn_star_on_disabled_holo_dark" />
+          
+    <item android:state_checked="false" android:state_focused="true" android:state_enabled="false"
+          android:drawable="@drawable/btn_star_off_disabled_focused_holo_dark" />
+    <item android:state_checked="false" android:state_focused="false" android:state_enabled="false"
+          android:drawable="@drawable/btn_star_off_disabled_holo_dark" />
+          
+    <item android:state_checked="false" android:drawable="@drawable/btn_star_off_normal_holo_dark" />
+    <item android:state_checked="true" android:drawable="@drawable/btn_star_on_normal_holo_dark" />
+</selector>
diff --git a/core/res/res/drawable/btn_star_holo_light.xml b/core/res/res/drawable/btn_star_holo_light.xml
new file mode 100644
index 0000000..ea911da
--- /dev/null
+++ b/core/res/res/drawable/btn_star_holo_light.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2011 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_checked="false" android:state_window_focused="false" 
+          android:drawable="@drawable/btn_star_off_normal_holo_light" />
+    <item android:state_checked="true" android:state_window_focused="false" 
+          android:drawable="@drawable/btn_star_on_normal_holo_light" />
+    <item android:state_checked="true" android:state_window_focused="false" 
+          android:state_enabled="false" android:drawable="@drawable/btn_star_on_disabled_holo_light" />
+    <item android:state_checked="false" android:state_window_focused="false" 
+          android:state_enabled="false" android:drawable="@drawable/btn_star_off_disabled_holo_light" />
+          
+    <item android:state_checked="true" android:state_pressed="true"
+          android:drawable="@drawable/btn_star_on_pressed_holo_light" />
+    <item android:state_checked="false" android:state_pressed="true"
+          android:drawable="@drawable/btn_star_off_pressed_holo_light" />
+
+    <item android:state_checked="true" android:state_focused="true"
+          android:drawable="@drawable/btn_star_on_focused_holo_light" />
+    <item android:state_checked="false" android:state_focused="true"
+          android:drawable="@drawable/btn_star_off_focused_holo_light" />
+
+    <item android:state_checked="true" android:state_focused="true" android:state_enabled="false"
+          android:drawable="@drawable/btn_star_on_disabled_focused_holo_light" />
+    <item android:state_checked="true" android:state_focused="false" android:state_enabled="false"
+          android:drawable="@drawable/btn_star_on_disabled_holo_light" />
+          
+    <item android:state_checked="false" android:state_focused="true" android:state_enabled="false"
+          android:drawable="@drawable/btn_star_off_disabled_focused_holo_light" />
+    <item android:state_checked="false" android:state_focused="false" android:state_enabled="false"
+          android:drawable="@drawable/btn_star_off_disabled_holo_light" />
+          
+    <item android:state_checked="false" android:drawable="@drawable/btn_star_off_normal_holo_light" />
+    <item android:state_checked="true" android:drawable="@drawable/btn_star_on_normal_holo_light" />
+</selector>
diff --git a/core/res/res/drawable/expander_group_holo_dark.xml b/core/res/res/drawable/expander_group_holo_dark.xml
new file mode 100644
index 0000000..51a7290
--- /dev/null
+++ b/core/res/res/drawable/expander_group_holo_dark.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2011 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item
+        android:state_expanded="true"
+        android:drawable="@drawable/expander_open_holo_dark" />
+    <item
+        android:drawable="@drawable/expander_close_holo_dark" />
+</selector>
diff --git a/core/res/res/drawable/expander_group_holo_light.xml b/core/res/res/drawable/expander_group_holo_light.xml
new file mode 100644
index 0000000..0ce71a5
--- /dev/null
+++ b/core/res/res/drawable/expander_group_holo_light.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2011 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item
+        android:state_expanded="true"
+        android:drawable="@drawable/expander_open_holo_light" />
+    <item
+        android:drawable="@drawable/expander_close_holo_light" />
+</selector>
diff --git a/core/res/res/layout-xlarge/activity_list.xml b/core/res/res/layout-xlarge/activity_list.xml
index 9d6b8f5..ad485c1 100644
--- a/core/res/res/layout-xlarge/activity_list.xml
+++ b/core/res/res/layout-xlarge/activity_list.xml
@@ -32,15 +32,14 @@
     <LinearLayout android:id="@+id/topPanel"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:minHeight="48dip"
         android:orientation="vertical">
         <LinearLayout android:id="@+id/title_template"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:orientation="horizontal"
-            android:gravity="center_vertical"
-            android:layout_marginTop="8dip"
-            android:layout_marginBottom="8dip"
+            android:gravity="center_vertical|left"
+            android:minHeight="60dip"
+            android:layout_marginLeft="32dip"
             android:layout_marginRight="32dip">
             <ImageView android:id="@+id/icon"
                 android:layout_width="wrap_content"
@@ -49,7 +48,7 @@
                 android:src="@null"
                 android:visibility="gone" />
             <com.android.internal.widget.DialogTitle android:id="@+id/alertTitle"
-                style="?android:attr/textAppearanceLarge"
+                style="?android:attr/textAppearanceMedium"
                 android:singleLine="true"
                 android:ellipsize="end"
                 android:layout_width="match_parent"
@@ -57,15 +56,19 @@
         </LinearLayout>
         <ImageView android:id="@+id/titleDivider"
             android:layout_width="match_parent"
-            android:layout_height="1dip"
+            android:layout_height="4dip"
+            android:layout_marginLeft="16dip"
+            android:layout_marginRight="16dip"
             android:scaleType="fitXY"
             android:gravity="fill_horizontal"
-            android:src="@android:drawable/divider_horizontal_dark" />
+            android:src="@android:drawable/divider_strong_holo" />
         <!-- If the client uses a customTitle, it will be added here. -->
     </LinearLayout>
 
     <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
         android:layout_width="match_parent"
+        android:layout_marginLeft="32dip"
+        android:layout_marginRight="32dip"
         android:layout_height="0dip"
         android:layout_weight="1">
 
@@ -86,23 +89,19 @@
             />
     </FrameLayout>
 
-    <ImageView
-        android:layout_width="match_parent"
-        android:layout_height="1dip"
-        android:scaleType="fitXY"
-        android:gravity="fill_horizontal"
-        android:src="@android:drawable/divider_horizontal_dark" />
-
     <LinearLayout android:id="@+id/buttonPanel"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:minHeight="54dip"
-        android:orientation="vertical" >
+        android:orientation="vertical"
+        android:divider="?android:attr/dividerHorizontal"
+        android:showDividers="beginning"
+        android:dividerPadding="16dip">
         <LinearLayout
+            style="?android:attr/buttonBarStyle"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:orientation="horizontal"
-            android:paddingTop="4dip"
             android:paddingLeft="2dip"
             android:paddingRight="2dip"
             android:measureWithLargestChild="true">
@@ -111,20 +110,21 @@
                 android:layout_width="0dip"
                 android:layout_height="wrap_content"
                 android:orientation="horizontal"
-                />
+                android:visibility="gone" />
             <Button android:id="@+id/button1"
                 android:layout_width="0dip"
-                android:layout_gravity="center"
+                android:layout_gravity="left"
                 android:layout_weight="1"
                 android:maxLines="2"
                 android:text="@string/cancel"
+                style="?android:attr/buttonBarButtonStyle"
                 android:layout_height="wrap_content" />
             <LinearLayout android:id="@+id/rightSpacer"
                 android:layout_width="0dip"
                 android:layout_weight="0.25"
                 android:layout_height="wrap_content"
                 android:orientation="horizontal"
-                />
+                android:visibility="gone" />
         </LinearLayout>
      </LinearLayout>
 </com.android.internal.widget.WeightedLinearLayout>
diff --git a/core/res/res/layout/action_bar_title_item.xml b/core/res/res/layout/action_bar_title_item.xml
index 3864981..0cf4222 100644
--- a/core/res/res/layout/action_bar_title_item.xml
+++ b/core/res/res/layout/action_bar_title_item.xml
@@ -17,7 +17,8 @@
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
               android:layout_width="wrap_content"
               android:layout_height="wrap_content"
-              android:orientation="vertical" >
+              android:orientation="vertical"
+              android:paddingRight="32dip" >
     <TextView android:id="@+id/action_bar_title"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
diff --git a/core/res/res/layout/activity_list_item_2.xml b/core/res/res/layout/activity_list_item_2.xml
index e937d7b..3b84c733 100644
--- a/core/res/res/layout/activity_list_item_2.xml
+++ b/core/res/res/layout/activity_list_item_2.xml
@@ -18,8 +18,8 @@
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:minHeight="?android:attr/listPreferredItemHeight"
-    android:textAppearance="?android:attr/textAppearanceLarge"
+    android:textAppearance="?android:attr/textAppearanceMedium"
     android:gravity="center_vertical"
     android:drawablePadding="14dip"
-    android:paddingLeft="15dip"
-    android:paddingRight="15dip" />
+    android:paddingLeft="16dip"
+    android:paddingRight="16dip" />
diff --git a/core/res/res/layout/choose_account.xml b/core/res/res/layout/choose_account.xml
new file mode 100644
index 0000000..c37a949
--- /dev/null
+++ b/core/res/res/layout/choose_account.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/* //device/apps/common/assets/res/layout/list_content.xml
+**
+** Copyright 2011, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical"
+    android:paddingLeft="16dip"
+    android:paddingRight="16dip">
+
+    <ListView xmlns:android="http://schemas.android.com/apk/res/android"
+        android:id="@android:id/list"
+        android:layout_width="match_parent"
+        android:layout_height="0dip"
+        android:layout_weight="1"
+        android:drawSelectorOnTop="false"
+        android:scrollbarAlwaysDrawVerticalTrack="true" />
+
+</LinearLayout>
diff --git a/core/res/res/layout/choose_account_row.xml b/core/res/res/layout/choose_account_row.xml
new file mode 100644
index 0000000..33764a3
--- /dev/null
+++ b/core/res/res/layout/choose_account_row.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:paddingLeft="16dip"
+    android:paddingRight="16dip"
+    android:orientation="horizontal" >
+
+   <ImageView android:id="@+id/account_row_icon"
+        android:layout_width="wrap_content"
+        android:layout_height="fill_parent"
+        android:paddingRight="8dip" />
+
+    <TextView xmlns:android="http://schemas.android.com/apk/res/android"
+        android:id="@+id/account_row_text"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:textAppearance="?android:attr/textAppearanceMedium"
+        android:gravity="center_vertical"
+        android:minHeight="?android:attr/listPreferredItemHeight" />
+
+</LinearLayout>
\ No newline at end of file
diff --git a/core/res/res/layout/text_edit_side_no_paste_window.xml b/core/res/res/layout/text_edit_side_no_paste_window.xml
new file mode 100644
index 0000000..0ed3849
--- /dev/null
+++ b/core/res/res/layout/text_edit_side_no_paste_window.xml
@@ -0,0 +1,38 @@
+<?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.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content">
+
+    <TextView android:id="@+id/title"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:paddingLeft="16dip"
+        android:paddingRight="16dip"
+        android:paddingTop="8dip"
+        android:paddingBottom="8dip"
+        android:drawableLeft="@android:drawable/ic_menu_paste_dark"
+        android:drawablePadding="8dip"
+        android:gravity="center"
+        android:textAppearance="?android:attr/textAppearanceMediumInverse"
+        android:textColor="@android:color/dim_foreground_dark_inverse_disabled"
+        android:background="@android:drawable/text_edit_side_paste_window"
+        android:text="@android:string/pasteDisabled"
+        android:layout_marginBottom="12dip"
+    />
+
+</LinearLayout>
diff --git a/core/res/res/layout/text_edit_side_paste_window.xml b/core/res/res/layout/text_edit_side_paste_window.xml
new file mode 100644
index 0000000..689a039
--- /dev/null
+++ b/core/res/res/layout/text_edit_side_paste_window.xml
@@ -0,0 +1,38 @@
+<?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.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content">
+
+    <TextView android:id="@+id/title"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:paddingLeft="16dip"
+        android:paddingRight="16dip"
+        android:paddingTop="8dip"
+        android:paddingBottom="8dip"
+        android:drawableLeft="@android:drawable/ic_menu_paste_light"
+        android:drawablePadding="8dip"
+        android:gravity="center"
+        android:textAppearance="?android:attr/textAppearanceMediumInverse"
+        android:textColor="@android:color/black"
+        android:background="@android:drawable/text_edit_side_paste_window"
+        android:text="@android:string/paste"
+        android:layout_marginBottom="12dip"
+    />
+
+</LinearLayout>
diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml
index fbd5b5e..e76692a 100755
--- a/core/res/res/values/attrs.xml
+++ b/core/res/res/values/attrs.xml
@@ -649,6 +649,11 @@
         <attr name="textEditPasteWindowLayout" format="reference" />
         <!-- Variation of textEditPasteWindowLayout displayed when the clipboard is empty. -->
         <attr name="textEditNoPasteWindowLayout" format="reference" />
+        <!-- Used instead of textEditPasteWindowLayout when the window is moved on the side of the
+             insertion cursor because it would be clipped if it were positioned on top. -->
+        <attr name="textEditSidePasteWindowLayout" format="reference" />
+        <!-- Variation of textEditSidePasteWindowLayout displayed when the clipboard is empty. -->
+        <attr name="textEditSideNoPasteWindowLayout" format="reference" />
 
         <!-- Theme to use for dialogs spawned from this theme. -->
         <attr name="dialogTheme" format="reference" />
@@ -2741,6 +2746,12 @@
         <attr name="textEditPasteWindowLayout" />
         <!-- Variation of textEditPasteWindowLayout displayed when the clipboard is empty. -->
         <attr name="textEditNoPasteWindowLayout" />
+        <!-- Used instead of textEditPasteWindowLayout when the window is moved on the side of the
+             insertion cursor because it would be clipped if it were positioned on top. -->
+        <attr name="textEditSidePasteWindowLayout" />
+        <!-- Variation of textEditSidePasteWindowLayout displayed when the clipboard is empty. -->
+        <attr name="textEditSideNoPasteWindowLayout" />
+
         <!-- Indicates that the content of a non-editable text can be selected. -->
         <attr name="textIsSelectable" />
     </declare-styleable>
diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml
index 786c4d0..e6552dfc 100644
--- a/core/res/res/values/public.xml
+++ b/core/res/res/values/public.xml
@@ -1633,6 +1633,8 @@
   <public type="style" name="Widget.Holo.Light.CalendarView" />
   <public type="style" name="Widget.DatePicker" />
   <public type="style" name="Widget.Holo.DatePicker" />
+  <public type="attr" name="textEditSidePasteWindowLayout" />
+  <public type="attr" name="textEditSideNoPasteWindowLayout" />
 
   <public type="string" name="selectTextMode" />
 
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index 46e45db..496e254 100755
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -2684,4 +2684,7 @@
     <string name="vpn_notification_title_disconnected"><xliff:g id="profilename" example="Home PPTP">%s</xliff:g> VPN disconnected</string>
     <!-- Message of the VPN service notification: Hint to reconnect VPN [CHAR LIMIT=NONE] -->
     <string name="vpn_notification_hint_disconnected">Touch to reconnect to a VPN.</string>
+
+    <!-- Choose Account Activity label -->
+    <string name="choose_account_label">Select an account</string>
 </resources>
diff --git a/core/res/res/values/styles.xml b/core/res/res/values/styles.xml
index 939e9ef..4d7e2ce 100644
--- a/core/res/res/values/styles.xml
+++ b/core/res/res/values/styles.xml
@@ -419,6 +419,8 @@
         <item name="android:textSelectHandle">?android:attr/textSelectHandle</item>
         <item name="android:textEditPasteWindowLayout">?android:attr/textEditPasteWindowLayout</item>
         <item name="android:textEditNoPasteWindowLayout">?android:attr/textEditNoPasteWindowLayout</item>
+        <item name="android:textEditSidePasteWindowLayout">?android:attr/textEditSidePasteWindowLayout</item>
+        <item name="android:textEditSideNoPasteWindowLayout">?android:attr/textEditSideNoPasteWindowLayout</item>
     </style>
     
     <style name="Widget.TextView.ListSeparator">
@@ -1400,10 +1402,6 @@
         <item name="android:textAppearance">?android:attr/textAppearanceMedium</item>
         <item name="android:textColor">@android:color/primary_text_holo_dark</item>
         <item name="android:minHeight">48dip</item>
-        <item name="android:paddingLeft">32dip</item>
-        <item name="android:paddingRight">32dip</item>
-        <item name="android:paddingTop">4dip</item>
-        <item name="android:paddingBottom">4dip</item>
     </style>
 
     <style name="Widget.Holo.Button.Borderless">
@@ -1411,14 +1409,10 @@
     </style>
 
     <style name="Widget.Holo.Button.Small">
-        <item name="android:background">@android:drawable/btn_default_holo_dark</item>
+        <item name="android:background">@android:drawable/btn_default_small_holo_dark</item>
         <item name="android:textAppearance">?android:attr/textAppearanceSmall</item>
         <item name="android:textColor">@android:color/primary_text_holo_dark</item>
         <item name="android:minHeight">48dip</item>
-        <item name="android:paddingLeft">24dip</item>
-        <item name="android:paddingRight">24dip</item>
-        <item name="android:paddingTop">4dip</item>
-        <item name="android:paddingBottom">4dip</item>
     </style>
 
     <style name="Widget.Holo.Button.Inset">
@@ -1432,8 +1426,6 @@
         <item name="android:disabledAlpha">?android:attr/disabledAlpha</item>
         <item name="android:textAppearance">?android:attr/textAppearanceSmall</item>
         <item name="android:minHeight">48dip</item>
-        <item name="android:paddingLeft">24dip</item>
-        <item name="android:paddingRight">24dip</item>
     </style>
 
     <style name="Holo.ButtonBar" parent="ButtonBar">
@@ -1481,7 +1473,11 @@
     <style name="Widget.Holo.EditText" parent="Widget.EditText">
     </style>
 
-    <style name="Widget.Holo.ExpandableListView" parent="Widget.ExpandableListView">
+    <style name="Widget.Holo.ExpandableListView" parent="Widget.Holo.ListView">
+        <item name="android:groupIndicator">@android:drawable/expander_group_holo_dark</item>
+        <item name="android:indicatorLeft">?android:attr/expandableListPreferredItemIndicatorLeft</item>
+        <item name="android:indicatorRight">?android:attr/expandableListPreferredItemIndicatorRight</item>
+        <item name="android:childDivider">?android:attr/listDivider</item>
     </style>
 
     <style name="Widget.Holo.ExpandableListView.White">
@@ -1648,6 +1644,7 @@
     </style>
 
     <style name="Widget.Holo.CompoundButton.Star" parent="Widget.CompoundButton.Star">
+        <item name="android:button">@android:drawable/btn_star_holo_dark</item>
     </style>
 
     <style name="Widget.Holo.TabWidget" parent="Widget.TabWidget">
@@ -1794,10 +1791,6 @@
         <item name="android:textAppearance">?android:attr/textAppearanceMediumInverse</item>
         <item name="android:textColor">@android:color/primary_text_holo_light</item>
         <item name="android:minHeight">48dip</item>
-        <item name="android:paddingLeft">32dip</item>
-        <item name="android:paddingRight">32dip</item>
-        <item name="android:paddingTop">4dip</item>
-        <item name="android:paddingBottom">4dip</item>
     </style>
 
     <style name="Widget.Holo.Light.Button.Borderless">
@@ -1805,13 +1798,10 @@
     </style>
 
     <style name="Widget.Holo.Light.Button.Small">
+        <item name="android:background">@android:drawable/btn_default_small_holo_light</item>
         <item name="android:textAppearance">?android:attr/textAppearanceSmall</item>
         <item name="android:textColor">@android:color/primary_text_holo_light</item>
         <item name="android:minHeight">48dip</item>
-        <item name="android:paddingLeft">24dip</item>
-        <item name="android:paddingRight">24dip</item>
-        <item name="android:paddingTop">4dip</item>
-        <item name="android:paddingBottom">4dip</item>
     </style>
 
     <style name="Widget.Holo.Light.Button.Inset">
@@ -1824,8 +1814,6 @@
         <item name="android:disabledAlpha">?android:attr/disabledAlpha</item>
         <item name="android:textAppearance">?android:attr/textAppearanceSmall</item>
         <item name="android:minHeight">48dip</item>
-        <item name="android:paddingLeft">24dip</item>
-        <item name="android:paddingRight">24dip</item>
     </style>
 
     <style name="Holo.Light.ButtonBar" parent="Holo.ButtonBar">
@@ -1867,7 +1855,11 @@
     <style name="Widget.Holo.Light.EditText" parent="Widget.Holo.EditText">
     </style>
 
-    <style name="Widget.Holo.Light.ExpandableListView" parent="Widget.ExpandableListView">
+    <style name="Widget.Holo.Light.ExpandableListView" parent="Widget.Holo.Light.ListView">
+        <item name="android:groupIndicator">@android:drawable/expander_group_holo_light</item>
+        <item name="android:indicatorLeft">?android:attr/expandableListPreferredItemIndicatorLeft</item>
+        <item name="android:indicatorRight">?android:attr/expandableListPreferredItemIndicatorRight</item>
+        <item name="android:childDivider">?android:attr/listDivider</item>
     </style>
 
     <style name="Widget.Holo.Light.ExpandableListView.White">
@@ -1997,6 +1989,7 @@
     </style>
 
     <style name="Widget.Holo.Light.CompoundButton.Star" parent="Widget.CompoundButton.Star">
+        <item name="android:button">@android:drawable/btn_star_holo_light</item>
     </style>
 
     <style name="Widget.Holo.Light.TabWidget" parent="Widget.Holo.TabWidget">
diff --git a/core/res/res/values/themes.xml b/core/res/res/values/themes.xml
index 2f8cffc..e6e23aa 100644
--- a/core/res/res/values/themes.xml
+++ b/core/res/res/values/themes.xml
@@ -174,6 +174,8 @@
         <item name="textSelectHandleWindowStyle">@android:style/Widget.TextSelectHandle</item>
         <item name="textEditPasteWindowLayout">@android:layout/text_edit_paste_window</item>
         <item name="textEditNoPasteWindowLayout">@android:layout/text_edit_no_paste_window</item>
+        <item name="textEditSidePasteWindowLayout">@android:layout/text_edit_side_paste_window</item>
+        <item name="textEditSideNoPasteWindowLayout">@android:layout/text_edit_side_no_paste_window</item>
 
         <!-- Widget styles -->
         <item name="absListViewStyle">@android:style/Widget.AbsListView</item>
diff --git a/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/ConnectivityManagerTestActivity.java b/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/ConnectivityManagerTestActivity.java
index 3d5588c..fb8b5ce 100644
--- a/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/ConnectivityManagerTestActivity.java
+++ b/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/ConnectivityManagerTestActivity.java
@@ -78,7 +78,7 @@
     public int mWifiState;
     public NetworkInfo mWifiNetworkInfo;
     public String mBssid;
-    public String mPowerSsid = "GoogleGuest"; //Default power SSID
+    public String mPowerSsid = "opennet"; //Default power SSID
     private Context mContext;
     public boolean scanResultAvailable = false;
 
diff --git a/docs/html/guide/topics/fundamentals/fragments.jd b/docs/html/guide/topics/fundamentals/fragments.jd
index 0972805..9eceef1 100644
--- a/docs/html/guide/topics/fundamentals/fragments.jd
+++ b/docs/html/guide/topics/fundamentals/fragments.jd
@@ -9,7 +9,7 @@
     <li>Fragments decompose application functionality and UI into reusable modules</li>
     <li>Add multiple fragments to a screen to avoid switching activities</li>
     <li>Fragments have their own lifecycle, state, and back stack</li>
-    <li>Fragments require API Level HONEYCOMB or greater</li>
+    <li>Fragments require API Level "Honeycomb" or greater</li>
   </ul>
 
   <h2>In this document</h2>
@@ -59,12 +59,12 @@
 which you can add or remove while the activity is running.</p>
 
 <p>A fragment must always be embedded in an activity and the fragment's lifecycle is directly
-affected by the activity's lifecycle. For example, when the activity is paused, so are all
+affected by the host activity's lifecycle. For example, when the activity is paused, so are all
 fragments in it, and when the activity is destroyed, so are all fragments. However, while an
 activity is running (it is in the <em>resumed</em> <a
 href="{@docRoot}guide/topics/fundamentals/activities.html#Lifecycle">lifecycle state</a>), you can
 manipulate each fragment independently, such as add or remove them. When you perform such a
-fragment transaction, you can it to a back stack managed by the
+fragment transaction, you can also add it to a back stack that's managed by the
 activity&mdash;each back stack entry in the activity is a record of the fragment transaction that
 occurred. The back stack allows the user to reverse a fragment transaction (navigate backwards),
 by pressing the BACK key.</p>
diff --git a/docs/html/guide/topics/graphics/animation.jd b/docs/html/guide/topics/graphics/animation.jd
index c977d51..83a4e1d 100644
--- a/docs/html/guide/topics/graphics/animation.jd
+++ b/docs/html/guide/topics/graphics/animation.jd
@@ -13,7 +13,7 @@
 
             <li><a href="#object-animator">Animating with ObjectAnimator</a></li>
 
-            <li><a href="#type-evaluator">Using the TypeEvaluator</a></li>
+            <li><a href="#type-evaluator">Using a TypeEvaluator</a></li>
 
             <li><a href="#interpolators">Using interpolators</a></li>
 
@@ -60,7 +60,7 @@
 
   <p>The Android system provides a flexible animation system that allows you to animate
   almost anything, either programmatically or declaratively with XML. There are two
-  animation systems that you can choose from: <a href="property-animation">property
+  animation systems that you can choose from: <a href="#property-animation">property
   animation</a> and <a href="#view-animation">view animation</a>. You can use whichever
   system that matches your needs, but use only one system for each object that you
   are animating.</p>
@@ -91,7 +91,7 @@
 
   <p>Most of the property animation system's features can be found in
   {@link android.animation android.animation}. Because the 
-  <a href="#view-animation>view animation</a> system already
+  <a href="#view-animation">view animation</a> system already
   defines many interpolators in {@link android.view.animation android.view.animation},
   you will use those to define your animation's interpolation in the property animation
   system as well.
@@ -163,7 +163,7 @@
       <p>The Android system provides a set of common interpolators in
       {@link android.view.animation android.view.animation}. If none of these suits your needs, you
       can implement the {@link android.animation.TimeInterpolator} interface and create
-      your own. See <a href="#interpolators">Interpolators</a> for more information on
+      your own. See <a href="#interpolators">Using interpolators</a> for more information on
       how to write a custom interpolator.</p>
     </dd>
   </dl>
@@ -286,14 +286,13 @@
   android.animation.AnimatorListenerAdapter} for just the {@link
   android.animation.Animator.AnimatorListener#onAnimationEnd onAnimationEnd()}
   callback:</p>
+  
   <pre>ValueAnimator fadeAnim = ObjectAnimator.ofFloat(newBall, "alpha", 1f, 0f);
 fadeAnim.setDuration(250);
 fadeAnim.addListener(new AnimatorListenerAdapter() {
 public void onAnimationEnd(Animator animation) {
     balls.remove(((ObjectAnimator)animation).getTarget());
-}
-  
-</pre>
+}</pre>
 
   <h3 id="object-animator">Animating with ObjectAnimator</h3>
 
@@ -308,11 +307,9 @@
   <p>Instantiating an {@link android.animation.ObjectAnimator} is similar to a {@link
   android.animation.ValueAnimator}, but you also specify the object and that object's
   property (as a String) that you want to animate:</p>
-  <pre>
-ObjectAnimator anim = ObjectAnimator.ofFloat(foo, "alpha", 0f, 1f);
+  <pre>ObjectAnimator anim = ObjectAnimator.ofFloat(foo, "alpha", 0f, 1f);
 anim.setDuration(1000);
-anim.start();
-</pre>
+anim.start();</pre>
 
   <p>To have the {@link android.animation.ObjectAnimator} update properties correctly,
   you must do the following:</p>
@@ -355,7 +352,7 @@
     </li>
   </ul>
 
-  <h3 id="type-evaluator">Using the TypeEvaluator</h3>
+  <h3 id="type-evaluator">Using a TypeEvaluator</h3>
 
   <p>If you want to animate a type that is unknown to the Android system,
   you can create your own evaluator by implementing the {@link
@@ -369,15 +366,13 @@
   This allows the animator that you are using to return an
   appropriate value for your animated property at the current point of the animation. The
   {@link android.animation.FloatEvaluator} class demonstrates how to do this:</p>
-  <pre>
-public class FloatEvaluator implements TypeEvaluator {
+  <pre>public class FloatEvaluator implements TypeEvaluator {
 
     public Object evaluate(float fraction, Object startValue, Object endValue) {
         float startFloat = ((Number) startValue).floatValue();
         return startFloat + fraction * (((Number) endValue).floatValue() - startFloat);
     }
-}
-</pre>
+}</pre>
 
   <p class="note"><strong>Note:</strong> When {@link android.animation.ValueAnimator} (or
   {@link android.animation.ObjectAnimator}) runs, it calculates a current elapsed
@@ -387,7 +382,7 @@
   parameter, so you do not have to take into account the interpolator
   when calculating animated values.</p>
 
-  <h3 id="interpolators">Using Interpolators</h3>
+  <h3 id="interpolators">Using interpolators</h3>
 
   <p>An interpolator define how specific values in an animation are
   calculated as a function of time. For example, you can specify animations to happen
@@ -414,12 +409,12 @@
   <p><strong>AccelerateDecelerateInterpolator</strong></p>
   <pre>public float getInterpolation(float input) {
     return (float)(Math.cos((input + 1) * Math.PI) / 2.0f) + 0.5f;
-    }</pre>
+}</pre>
 
   <p><strong>LinearInterpolator</strong></p>
   <pre>public float getInterpolation(float input) {
     return input;
-    }</pre>
+}</pre>
 
   <p>The following table represents the approximate values that are calculated by these
   interpolators for an animation that lasts 1000ms:</p>
@@ -488,7 +483,7 @@
   {@link android.view.animation.LinearInterpolator} between 200ms and 600ms and slower
   between 600ms and 1000ms.</p>
 
-  <h3 id="keyframes">Specifying Keyframes</h3>
+  <h3 id="keyframes">Specifying keyframes</h3>
 
   <p>A {@link android.animation.Keyframe} object consists of a time/value pair that lets
   you define a specific state at a specific time of an animation. Each keyframe can also
@@ -505,19 +500,18 @@
   object, you can obtain an animator by passing in the {@link
   android.animation.PropertyValuesHolder} object and the object to animate. The following
   code snippet demonstrates how to do this:</p>
-  <pre>
-  Keyframe kf0 = Keyframe.ofFloat(0f, 0f);
-  Keyframe kf1 = Keyframe.ofFloat(.9999f, 360f);
-  Keyframe kf2 = Keyframe.ofFloat(1f, 0f);
-  PropertyValuesHolder pvhRotation = PropertyValuesHolder.ofKeyframe("rotation", kf0, kf1, kf2);
-  ObjectAnimator rotationAnim = ObjectAnimator.ofPropertyValuesHolder(target, pvhRotation)
-  rotationAnim.setDuration(5000ms);
- 
-</pre>For a more complete example on how to use keyframes, see the <a href=
+  <pre>Keyframe kf0 = Keyframe.ofFloat(0f, 0f);
+Keyframe kf1 = Keyframe.ofFloat(.9999f, 360f);
+Keyframe kf2 = Keyframe.ofFloat(1f, 0f);
+PropertyValuesHolder pvhRotation = PropertyValuesHolder.ofKeyframe("rotation", kf0, kf1, kf2);
+ObjectAnimator rotationAnim = ObjectAnimator.ofPropertyValuesHolder(target, pvhRotation)
+rotationAnim.setDuration(5000ms);
+</pre>
+<p>For a more complete example on how to use keyframes, see the <a href=
 "{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/animation/MultiPropertyAnimation.html">
-  MultiPropertyAnimation</a> sample in APIDemos.
+  MultiPropertyAnimation</a> sample in APIDemos.</p>
 
-  <h3 id="choreography">Choreographing multiple animations with Animator Sets</h3>
+  <h3 id="choreography">Choreographing multiple animations with AnimatorSet</h3>
 
   <p>In many cases, you want to play an animation that depends on when another animation
   starts or finishes. The Android system lets you bundle animations together into an
@@ -559,7 +553,7 @@
 
   <h3 id="declaring-xml">Declaring animations in XML</h3>
 
-  <p>As with <a href="view-animation">view animation</a>, you can declare property animations with
+  <p>As with <a href="#view-animation">view animation</a>, you can declare property animations with
   XML instead of doing it programmatically. The following Android classes also have XML
   declaration support with the following XML tags:</p>
 
@@ -639,14 +633,13 @@
             android:propertyName="y"
             android:duration="500"
             android:valueTo="300"
-            android:valueType="int" &gt;
-        &lt;/set&gt;
-        &lt;objectAnimator
-            android:propertyName="alpha"
-            android:duration="500"
-            android:valueTo="0f"/&gt;
-        &lt;/set&gt;
-</pre>
+            android:valueType="int"/&gt;
+    &lt;/set&gt;
+    &lt;objectAnimator
+        android:propertyName="alpha"
+        android:duration="500"
+        android:valueTo="0f"/&gt;
+&lt;/set&gt;</pre>
 
   <p>In order to run this animation, you must inflate the XML resources in your code to
   an {@link android.animation.AnimatorSet} object, and then set the target objects for all of
@@ -698,40 +691,38 @@
 
   <p>The following XML from one of the ApiDemos is used to stretch, then simultaneously
   spin and rotate a View object.</p>
-  <pre>
-&lt;set android:shareInterpolator="false"&gt;
-   &lt;scale
-          android:interpolator="@android:anim/accelerate_decelerate_interpolator"
-          android:fromXScale="1.0"
-          android:toXScale="1.4"
-          android:fromYScale="1.0"
-          android:toYScale="0.6"
-          android:pivotX="50%"
-          android:pivotY="50%"
-          android:fillAfter="false"
-          android:duration="700" /&gt;
-   &lt;set android:interpolator="@android:anim/decelerate_interpolator"&gt;
-      &lt;scale
-             android:fromXScale="1.4" 
-             android:toXScale="0.0"
-             android:fromYScale="0.6"
-             android:toYScale="0.0" 
-             android:pivotX="50%" 
-             android:pivotY="50%" 
-             android:startOffset="700"
-             android:duration="400" 
-             android:fillBefore="false" /&gt;
-      &lt;rotate 
-             android:fromDegrees="0" 
-             android:toDegrees="-45"
-             android:toYScale="0.0" 
-             android:pivotX="50%" 
-             android:pivotY="50%"
-             android:startOffset="700"
-             android:duration="400" /&gt;
-   &lt;/set&gt;
-&lt;/set&gt;
-</pre>
+  <pre>&lt;set android:shareInterpolator="false"&gt;
+    &lt;scale
+        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
+        android:fromXScale="1.0"
+        android:toXScale="1.4"
+        android:fromYScale="1.0"
+        android:toYScale="0.6"
+        android:pivotX="50%"
+        android:pivotY="50%"
+        android:fillAfter="false"
+        android:duration="700" /&gt;
+    &lt;set android:interpolator="@android:anim/decelerate_interpolator"&gt;
+        &lt;scale
+           android:fromXScale="1.4"
+           android:toXScale="0.0"
+           android:fromYScale="0.6"
+           android:toYScale="0.0"
+           android:pivotX="50%"
+           android:pivotY="50%"
+           android:startOffset="700"
+           android:duration="400"
+           android:fillBefore="false" /&gt;
+        &lt;rotate
+           android:fromDegrees="0"
+           android:toDegrees="-45"
+           android:toYScale="0.0"
+           android:pivotX="50%"
+           android:pivotY="50%"
+           android:startOffset="700"
+           android:duration="400" /&gt;
+    &lt;/set&gt;
+&lt;/set&gt;</pre>
 
   <p>Screen coordinates (not used in this example) are (0,0) at the upper left hand
   corner, and increase as you go down and to the right.</p>
@@ -805,8 +796,7 @@
   image to a View and then called to play. Here's an example Activity, in which the
   animation is added to an {@link android.widget.ImageView} and then animated when the
   screen is touched:</p>
-  <pre>
-AnimationDrawable rocketAnimation;
+  <pre>AnimationDrawable rocketAnimation;
 
 public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
@@ -823,8 +813,7 @@
     return true;
   }
   return super.onTouchEvent(event);
-}
-</pre>
+}</pre>
 
   <p>It's important to note that the <code>start()</code> method called on the
   AnimationDrawable cannot be called during the <code>onCreate()</code> method of your
diff --git a/docs/html/sdk/android-3.0.jd b/docs/html/sdk/android-3.0.jd
index 6896f52..9ca6a04 100644
--- a/docs/html/sdk/android-3.0.jd
+++ b/docs/html/sdk/android-3.0.jd
@@ -1,4 +1,4 @@
-page.title=Android 3.0 Platform
+page.title=Android 3.0 Platform Preview
 @jd:body
 
 <div id="qv-wrapper">
@@ -28,11 +28,17 @@
 </div>
 </div>
 
-</p>API Level: <b>Honeycomb</b></p>
+<p><em>API Level:</em> <b>Honeycomb</b></p>
 
 <p>For developers, the Android 3.0 preview is available as a downloadable component for the
-Android SDK. The downloadable platform includes an Android library and system image, as well as a
-set of emulator skins and more. The downloadable platform includes no external libraries.</p>
+Android SDK.</p>
+
+<p class="note"><strong>Note:</strong> Read the <a
+href="{@docRoot}sdk/preview/start.html">Getting Started</a> guide for important information
+about setting up your development environment and limitiations of the Android 3.0 preview.</p>
+
+
+
 
 
 
@@ -43,8 +49,6 @@
 including new features and changes in the framework API since the previous version.</p>
 
 
-
-
 <h3>Fragments</h3>
 
 <p>A fragment is a new framework component that allows you to separate distinct elements of an
@@ -185,98 +189,63 @@
 <p>New APIs now facilitate the ability for your application to implement drag and drop
 functionality in the UI.</p>
 
-<p>To drag a {@link android.view.View} in your activity, call {@link android.view.View#startDrag
-startDrag()} on the object, providing a {@link android.content.ClipData} object that represents the
-information to drag, a {@link android.view.View.DragShadowBuilder} to facilitate the "shadow" that
-the user sees while dragging, and an {@link java.lang.Object} that can share information about the
-drag object with views that may receive the object. However, </p>
+<p>To begin dragging content in your activity, call {@link android.view.View#startDrag startDrag()}
+on a {@link android.view.View}, providing a {@link android.content.ClipData} object that represents
+the information to drag, a {@link android.view.View.DragShadowBuilder} to facilitate the "shadow"
+that the user sees while dragging, and an {@link java.lang.Object} that can share information about
+the drag object with views that may receive the object.</p>
 
 <p>To accept a drag object (receive the "drop") in a
 {@link android.view.View}, register the view with an {@link android.view.View.OnDragListener} by
 calling {@link android.view.View#setOnDragListener setOnDragListener()}. When a drag event occurs on
 the view, the system calls {@link android.view.View.OnDragListener#onDrag onDrag()} for the  {@link
-android.view.View.OnDragListener}, which receives a {@link android.view.DragEvent} describing
-the type of event has occurred (such as "drag started", "drag ended", and "drop"). The receiving
-view can inquire the event type delivered to {@link
-android.view.View#onDragEvent onDragEvent()} by calling {@link
-android.view.DragEvent#getAction getAction()} on the {@link android.view.DragEvent}.</p>
+android.view.View.OnDragListener}, which receives a {@link android.view.DragEvent} describing the
+type of event has occurred (such as "drag started", "drag ended", and "drop"). During a drag
+operation, there is a stream of drag events, so the system calls {@link
+android.view.View.OnDragListener#onDrag onDrag()} repeatedly on the view. The receiving view can
+inquire the event type delivered to {@link android.view.View#onDragEvent onDragEvent()} by calling
+{@link android.view.DragEvent#getAction getAction()} on the {@link android.view.DragEvent}.</p>
 
-<p>Although a drag event may carry a {@link android.content.ClipData} object, drag and drop does
-not depend on the clipboard. The data being dragged is sent to the system as {@link
-android.content.ClipData} and the system sends it to {@link android.view.View} objects in the
-{@link android.view.DragEvent}. A drag and drop operation should never put the dragged data on the
-clipboard.</p>
+<p>Although a drag event may carry a {@link android.content.ClipData} object, this is not related
+to the system clipboard. The data being dragged is passed as a {@link
+android.content.ClipData} object to {@link android.view.View#startDrag startDrag()} and the system
+sends it to the receiving {@link android.view.View} in the {@link android.view.DragEvent} sent to
+{@link android.view.View.OnDragListener#onDrag onDrag()}. A drag and drop operation should never
+put the dragged data in the global system clipboard.</p>
 
 
 
-<h3>Multiple-choice selection for ListView and GridView</h3>
-
-<p>New {@link android.widget.AbsListView#CHOICE_MODE_MULTIPLE_MODAL} mode for {@link
-android.widget.AbsListView#setChoiceMode setChoiceMode()} allows for selecting multiple items
-from a {@link android.widget.ListView} and {@link android.widget.GridView}.</p>
-
-<p>To enable multiple-choice selection, call {@link
-android.widget.AbsListView#setChoiceMode setChoiceMode(CHOICE_MODE_MULTIPLE_MODAL)} and register a
-{@link android.widget.AbsListView.MultiChoiceModeListener} with {@link
-android.widget.AbsListView#setMultiChoiceModeListener setMultiChoiceModeListener()}.</p>
-
-<p>When the user performs a long-press on an item, the Action Bar switches to the Multi-choice
-Action Mode. The system notifies the {@link android.widget.AbsListView.MultiChoiceModeListener}
-when items are selected by calling {@link
-android.widget.AbsListView.MultiChoiceModeListener#onItemCheckedStateChanged
-onItemCheckedStateChanged()}.</p>
-
-<p>For an example of multiple-choice selection, see the <a
-href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/List15.html">List15.java</a>
-class in the API Demos sample application.</p>
-
-
-
-
-<h3>Content loaders</h3>
-
-<p>New framework APIs facilitate asynchronous loading of data using the {@link
-android.content.Loader} class. You can use it in combination with UI components such as views and
-fragments to dynamically load data from background threads. The {@link
-android.content.CursorLoader} subclass is specially designed to help do so for data queried from
-a {@link android.content.ContentResolver}.</p>
-
-
-
-<h3>Extended app widgets</h3>
+<h3>App widgets</h3>
 
 <p>App widgets can now be more interactive with scrolling list views, grid views, view flippers, and
 a new 3D stack widget.</p>
 
-<p>Android 3.0 supports several new widget classes for App Widgets, including:</p>
-<ul>
-  <li>{@link android.widget.GridView}</li>
-  <li>{@link android.widget.ListView}</li>
-  <li>{@link android.widget.StackView}</li>
-  <li>{@link android.widget.ViewFlipper}</li>
-  <li>{@link android.widget.AdapterViewFlipper}</li>
-</ul>
+<p>Android 3.0 supports several new widget classes for app widgets, including: {@link
+android.widget.GridView}, {@link android.widget.ListView}, {@link android.widget.StackView}, {@link
+android.widget.ViewFlipper}, and {@link android.widget.AdapterViewFlipper}.</p>
 
 <p>You can use the new {@link android.widget.RemoteViewsService} to populate the new remote
 collection views ({@link android.widget.GridView}, {@link android.widget.ListView}, and {@link
 android.widget.StackView}).</p>
 
-<p>You can also use two new {@link android.appwidget.AppWidgetProviderInfo} fields. The {@link
+<p>{@link android.appwidget.AppWidgetProviderInfo} also supports two new fields: {@link
+android.appwidget.AppWidgetProviderInfo#autoAdvanceViewId} and {@link
+android.appwidget.AppWidgetProviderInfo#previewImage}. The {@link
 android.appwidget.AppWidgetProviderInfo#autoAdvanceViewId} field lets you specify the view ID of the
 app widget subview, which is auto-advanced by the app widget’s host. The
 {@link android.appwidget.AppWidgetProviderInfo#previewImage} field specifies a preview of what the
 App Widget looks like and is shown to the user from the widget picker. If this field is not
 supplied, the app widget's icon is used for the preview.</p>
 
-<p>Android also provides a new widget preview tool (WidgetPreview), located in the SDK tools. The
-tool lets you take a screenshot of your app widget, which you can use to populate the customization
-tray.</p>
+<p>Android also provides a new widget preview tool (WidgetPreview), located in the SDK tools, to
+take a screenshot of your app widget, which you can use when specifying the {@link
+android.appwidget.AppWidgetProviderInfo#previewImage} field.</p>
 
 
 
 
 
-<h3>Extended status bar notifications</h3>
+<h3>Status bar notifications</h3>
 
 <p>The {@link android.app.Notification} APIs have been extended to support more content-rich status
 bar notifications, plus a new {@link android.app.Notification.Builder} class allows you to easily
@@ -296,9 +265,34 @@
 
 
 
-<h3>New animation framework</h3>
+<h3>Content loaders</h3>
 
-<p>An all new flexible animation framework that allows you to animate the properties of any object
+<p>New framework APIs facilitate asynchronous loading of data using the {@link
+android.content.Loader} class. You can use it in combination with UI components such as views and
+fragments to dynamically load data from background threads. The {@link
+android.content.CursorLoader} subclass is specially designed to help do so for data queried from
+a {@link android.content.ContentResolver}.</p>
+
+
+
+
+
+<h3>Bluetooth A2DP and headset APIs</h3>
+
+<p>Android now includes APIs for applications to verify the state of connected Bluetooth A2DP and
+headset profile devices. You can initialize the respective {@link
+android.bluetooth.BluetoothProfile} by calling {@link
+android.bluetooth.BluetoothAdapter#getProfileProxy getProfileProxy()} with either the {@link
+android.bluetooth.BluetoothProfile#A2DP} or {@link android.bluetooth.BluetoothProfile#HEADSET}
+profile constant and a {@link android.bluetooth.BluetoothProfile.ServiceListener} to receive
+callbacks when the client is connected or disconnected.</p>
+
+
+
+
+<h3>Animation framework</h3>
+
+<p>An all new flexible animation framework allows you to animate the properties of any object
 (View, Drawable, Fragment, Object, anything). It allows you to define many aspects of an animation,
 such as:</p>
 <ul>
@@ -320,7 +314,21 @@
 object or property that is animated as a result. It simply performs the calculations, and you must
 listen for the updates and process the data with your own logic. The {@link
 android.animation.ObjectAnimator} is a subclass of {@link android.animation.ValueAnimator} and
-allows you to set the object and property to animate, so you do not have to listen for updates.</p>
+allows you to set the object and property to animate, and it handles all animation work.
+That is, you give the {@link android.animation.ObjectAnimator} the object to animate, the
+property of the object to change over time, and a set of values to apply to the property over
+time in order to animate it, then start the animation.</p>
+
+<p>Additionally, the {@link android.animation.LayoutTransition} class enables automatic transition
+animations for changes you make to your activity layout. To enable transitions for a {@link
+android.view.ViewGroup}, create a {@link android.animation.LayoutTransition} object and set it on
+any {@link android.view.ViewGroup} by calling {@link
+android.view.ViewGroup#setLayoutTransition setLayoutTransition()}. This causes default
+animations to run whenever items are added to or removed from the group. To specify custom
+animations, call {@link android.animation.LayoutTransition#setAnimator setAnimator()} on the {@link
+android.animation.LayoutTransition} to provide a custom {@link android.animation.Animator},
+such as a {@link android.animation.ValueAnimator} or {@link android.animation.ObjectAnimator}
+discussed above.</p>
 
 <p>For more information, see the <a
 href="{@docRoot}guide/topics/graphics/animation.html">Animation</a> developer guide.</p>
@@ -328,73 +336,67 @@
 
 
 
-
-<h3>New widgets</h3>
+<h3>Extended UI framework</h3>
 
 <ul>
   
-<li>{@link android.widget.AdapterViewAnimator}
-<p>Base class for an {@link android.widget.AdapterView} that performs animations when switching
-between its views.</p></li>
+  <li><b>Multiple-choice selection for ListView and GridView</b>
 
-<li>{@link android.widget.AdapterViewFlipper}
-<p>Simple {@link android.widget.ViewAnimator} that animates between two or more views that have
-been added to it. Only one child is shown at a time. If requested, it can automatically flip between
-each child at a regular interval.</p></li>
+<p>New {@link android.widget.AbsListView#CHOICE_MODE_MULTIPLE_MODAL} mode for {@link
+android.widget.AbsListView#setChoiceMode setChoiceMode()} allows for selecting multiple items
+from a {@link android.widget.ListView} and {@link android.widget.GridView}.</p>
 
-<li>{@link android.widget.CalendarView}
-<p>Allows users to select dates from a calendar and you can configure the range of dates
-available. A user can select a date by tapping on it and can scroll and fling
-the calendar to a desired date.</p></li>
+<p>To enable multiple-choice selection, call {@link
+android.widget.AbsListView#setChoiceMode setChoiceMode(CHOICE_MODE_MULTIPLE_MODAL)} and register a
+{@link android.widget.AbsListView.MultiChoiceModeListener MultiChoiceModeListener} with {@link
+android.widget.AbsListView#setMultiChoiceModeListener setMultiChoiceModeListener()}.</p>
 
-<li>{@link android.widget.ListPopupWindow}
-<p>Anchors itself to a host view and displays a list of choices, such as for a list of
-suggestions when typing into an {@link android.widget.EditText} view.</p></li>
+<p>When the user performs a long-press on an item, the Action Bar switches to the Multi-choice
+Action Mode. The system notifies the {@link android.widget.AbsListView.MultiChoiceModeListener
+MultiChoiceModeListener} when items are selected by calling {@link
+android.widget.AbsListView.MultiChoiceModeListener#onItemCheckedStateChanged
+onItemCheckedStateChanged()}.</p>
 
-<li>{@link android.widget.NumberPicker}
-<p>Enables the user to select a number from a predefined range. The widget presents an
-input field and up and down buttons for selecting a number. Touching the input field shows a
-scroll wheel that allows the user to scroll through values or touch again to directly edit the
-current value. It also allows you to map from positions to strings, so that
-the corresponding string is displayed instead of the position index.</p></li>
+<p>For an example of multiple-choice selection, see the <a
+href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/List15.html">List15.
+java</a>
+class in the API Demos sample application.</p>
+  </li>
 
-<li>{@link android.widget.PopupMenu}
-<p>Displays a {@link android.view.Menu} in a modal popup window that's anchored to a view. The popup
-appears below the anchor view if there is room, or above it if there is not. If the IME (soft
-keyboard) is visible, the popup does not overlap it until it is touched.</p></li>
+  
+  <li><b>New APIs to transform views</b>
+  
+    <p>New APIs allow you to easily apply 2D and 3D transformations to {@link
+android.view.View}s in your activity layout, using a set of object properties that define the view's
+layout position, orientation, transparency and more.</p>
+    <p>New methods to set properties include: {@link android.view.View#setAlpha setAlpha()}, {@link
+android.view.View#setBottom setBottom()}, {@link android.view.View#setLeft setLeft()}, {@link
+android.view.View#setRight setRight()}, {@link android.view.View#setBottom setBottom()}, {@link
+android.view.View#setPivotX setPivotX()}, {@link android.view.View#setPivotY setPivotY()}, {@link
+android.view.View#setRotationX setRotationX()}, {@link android.view.View#setRotationY
+setRotationY()}, {@link android.view.View#setScaleX setScaleX()}, {@link android.view.View#setScaleY
+setScaleY()}, {@link android.view.View#setAlpha setAlpha()}, and others.</p>
 
-<li>{@link android.widget.SearchView}
-<p>Provides a search box that works in conjunction with a search provider (in the same manner as
-the traditional <a href="{@docRoot}guide/topics/search/search-dialog.html">search dialog</a>). It
-also displays recent query suggestions or custom suggestions as configured by the search
-provider. This widget is particularly useful for offering search in the Action Bar.</p></li>
+    <p>Some methods also have a corresponding XML attribute that you can specify in your layout
+file. Available attributes include: {@code translationX}, {@code translationY}, {@code rotation},
+{@code rotationX}, {@code rotationY}, {@code scaleX}, {@code scaleY}, {@code transformPivotX},
+{@code transformPivotY}, and {@code alpha}.</p>
 
-<li>{@link android.widget.StackView}
-<p>A view that displays its children in a 3D stack and allows users to discretely swipe through the
-children.</p></li>
+    <p>Using some of these new properties in combination with the new animation framework (discussed
+previously), you can easily create some fancy animations to your views. For example, to rotate a
+view on its y-axis, supply {@link android.animation.ObjectAnimator} with the {@link
+android.view.View}, the "rotationY" property, and the values to use:</p>
+<pre>
+ObjectAnimator animator = ObjectAnimator.ofFloat(myView, "rotationY", 0, 360);
+animator.setDuration(2000);
+animator.start();
+</pre>
+  </li>
 
-</ul>
+  
+  <li><b>New holographic themes</b>
 
-
-
-
-
-<h3>Redesigned widgets</h3>
-
-<p>Android 3.0 offers an updated set of UI widgets that developers can use to quickly add new types
-of content to their applications. The new UI widgets are redesigned for use on larger screens such
-as tablets and incorporate the new holographic UI theme. Several new widget types are available,
-including a 3D stack, search box, a date/time picker, number picker, stack, calendar View etc.
-SearchView, PopupMenu, and others. Most of the redesigned widgets can now be used as remote views in
-homescreen widgets. Applications written for earlier versions can inherit the new widget designs and
-themes.</p>
-
-
-
-
-<h3>Holographic themes</h3>
-
-<p>The standard system widgets and overall look have been redesigned for use on larger screens
+    <p>The standard system widgets and overall look have been redesigned for use on larger screens
 such as tablets and incorporate the new holographic UI theme. These style changes are applied
 using the standard <a href="{@docRoot}guide/topics/ui/themes.html">style and theme</a> system.
 Any application that targets the Android 3.0 platform inherit the holographic theme by default.
@@ -404,19 +406,63 @@
 <p>To apply the holographic theme to individual activities or to inherit them in your own theme
 definitions, you can use one of several new {@link android.R.style#Theme_Holo Theme.Holo}
 themes.</p>
+  </li>
+  
+  
+  <li><b>New widgets</b>
+
+    <ul>
+    <li>{@link android.widget.AdapterViewAnimator}
+    <p>Base class for an {@link android.widget.AdapterView} that performs animations when switching
+    between its views.</p></li>
+    
+    <li>{@link android.widget.AdapterViewFlipper}
+    <p>Simple {@link android.widget.ViewAnimator} that animates between two or more views that have
+    been added to it. Only one child is shown at a time. If requested, it can automatically flip
+  between
+    each child at a regular interval.</p></li>
+    
+    <li>{@link android.widget.CalendarView}
+    <p>Allows users to select dates from a calendar and you can configure the range of dates
+    available. A user can select a date by tapping on it and can scroll and fling
+    the calendar to a desired date.</p></li>
+    
+    <li>{@link android.widget.ListPopupWindow}
+    <p>Anchors itself to a host view and displays a list of choices, such as for a list of
+    suggestions when typing into an {@link android.widget.EditText} view.</p></li>
+    
+    <li>{@link android.widget.NumberPicker}
+    <p>Enables the user to select a number from a predefined range. The widget presents an
+    input field and up and down buttons for selecting a number. Touching the input field shows a
+    scroll wheel that allows the user to scroll through values or touch again to directly edit the
+    current value. It also allows you to map from positions to strings, so that
+    the corresponding string is displayed instead of the position index.</p></li>
+    
+    <li>{@link android.widget.PopupMenu}
+    <p>Displays a {@link android.view.Menu} in a modal popup window that's anchored to a view. The
+  popup
+    appears below the anchor view if there is room, or above it if there is not. If the IME (soft
+    keyboard) is visible, the popup does not overlap it until it is touched.</p></li>
+    
+    <li>{@link android.widget.SearchView}
+    <p>Provides a search box that works in conjunction with a search provider (in the same manner as
+    the traditional <a href="{@docRoot}guide/topics/search/search-dialog.html">search dialog</a>).
+It
+    also displays recent query suggestions or custom suggestions as configured by the search
+    provider. This widget is particularly useful for offering search in the Action Bar.</p></li>
+    
+    <li>{@link android.widget.StackView}
+    <p>A view that displays its children in a 3D stack and allows users to discretely swipe through
+  the
+    children.</p></li>
+    
+    </ul>
+  </li>
+  
+</ul>
 
 
 
-<h3>Bluetooth A2DP and headset APIs</h3>
-
-<p>Android now includes APIs for applications to verify the state of connected Bluetooth A2DP and
-headset profile devices. You can initialize the respective {@link
-android.bluetooth.BluetoothProfile} by calling {@link
-android.bluetooth.BluetoothAdapter#getProfileProxy getProfileProxy()} with either the {@link
-android.bluetooth.BluetoothProfile#A2DP} or {@link android.bluetooth.BluetoothProfile#HEADSET}
-profile constant and a {@link android.bluetooth.BluetoothProfile.ServiceListener} to receive
-callbacks when the client is connected or disconnected.</p>
-
 
 <!--
 <h3>WebKit</h3>
@@ -427,7 +473,7 @@
 <h3>Graphics</h3>
 
 <ul>
-  <li><h4>Hardware accelerated 2D graphics</h4>
+  <li><b>Hardware accelerated 2D graphics</b>
 
 <p>You can now enable the OpenGL renderer for your application by setting {@code
 android:hardwareAccelerated="true"} in your manifest element's <a
@@ -439,7 +485,29 @@
 <p>This flag helps applications by making them draw faster. This results in smoother animations,
 smoother scrolling, and overall better performance and response to user interaction.</p></li>
 
-  <li><h4>Renderscript 3D graphics engine</h4>
+
+  <li><b>View support for hardware and software layers</b>
+  
+    <p>By default, a {@link android.view.View} has no layer specified. You can specify that the
+view be backed by either a hardware or software layer, specified by values {@link
+android.view.View#LAYER_TYPE_HARDWARE} and {@link android.view.View#LAYER_TYPE_SOFTWARE}, using
+{@link android.view.View#setLayerType setLayerType()} or the <a
+href="{@docRoot}reference/android/view/View.html#attr_android:layerType">{@code layerType}</a>
+attribute.</p>
+    <p>A hardware layer is backed by a hardware specific texture (generally Frame Buffer Objects or
+FBO on OpenGL hardware) and causes the view to be rendered using Android's hardware rendering
+pipeline, but only if hardware acceleration is turned on for the view hierarchy. When hardware
+acceleration is turned off, hardware layers behave exactly as software layers.</p>
+    <p>A software layer is backed by a bitmap and causes the view to be rendered using Android's
+software rendering pipeline, even if hardware acceleration is enabled. Software layers should be
+avoided when the affected view tree updates often. Every update will require to re-render the
+software layer, which can potentially be slow.</p>
+    <p>For more information, see the {@link android.view.View#LAYER_TYPE_HARDWARE} and {@link
+android.view.View#LAYER_TYPE_SOFTWARE} documentation.</p>
+  </li>
+  
+
+  <li><b>Renderscript 3D graphics engine</b>
 
 <p>Renderscript is a runtime 3D framework that provides both an API for building 3D scenes as well
 as a special, platform-independent shader language for maximum performance. Using Renderscript, you
@@ -450,12 +518,11 @@
 
 
 
-
 <h3>Media</h3>
 
 
 <ul>
-  <li><h4>Camcorder profiles</h4>
+  <li><b>Camcorder profiles</b>
 
 <p>New {@link android.media.CamcorderProfile#hasProfile hasProfile()} method and several video
 quality profiles, such as {@link android.media.CamcorderProfile#QUALITY_1080P}, {@link
@@ -463,27 +530,20 @@
 android.media.CamcorderProfile#QUALITY_CIF}, and more, to determine the camcorder quality
 profiles.</p></li>
 
-  <li><h4>Time lapse video mode</h4>
+  <li><b>Time lapse video mode</b>
 
 <p>Camcorder APIs now support the ability to record time lapse video. The {@link
 android.media.MediaRecorder#setCaptureRate setCaptureRate()} sets the rate at which frames
 should be captured.</p></li>
 
-  <li><h4>Digital media file transfer</h4>
-
-<p>The platform includes built-in support for Media/Picture Transfer Protocol (MTP/PTP) over USB,
-which lets users easily transfer any type of media files between devices and to a host computer.
-Developers can take advantage of this to create applications that let users create or manage files
-that they may want to transfer across devices.</p></li>
-
-  <li><h4>Digital Media File Transfer</h4>
+  <li><b>Digital media file transfer</b>
 
 <p>The platform includes built-in support for Media/Picture Transfer Protocol (MTP/PTP) over USB,
 which lets users easily transfer any type of media files between devices and to a host computer.
 Developers can build on this support, creating applications that let users create or manage rich
 media files that they may want to transfer or share across devices. </p></li>
 
-  <li><h4>Digital rights management (DRM)</h4>
+  <li><b>Digital rights management (DRM)</b>
 
 <p>New extensible digital rights management (DRM) framework for checking and enforcing digital
 rights. It's implemented in two architectural layers:</p>
diff --git a/docs/html/sdk/preview/start.jd b/docs/html/sdk/preview/start.jd
index 7e816c1..88b6908 100644
--- a/docs/html/sdk/preview/start.jd
+++ b/docs/html/sdk/preview/start.jd
@@ -3,27 +3,10 @@
 
 <p>Welcome to Android 3.0!</p>
 
-<p>Android 3.0 is the next major release of the Android platform and is optimized for tablet
-devices. We're offering a preview SDK so you can get a head-start developing
-applications for it or simply optimize your existing application for upcoming
-tablets.</p>
+<p>Android 3.0 is the next major release of the Android platform and is optimized for larger screen
+devices, particularly tablets. We're offering a preview SDK so you can get a head-start developing
+applications for it or simply test and optimize your existing application for upcoming devices.</p>
 
-
-<h3>What is the preview SDK?</h3>
-
-<p>The Android 3.0 preview SDK is an early look at the upcoming version of Android 3.0, for
-developers only.</p>
-
-<p>The preview SDK includes:</p>
-<ul>
-  <li>An early Android 3.0 system image for use in the Android emulator</li>
-  <li>An Android 3.0 library with non-final APIs</li>
-  <li>A new WXGA emulator skin for an extra large Android Virtual Device</li>
-  <li>New documentation for Android 3.0, including a complete API reference, new developer guides,
-and an API differences report between Android 3.0 and 2.3.</li>
-</ul>
-
-<div class="note">
 <p><strong>Be aware that:</strong></p>
 <ul>
   <li>The APIs in the preview SDK are <strong>not final</strong>. Some APIs may change in behavior
@@ -36,7 +19,6 @@
 developer guides for Android 3.0, you must install the Android 3.0 preview documentation from
 the AVD and SDK Manager.</li>
 </ul>
-</div>
 
 
 
@@ -46,18 +28,37 @@
   <li><a href="#Setup">Set up the preview SDK</a></li>
   <li>Then choose your app adventure:
     <ol type="a">
-      <li><a href="#Optimize">Optimize Your App for Tablets</a>
+      <li><a href="#Optimize">Optimize Your App for Tablets and Similar Devices</a>
         <p>When you have an existing application and you want to maintain compatibility with
 older versions of Android.</p>
       </li>
-      <li><a href="#Upgrade">Upgrade or Develop a New App for Tablets</a>
+      <li><a href="#Upgrade">Upgrade or Develop a New App for Tablets and Similar Devices</a>
         <p>When you want to upgrade your application to use APIs introduced in Android 3.0 or
-    create an all new application targeted to tablet devices.</p></li>
+    create a new application targeted to tablets and similar devices.</p></li>
     </ol>
   </li>
 </ol>
 
-
+<h3>Android 3.0 samples</h3>
+<p>Many of the new APIs that are described in the <a href="{@docRoot}sdk/android-3.0.html#api">
+Android 3.0 Platform Preview</a> also have accompanying samples that help you understand the feature.
+The samples are located in <code>&lt;sdk_root&gt;/samples/android-Honeycomb</code> and include
+the following:</p>
+<ul>
+  <li><a href="{@docRoot}resources/samples/Honeycomb-Gallery/index.html">Honeycomb Gallery</a> -
+  A demo application highlighting how to use some of the new APIs in Honeycomb, including fragments, the action bar,
+  drag and drop, transition animations, and a stack widget.</li>
+  <li><a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/index.html#Fragment">Fragments</a>
+  <li><a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/ActionBarMechanics.html">Action Bar</a></li>      
+  <li><a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/content/ClipboardSample.html">Clipboard</a></li>
+  <li><a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/DragAndDropDemo.html">Drag and Drop</a></li>
+  <li><a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/List15.html">
+  Multiple-choice selection for ListView and GridView</a></li>
+  <li><a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/LoaderThrottle.html">Content Loaders</a></li>      
+  <li><a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/animation/index.html">Property Animation</a></li>
+  <li><a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/SearchViewActionBar.html">Search View Widget</a></li>
+  <li><a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/PopupMenu1.html">Popup Menu Widget</a></li>  
+</ul>
 
 
 <h2 id="Setup">Set Up the Preview SDK</h2>
@@ -81,16 +82,16 @@
 </ol>
 
 
-<h3>About Emulator Performance</h3>
+<h3>About emulator performance</h3>
 
 <p>Because the Android emulator must simulate the ARM instruction set architecture on your
 computer and the WXGA screen is significantly larger than what the emulator
 normally handles, emulator performance is much slower than usual.</p>
 
 <p>We're working hard to resolve the performance issues and it will improve in future releases.
-Unfortunately, the emulator will perform slowly during your trial with the preview SDK. Please
-continue to use the emulator to evaluate your application's appearance and functionality on Android
-3.0.</p>
+Unfortunately, the emulator will perform slowly during your trial with the preview SDK. For the time
+being, the emulator is still best way to evaluate your application's appearance and functionality on
+Android 3.0.</p>
 
 <p class="note"><strong>Tip:</strong> To improve the startup time for the emulator, enable
 snapshots for the AVD when you create it with the SDK and AVD Manager (there's a checkbox in
@@ -101,19 +102,38 @@
 snapshot</b> only for the first time you launch the AVD.</p>
 
 
+<h3>Known issues</h3> 
 
-<h2 id="Optimize">Optimize Your Application for Tablets</h2>
+<p>The following known issues occur for Android 3.0 AVDs that are loaded in the emulator:</p> 
+  <ul> 
+    <li>You cannot take screenshots of an emulator screen. The Device Screen
+    Capture window displays <strong>Screen not available</strong>.</li> 
+    <li>The emulator cannot receive incoming SMS messages.</li> 
+    <li>GPS emulation is currently not supported.</li>        
+    <li>When rotating the emulator screen by pressing Ctrl-F11, the screen turns green momentarily,
+then displays the normal interface.</li> 
+    <li>In some circumstances, the emulator displays a rotated portrait screen while in landscape
+mode. To view the screen correctly, rotate the emulator to portrait mode by pressing Ctrl-F11 or
+turn off the auto-rotate setting in <strong>Settings > Screen > Auto-rotate screen</strong>.</li> 
+    <li>The Dev Tools application sometimes crashes when trying to use the Package Browser
+feature.</li> 
+    <li>On Ubuntu 10.04 64-bit machines, you cannot create an AVD that has an SD card.</li> 
+  </ul> 
+
+
+
+<h2 id="Optimize">Optimize Your Application for Tablets and Similar Devices</h2>
 
 <p>If you've already developed an application for Android, there are a few things you can do
-to optimize it for a tablet experience, without changing the minimum platform version required (you
-don't need to change the manifest {@code minSdkVersion}).</p>
+to optimize it for a tablet-style experience, without changing the minimum platform version required
+(you don't need to change the manifest {@code minSdkVersion}).</p>
 
 <p class="note"><strong>Note:</strong> All Android applications are forward-compatible, so
 there's nothing you <em>have to</em> do&mdash;if your application is a good citizen of the Android
 APIs, your app should work fine on devices running Android 3.0. However, in order to provide users
-a better experience when running your app on an Android 3.0 tablet, we recommend that you update
-your application to adapt to the new system theme and add optimize your application for larger
-screens.</p>
+a better experience when running your app on an Android 3.0 tablet or similar-size device, we
+recommend that you update your application to adapt to the new system theme and optimize your
+application for larger screens.</p>
 
 <p>Here's what you can do to optimize your application for tablets running Android
 3.0:</p>
@@ -188,10 +208,10 @@
 
 
 
-<h2 id="Upgrade">Upgrade or Develop a New App for Tablets</h2>
+<h2 id="Upgrade">Upgrade or Develop a New App for Tablets and Similar Devices</h2>
 
-<p>If you want to develop something truly for tablets running Android 3.0, then you need to use new
-APIs available in Android 3.0. This section introduces some of the new features that you
+<p>If you want to develop something truly for tablet-type devices running Android 3.0, then you need
+to use new APIs available in Android 3.0. This section introduces some of the new features that you
 should use.</p>
 
 <p>The first thing to do when you create a project with the Android 3.0 preview is set the <a
@@ -226,7 +246,7 @@
 
 
 
-<h3>Publishing your app for tablets only</h3>
+<h3>Publishing your app for tablet-type devices only</h3>
 
 <p>Additionally, you should decide whether your application is for <em>only</em> tablet devices
 (specifically, <em>xlarge</em> devices) or for devices of all sizes that may run Android 3.0.</p>
diff --git a/docs/html/sdk/sdk_toc.cs b/docs/html/sdk/sdk_toc.cs
index 226f880..7cf7b07 100644
--- a/docs/html/sdk/sdk_toc.cs
+++ b/docs/html/sdk/sdk_toc.cs
@@ -78,7 +78,7 @@
     <ul>
       <li class="toggle-list">
       <div><a href="<?cs var:toroot ?>sdk/android-2.3.html">
-      <span class="en">Android 2.3 Platform</span></a> <span class="new">new!</span></div>
+      <span class="en">Android 2.3 Platform</span></a></div>
         <ul>
           <li><a href="<?cs var:toroot ?>sdk/android-2.3-highlights.html">Platform Highlights</a></li> 
           <li><a href="<?cs var:toroot ?>sdk/api_diff/9/changes.html">API Differences Report &raquo;</a></li> 
@@ -98,9 +98,8 @@
       </li>
     </ul>
     <ul>
-      <li><a href="<?cs var:toroot ?>sdk/tools-notes.html">SDK Tools, r8</a> <span class="new">new!</span></li>
-      <li><a href="<?cs var:toroot ?>sdk/win-usb.html">Google USB Driver, r4</a> <span class="new">new!</span>
-      </li>
+      <li><a href="<?cs var:toroot ?>sdk/tools-notes.html">SDK Tools, r9</a> <span class="new">new!</span></li>
+      <li><a href="<?cs var:toroot ?>sdk/win-usb.html">Google USB Driver, r4</a></li>
     </ul>
   </li>
   <li>
@@ -115,7 +114,7 @@
       <span style="display:none" class="zh-TW"></span>
       </h2>
     <ul>
-      <li><a href="<?cs var:toroot ?>sdk/eclipse-adt.html">ADT 8.0.1
+      <li><a href="<?cs var:toroot ?>sdk/eclipse-adt.html">ADT 9.0.0
       <span style="display:none" class="de"></span>
       <span style="display:none" class="es"></span>
       <span style="display:none" class="fr"></span>
@@ -137,7 +136,7 @@
       <span style="display:none" class="zh-TW"></span>
     </h2>
     <ul>
-      <li><a href="<?cs var:toroot ?>sdk/ndk/index.html">Android NDK, r5</a>
+      <li><a href="<?cs var:toroot ?>sdk/ndk/index.html">Android NDK, r5b</a>
         <span class="new">new!</span></li>
       <li><a href="<?cs var:toroot ?>sdk/ndk/overview.html">What is the NDK?</a></li>
     </ul>
diff --git a/docs/html/sdk/tools-notes.jd b/docs/html/sdk/tools-notes.jd
index b832628..212d3c0 100644
--- a/docs/html/sdk/tools-notes.jd
+++ b/docs/html/sdk/tools-notes.jd
@@ -108,6 +108,9 @@
     <li>Fixed the missing JAR file error that prevented <code>draw9patch</code> from running.</li>
     <li>Fixed the Windows launch scripts <code>hierarchyviewer</code> and <code>ddms</code> to support
     the new location of <code>adb</code>.</li>
+    <li>Known issues with emulator performance: Because the Android emulator must simulate the ARM
+instruction set architecture on your computer, emulator performance is  slow. We're working hard to
+resolve the performance issues and it will improve in future releases.</li>
   </ul>
 </dd>
 </dl>
diff --git a/graphics/java/android/graphics/Bitmap.java b/graphics/java/android/graphics/Bitmap.java
index e67ceed..2b4a410 100644
--- a/graphics/java/android/graphics/Bitmap.java
+++ b/graphics/java/android/graphics/Bitmap.java
@@ -165,10 +165,12 @@
     }
 
     /**
-     * Free up the memory associated with this bitmap's pixels, and mark the
-     * bitmap as "dead", meaning it will throw an exception if getPixels() or
-     * setPixels() is called, and will draw nothing. This operation cannot be
-     * reversed, so it should only be called if you are sure there are no
+     * Free the native object associated with this bitmap, and clear the
+     * reference to the pixel data. This will not free the pixel data synchronously;
+     * it simply allows it to be garbage collected if there are no other references.
+     * The bitmap is marked as "dead", meaning it will throw an exception if
+     * getPixels() or setPixels() is called, and will draw nothing. This operation
+     * cannot be reversed, so it should only be called if you are sure there are no
      * further uses for the bitmap. This is an advanced call, and normally need
      * not be called, since the normal GC process will free up this memory when
      * there are no more references to this bitmap.
diff --git a/graphics/java/android/renderscript/Allocation.java b/graphics/java/android/renderscript/Allocation.java
index 74cdf80..3dcfe88 100644
--- a/graphics/java/android/renderscript/Allocation.java
+++ b/graphics/java/android/renderscript/Allocation.java
@@ -212,7 +212,7 @@
         for (int ct=0; ct < d.length; ct++) {
             i[ct] = d[ct].getID();
         }
-        copy1DRangeFrom(0, mType.getCount(), i);
+        copy1DRangeFromUnchecked(0, mType.getCount(), i);
     }
 
     private void validateBitmapFormat(Bitmap b) {
diff --git a/include/media/stagefright/OMXCodec.h b/include/media/stagefright/OMXCodec.h
index f8daa4f..3251c28 100644
--- a/include/media/stagefright/OMXCodec.h
+++ b/include/media/stagefright/OMXCodec.h
@@ -305,6 +305,8 @@
 
     void restorePatchedDataPointer(BufferInfo *info);
 
+    status_t applyRotation();
+
     OMXCodec(const OMXCodec &);
     OMXCodec &operator=(const OMXCodec &);
 };
diff --git a/include/media/stagefright/foundation/ADebug.h b/include/media/stagefright/foundation/ADebug.h
index eb5e494..450dcfe 100644
--- a/include/media/stagefright/foundation/ADebug.h
+++ b/include/media/stagefright/foundation/ADebug.h
@@ -75,7 +75,10 @@
 #define CHECK_GE(x,y)   CHECK_OP(x,y,GE,>=)
 #define CHECK_GT(x,y)   CHECK_OP(x,y,GT,>)
 
-#define TRESPASS()      LOG_ALWAYS_FATAL("Should not be here.")
+#define TRESPASS() \
+        LOG_ALWAYS_FATAL(                                       \
+            __FILE__ ":" LITERAL_TO_STRING(__LINE__)            \
+                " Should not be here.");
 
 }  // namespace android
 
diff --git a/libs/rs/rsScriptC.cpp b/libs/rs/rsScriptC.cpp
index 1fceb66..eecfa16 100644
--- a/libs/rs/rsScriptC.cpp
+++ b/libs/rs/rsScriptC.cpp
@@ -475,7 +475,10 @@
 
     s->mEnviroment.mIsThreadable = true;
 
-    bccRegisterSymbolCallback(s->mBccScript, symbolLookup, s);
+    if (bccRegisterSymbolCallback(s->mBccScript, symbolLookup, s) != 0) {
+        LOGE("bcc: FAILS to register symbol callback");
+        return false;
+    }
 
     if (bccReadBC(s->mBccScript,
                   resName,
diff --git a/media/java/android/media/videoeditor/MediaArtistNativeHelper.java b/media/java/android/media/videoeditor/MediaArtistNativeHelper.java
index c3862e2..122ad4e 100755
--- a/media/java/android/media/videoeditor/MediaArtistNativeHelper.java
+++ b/media/java/android/media/videoeditor/MediaArtistNativeHelper.java
@@ -1814,9 +1814,10 @@
     private void onProgressUpdate(int taskId, int progress) {
         if (mProcessingState == PROCESSING_EXPORT) {
             if (mExportProgressListener != null) {
-                if ((progress % 2) == 0) {
-                    mProgressToApp++;
-                    mExportProgressListener.onProgress(mVideoEditor, mOutputFilename, mProgressToApp);
+                if (mProgressToApp < progress) {
+                    mExportProgressListener.onProgress(mVideoEditor, mOutputFilename, progress);
+                    /* record previous progress */
+                    mProgressToApp = progress;
                 }
             }
         }
diff --git a/media/java/android/media/videoeditor/VideoEditorImpl.java b/media/java/android/media/videoeditor/VideoEditorImpl.java
index 71c2624..885daf2 100755
--- a/media/java/android/media/videoeditor/VideoEditorImpl.java
+++ b/media/java/android/media/videoeditor/VideoEditorImpl.java
@@ -1776,7 +1776,7 @@
              */
             int height = 480;
             int width = 854;
-            switch (getAspectRatio()) {
+            switch (mI.getAspectRatio()) {
                 case MediaProperties.ASPECT_RATIO_3_2:
                     width =  720;
                     break;
diff --git a/media/jni/android_media_MediaMetadataRetriever.cpp b/media/jni/android_media_MediaMetadataRetriever.cpp
index ec88bb2..3d7dbf9 100644
--- a/media/jni/android_media_MediaMetadataRetriever.cpp
+++ b/media/jni/android_media_MediaMetadataRetriever.cpp
@@ -22,9 +22,6 @@
 #include <utils/Log.h>
 #include <utils/threads.h>
 #include <core/SkBitmap.h>
-#include <core/SkCanvas.h>
-#include <core/SkDevice.h>
-#include <core/SkScalar.h>
 #include <media/mediametadataretriever.h>
 #include <private/media/VideoFrame.h>
 
@@ -136,6 +133,61 @@
     process_media_retriever_call(env, retriever->setDataSource(fd, offset, length), "java/lang/RuntimeException", "setDataSource failed");
 }
 
+template<typename T>
+static void rotate0(T* dst, const T* src, size_t width, size_t height)
+{
+    memcpy(dst, src, width * height * sizeof(T));
+}
+
+template<typename T>
+static void rotate90(T* dst, const T* src, size_t width, size_t height)
+{
+    for (size_t i = 0; i < height; ++i) {
+        for (size_t j = 0; j < width; ++j) {
+            dst[j * height + height - 1 - i] = src[i * width + j];
+        }
+    }
+}
+
+template<typename T>
+static void rotate180(T* dst, const T* src, size_t width, size_t height)
+{
+    for (size_t i = 0; i < height; ++i) {
+        for (size_t j = 0; j < width; ++j) {
+            dst[(height - 1 - i) * width + width - 1 - j] = src[i * width + j];
+        }
+    }
+}
+
+template<typename T>
+static void rotate270(T* dst, const T* src, size_t width, size_t height)
+{
+    for (size_t i = 0; i < height; ++i) {
+        for (size_t j = 0; j < width; ++j) {
+            dst[(width - 1 - j) * height + i] = src[i * width + j];
+        }
+    }
+}
+
+template<typename T>
+static void rotate(T *dst, const T *src, size_t width, size_t height, int angle)
+{
+    switch (angle) {
+        case 0:
+            rotate0(dst, src, width, height);
+            break;
+        case 90:
+            rotate90(dst, src, width, height);
+            break;
+        case 180:
+            rotate180(dst, src, width, height);
+            break;
+        case 270:
+            rotate270(dst, src, width, height);
+            break;
+    }
+}
+
 static jobject android_media_MediaMetadataRetriever_getFrameAtTime(JNIEnv *env, jobject thiz, jlong timeUs, jint option)
 {
     LOGV("getFrameAtTime: %lld us option: %d", timeUs, option);
@@ -166,30 +218,33 @@
                         fields.createConfigMethod,
                         SkBitmap::kRGB_565_Config);
 
+    size_t width, height;
+    if (videoFrame->mRotationAngle == 90 || videoFrame->mRotationAngle == 270) {
+        width = videoFrame->mDisplayHeight;
+        height = videoFrame->mDisplayWidth;
+    } else {
+        width = videoFrame->mDisplayWidth;
+        height = videoFrame->mDisplayHeight;
+    }
+
     jobject jBitmap = env->CallStaticObjectMethod(
                             fields.bitmapClazz,
                             fields.createBitmapMethod,
-                            videoFrame->mDisplayWidth,
-                            videoFrame->mDisplayHeight,
+                            width,
+                            height,
                             config);
+
     SkBitmap *bitmap =
             (SkBitmap *) env->GetIntField(jBitmap, fields.nativeBitmap);
 
     bitmap->lockPixels();
-
-    memcpy((uint8_t*)bitmap->getPixels(),
-            (uint8_t*)videoFrame + sizeof(VideoFrame), videoFrame->mSize);
-
+    rotate((uint16_t*)bitmap->getPixels(),
+           (uint16_t*)((char*)videoFrame + sizeof(VideoFrame)),
+           videoFrame->mDisplayWidth,
+           videoFrame->mDisplayHeight,
+           videoFrame->mRotationAngle);
     bitmap->unlockPixels();
 
-    if (videoFrame->mRotationAngle != 0) {
-        SkDevice device(*bitmap);
-        SkCanvas canvas(&device);
-        canvas.rotate((SkScalar) (videoFrame->mRotationAngle * 1.0));
-        canvas.drawBitmap(*bitmap, 0, 0);
-    }
-
-    LOGV("Return a new bitmap constructed with the rotation matrix");
     return jBitmap;
 }
 
@@ -288,22 +343,6 @@
         jniThrowException(env, "java/lang/RuntimeException", "Can't find android/graphics/Bitmap");
         return;
     }
-#if USE_PRIVATE_NATIVE_BITMAP_CONSTUCTOR
-    fields.bitmapConstructor = env->GetMethodID(fields.bitmapClazz, "<init>", "(I[BZ[BI)V");
-    if (fields.bitmapConstructor == NULL) {
-        jniThrowException(env, "java/lang/RuntimeException", "Can't find Bitmap constructor");
-        return;
-    }
-    fields.createBitmapRotationMethod =
-            env->GetStaticMethodID(fields.bitmapClazz, "createBitmap",
-                    "(Landroid/graphics/Bitmap;IIIILandroid/graphics/Matrix;Z)"
-                    "Landroid/graphics/Bitmap;");
-    if (fields.createBitmapRotationMethod == NULL) {
-        jniThrowException(env, "java/lang/RuntimeException",
-                "Can't find Bitmap.createBitmap method");
-        return;
-    }
-#else
     fields.createBitmapMethod =
             env->GetStaticMethodID(fields.bitmapClazz, "createBitmap",
                     "(IILandroid/graphics/Bitmap$Config;)"
@@ -333,7 +372,6 @@
                 "Can't find Bitmap$Config.nativeToConfig(int)  method");
         return;
     }
-#endif
 }
 
 static void android_media_MediaMetadataRetriever_native_setup(JNIEnv *env, jobject thiz)
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp
index 93e5c14..369a3a8 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp
+++ b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp
@@ -40,9 +40,9 @@
       mAnchorTimeRealUs(-1),
       mFlushingAudio(false),
       mFlushingVideo(false),
-      mHasAudio(mAudioSink != NULL),
-      mHasVideo(true),
-      mSyncQueues(mHasAudio && mHasVideo),
+      mHasAudio(false),
+      mHasVideo(false),
+      mSyncQueues(false),
       mPaused(false) {
 }
 
@@ -360,6 +360,12 @@
     int32_t audio;
     CHECK(msg->findInt32("audio", &audio));
 
+    if (audio) {
+        mHasAudio = true;
+    } else {
+        mHasVideo = true;
+    }
+
     if (dropBufferWhileFlushing(audio, msg)) {
         return;
     }
diff --git a/media/libstagefright/AwesomePlayer.cpp b/media/libstagefright/AwesomePlayer.cpp
index 11ac56c..89b3dab 100644
--- a/media/libstagefright/AwesomePlayer.cpp
+++ b/media/libstagefright/AwesomePlayer.cpp
@@ -378,14 +378,11 @@
 }
 
 void AwesomePlayer::reset() {
-    LOGI("reset");
-
     Mutex::Autolock autoLock(mLock);
     reset_l();
 }
 
 void AwesomePlayer::reset_l() {
-    LOGI("reset_l");
     mDisplayWidth = 0;
     mDisplayHeight = 0;
 
@@ -411,10 +408,6 @@
         }
     }
 
-    if (mFlags & PREPARING) {
-        LOGI("waiting until preparation is completes.");
-    }
-
     while (mFlags & PREPARING) {
         mPreparedCondition.wait(mLock);
     }
@@ -438,8 +431,6 @@
     }
     mAudioSource.clear();
 
-    LOGI("audio source cleared");
-
     mTimeSource = NULL;
 
     delete mAudioPlayer;
@@ -480,8 +471,6 @@
         IPCThreadState::self()->flushCommands();
     }
 
-    LOGI("video source cleared");
-
     mDurationUs = -1;
     mFlags = 0;
     mExtractorFlags = 0;
@@ -498,8 +487,6 @@
     mFileSource.clear();
 
     mBitrate = -1;
-
-    LOGI("reset_l completed");
 }
 
 void AwesomePlayer::notifyListener_l(int msg, int ext1, int ext2) {
diff --git a/media/libstagefright/OMXCodec.cpp b/media/libstagefright/OMXCodec.cpp
index d842f65..94694a3 100644
--- a/media/libstagefright/OMXCodec.cpp
+++ b/media/libstagefright/OMXCodec.cpp
@@ -1680,6 +1680,33 @@
     return OK;
 }
 
+status_t OMXCodec::applyRotation() {
+    sp<MetaData> meta = mSource->getFormat();
+
+    int32_t rotationDegrees;
+    if (!meta->findInt32(kKeyRotation, &rotationDegrees)) {
+        rotationDegrees = 0;
+    }
+
+    uint32_t transform;
+    switch (rotationDegrees) {
+        case 0: transform = 0; break;
+        case 90: transform = HAL_TRANSFORM_ROT_90; break;
+        case 180: transform = HAL_TRANSFORM_ROT_180; break;
+        case 270: transform = HAL_TRANSFORM_ROT_270; break;
+        default: transform = 0; break;
+    }
+
+    status_t err = OK;
+
+    if (transform) {
+        err = native_window_set_buffers_transform(
+                mNativeWindow.get(), transform);
+    }
+
+    return err;
+}
+
 status_t OMXCodec::allocateOutputBuffersFromNativeWindow() {
     // Get the number of buffers needed.
     OMX_PARAM_PORTDEFINITIONTYPE def;
@@ -1713,6 +1740,11 @@
         return err;
     }
 
+    err = applyRotation();
+    if (err != OK) {
+        return err;
+    }
+
     // Set up the native window.
     // XXX TODO: Get the gralloc usage flags from the OMX plugin!
     err = native_window_set_usage(
diff --git a/media/libstagefright/httplive/LiveSession.cpp b/media/libstagefright/httplive/LiveSession.cpp
index f20a4cb..c6c36e3 100644
--- a/media/libstagefright/httplive/LiveSession.cpp
+++ b/media/libstagefright/httplive/LiveSession.cpp
@@ -506,8 +506,21 @@
 
         LOGE("This doesn't look like a transport stream...");
 
-        mDataSource->queueEOS(ERROR_UNSUPPORTED);
-        return;
+        mBandwidthItems.removeAt(bandwidthIndex);
+
+        if (mBandwidthItems.isEmpty()) {
+            mDataSource->queueEOS(ERROR_UNSUPPORTED);
+            return;
+        }
+
+        LOGI("Retrying with a different bandwidth stream.");
+
+        mLastPlaylistFetchTimeUs = -1;
+        bandwidthIndex = getBandwidthIndex();
+        mPrevBandwidthIndex = bandwidthIndex;
+        mSeqNumber = -1;
+
+        goto rinse_repeat;
     }
 
     if ((size_t)mPrevBandwidthIndex != bandwidthIndex) {
diff --git a/media/libstagefright/mpeg2ts/ATSParser.cpp b/media/libstagefright/mpeg2ts/ATSParser.cpp
index d8ab080..4335b99 100644
--- a/media/libstagefright/mpeg2ts/ATSParser.cpp
+++ b/media/libstagefright/mpeg2ts/ATSParser.cpp
@@ -75,6 +75,10 @@
 struct ATSParser::Stream : public RefBase {
     Stream(Program *program, unsigned elementaryPID, unsigned streamType);
 
+    unsigned type() const { return mStreamType; }
+    unsigned pid() const { return mElementaryPID; }
+    void setPID(unsigned pid) { mElementaryPID = pid; }
+
     void parse(
             unsigned payload_unit_start_indicator,
             ABitReader *br);
@@ -95,6 +99,7 @@
     sp<ABuffer> mBuffer;
     sp<AnotherPacketSource> mSource;
     bool mPayloadStarted;
+    DiscontinuityType mPendingDiscontinuity;
 
     ElementaryStreamQueue mQueue;
 
@@ -107,6 +112,8 @@
 
     void extractAACFrames(const sp<ABuffer> &buffer);
 
+    void deferDiscontinuity(DiscontinuityType type);
+
     DISALLOW_EVIL_CONSTRUCTORS(Stream);
 };
 
@@ -155,6 +162,11 @@
     }
 }
 
+struct StreamInfo {
+    unsigned mType;
+    unsigned mPID;
+};
+
 void ATSParser::Program::parseProgramMap(ABitReader *br) {
     unsigned table_id = br->getBits(8);
     LOGV("  table_id = %u", table_id);
@@ -188,6 +200,8 @@
 
     br->skipBits(program_info_length * 8);  // skip descriptors
 
+    Vector<StreamInfo> infos;
+
     // infoBytesRemaining is the number of bytes that make up the
     // variable length section of ES_infos. It does not include the
     // final CRC.
@@ -231,24 +245,48 @@
         CHECK_EQ(info_bytes_remaining, 0u);
 #endif
 
-        ssize_t index = mStreams.indexOfKey(elementaryPID);
-#if 0  // XXX revisit
-        CHECK_LT(index, 0);
-        mStreams.add(elementaryPID,
-                     new Stream(this, elementaryPID, streamType));
-#else
-        if (index < 0) {
-            mStreams.add(elementaryPID,
-                         new Stream(this, elementaryPID, streamType));
-        }
-#endif
+        StreamInfo info;
+        info.mType = streamType;
+        info.mPID = elementaryPID;
+        infos.push(info);
 
         infoBytesRemaining -= 5 + ES_info_length;
     }
 
     CHECK_EQ(infoBytesRemaining, 0u);
-
     MY_LOGV("  CRC = 0x%08x", br->getBits(32));
+
+    bool PIDsChanged = false;
+    for (size_t i = 0; i < infos.size(); ++i) {
+        StreamInfo &info = infos.editItemAt(i);
+
+        ssize_t index = mStreams.indexOfKey(info.mPID);
+
+        if (index >= 0 && mStreams.editValueAt(index)->type() != info.mType) {
+            LOGI("uh oh. stream PIDs have changed.");
+            PIDsChanged = true;
+            break;
+        }
+    }
+
+    if (PIDsChanged) {
+        mStreams.clear();
+    }
+
+    for (size_t i = 0; i < infos.size(); ++i) {
+        StreamInfo &info = infos.editItemAt(i);
+
+        ssize_t index = mStreams.indexOfKey(info.mPID);
+
+        if (index < 0) {
+            sp<Stream> stream = new Stream(this, info.mPID, info.mType);
+            mStreams.add(info.mPID, stream);
+
+            if (PIDsChanged) {
+                stream->signalDiscontinuity(DISCONTINUITY_FORMATCHANGE);
+            }
+        }
+    }
 }
 
 sp<MediaSource> ATSParser::Program::getSource(SourceType type) {
@@ -290,6 +328,7 @@
       mStreamType(streamType),
       mBuffer(new ABuffer(192 * 1024)),
       mPayloadStarted(false),
+      mPendingDiscontinuity(DISCONTINUITY_NONE),
       mQueue(streamType == 0x1b
               ? ElementaryStreamQueue::H264 : ElementaryStreamQueue::AAC) {
     mBuffer->setRange(0, 0);
@@ -336,9 +375,13 @@
         {
             mQueue.clear(true);
 
-            if (mStreamType == 0x1b && mSource != NULL) {
+            if (mStreamType == 0x1b) {
                 // Don't signal discontinuities on audio streams.
-                mSource->queueDiscontinuity(type);
+                if (mSource != NULL) {
+                    mSource->queueDiscontinuity(type);
+                } else {
+                    deferDiscontinuity(type);
+                }
             }
             break;
         }
@@ -352,6 +395,8 @@
 
             if (mSource != NULL) {
                 mSource->queueDiscontinuity(type);
+            } else {
+                deferDiscontinuity(type);
             }
             break;
         }
@@ -362,6 +407,13 @@
     }
 }
 
+void ATSParser::Stream::deferDiscontinuity(DiscontinuityType type) {
+    if (type > mPendingDiscontinuity) {
+        // Only upgrade discontinuities.
+        mPendingDiscontinuity = type;
+    }
+}
+
 void ATSParser::Stream::signalEOS(status_t finalResult) {
     if (mSource != NULL) {
         mSource->signalEOS(finalResult);
@@ -558,6 +610,11 @@
                 LOGV("created source!");
                 mSource = new AnotherPacketSource(meta);
 
+                if (mPendingDiscontinuity != DISCONTINUITY_NONE) {
+                    mSource->queueDiscontinuity(mPendingDiscontinuity);
+                    mPendingDiscontinuity = DISCONTINUITY_NONE;
+                }
+
                 mSource->queueAccessUnit(accessUnit);
             }
         } else if (mQueue.getFormat() != NULL) {
diff --git a/media/libstagefright/mpeg2ts/ATSParser.h b/media/libstagefright/mpeg2ts/ATSParser.h
index fe31981..ec3be84 100644
--- a/media/libstagefright/mpeg2ts/ATSParser.h
+++ b/media/libstagefright/mpeg2ts/ATSParser.h
@@ -33,6 +33,7 @@
 
 struct ATSParser : public RefBase {
     enum DiscontinuityType {
+        DISCONTINUITY_NONE,
         DISCONTINUITY_HTTPLIVE,
         DISCONTINUITY_SEEK,
         DISCONTINUITY_FORMATCHANGE
diff --git a/packages/SettingsProvider/res/values/defaults.xml b/packages/SettingsProvider/res/values/defaults.xml
index 5981139..27c8aea 100644
--- a/packages/SettingsProvider/res/values/defaults.xml
+++ b/packages/SettingsProvider/res/values/defaults.xml
@@ -71,6 +71,9 @@
     <string name="def_lock_sound" translatable="false">/system/media/audio/ui/Lock.ogg</string>
     <string name="def_unlock_sound" translatable="false">/system/media/audio/ui/Unlock.ogg</string>
 
+    <!-- Notifications use ringer volume -->
+    <bool name="def_notifications_use_ring_volume">true</bool>
+
     <!-- Default for Settings.System.VIBRATE_IN_SILENT -->
     <bool name="def_vibrate_in_silent">true</bool>
 
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
index bc7473e..580113c 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
@@ -1168,6 +1168,11 @@
 
             loadBooleanSetting(stmt, Settings.System.USE_PTP_INTERFACE,
                     R.bool.def_use_ptp_interface);
+
+            // Set notification volume to follow ringer volume by default
+            loadBooleanSetting(stmt, Settings.System.NOTIFICATIONS_USE_RING_VOLUME,
+                    R.bool.def_notifications_use_ring_volume);
+
         } finally {
             if (stmt != null) stmt.close();
         }
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_ime_default.png b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_ime_default.png
index 056e7e7..eb6eb0c 100644
--- a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_ime_default.png
+++ b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_ime_default.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_ime_pressed.png b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_ime_pressed.png
index e6f2f34..11f66f5 100644
--- a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_ime_pressed.png
+++ b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_ime_pressed.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_ime_default.png b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_ime_default.png
index e1d53bd..f907de7 100644
--- a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_ime_default.png
+++ b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_ime_default.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_ime_pressed.png b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_ime_pressed.png
index 993ea55..36f8853 100644
--- a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_ime_pressed.png
+++ b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_ime_pressed.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_menu_default.png b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_menu_default.png
index 91bc4ee..2490cdf 100644
--- a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_menu_default.png
+++ b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_menu_default.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_menu_pressed.png b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_menu_pressed.png
index aa64de4..1affd8f 100644
--- a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_menu_pressed.png
+++ b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_menu_pressed.png
Binary files differ
diff --git a/preloaded-classes b/preloaded-classes
index 6d5144f..ca2e6ed 100644
--- a/preloaded-classes
+++ b/preloaded-classes
@@ -7,11 +7,33 @@
 android.accounts.Account$1
 android.accounts.AccountManager
 android.accounts.AccountManager$12
+android.accounts.AccountManagerFuture
 android.accounts.IAccountManager
 android.accounts.IAccountManager$Stub
 android.accounts.IAccountManager$Stub$Proxy
+android.accounts.IAccountManagerResponse
+android.accounts.IAccountManagerResponse$Stub
+android.animation.Animator
+android.animation.Animator$AnimatorListener
+android.animation.FloatEvaluator
+android.animation.IntEvaluator
+android.animation.LayoutTransition$TransitionListener
+android.animation.PropertyValuesHolder
+android.animation.TimeInterpolator
+android.animation.TypeEvaluator
+android.animation.ValueAnimator
+android.animation.ValueAnimator$1
+android.animation.ValueAnimator$2
+android.animation.ValueAnimator$3
+android.animation.ValueAnimator$4
+android.animation.ValueAnimator$5
+android.app.ActionBar
+android.app.ActionBar$LayoutParams
 android.app.Activity
+android.app.Activity$NonConfigurationInstances
+android.app.ActivityManager
 android.app.ActivityManagerNative
+android.app.ActivityManagerNative$1
 android.app.ActivityManagerProxy
 android.app.ActivityThread
 android.app.ActivityThread$1
@@ -19,6 +41,7 @@
 android.app.ActivityThread$ActivityClientRecord
 android.app.ActivityThread$AppBindData
 android.app.ActivityThread$ApplicationThread
+android.app.ActivityThread$BindServiceData
 android.app.ActivityThread$ContextCleanupInfo
 android.app.ActivityThread$CreateServiceData
 android.app.ActivityThread$GcIdler
@@ -31,35 +54,66 @@
 android.app.ActivityThread$ServiceArgsData
 android.app.ActivityThread$StopInfo
 android.app.AlertDialog
+android.app.AlertDialog$Builder
 android.app.AppGlobals
 android.app.Application
 android.app.ApplicationErrorReport$CrashInfo
 android.app.ApplicationLoaders
+android.app.ApplicationPackageManager
+android.app.ApplicationPackageManager$ResourceName
 android.app.ApplicationThreadNative
+android.app.BackStackRecord
 android.app.ContextImpl
+android.app.ContextImpl$1
+android.app.ContextImpl$10
+android.app.ContextImpl$11
+android.app.ContextImpl$12
+android.app.ContextImpl$13
+android.app.ContextImpl$14
+android.app.ContextImpl$15
+android.app.ContextImpl$16
+android.app.ContextImpl$17
+android.app.ContextImpl$18
+android.app.ContextImpl$19
+android.app.ContextImpl$2
+android.app.ContextImpl$20
+android.app.ContextImpl$21
+android.app.ContextImpl$22
+android.app.ContextImpl$23
+android.app.ContextImpl$24
+android.app.ContextImpl$25
+android.app.ContextImpl$26
+android.app.ContextImpl$27
+android.app.ContextImpl$28
+android.app.ContextImpl$29
+android.app.ContextImpl$3
+android.app.ContextImpl$4
+android.app.ContextImpl$5
+android.app.ContextImpl$6
+android.app.ContextImpl$7
+android.app.ContextImpl$8
+android.app.ContextImpl$9
 android.app.ContextImpl$ApplicationContentResolver
-android.app.ContextImpl$ApplicationPackageManager
-android.app.ContextImpl$ApplicationPackageManager$ResourceName
-android.app.ContextImpl$SharedPreferencesImpl
-android.app.ContextImpl$SharedPreferencesImpl$1
-android.app.ContextImpl$SharedPreferencesImpl$EditorImpl
-android.app.ContextImpl$SharedPreferencesImpl$EditorImpl$1
-android.app.ContextImpl$SharedPreferencesImpl$EditorImpl$2
-android.app.ContextImpl$SharedPreferencesImpl$MemoryCommitResult
+android.app.ContextImpl$ServiceFetcher
+android.app.ContextImpl$StaticServiceFetcher
 android.app.Dialog
 android.app.Dialog$1
 android.app.Dialog$ListenersHandler
+android.app.Fragment
+android.app.FragmentManager
+android.app.FragmentManager$BackStackEntry
+android.app.FragmentManagerImpl
+android.app.FragmentManagerImpl$1
+android.app.FragmentTransaction
 android.app.IActivityManager
 android.app.IActivityManager$ContentProviderHolder
 android.app.IActivityManager$ContentProviderHolder$1
+android.app.IAlarmManager
+android.app.IAlarmManager$Stub
+android.app.IAlarmManager$Stub$Proxy
 android.app.IApplicationThread
 android.app.IInstrumentationWatcher
 android.app.IInstrumentationWatcher$Stub
-android.app.INotificationManager
-android.app.INotificationManager$Stub
-android.app.INotificationManager$Stub$Proxy
-android.app.ITransientNotification
-android.app.ITransientNotification$Stub
 android.app.Instrumentation
 android.app.IntentReceiverLeaked
 android.app.ListActivity
@@ -67,20 +121,22 @@
 android.app.LoadedApk$ReceiverDispatcher
 android.app.LoadedApk$ReceiverDispatcher$Args
 android.app.LoadedApk$ReceiverDispatcher$InnerReceiver
-android.app.LoadedApk$ServiceDispatcher$ConnectionInfo
-android.app.LoadedApk$ServiceDispatcher$DeathMonitor
-android.app.LoadedApk$ServiceDispatcher$RunConnection
 android.app.LoadedApk$WarningContextClassLoader
 android.app.NativeActivity
-android.app.NotificationManager
 android.app.PendingIntent
 android.app.PendingIntent$1
 android.app.QueuedWork
 android.app.ReceiverRestrictedContext
 android.app.ResultInfo
 android.app.ResultInfo$1
-android.app.SearchDialog
 android.app.Service
+android.app.SharedPreferencesImpl
+android.app.SharedPreferencesImpl$1
+android.app.SharedPreferencesImpl$2
+android.app.SharedPreferencesImpl$EditorImpl
+android.app.SharedPreferencesImpl$EditorImpl$1
+android.app.SharedPreferencesImpl$EditorImpl$2
+android.app.SharedPreferencesImpl$MemoryCommitResult
 android.app.backup.BackupDataInput
 android.app.backup.BackupDataInput$EntityHeader
 android.app.backup.BackupDataOutput
@@ -94,8 +150,8 @@
 android.bluetooth.IBluetooth$Stub
 android.bluetooth.IBluetoothA2dp
 android.bluetooth.IBluetoothA2dp$Stub
-android.bluetooth.ScoSocket
 android.content.BroadcastReceiver
+android.content.BroadcastReceiver$PendingResult
 android.content.ComponentCallbacks
 android.content.ComponentName
 android.content.ComponentName$1
@@ -179,7 +235,6 @@
 android.content.res.Resources$1
 android.content.res.Resources$Theme
 android.content.res.StringBlock
-android.content.res.StringBlock$StyleIDs
 android.content.res.TypedArray
 android.content.res.XmlBlock
 android.content.res.XmlBlock$Parser
@@ -202,8 +257,9 @@
 android.database.CursorWrapper
 android.database.DataSetObservable
 android.database.DataSetObserver
+android.database.DatabaseErrorHandler
 android.database.DatabaseUtils
-android.database.DatabaseUtils$InsertHelper
+android.database.DefaultDatabaseErrorHandler
 android.database.IBulkCursor
 android.database.IContentObserver
 android.database.IContentObserver$Stub
@@ -214,7 +270,8 @@
 android.database.sqlite.SQLiteCursor
 android.database.sqlite.SQLiteCursorDriver
 android.database.sqlite.SQLiteDatabase
-android.database.sqlite.SQLiteDatabase$ActiveDatabases
+android.database.sqlite.SQLiteDatabase$1
+android.database.sqlite.SQLiteDatabase$CustomFunction
 android.database.sqlite.SQLiteDebug
 android.database.sqlite.SQLiteDebug$DbStats
 android.database.sqlite.SQLiteDebug$PagerStats
@@ -237,13 +294,16 @@
 android.graphics.AvoidXfermode
 android.graphics.Bitmap
 android.graphics.Bitmap$1
+android.graphics.Bitmap$BitmapFinalizer
 android.graphics.Bitmap$Config
 android.graphics.BitmapFactory
 android.graphics.BitmapFactory$Options
+android.graphics.BitmapRegionDecoder
 android.graphics.BitmapShader
 android.graphics.BlurMaskFilter
 android.graphics.Camera
 android.graphics.Canvas
+android.graphics.Canvas$CanvasFinalizer
 android.graphics.Canvas$EdgeType
 android.graphics.Color
 android.graphics.ColorFilter
@@ -294,13 +354,14 @@
 android.graphics.RectF$1
 android.graphics.Region
 android.graphics.Region$1
+android.graphics.Region$Op
 android.graphics.RegionIterator
 android.graphics.Shader
 android.graphics.Shader$TileMode
 android.graphics.SumPathEffect
+android.graphics.SurfaceTexture
 android.graphics.SweepGradient
 android.graphics.TableMaskFilter
-android.graphics.TemporaryBuffer
 android.graphics.Typeface
 android.graphics.Xfermode
 android.graphics.YuvImage
@@ -319,6 +380,7 @@
 android.graphics.drawable.Drawable$Callback
 android.graphics.drawable.Drawable$ConstantState
 android.graphics.drawable.DrawableContainer
+android.graphics.drawable.DrawableContainer$1
 android.graphics.drawable.DrawableContainer$DrawableContainerState
 android.graphics.drawable.GradientDrawable
 android.graphics.drawable.GradientDrawable$GradientState
@@ -328,29 +390,24 @@
 android.graphics.drawable.LayerDrawable$LayerState
 android.graphics.drawable.NinePatchDrawable
 android.graphics.drawable.NinePatchDrawable$NinePatchState
-android.graphics.drawable.ShapeDrawable
-android.graphics.drawable.ShapeDrawable$ShapeState
+android.graphics.drawable.RotateDrawable
+android.graphics.drawable.RotateDrawable$RotateState
 android.graphics.drawable.StateListDrawable
 android.graphics.drawable.StateListDrawable$StateListState
 android.graphics.drawable.TransitionDrawable
 android.graphics.drawable.TransitionDrawable$TransitionState
-android.graphics.drawable.shapes.RectShape
-android.graphics.drawable.shapes.RoundRectShape
-android.graphics.drawable.shapes.Shape
-android.graphics.utils.BoundaryPatch
 android.hardware.Camera
 android.hardware.Camera$CameraInfo
 android.hardware.SensorManager
 android.inputmethodservice.ExtractEditText
-android.inputmethodservice.InputMethodService
 android.location.GpsSatellite
 android.location.GpsStatus
 android.location.GpsStatus$1
 android.location.ILocationManager
 android.location.ILocationManager$Stub
 android.location.ILocationManager$Stub$Proxy
+android.location.Location
 android.location.LocationManager
-android.media.AmrInputStream
 android.media.AudioFormat
 android.media.AudioManager
 android.media.AudioManager$1
@@ -361,19 +418,10 @@
 android.media.AudioTrack
 android.media.CamcorderProfile
 android.media.DecoderCapabilities
-android.media.ExifInterface
 android.media.IAudioFocusDispatcher
 android.media.IAudioFocusDispatcher$Stub
-android.media.IAudioService
-android.media.IAudioService$Stub
-android.media.IAudioService$Stub$Proxy
 android.media.JetPlayer
 android.media.MediaPlayer
-android.media.MediaPlayer$OnCompletionListener
-android.media.MediaPlayer$OnErrorListener
-android.media.MediaPlayer$OnPreparedListener
-android.media.MediaScanner
-android.media.SoundPool
 android.media.ToneGenerator
 android.net.ConnectivityManager
 android.net.Credentials
@@ -392,6 +440,9 @@
 android.net.NetworkInfo$DetailedState
 android.net.NetworkInfo$State
 android.net.NetworkUtils
+android.net.Proxy
+android.net.ProxyProperties
+android.net.ProxyProperties$1
 android.net.TrafficStats
 android.net.Uri
 android.net.Uri$1
@@ -399,19 +450,15 @@
 android.net.Uri$AbstractPart
 android.net.Uri$Builder
 android.net.Uri$HierarchicalUri
-android.net.Uri$OpaqueUri
 android.net.Uri$Part
 android.net.Uri$Part$EmptyPart
 android.net.Uri$PathPart
 android.net.Uri$PathSegments
 android.net.Uri$PathSegmentsBuilder
 android.net.Uri$StringUri
-android.net.WebAddress
-android.net.http.AndroidHttpClient
-android.net.http.AndroidHttpClient$1
-android.net.http.EventHandler
-android.net.http.HttpsConnection
 android.net.wifi.WifiNative
+android.nfc.NdefMessage
+android.nfc.NdefRecord
 android.opengl.ETC1
 android.opengl.GLES10
 android.opengl.GLES10Ext
@@ -422,7 +469,14 @@
 android.opengl.Matrix
 android.opengl.Visibility
 android.os.AsyncTask$1
+android.os.AsyncTask$2
+android.os.AsyncTask$3
 android.os.AsyncTask$AsyncTaskResult
+android.os.AsyncTask$InternalHandler
+android.os.AsyncTask$SerialExecutor
+android.os.AsyncTask$SerialExecutor$1
+android.os.AsyncTask$Status
+android.os.AsyncTask$WorkerRunnable
 android.os.Binder
 android.os.BinderProxy
 android.os.Build
@@ -471,12 +525,26 @@
 android.os.StrictMode
 android.os.StrictMode$1
 android.os.StrictMode$2
+android.os.StrictMode$3
+android.os.StrictMode$4
+android.os.StrictMode$5
+android.os.StrictMode$6
+android.os.StrictMode$7
+android.os.StrictMode$8
 android.os.StrictMode$AndroidBlockGuardPolicy
 android.os.StrictMode$AndroidBlockGuardPolicy$1
+android.os.StrictMode$AndroidCloseGuardReporter
+android.os.StrictMode$InstanceCountViolation
 android.os.StrictMode$LogStackTrace
+android.os.StrictMode$Span
 android.os.StrictMode$StrictModeDiskReadViolation
 android.os.StrictMode$StrictModeDiskWriteViolation
+android.os.StrictMode$StrictModeViolation
+android.os.StrictMode$ThreadPolicy
+android.os.StrictMode$ThreadSpanState
 android.os.StrictMode$ViolationInfo
+android.os.StrictMode$VmPolicy
+android.os.StrictMode$VmPolicy$Builder
 android.os.SystemClock
 android.os.SystemProperties
 android.os.UEventObserver
@@ -494,7 +562,6 @@
 android.server.BluetoothA2dpService
 android.server.BluetoothEventLoop
 android.server.BluetoothService
-android.telephony.PhoneNumberUtils
 android.telephony.TelephonyManager
 android.text.AndroidBidi
 android.text.AndroidCharacter
@@ -513,6 +580,7 @@
 android.text.Layout
 android.text.Layout$Alignment
 android.text.Layout$Directions
+android.text.MeasuredText
 android.text.NoCopySpan
 android.text.NoCopySpan$Concrete
 android.text.PackedIntVector
@@ -530,7 +598,7 @@
 android.text.Spanned
 android.text.SpannedString
 android.text.StaticLayout
-android.text.Styled
+android.text.TextLine
 android.text.TextPaint
 android.text.TextUtils
 android.text.TextUtils$1
@@ -540,32 +608,32 @@
 android.text.format.Time
 android.text.method.ArrowKeyMovementMethod
 android.text.method.BaseKeyListener
+android.text.method.BaseMovementMethod
 android.text.method.KeyListener
 android.text.method.MetaKeyKeyListener
 android.text.method.MovementMethod
-android.text.method.QwertyKeyListener
 android.text.method.ReplacementTransformationMethod
+android.text.method.ReplacementTransformationMethod$ReplacementCharSequence
+android.text.method.ReplacementTransformationMethod$SpannedReplacementCharSequence
 android.text.method.SingleLineTransformationMethod
 android.text.method.TextKeyListener
 android.text.method.TextKeyListener$Capitalize
 android.text.method.TransformationMethod
 android.text.style.AlignmentSpan
 android.text.style.CharacterStyle
-android.text.style.ClickableSpan
 android.text.style.LeadingMarginSpan
 android.text.style.LineBackgroundSpan
 android.text.style.LineHeightSpan
 android.text.style.MetricAffectingSpan
 android.text.style.ParagraphStyle
 android.text.style.ReplacementSpan
-android.text.style.StyleSpan
-android.text.style.URLSpan
 android.text.style.UpdateAppearance
 android.text.style.UpdateLayout
 android.text.style.WrapTogetherSpan
 android.util.AndroidException
 android.util.AndroidRuntimeException
 android.util.AttributeSet
+android.util.DebugUtils
 android.util.DisplayMetrics
 android.util.EventLog
 android.util.EventLog$Event
@@ -581,7 +649,9 @@
 android.util.Poolable
 android.util.PoolableManager
 android.util.Pools
+android.util.Singleton
 android.util.SparseArray
+android.util.SparseBooleanArray
 android.util.SparseIntArray
 android.util.StateSet
 android.util.SynchronizedPool
@@ -590,13 +660,26 @@
 android.view.AbsSavedState
 android.view.AbsSavedState$1
 android.view.AbsSavedState$2
+android.view.ActionMode
+android.view.ActionMode$Callback
 android.view.ContextMenu
 android.view.ContextMenu$ContextMenuInfo
 android.view.ContextThemeWrapper
 android.view.Display
+android.view.FallbackEventHandler
 android.view.FocusFinder
 android.view.FocusFinder$1
+android.view.FocusFinder$SequentialFocusComparator
+android.view.GLES20Canvas
+android.view.GLES20Canvas$CanvasFinalizer
 android.view.Gravity
+android.view.HardwareCanvas
+android.view.HardwareRenderer
+android.view.HardwareRenderer$Gl20Renderer
+android.view.HardwareRenderer$GlRenderer
+android.view.HardwareRenderer$GlRenderer$ComponentSizeChooser
+android.view.HardwareRenderer$GlRenderer$EglConfigChooser
+android.view.HardwareRenderer$HardwareDrawCallbacks
 android.view.IWindow
 android.view.IWindow$Stub
 android.view.IWindowManager
@@ -614,15 +697,17 @@
 android.view.InputQueue$Callback
 android.view.InputQueue$FinishedCallback
 android.view.KeyCharacterMap
-android.view.KeyCharacterMap$KeyData
+android.view.KeyCharacterMap$FallbackAction
 android.view.KeyEvent
 android.view.KeyEvent$1
 android.view.KeyEvent$Callback
 android.view.KeyEvent$DispatcherState
 android.view.LayoutInflater
 android.view.LayoutInflater$Factory
-android.view.LayoutInflater$Filter
+android.view.LayoutInflater$Factory2
 android.view.Menu
+android.view.MenuInflater
+android.view.MenuInflater$MenuState
 android.view.MenuItem
 android.view.MotionEvent
 android.view.MotionEvent$1
@@ -633,6 +718,10 @@
 android.view.SurfaceHolder$Callback
 android.view.SurfaceHolder$Callback2
 android.view.SurfaceSession
+android.view.SurfaceView
+android.view.SurfaceView$1
+android.view.SurfaceView$2
+android.view.SurfaceView$3
 android.view.VelocityTracker
 android.view.VelocityTracker$1
 android.view.VelocityTracker$Pointer
@@ -645,6 +734,8 @@
 android.view.View$MeasureSpec
 android.view.View$OnClickListener
 android.view.View$OnCreateContextMenuListener
+android.view.View$OnFocusChangeListener
+android.view.View$OnKeyListener
 android.view.View$OnLongClickListener
 android.view.View$OnTouchListener
 android.view.View$PerformClick
@@ -653,9 +744,10 @@
 android.view.ViewConfiguration
 android.view.ViewDebug
 android.view.ViewGroup
+android.view.ViewGroup$3
 android.view.ViewGroup$LayoutParams
 android.view.ViewGroup$MarginLayoutParams
-android.view.ViewGroup$OnHierarchyChangeListener
+android.view.ViewGroup$TouchTarget
 android.view.ViewManager
 android.view.ViewParent
 android.view.ViewRoot
@@ -664,11 +756,12 @@
 android.view.ViewRoot$InputMethodCallback
 android.view.ViewRoot$ResizedInfo
 android.view.ViewRoot$RunQueue
+android.view.ViewRoot$RunQueue$HandlerAction
 android.view.ViewRoot$TrackballAxis
 android.view.ViewRoot$W
+android.view.ViewStub
 android.view.ViewTreeObserver
 android.view.ViewTreeObserver$InternalInsetsInfo
-android.view.ViewTreeObserver$OnGlobalFocusChangeListener
 android.view.ViewTreeObserver$OnGlobalLayoutListener
 android.view.ViewTreeObserver$OnPreDrawListener
 android.view.ViewTreeObserver$OnScrollChangedListener
@@ -704,38 +797,36 @@
 android.view.inputmethod.EditorInfo
 android.view.inputmethod.EditorInfo$1
 android.view.inputmethod.ExtractedText
-android.view.inputmethod.ExtractedText$1
 android.view.inputmethod.ExtractedTextRequest
+android.view.inputmethod.ExtractedTextRequest$1
 android.view.inputmethod.InputConnection
 android.view.inputmethod.InputMethodManager
 android.view.inputmethod.InputMethodManager$1
 android.view.inputmethod.InputMethodManager$ControlledInputConnectionWrapper
 android.view.inputmethod.InputMethodManager$H
-android.webkit.BrowserFrame
-android.webkit.GeolocationPermissions
-android.webkit.HTML5VideoViewProxy
-android.webkit.JWebCoreJavaBridge
 android.webkit.LoadListener
-android.webkit.MockGeolocation
 android.webkit.PluginManager
-android.webkit.WebBackForwardList
-android.webkit.WebHistoryItem
-android.webkit.WebIconDatabase
-android.webkit.WebSettings
-android.webkit.WebSettings$TextSize
-android.webkit.WebStorage
 android.webkit.WebView
+android.webkit.WebView$HitTestResult
 android.webkit.WebViewCore
+android.webkit.WebViewCore$TouchUpData
 android.widget.AbsListView
 android.widget.AbsListView$2
+android.widget.AbsListView$AdapterDataSetObserver
 android.widget.AbsListView$LayoutParams
+android.widget.AbsListView$OnScrollListener
 android.widget.AbsListView$RecycleBin
+android.widget.AbsListView$SavedState
+android.widget.AbsListView$SavedState$1
 android.widget.AbsSpinner
-android.widget.AbsoluteLayout
+android.widget.AbsSpinner$RecycleBin
 android.widget.Adapter
 android.widget.AdapterView
 android.widget.AdapterView$AdapterDataSetObserver
 android.widget.AdapterView$OnItemClickListener
+android.widget.AdapterView$OnItemSelectedListener
+android.widget.AdapterViewAnimator
+android.widget.ArrayAdapter
 android.widget.AutoCompleteTextView
 android.widget.BaseAdapter
 android.widget.Button
@@ -744,13 +835,14 @@
 android.widget.CompoundButton
 android.widget.EdgeGlow
 android.widget.EditText
+android.widget.ExpandableListView
+android.widget.Filter
 android.widget.Filter$FilterListener
 android.widget.Filterable
 android.widget.FrameLayout
 android.widget.FrameLayout$LayoutParams
 android.widget.Gallery
 android.widget.GridView
-android.widget.HorizontalScrollView
 android.widget.ImageButton
 android.widget.ImageView
 android.widget.ImageView$ScaleType
@@ -758,11 +850,14 @@
 android.widget.LinearLayout$LayoutParams
 android.widget.ListAdapter
 android.widget.ListPopupWindow
+android.widget.ListPopupWindow$ListSelectorHider
+android.widget.ListPopupWindow$PopupScrollListener
+android.widget.ListPopupWindow$PopupTouchInterceptor
+android.widget.ListPopupWindow$ResizePopupRunnable
 android.widget.ListView
 android.widget.ListView$ArrowScrollFocusResult
-android.widget.NumberPicker
 android.widget.OverScroller
-android.widget.OverScroller$MagneticOverScroller
+android.widget.OverScroller$SplineOverScroller
 android.widget.PopupWindow
 android.widget.PopupWindow$1
 android.widget.ProgressBar
@@ -771,41 +866,33 @@
 android.widget.RelativeLayout$DependencyGraph$Node
 android.widget.RelativeLayout$DependencyGraph$Node$1
 android.widget.RelativeLayout$LayoutParams
-android.widget.RemoteViews
-android.widget.RemoteViews$1
-android.widget.RemoteViews$Action
-android.widget.RemoteViews$ReflectionAction
+android.widget.RemoteViewsAdapter$RemoteAdapterConnectionCallback
 android.widget.ScrollBarDrawable
 android.widget.ScrollView
+android.widget.Scroller
 android.widget.SpinnerAdapter
-android.widget.TabHost
+android.widget.Switch
 android.widget.TabWidget
 android.widget.TableLayout
 android.widget.TableRow
 android.widget.TextView
 android.widget.TextView$3
-android.widget.TextView$Blink
 android.widget.TextView$BufferType
 android.widget.TextView$ChangeWatcher
 android.widget.TextView$CharWrapper
-android.widget.TextView$CursorController
 android.widget.TextView$Drawables
-android.widget.TextView$HandleView
-android.widget.TextView$InsertionPointCursorController
-android.widget.TextView$InsertionPointCursorController$1
-android.widget.TextView$SelectionModifierCursorController
-android.widget.TextView$SelectionModifierCursorController$1
-android.widget.Toast
-android.widget.Toast$TN
-android.widget.Toast$TN$1
-android.widget.Toast$TN$2
-android.widget.ViewAnimator
-android.widget.ZoomButton
-android.widget.ZoomControls
+android.widget.TextView$InputContentType
+android.widget.TextView$OnEditorActionListener
+android.widget.TextView$SavedState
+android.widget.TextView$SavedState$1
 com.android.internal.R$styleable
+com.android.internal.app.ActionBarImpl
+com.android.internal.app.ActionBarImpl$1
+com.android.internal.app.ActionBarImpl$2
+com.android.internal.app.ActionBarImpl$3
+com.android.internal.app.ActionBarImpl$4
 com.android.internal.app.AlertController
 com.android.internal.app.AlertController$1
-com.android.internal.app.AlertController$AlertParams
 com.android.internal.app.AlertController$ButtonHandler
 com.android.internal.appwidget.IAppWidgetService
 com.android.internal.appwidget.IAppWidgetService$Stub
@@ -828,11 +915,13 @@
 com.android.internal.os.ZygoteInit$MethodAndArgsCaller
 com.android.internal.policy.IPolicy
 com.android.internal.policy.PolicyManager
+com.android.internal.policy.impl.PhoneFallbackEventHandler
 com.android.internal.policy.impl.PhoneLayoutInflater
 com.android.internal.policy.impl.PhoneWindow
 com.android.internal.policy.impl.PhoneWindow$1
-com.android.internal.policy.impl.PhoneWindow$ContextMenuCallback
+com.android.internal.policy.impl.PhoneWindow$2
 com.android.internal.policy.impl.PhoneWindow$DecorView
+com.android.internal.policy.impl.PhoneWindow$DialogMenuCallback
 com.android.internal.policy.impl.PhoneWindow$PanelFeatureState
 com.android.internal.policy.impl.PhoneWindow$PanelFeatureState$SavedState
 com.android.internal.policy.impl.PhoneWindow$PanelFeatureState$SavedState$1
@@ -844,10 +933,13 @@
 com.android.internal.util.ArrayUtils
 com.android.internal.util.FastXmlSerializer
 com.android.internal.util.XmlUtils
+com.android.internal.view.BaseIWindow
 com.android.internal.view.IInputConnectionWrapper
 com.android.internal.view.IInputConnectionWrapper$MyHandler
 com.android.internal.view.IInputContext
 com.android.internal.view.IInputContext$Stub
+com.android.internal.view.IInputContextCallback
+com.android.internal.view.IInputContextCallback$Stub
 com.android.internal.view.IInputMethodCallback
 com.android.internal.view.IInputMethodCallback$Stub
 com.android.internal.view.IInputMethodClient
@@ -861,32 +953,32 @@
 com.android.internal.view.InputBindResult
 com.android.internal.view.InputBindResult$1
 com.android.internal.view.RootViewSurfaceTaker
-com.android.internal.view.menu.ContextMenuBuilder
-com.android.internal.view.menu.IconMenuItemView
-com.android.internal.view.menu.IconMenuView
+com.android.internal.view.menu.ActionMenuItem
+com.android.internal.view.menu.ActionMenuView
+com.android.internal.view.menu.ActionMenuView$1
+com.android.internal.view.menu.ActionMenuView$OverflowMenuButton
 com.android.internal.view.menu.MenuBuilder
 com.android.internal.view.menu.MenuBuilder$Callback
+com.android.internal.view.menu.MenuBuilder$ItemInvoker
+com.android.internal.view.menu.MenuBuilder$MenuType
 com.android.internal.view.menu.MenuItemImpl
-com.android.internal.view.menu.SubMenuBuilder
-com.android.internal.widget.ContactHeaderWidget
+com.android.internal.view.menu.MenuView
+com.android.internal.widget.ActionBarContainer
+com.android.internal.widget.ActionBarContextView
+com.android.internal.widget.ActionBarView
+com.android.internal.widget.ActionBarView$1
+com.android.internal.widget.ActionBarView$2
 com.android.internal.widget.DialogTitle
-com.android.internal.widget.WeightedLinearLayout
 com.android.server.Watchdog
 com.google.android.collect.Lists
 com.google.android.collect.Maps
+com.google.android.gles_jni.EGLConfigImpl
+com.google.android.gles_jni.EGLContextImpl
+com.google.android.gles_jni.EGLDisplayImpl
 com.google.android.gles_jni.EGLImpl
+com.google.android.gles_jni.EGLSurfaceImpl
 com.google.android.gles_jni.GLImpl
-com.ibm.icu4jni.charset.CharsetDecoderICU
-com.ibm.icu4jni.charset.CharsetEncoderICU
-com.ibm.icu4jni.charset.CharsetICU
-com.ibm.icu4jni.charset.NativeConverter
-com.ibm.icu4jni.common.ErrorCode
-com.ibm.icu4jni.text.NativeBreakIterator
-com.ibm.icu4jni.text.NativeCollation
-com.ibm.icu4jni.text.NativeDecimalFormat
-com.ibm.icu4jni.text.NativeDecimalFormat$FieldPositionIterator
-com.ibm.icu4jni.util.ICU
-com.ibm.icu4jni.util.LocaleData
+com.google.i18n.phonenumbers.PhoneNumberUtil
 dalvik.system.BlockGuard
 dalvik.system.BlockGuard$1
 dalvik.system.BlockGuard$2
@@ -894,6 +986,9 @@
 dalvik.system.BlockGuard$Policy
 dalvik.system.BlockGuard$WrappedFileSystem
 dalvik.system.BlockGuard$WrappedNetworkSystem
+dalvik.system.CloseGuard
+dalvik.system.CloseGuard$DefaultReporter
+dalvik.system.CloseGuard$Reporter
 dalvik.system.DalvikLogHandler
 dalvik.system.DalvikLogging
 dalvik.system.DexFile
@@ -905,7 +1000,6 @@
 dalvik.system.VMStack
 dalvik.system.Zygote
 java.beans.PropertyChangeEvent
-java.beans.PropertyChangeListener
 java.beans.PropertyChangeSupport
 java.io.BufferedInputStream
 java.io.BufferedReader
@@ -929,12 +1023,7 @@
 java.io.InputStream
 java.io.InputStreamReader
 java.io.InterruptedIOException
-java.io.ObjectInput
-java.io.ObjectInputStream
-java.io.ObjectOutput
-java.io.ObjectOutputStream
 java.io.ObjectStreamClass
-java.io.ObjectStreamConstants
 java.io.ObjectStreamField
 java.io.OutputStream
 java.io.OutputStreamWriter
@@ -955,10 +1044,10 @@
 java.lang.CaseMapper
 java.lang.CharSequence
 java.lang.Character
-java.lang.Character$UnicodeBlock
 java.lang.Class
 java.lang.ClassCache
 java.lang.ClassCache$EnumComparator
+java.lang.ClassCastException
 java.lang.ClassLoader
 java.lang.ClassLoader$SystemClassLoader
 java.lang.ClassNotFoundException
@@ -968,6 +1057,7 @@
 java.lang.Enum
 java.lang.Error
 java.lang.Exception
+java.lang.ExceptionInInitializerError
 java.lang.Float
 java.lang.IllegalArgumentException
 java.lang.IllegalStateException
@@ -984,7 +1074,6 @@
 java.lang.Math
 java.lang.NoClassDefFoundError
 java.lang.NoSuchMethodException
-java.lang.NullPointerException
 java.lang.Number
 java.lang.NumberFormatException
 java.lang.Object
@@ -1011,8 +1100,6 @@
 java.lang.Thread$State
 java.lang.Thread$UncaughtExceptionHandler
 java.lang.ThreadGroup
-java.lang.ThreadGroup$ChildrenGroupsLock
-java.lang.ThreadGroup$ChildrenThreadsLock
 java.lang.ThreadLocal
 java.lang.ThreadLocal$Values
 java.lang.Throwable
@@ -1065,9 +1152,12 @@
 java.net.NetPermission
 java.net.NetworkInterface
 java.net.Proxy
+java.net.Proxy$Type
+java.net.ProxySelector
+java.net.ProxySelectorImpl
 java.net.Socket
-java.net.Socket$ConnectLock
 java.net.SocketAddress
+java.net.SocketException
 java.net.SocketImpl
 java.net.SocketImplFactory
 java.net.SocketOptions
@@ -1077,27 +1167,25 @@
 java.net.URL
 java.net.URLConnection
 java.net.URLConnection$DefaultContentHandler
+java.net.URLEncoder
 java.net.URLStreamHandler
-java.net.UnknownHostException
 java.nio.BaseByteBuffer
 java.nio.Buffer
-java.nio.BufferFactory
 java.nio.ByteBuffer
 java.nio.ByteOrder
 java.nio.CharArrayBuffer
 java.nio.CharBuffer
 java.nio.CharSequenceAdapter
 java.nio.DirectByteBuffer
-java.nio.DirectByteBuffer$SafeAddress
+java.nio.FileChannelImpl
+java.nio.FileChannelImpl$1
 java.nio.HeapByteBuffer
-java.nio.MappedByteBuffer
-java.nio.MappedByteBufferAdapter
 java.nio.NIOAccess
-java.nio.ReadOnlyDirectByteBuffer
+java.nio.NioUtils
 java.nio.ReadWriteCharArrayBuffer
 java.nio.ReadWriteDirectByteBuffer
 java.nio.ReadWriteHeapByteBuffer
-java.nio.ShortToByteBufferAdapter
+java.nio.WriteOnlyFileChannel
 java.nio.channels.ByteChannel
 java.nio.channels.Channel
 java.nio.channels.FileChannel
@@ -1121,6 +1209,7 @@
 java.security.AccessController
 java.security.BasicPermission
 java.security.Guard
+java.security.Key
 java.security.KeyStore
 java.security.KeyStore$1
 java.security.KeyStoreSpi
@@ -1147,6 +1236,7 @@
 java.security.cert.TrustAnchor
 java.security.cert.X509Certificate
 java.security.cert.X509Extension
+java.security.spec.KeySpec
 java.text.DateFormat
 java.text.DateFormatSymbols
 java.text.DecimalFormat
@@ -1164,6 +1254,7 @@
 java.util.AbstractQueue
 java.util.AbstractSequentialList
 java.util.AbstractSet
+java.util.ArrayDeque
 java.util.ArrayList
 java.util.ArrayList$ArrayListIterator
 java.util.Arrays
@@ -1175,6 +1266,7 @@
 java.util.Collections$EmptyList
 java.util.Collections$EmptyMap
 java.util.Collections$EmptySet
+java.util.Collections$SingletonList
 java.util.Collections$UnmodifiableCollection
 java.util.Collections$UnmodifiableCollection$1
 java.util.Collections$UnmodifiableList
@@ -1190,7 +1282,6 @@
 java.util.EnumMap
 java.util.EnumSet
 java.util.Enumeration
-java.util.EventListener
 java.util.EventObject
 java.util.Formattable
 java.util.Formatter
@@ -1253,8 +1344,6 @@
 java.util.TreeMap$Bound$3
 java.util.TreeMap$EntrySet
 java.util.TreeMap$EntrySet$1
-java.util.TreeMap$KeySet
-java.util.TreeMap$KeySet$1
 java.util.TreeMap$MapIterator
 java.util.TreeMap$Node
 java.util.TreeMap$Relation
@@ -1263,14 +1352,13 @@
 java.util.Vector$1
 java.util.WeakHashMap
 java.util.WeakHashMap$Entry
-java.util.WeakHashMap$Entry$Type
-java.util.WeakHashMap$HashIterator
 java.util.concurrent.AbstractExecutorService
 java.util.concurrent.BlockingQueue
 java.util.concurrent.Callable
 java.util.concurrent.ConcurrentLinkedQueue
 java.util.concurrent.ConcurrentLinkedQueue$Node
 java.util.concurrent.CopyOnWriteArrayList
+java.util.concurrent.CopyOnWriteArrayList$CowIterator
 java.util.concurrent.CountDownLatch
 java.util.concurrent.CountDownLatch$Sync
 java.util.concurrent.Executor
@@ -1298,7 +1386,9 @@
 java.util.concurrent.TimeUnit$5
 java.util.concurrent.TimeUnit$6
 java.util.concurrent.TimeUnit$7
+java.util.concurrent.atomic.AtomicBoolean
 java.util.concurrent.atomic.AtomicInteger
+java.util.concurrent.atomic.AtomicReference
 java.util.concurrent.atomic.UnsafeAccess
 java.util.concurrent.locks.AbstractOwnableSynchronizer
 java.util.concurrent.locks.AbstractQueuedSynchronizer
@@ -1307,10 +1397,16 @@
 java.util.concurrent.locks.Condition
 java.util.concurrent.locks.Lock
 java.util.concurrent.locks.LockSupport
+java.util.concurrent.locks.ReadWriteLock
 java.util.concurrent.locks.ReentrantLock
 java.util.concurrent.locks.ReentrantLock$FairSync
 java.util.concurrent.locks.ReentrantLock$NonfairSync
 java.util.concurrent.locks.ReentrantLock$Sync
+java.util.concurrent.locks.ReentrantReadWriteLock
+java.util.concurrent.locks.ReentrantReadWriteLock$ReadLock
+java.util.concurrent.locks.ReentrantReadWriteLock$Sync
+java.util.concurrent.locks.ReentrantReadWriteLock$Sync$ThreadLocalHoldCounter
+java.util.concurrent.locks.ReentrantReadWriteLock$WriteLock
 java.util.concurrent.locks.UnsafeAccess
 java.util.jar.Attributes
 java.util.jar.Attributes$Name
@@ -1344,18 +1440,20 @@
 java.util.zip.CRC32
 java.util.zip.Checksum
 java.util.zip.Deflater
-java.util.zip.GZIPInputStream
 java.util.zip.Inflater
 java.util.zip.InflaterInputStream
 java.util.zip.ZipConstants
 java.util.zip.ZipEntry
-java.util.zip.ZipEntry$LittleEndianReader
 java.util.zip.ZipFile
 java.util.zip.ZipFile$2
 java.util.zip.ZipFile$RAFStream
 java.util.zip.ZipFile$ZipInflaterInputStream
 javax.microedition.khronos.egl.EGL
 javax.microedition.khronos.egl.EGL10
+javax.microedition.khronos.egl.EGLConfig
+javax.microedition.khronos.egl.EGLContext
+javax.microedition.khronos.egl.EGLDisplay
+javax.microedition.khronos.egl.EGLSurface
 javax.microedition.khronos.opengles.GL
 javax.microedition.khronos.opengles.GL10
 javax.microedition.khronos.opengles.GL10Ext
@@ -1383,13 +1481,36 @@
 javax.net.ssl.X509KeyManager
 javax.net.ssl.X509TrustManager
 javax.security.auth.x500.X500Principal
+libcore.base.CollectionUtils
+libcore.base.CollectionUtils$1
+libcore.base.CollectionUtils$1$1
+libcore.base.EmptyArray
 libcore.base.Objects
+libcore.base.Streams
+libcore.icu.CharsetDecoderICU
+libcore.icu.CharsetEncoderICU
+libcore.icu.CharsetICU
+libcore.icu.ErrorCode
+libcore.icu.ICU
+libcore.icu.LocaleData
+libcore.icu.NativeBreakIterator
+libcore.icu.NativeCollation
+libcore.icu.NativeConverter
+libcore.icu.NativeDecimalFormat
+libcore.icu.NativeDecimalFormat$FieldPositionIterator
 libcore.icu.NativeIDN
 libcore.icu.NativeNormalizer
 libcore.icu.NativePluralRules
 libcore.icu.TimeZones
 libcore.icu.TimeZones$CachedTimeZones
+libcore.io.BufferIterator
+libcore.io.HeapBufferIterator
 libcore.io.IoUtils
+libcore.io.MemoryMappedFile
+libcore.io.NioBufferIterator
+libcore.math.MathUtils
+libcore.net.MimeUtils
+libcore.net.RawSocket
 org.apache.commons.logging.Log
 org.apache.commons.logging.LogFactory
 org.apache.commons.logging.impl.Jdk14Logger
@@ -1416,19 +1537,12 @@
 org.apache.harmony.luni.net.SocketOutputStream
 org.apache.harmony.luni.platform.IFileSystem
 org.apache.harmony.luni.platform.INetworkSystem
-org.apache.harmony.luni.platform.MappedPlatformAddress
 org.apache.harmony.luni.platform.OSFileSystem
 org.apache.harmony.luni.platform.OSMemory
 org.apache.harmony.luni.platform.OSNetworkSystem
 org.apache.harmony.luni.platform.Platform
-org.apache.harmony.luni.platform.PlatformAddress
-org.apache.harmony.luni.platform.PlatformAddressFactory
-org.apache.harmony.luni.platform.RuntimeMemorySpy
-org.apache.harmony.luni.platform.RuntimeMemorySpy$AddressWrapper
 org.apache.harmony.luni.util.FloatingPointParser
-org.apache.harmony.luni.util.InputStreamHelper
-org.apache.harmony.luni.util.InputStreamHelper$1
-org.apache.harmony.luni.util.InputStreamHelper$ExposedByteArrayInputStream
+org.apache.harmony.luni.util.FloatingPointParser$StringExponentPair
 org.apache.harmony.luni.util.PriviAction
 org.apache.harmony.luni.util.TwoKeyHashMap
 org.apache.harmony.luni.util.TwoKeyHashMap$Entry
@@ -1436,15 +1550,6 @@
 org.apache.harmony.luni.util.TwoKeyHashMap$ValueIteratorImpl
 org.apache.harmony.luni.util.TwoKeyHashMap$ValuesCollectionImpl
 org.apache.harmony.luni.util.Util
-org.apache.harmony.nio.FileChannelFactory
-org.apache.harmony.nio.internal.DirectBuffer
-org.apache.harmony.nio.internal.FileChannelImpl
-org.apache.harmony.nio.internal.FileLockImpl
-org.apache.harmony.nio.internal.FileChannelImpl$RepositioningLock
-org.apache.harmony.nio.internal.LockManager
-org.apache.harmony.nio.internal.LockManager$1
-org.apache.harmony.nio.internal.ReadOnlyFileChannel
-org.apache.harmony.nio.internal.WriteOnlyFileChannel
 org.apache.harmony.security.Util
 org.apache.harmony.security.asn1.ASN1Any
 org.apache.harmony.security.asn1.ASN1Choice
@@ -1470,6 +1575,8 @@
 org.apache.harmony.security.asn1.BerInputStream
 org.apache.harmony.security.asn1.DerInputStream
 org.apache.harmony.security.fortress.Engine
+org.apache.harmony.security.fortress.Engine$ServiceCacheEntry
+org.apache.harmony.security.fortress.Engine$SpiAndProvider
 org.apache.harmony.security.fortress.SecurityAccess
 org.apache.harmony.security.fortress.SecurityUtils
 org.apache.harmony.security.fortress.Services
@@ -1520,7 +1627,6 @@
 org.apache.harmony.xnet.provider.jsse.ClientSessionContext
 org.apache.harmony.xnet.provider.jsse.DefaultSSLContextImpl
 org.apache.harmony.xnet.provider.jsse.IndexedPKIXParameters
-org.apache.harmony.xnet.provider.jsse.IndexedPKIXParameters$Bytes
 org.apache.harmony.xnet.provider.jsse.JSSEProvider
 org.apache.harmony.xnet.provider.jsse.JSSEProvider$1
 org.apache.harmony.xnet.provider.jsse.KeyManagerFactoryImpl
@@ -1543,7 +1649,6 @@
 org.apache.http.ConnectionReuseStrategy
 org.apache.http.FormattedHeader
 org.apache.http.Header
-org.apache.http.HeaderElement
 org.apache.http.HeaderElementIterator
 org.apache.http.HeaderIterator
 org.apache.http.HttpClientConnection
@@ -1560,7 +1665,6 @@
 org.apache.http.HttpResponseFactory
 org.apache.http.HttpResponseInterceptor
 org.apache.http.HttpVersion
-org.apache.http.NameValuePair
 org.apache.http.ProtocolVersion
 org.apache.http.ReasonPhraseCatalog
 org.apache.http.RequestLine
@@ -1577,8 +1681,6 @@
 org.apache.http.client.ResponseHandler
 org.apache.http.client.UserTokenHandler
 org.apache.http.client.methods.AbortableHttpRequest
-org.apache.http.client.methods.HttpEntityEnclosingRequestBase
-org.apache.http.client.methods.HttpPost
 org.apache.http.client.methods.HttpRequestBase
 org.apache.http.client.methods.HttpUriRequest
 org.apache.http.client.params.HttpClientParams
@@ -1650,7 +1752,6 @@
 org.apache.http.impl.client.DefaultRequestDirector
 org.apache.http.impl.client.DefaultTargetAuthenticationHandler
 org.apache.http.impl.client.DefaultUserTokenHandler
-org.apache.http.impl.client.EntityEnclosingRequestWrapper
 org.apache.http.impl.client.RequestWrapper
 org.apache.http.impl.client.RoutedRequest
 org.apache.http.impl.conn.AbstractClientConnAdapter
@@ -1658,10 +1759,11 @@
 org.apache.http.impl.conn.AbstractPooledConnAdapter
 org.apache.http.impl.conn.DefaultClientConnection
 org.apache.http.impl.conn.DefaultClientConnectionOperator
-org.apache.http.impl.conn.DefaultHttpRoutePlanner
 org.apache.http.impl.conn.DefaultResponseParser
 org.apache.http.impl.conn.IdleConnectionHandler
 org.apache.http.impl.conn.IdleConnectionHandler$TimeValues
+org.apache.http.impl.conn.ProxySelectorRoutePlanner
+org.apache.http.impl.conn.ProxySelectorRoutePlanner$1
 org.apache.http.impl.conn.tsccm.AbstractConnPool
 org.apache.http.impl.conn.tsccm.BasicPoolEntry
 org.apache.http.impl.conn.tsccm.BasicPoolEntryRef
@@ -1689,7 +1791,6 @@
 org.apache.http.impl.io.AbstractSessionInputBuffer
 org.apache.http.impl.io.AbstractSessionOutputBuffer
 org.apache.http.impl.io.ContentLengthInputStream
-org.apache.http.impl.io.ContentLengthOutputStream
 org.apache.http.impl.io.HttpRequestWriter
 org.apache.http.impl.io.HttpTransportMetricsImpl
 org.apache.http.impl.io.SocketInputBuffer
@@ -1701,14 +1802,12 @@
 org.apache.http.io.SessionOutputBuffer
 org.apache.http.message.AbstractHttpMessage
 org.apache.http.message.BasicHeader
-org.apache.http.message.BasicHeaderElement
 org.apache.http.message.BasicHeaderElementIterator
 org.apache.http.message.BasicHeaderValueParser
 org.apache.http.message.BasicHttpResponse
 org.apache.http.message.BasicLineFormatter
 org.apache.http.message.BasicLineParser
 org.apache.http.message.BasicListHeaderIterator
-org.apache.http.message.BasicNameValuePair
 org.apache.http.message.BasicRequestLine
 org.apache.http.message.BasicStatusLine
 org.apache.http.message.BufferedHeader
@@ -1803,12 +1902,12 @@
 org.bouncycastle.asn1.x509.X509Name
 org.bouncycastle.asn1.x509.X509NameElementList
 org.bouncycastle.asn1.x509.X509ObjectIdentifiers
+org.bouncycastle.asn1.x9.X9ObjectIdentifiers
 org.bouncycastle.crypto.Digest
 org.bouncycastle.crypto.ExtendedDigest
 org.bouncycastle.crypto.Mac
 org.bouncycastle.crypto.digests.OpenSSLDigest
 org.bouncycastle.crypto.digests.OpenSSLDigest$SHA1
-org.bouncycastle.crypto.engines.AESFastEngine
 org.bouncycastle.crypto.macs.HMac
 org.bouncycastle.jce.ProviderConfigurationPermission
 org.bouncycastle.jce.interfaces.BCKeyStore
@@ -1824,10 +1923,10 @@
 org.bouncycastle.jce.provider.PKIXCertPathValidatorSpi
 org.bouncycastle.jce.provider.ProviderUtil
 org.bouncycastle.jce.provider.X509CertificateObject
+org.bouncycastle.jce.provider.asymmetric.ECMappings
 org.bouncycastle.jce.provider.symmetric.AESMappings
 org.bouncycastle.util.Strings
 org.bouncycastle.util.io.Streams
-org.ccil.cowan.tagsoup.Parser
 org.xml.sax.Attributes
 org.xml.sax.ContentHandler
 org.xml.sax.Locator
diff --git a/services/java/com/android/server/DevicePolicyManagerService.java b/services/java/com/android/server/DevicePolicyManagerService.java
index 8a9e351..b2d534b 100644
--- a/services/java/com/android/server/DevicePolicyManagerService.java
+++ b/services/java/com/android/server/DevicePolicyManagerService.java
@@ -53,6 +53,7 @@
 import android.os.RemoteException;
 import android.os.ServiceManager;
 import android.os.SystemClock;
+import android.os.SystemProperties;
 import android.provider.Settings;
 import android.util.PrintWriterPrinter;
 import android.util.Printer;
@@ -1925,7 +1926,14 @@
      * {@link DevicePolicyManager#ENCRYPTION_STATUS_ACTIVE}.
      */
     private int getEncryptionStatus() {
-        return DevicePolicyManager.ENCRYPTION_STATUS_UNSUPPORTED;
+        String status = SystemProperties.get("ro.crypto.state", "unsupported");
+        if ("encrypted".equalsIgnoreCase(status)) {
+            return DevicePolicyManager.ENCRYPTION_STATUS_ACTIVE;
+        } else if ("unencrypted".equalsIgnoreCase(status)) {
+            return DevicePolicyManager.ENCRYPTION_STATUS_INACTIVE;
+        } else {
+            return DevicePolicyManager.ENCRYPTION_STATUS_UNSUPPORTED;
+        }
     }
 
     /**
diff --git a/services/java/com/android/server/InputMethodManagerService.java b/services/java/com/android/server/InputMethodManagerService.java
index 945e714..b5cc5aa 100644
--- a/services/java/com/android/server/InputMethodManagerService.java
+++ b/services/java/com/android/server/InputMethodManagerService.java
@@ -564,19 +564,35 @@
         }
     }
 
+    private HashMap<InputMethodInfo, List<InputMethodSubtype>>
+            getExplicitlyOrImplicitlyEnabledInputMethodsAndSubtypeListLocked() {
+        HashMap<InputMethodInfo, List<InputMethodSubtype>> enabledInputMethodAndSubtypes =
+                new HashMap<InputMethodInfo, List<InputMethodSubtype>>();
+        for (InputMethodInfo imi: getEnabledInputMethodList()) {
+            enabledInputMethodAndSubtypes.put(
+                    imi, getEnabledInputMethodSubtypeListLocked(imi, true));
+        }
+        return enabledInputMethodAndSubtypes;
+    }
+
+    public List<InputMethodSubtype> getEnabledInputMethodSubtypeListLocked(InputMethodInfo imi,
+            boolean allowsImplicitlySelectedSubtypes) {
+        if (imi == null && mCurMethodId != null) {
+            imi = mMethodMap.get(mCurMethodId);
+        }
+        final List<InputMethodSubtype> enabledSubtypes =
+                mSettings.getEnabledInputMethodSubtypeListLocked(imi);
+        if (!allowsImplicitlySelectedSubtypes || enabledSubtypes.size() > 0) {
+            return enabledSubtypes;
+        } else {
+            return getApplicableSubtypesLocked(mRes, getSubtypes(imi));
+        }
+    }
+
     public List<InputMethodSubtype> getEnabledInputMethodSubtypeList(InputMethodInfo imi,
             boolean allowsImplicitlySelectedSubtypes) {
         synchronized (mMethodMap) {
-            if (imi == null && mCurMethodId != null) {
-                imi = mMethodMap.get(mCurMethodId);
-            }
-            final List<InputMethodSubtype> enabledSubtypes =
-                    mSettings.getEnabledInputMethodSubtypeListLocked(imi);
-            if (!allowsImplicitlySelectedSubtypes || enabledSubtypes.size() > 0) {
-                return enabledSubtypes;
-            } else {
-                return getApplicableSubtypesLocked(mRes, getSubtypes(imi));
-            }
+            return getEnabledInputMethodSubtypeListLocked(imi, allowsImplicitlySelectedSubtypes);
         }
     }
 
@@ -1680,75 +1696,53 @@
         if (DEBUG) Slog.v(TAG, "Current IME: " + lastInputMethodId);
 
         synchronized (mMethodMap) {
-            final List<Pair<InputMethodInfo, ArrayList<String>>> immis =
-                    mSettings.getEnabledInputMethodAndSubtypeHashCodeListLocked();
-            int N = immis.size();
-
-            // Add applicable subtypes if no subtype for each IME is enabled.
-            for (int i = 0; i < N; ++i) {
-                InputMethodInfo imi = immis.get(i).first;
-                ArrayList<String> subtypes = immis.get(i).second;
-                if (subtypes != null && subtypes.size() == 0) {
-                    ArrayList<InputMethodSubtype> applicableSubtypes =
-                            getApplicableSubtypesLocked(mRes, getSubtypes(imi));
-                    final int numSubtypes = applicableSubtypes.size();
-                    for (int j = 0; j < numSubtypes; ++j) {
-                        subtypes.add(String.valueOf(applicableSubtypes.get(j).hashCode()));
-                    }
-                }
-            }
-
-            ArrayList<Integer> subtypeIds = new ArrayList<Integer>();
-
+            final HashMap<InputMethodInfo, List<InputMethodSubtype>> immis =
+                    getExplicitlyOrImplicitlyEnabledInputMethodsAndSubtypeListLocked();
             if (immis == null || immis.size() == 0) {
                 return;
             }
 
             hideInputMethodMenuLocked();
 
-
             final Map<CharSequence, Pair<InputMethodInfo, Integer>> imMap =
                 new TreeMap<CharSequence, Pair<InputMethodInfo, Integer>>(Collator.getInstance());
 
-            for (int i = 0; i < N; ++i) {
-                InputMethodInfo property = immis.get(i).first;
-                final ArrayList<String> enabledSubtypeIds = immis.get(i).second;
+            for (InputMethodInfo imi: immis.keySet()) {
+                if (imi == null) continue;
+                List<InputMethodSubtype> explicitlyOrImplicitlyEnabledSubtypeList = immis.get(imi);
                 HashSet<String> enabledSubtypeSet = new HashSet<String>();
-                for (String s : enabledSubtypeIds) {
-                    enabledSubtypeSet.add(s);
+                for (InputMethodSubtype subtype: explicitlyOrImplicitlyEnabledSubtypeList) {
+                    enabledSubtypeSet.add(String.valueOf(subtype.hashCode()));
                 }
-                if (property == null) {
-                    continue;
-                }
-                CharSequence label = property.loadLabel(pm);
+                ArrayList<InputMethodSubtype> subtypes = getSubtypes(imi);
+                CharSequence label = imi.loadLabel(pm);
                 if (showSubtypes && enabledSubtypeSet.size() > 0) {
-                    final int subtypeCount = property.getSubtypeCount();
+                    final int subtypeCount = imi.getSubtypeCount();
                     for (int j = 0; j < subtypeCount; ++j) {
-                        InputMethodSubtype subtype = property.getSubtypeAt(j);
+                        InputMethodSubtype subtype = imi.getSubtypeAt(j);
                         if (enabledSubtypeSet.contains(String.valueOf(subtype.hashCode()))) {
                             CharSequence title;
                             int nameResId = subtype.getNameResId();
                             String mode = subtype.getMode();
                             if (nameResId != 0) {
-                                title = pm.getText(property.getPackageName(), nameResId,
-                                        property.getServiceInfo().applicationInfo);
+                                title = pm.getText(imi.getPackageName(), nameResId,
+                                        imi.getServiceInfo().applicationInfo);
                             } else {
                                 CharSequence language = subtype.getLocale();
                                 // TODO: Use more friendly Title and UI
                                 title = label + "," + (mode == null ? "" : mode) + ","
                                         + (language == null ? "" : language);
                             }
-                            imMap.put(title, new Pair<InputMethodInfo, Integer>(property, j));
+                            imMap.put(title, new Pair<InputMethodInfo, Integer>(imi, j));
                         }
                     }
                 } else {
                     imMap.put(label,
-                            new Pair<InputMethodInfo, Integer>(property, NOT_A_SUBTYPE_ID));
-                    subtypeIds.add(0);
+                            new Pair<InputMethodInfo, Integer>(imi, NOT_A_SUBTYPE_ID));
                 }
             }
 
-            N = imMap.size();
+            final int N = imMap.size();
             mItems = imMap.keySet().toArray(new CharSequence[N]);
             mIms = new InputMethodInfo[N];
             mSubtypeIds = new int[N];
@@ -2361,7 +2355,7 @@
             }
         }
 
-        public List<Pair<String, ArrayList<String>>> getEnabledInputMethodsAndSubtypeListLocked() {
+        private List<Pair<String, ArrayList<String>>> getEnabledInputMethodsAndSubtypeListLocked() {
             ArrayList<Pair<String, ArrayList<String>>> imsList
                     = new ArrayList<Pair<String, ArrayList<String>>>();
             final String enabledInputMethodsStr = getEnabledInputMethodsStr();
@@ -2501,7 +2495,7 @@
             for (Pair<String, String> ime: subtypeHistory) {
                 if (ime.first.equals(imeId)) {
                     if (DEBUG) {
-                        Slog.v(TAG, "Subtype found in the history: " + imeId
+                        Slog.v(TAG, "Subtype found in the history: " + imeId + ", "
                                 + ime.second);
                     }
                     // We should break here
@@ -2509,6 +2503,9 @@
                     break;
                 }
             }
+            if (DEBUG) {
+                Slog.v(TAG, "Add subtype to the history: " + imeId + ", " + subtypeId);
+            }
             saveSubtypeHistory(subtypeHistory, imeId, subtypeId);
         }
 
@@ -2548,7 +2545,7 @@
                                     enabledImes, imeInTheHistory, subtypeInTheHistory);
                     if (!TextUtils.isEmpty(subtypeHashCode)) {
                         if (DEBUG) {
-                            Slog.d(TAG, "Enabled subtype found in the history:" + subtypeHashCode);
+                            Slog.d(TAG, "Enabled subtype found in the history: " + subtypeHashCode);
                         }
                         return new Pair<String, String>(imeInTheHistory, subtypeHashCode);
                     }
diff --git a/services/java/com/android/server/MountService.java b/services/java/com/android/server/MountService.java
index d6804f9..7440f52 100644
--- a/services/java/com/android/server/MountService.java
+++ b/services/java/com/android/server/MountService.java
@@ -19,6 +19,7 @@
 import com.android.internal.app.IMediaContainerService;
 import com.android.server.am.ActivityManagerService;
 
+import android.Manifest;
 import android.content.BroadcastReceiver;
 import android.content.ComponentName;
 import android.content.Context;
@@ -618,7 +619,7 @@
                     Slog.w(TAG, "Failed to get share availability");
                 }
                 /*
-                 * Now that we've done our initialization, release 
+                 * Now that we've done our initialization, release
                  * the hounds!
                  */
                 mReady = true;
@@ -1237,7 +1238,7 @@
         waitForReady();
         return doGetVolumeShared(Environment.getExternalStorageDirectory().getPath(), "ums");
     }
-    
+
     /**
      * @return state of the volume at the specified mount point
      */
@@ -1407,7 +1408,7 @@
 
         return rc;
     }
-   
+
     public int mountSecureContainer(String id, String key, int ownerUid) {
         validatePermission(android.Manifest.permission.ASEC_MOUNT_UNMOUNT);
         waitForReady();
@@ -1495,7 +1496,7 @@
 
         synchronized (mAsecMountSet) {
             /*
-             * Because a mounted container has active internal state which cannot be 
+             * Because a mounted container has active internal state which cannot be
              * changed while active, we must ensure both ids are not currently mounted.
              */
             if (mAsecMountSet.contains(oldId) || mAsecMountSet.contains(newId)) {
@@ -1635,7 +1636,8 @@
             throw new IllegalArgumentException("password cannot be null");
         }
 
-        // TODO: Enforce a permission
+        mContext.enforceCallingOrSelfPermission(Manifest.permission.CRYPT_KEEPER,
+                "no permission to access the crypt keeper");
 
         waitForReady();
 
@@ -1644,13 +1646,30 @@
         }
 
         try {
-            mConnector.doCommand(String.format("cryptfs checkpw %s", password));
+            ArrayList<String> rsp = mConnector.doCommand("cryptfs checkpw " + password);
+            String []tok = rsp.get(0).split(" ");
+
+            if (tok == null || tok.length != 2) {
+                return -1;
+            }
+
+            int code = Integer.parseInt(tok[1]);
+
+            if (code == 0) {
+                // Decrypt was successful. Post a delayed message before restarting in order
+                // to let the UI to clear itself
+                mHandler.postDelayed(new Runnable() {
+                    public void run() {
+                        mConnector.doCommand(String.format("cryptfs restart"));
+                    }
+                }, 2000); // 2 seconds
+            }
+
+            return code;
         } catch (NativeDaemonConnectorException e) {
             // Decryption failed
             return e.getCode();
         }
-
-        return 0;
     }
 
     public int encryptStorage(String password) {
@@ -1658,16 +1677,17 @@
             throw new IllegalArgumentException("password cannot be null");
         }
 
-        // TODO: Enforce a permission
+        mContext.enforceCallingOrSelfPermission(Manifest.permission.CRYPT_KEEPER,
+            "no permission to access the crypt keeper");
 
         waitForReady();
 
         if (DEBUG_EVENTS) {
-            Slog.i(TAG, "decrypting storage...");
+            Slog.i(TAG, "encrypting storage...");
         }
 
         try {
-            mConnector.doCommand(String.format("cryptfs enablecrypto wipe %s", password));
+            mConnector.doCommand(String.format("cryptfs enablecrypto inplace %s", password));
         } catch (NativeDaemonConnectorException e) {
             // Encryption failed
             return e.getCode();
diff --git a/services/java/com/android/server/ScreenRotationAnimation.java b/services/java/com/android/server/ScreenRotationAnimation.java
index 2ad9cbe..bef64b3 100644
--- a/services/java/com/android/server/ScreenRotationAnimation.java
+++ b/services/java/com/android/server/ScreenRotationAnimation.java
@@ -23,6 +23,8 @@
 import android.graphics.Matrix;
 import android.graphics.Paint;
 import android.graphics.PixelFormat;
+import android.graphics.PorterDuff;
+import android.graphics.PorterDuffXfermode;
 import android.graphics.Rect;
 import android.util.DisplayMetrics;
 import android.util.Slog;
@@ -132,9 +134,11 @@
                 }
         
                 if (screenshot != null) {
-                    c.drawBitmap(screenshot, 0, 0, new Paint(0));
+                    Paint paint = new Paint(0);
+                    paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC));
+                    c.drawBitmap(screenshot, 0, 0, paint);
                 } else {
-                    c.drawColor(Color.GREEN);
+                    c.drawColor(Color.GREEN, PorterDuff.Mode.SRC);
                 }
 
                 mSurface.unlockCanvasAndPost(c);
diff --git a/services/java/com/android/server/WindowManagerService.java b/services/java/com/android/server/WindowManagerService.java
index 2af291d..d2a1786 100644
--- a/services/java/com/android/server/WindowManagerService.java
+++ b/services/java/com/android/server/WindowManagerService.java
@@ -680,6 +680,7 @@
 
             // stop intercepting input
             mDragState.unregister();
+            mInputMonitor.setUpdateInputWindowsNeededLw();
             mInputMonitor.updateInputWindowsLw();
 
             // Retain the parameters of any deferred rotation operation so
@@ -2401,7 +2402,8 @@
 
             boolean focusChanged = false;
             if (win.canReceiveKeys()) {
-                focusChanged = updateFocusedWindowLocked(UPDATE_FOCUS_WILL_ASSIGN_LAYERS);
+                focusChanged = updateFocusedWindowLocked(UPDATE_FOCUS_WILL_ASSIGN_LAYERS,
+                        false /*updateInputWindows*/);
                 if (focusChanged) {
                     imMayMove = false;
                 }
@@ -2418,9 +2420,10 @@
             //dump();
 
             if (focusChanged) {
-                finishUpdateFocusedWindowAfterAssignLayersLocked();
+                finishUpdateFocusedWindowAfterAssignLayersLocked(false /*updateInputWindows*/);
             }
-            
+            mInputMonitor.updateInputWindowsLw();
+
             if (localLOGV) Slog.v(
                 TAG, "New client " + client.asBinder()
                 + ": window=" + win);
@@ -2496,8 +2499,10 @@
                 win.mExiting = true;
                 win.mRemoveOnExit = true;
                 mLayoutNeeded = true;
-                updateFocusedWindowLocked(UPDATE_FOCUS_WILL_PLACE_SURFACES);
+                updateFocusedWindowLocked(UPDATE_FOCUS_WILL_PLACE_SURFACES,
+                        false /*updateInputWindows*/);
                 performLayoutAndPlaceSurfacesLocked();
+                mInputMonitor.updateInputWindowsLw();
                 if (win.mAppToken != null) {
                     win.mAppToken.updateReportedVisibilityLocked();
                 }
@@ -2515,7 +2520,7 @@
                 && updateOrientationFromAppTokensLocked(false)) {
             mH.sendEmptyMessage(H.SEND_NEW_CONFIGURATION);
         }
-        updateFocusedWindowLocked(UPDATE_FOCUS_NORMAL);
+        updateFocusedWindowLocked(UPDATE_FOCUS_NORMAL, true /*updateInputWindows*/);
         Binder.restoreCallingIdentity(origId);
     }
 
@@ -2613,6 +2618,7 @@
             }
         }
         
+        mInputMonitor.setUpdateInputWindowsNeededLw();
         mInputMonitor.updateInputWindowsLw();
     }
 
@@ -2863,6 +2869,7 @@
                         outSurface.release();
                     }
                 } catch (Exception e) {
+                    mInputMonitor.setUpdateInputWindowsNeededLw();
                     mInputMonitor.updateInputWindowsLw();
                     
                     Slog.w(TAG, "Exception thrown when creating surface for client "
@@ -2950,7 +2957,8 @@
 
             if (focusMayChange) {
                 //System.out.println("Focus may change: " + win.mAttrs.getTitle());
-                if (updateFocusedWindowLocked(UPDATE_FOCUS_WILL_PLACE_SURFACES)) {
+                if (updateFocusedWindowLocked(UPDATE_FOCUS_WILL_PLACE_SURFACES,
+                        false /*updateInputWindows*/)) {
                     imMayMove = false;
                 }
                 //System.out.println("Relayout " + win + ": focus=" + mCurrentFocus);
@@ -3006,6 +3014,7 @@
 
             inTouchMode = mInTouchMode;
             
+            mInputMonitor.setUpdateInputWindowsNeededLw();
             mInputMonitor.updateInputWindowsLw();
         }
 
@@ -3378,7 +3387,8 @@
                     if (changed) {
                         mLayoutNeeded = true;
                         performLayoutAndPlaceSurfacesLocked();
-                        updateFocusedWindowLocked(UPDATE_FOCUS_NORMAL);
+                        updateFocusedWindowLocked(UPDATE_FOCUS_NORMAL,
+                                false /*updateInputWindows*/);
                     }
 
                     if (delayed) {
@@ -3388,6 +3398,7 @@
                     }
                 }
 
+                mInputMonitor.setUpdateInputWindowsNeededLw();
                 mInputMonitor.updateInputWindowsLw();
             } else {
                 Slog.w(TAG, "Attempted to remove non-existing token: " + token);
@@ -3707,7 +3718,7 @@
 
             if (moveFocusNow && changed) {
                 final long origId = Binder.clearCallingIdentity();
-                updateFocusedWindowLocked(UPDATE_FOCUS_NORMAL);
+                updateFocusedWindowLocked(UPDATE_FOCUS_NORMAL, true /*updateInputWindows*/);
                 Binder.restoreCallingIdentity(origId);
             }
         }
@@ -3882,7 +3893,8 @@
                             ttoken.updateLayers();
                         }
 
-                        updateFocusedWindowLocked(UPDATE_FOCUS_WILL_PLACE_SURFACES);
+                        updateFocusedWindowLocked(UPDATE_FOCUS_WILL_PLACE_SURFACES,
+                                true /*updateInputWindows*/);
                         mLayoutNeeded = true;
                         performLayoutAndPlaceSurfacesLocked();
                         Binder.restoreCallingIdentity(origId);
@@ -4042,12 +4054,13 @@
 
             if (changed) {
                 mLayoutNeeded = true;
+                mInputMonitor.setUpdateInputWindowsNeededLw();
                 if (performLayout) {
-                    updateFocusedWindowLocked(UPDATE_FOCUS_WILL_PLACE_SURFACES);
+                    updateFocusedWindowLocked(UPDATE_FOCUS_WILL_PLACE_SURFACES,
+                            false /*updateInputWindows*/);
                     performLayoutAndPlaceSurfacesLocked();
-                } else {
-                    mInputMonitor.updateInputWindowsLw();
                 }
+                mInputMonitor.updateInputWindowsLw();
             }
         }
 
@@ -4302,7 +4315,7 @@
                 if (mFocusedApp == wtoken) {
                     if (DEBUG_FOCUS) Slog.v(TAG, "Removing focused app token:" + wtoken);
                     mFocusedApp = null;
-                    updateFocusedWindowLocked(UPDATE_FOCUS_NORMAL);
+                    updateFocusedWindowLocked(UPDATE_FOCUS_NORMAL, true /*updateInputWindows*/);
                     mInputMonitor.setFocusedAppLw(null);
                 }
             } else {
@@ -4481,9 +4494,11 @@
                 reAddAppWindowsLocked(findWindowOffsetLocked(index), wtoken);
                 if (DEBUG_REORDER) Slog.v(TAG, "Final window list:");
                 if (DEBUG_REORDER) dumpWindowsLocked();
-                updateFocusedWindowLocked(UPDATE_FOCUS_WILL_PLACE_SURFACES);
+                updateFocusedWindowLocked(UPDATE_FOCUS_WILL_PLACE_SURFACES,
+                        false /*updateInputWindows*/);
                 mLayoutNeeded = true;
                 performLayoutAndPlaceSurfacesLocked();
+                mInputMonitor.updateInputWindowsLw();
             }
             Binder.restoreCallingIdentity(origId);
         }
@@ -4520,11 +4535,13 @@
         pos = reAddAppWindowsLocked(pos, wtoken);
 
         if (updateFocusAndLayout) {
-            if (!updateFocusedWindowLocked(UPDATE_FOCUS_WILL_PLACE_SURFACES)) {
+            if (!updateFocusedWindowLocked(UPDATE_FOCUS_WILL_PLACE_SURFACES,
+                    false /*updateInputWindows*/)) {
                 assignLayersLocked();
             }
             mLayoutNeeded = true;
             performLayoutAndPlaceSurfacesLocked();
+            mInputMonitor.updateInputWindowsLw();
         }
     }
 
@@ -4550,11 +4567,13 @@
             }
         }
 
-        if (!updateFocusedWindowLocked(UPDATE_FOCUS_WILL_PLACE_SURFACES)) {
+        if (!updateFocusedWindowLocked(UPDATE_FOCUS_WILL_PLACE_SURFACES,
+                false /*updateInputWindows*/)) {
             assignLayersLocked();
         }
         mLayoutNeeded = true;
         performLayoutAndPlaceSurfacesLocked();
+        mInputMonitor.updateInputWindowsLw();
 
         //dump();
     }
@@ -5797,6 +5816,9 @@
         // When true, input dispatch proceeds normally.  Otherwise all events are dropped.
         private boolean mInputDispatchEnabled = true;
 
+        // When true, need to call updateInputWindowsLw().
+        private boolean mUpdateInputWindowsNeeded = true;
+
         // Temporary list of windows information to provide to the input dispatcher.
         private InputWindowList mTempInputWindows = new InputWindowList();
         
@@ -5891,8 +5913,17 @@
             inputWindow.touchableRegion.setEmpty();
         }
 
+        public void setUpdateInputWindowsNeededLw() {
+            mUpdateInputWindowsNeeded = true;
+        }
+
         /* Updates the cached window information provided to the input dispatcher. */
         public void updateInputWindowsLw() {
+            if (!mUpdateInputWindowsNeeded) {
+                return;
+            }
+            mUpdateInputWindowsNeeded = false;
+
             // Populate the input window list with information about all of the windows that
             // could potentially receive input.
             // As an optimization, we could try to prune the list of windows but this turns
@@ -6021,7 +6052,7 @@
         /* Called when the current input focus changes.
          * Layer assignment is assumed to be complete by the time this is called.
          */
-        public void setInputFocusLw(WindowState newWindow) {
+        public void setInputFocusLw(WindowState newWindow, boolean updateInputWindows) {
             if (DEBUG_INPUT) {
                 Slog.d(TAG, "Input focus has changed to " + newWindow);
             }
@@ -6033,9 +6064,13 @@
                     // forgets to resume.
                     newWindow.mToken.paused = false;
                 }
-            
+
                 mInputFocus = newWindow;
-                updateInputWindowsLw();
+                setUpdateInputWindowsNeededLw();
+
+                if (updateInputWindows) {
+                    updateInputWindowsLw();
+                }
             }
         }
         
@@ -6062,6 +6097,7 @@
                 }
                 
                 window.paused = true;
+                setUpdateInputWindowsNeededLw();
                 updateInputWindowsLw();
             }
         }
@@ -6073,6 +6109,7 @@
                 }
                 
                 window.paused = false;
+                setUpdateInputWindowsNeededLw();
                 updateInputWindowsLw();
             }
         }
@@ -6549,12 +6586,14 @@
                 // the actual drag event dispatch stuff in the dragstate
 
                 mDragState.register();
+                mInputMonitor.setUpdateInputWindowsNeededLw();
                 mInputMonitor.updateInputWindowsLw();
                 if (!mInputManager.transferTouchFocus(callingWin.mInputChannel,
                         mDragState.mServerChannel)) {
                     Slog.e(TAG, "Unable to transfer touch focus");
                     mDragState.unregister();
                     mDragState = null;
+                    mInputMonitor.setUpdateInputWindowsNeededLw();
                     mInputMonitor.updateInputWindowsLw();
                     return false;
                 }
@@ -9151,6 +9190,7 @@
                         // !!! TODO: ANR the app that has failed to start the drag in time
                         if (mDragState != null) {
                             mDragState.unregister();
+                            mInputMonitor.setUpdateInputWindowsNeededLw();
                             mInputMonitor.updateInputWindowsLw();
                             mDragState.reset();
                             mDragState = null;
@@ -9441,7 +9481,7 @@
         }
     }
 
-    private final int performLayoutLockedInner(boolean initial) {
+    private final int performLayoutLockedInner(boolean initial, boolean updateInputWindows) {
         if (!mLayoutNeeded) {
             return 0;
         }
@@ -9549,7 +9589,10 @@
         }
         
         // Window frames may have changed.  Tell the input dispatcher about it.
-        mInputMonitor.updateInputWindowsLw();
+        mInputMonitor.setUpdateInputWindowsNeededLw();
+        if (updateInputWindows) {
+            mInputMonitor.updateInputWindowsLw();
+        }
 
         return mPolicy.finishLayoutLw();
     }
@@ -9570,7 +9613,8 @@
 
         if (mFocusMayChange) {
             mFocusMayChange = false;
-            updateFocusedWindowLocked(UPDATE_FOCUS_WILL_PLACE_SURFACES);
+            updateFocusedWindowLocked(UPDATE_FOCUS_WILL_PLACE_SURFACES,
+                    false /*updateInputWindows*/);
         }
         
         // Initialize state of exiting tokens.
@@ -9646,7 +9690,7 @@
                 
                 // FIRST LOOP: Perform a layout, if needed.
                 if (repeats < 4) {
-                    changes = performLayoutLockedInner(repeats == 0);
+                    changes = performLayoutLockedInner(repeats == 0, false /*updateInputWindows*/);
                     if (changes != 0) {
                         continue;
                     }
@@ -10103,7 +10147,8 @@
                         if (!moveInputMethodWindowsIfNeededLocked(true)) {
                             assignLayersLocked();
                         }
-                        updateFocusedWindowLocked(UPDATE_FOCUS_PLACING_SURFACES);
+                        updateFocusedWindowLocked(UPDATE_FOCUS_PLACING_SURFACES,
+                                false /*updateInputWindows*/);
                         mFocusMayChange = false;
                     }
                 }
@@ -10212,7 +10257,8 @@
 
                 if (mFocusMayChange) {
                     mFocusMayChange = false;
-                    if (updateFocusedWindowLocked(UPDATE_FOCUS_PLACING_SURFACES)) {
+                    if (updateFocusedWindowLocked(UPDATE_FOCUS_PLACING_SURFACES,
+                            false /*updateInputWindows*/)) {
                         changes |= PhoneWindowManager.FINISH_LAYOUT_REDO_ANIM;
                         adjResult = 0;
                     }
@@ -10224,8 +10270,6 @@
 
                 if (DEBUG_APP_TRANSITIONS) Slog.v(TAG, "*** ANIM STEP: changes=0x"
                         + Integer.toHexString(changes));
-                
-                mInputMonitor.updateInputWindowsLw();
             } while (changes != 0);
 
             // THIRD LOOP: Update the surfaces of all windows.
@@ -10679,8 +10723,6 @@
             Slog.e(TAG, "Unhandled exception in Window Manager", e);
         }
 
-        mInputMonitor.updateInputWindowsLw();
-        
         Surface.closeTransaction();
 
         if (SHOW_TRANSACTIONS) Slog.i(TAG, "<<< CLOSE TRANSACTION performLayoutAndPlaceSurfaces");
@@ -10810,6 +10852,8 @@
             requestAnimationLocked(currentTime+(1000/60)-SystemClock.uptimeMillis());
         }
 
+        // Finally update all input windows now that the window changes have stabilized.
+        mInputMonitor.setUpdateInputWindowsNeededLw();
         mInputMonitor.updateInputWindowsLw();
 
         setHoldScreenLocked(holdScreen != null);
@@ -10988,7 +11032,7 @@
         }
     }
 
-    private boolean updateFocusedWindowLocked(int mode) {
+    private boolean updateFocusedWindowLocked(int mode, boolean updateInputWindows) {
         WindowState newFocus = computeFocusedWindowLocked();
         if (mCurrentFocus != newFocus) {
             // This check makes sure that we don't already have the focus
@@ -11009,7 +11053,7 @@
                     mLayoutNeeded = true;
                 }
                 if (mode == UPDATE_FOCUS_PLACING_SURFACES) {
-                    performLayoutLockedInner(true);
+                    performLayoutLockedInner(true /*initial*/, updateInputWindows);
                 } else if (mode == UPDATE_FOCUS_WILL_PLACE_SURFACES) {
                     // Client will do the layout, but we need to assign layers
                     // for handleNewWindowLocked() below.
@@ -11020,15 +11064,15 @@
             if (mode != UPDATE_FOCUS_WILL_ASSIGN_LAYERS) {
                 // If we defer assigning layers, then the caller is responsible for
                 // doing this part.
-                finishUpdateFocusedWindowAfterAssignLayersLocked();
+                finishUpdateFocusedWindowAfterAssignLayersLocked(updateInputWindows);
             }
             return true;
         }
         return false;
     }
     
-    private void finishUpdateFocusedWindowAfterAssignLayersLocked() {
-        mInputMonitor.setInputFocusLw(mCurrentFocus);
+    private void finishUpdateFocusedWindowAfterAssignLayersLocked(boolean updateInputWindows) {
+        mInputMonitor.setInputFocusLw(mCurrentFocus, updateInputWindows);
     }
 
     private WindowState computeFocusedWindowLocked() {
diff --git a/tests/CoreTests/android/core/URLTest.java b/tests/CoreTests/android/core/URLTest.java
deleted file mode 100644
index 5efcd5b..0000000
--- a/tests/CoreTests/android/core/URLTest.java
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
- * 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.
- */
-
-package android.core;
-
-import android.test.suitebuilder.annotation.Suppress;
-import junit.framework.TestCase;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.io.PrintWriter;
-import java.net.HttpURLConnection;
-import java.net.ServerSocket;
-import java.net.Socket;
-import java.net.URL;
-import java.net.URLConnection;
-import java.util.HashMap;
-import java.util.Map;
-
-public class URLTest extends TestCase {
-
-    private static void get(String u) throws IOException {
-        URL url = new URL(u);
-        URLConnection cn = url.openConnection();
-        cn.connect();
-//        System.out.println("Content-Type: " + cn.getContentType());
-//        System.out.println("Content-Length: " + cn.getContentLength());
-
-        InputStream stream = cn.getInputStream();
-        if (stream == null) {
-            throw new RuntimeException("stream is null");
-        }
-        byte[] data = new byte[1024];
-        stream.read(data);
-
-//            if (true) {
-//                System.out.print("data=");
-//                System.out.write(data);
-//                System.out.println();
-//            }
-
-//                System.out.println("Content-Type: " + cn.getContentType());
-//                System.out.print("data:");
-//                System.out.write(data);
-//                System.out.println();
-
-        assertTrue(new String(data).indexOf("<html>") >= 0);
-    }
-
-    @Suppress
-    public void testGetHTTP() throws Exception {
-        get("http://www.google.com");
-    }
-
-    @Suppress
-    public void testGetHTTPS() throws Exception {
-        get("https://www.fortify.net/cgi/ssl_2.pl");
-    }
-
-    /**
-     * Dummy HTTP server class for testing keep-alive behavior. Listens a
-     * single time and responds to a given number of requests on the same
-     * socket. Then closes the socket.
-     */
-    private static class DummyServer implements Runnable {
-
-        private int keepAliveCount;
-        private Map<String, String> headers = new HashMap<String, String>();
-
-        public DummyServer(int keepAliveCount) {
-            this.keepAliveCount = keepAliveCount;
-        }
-
-        public void run() {
-            try {
-                ServerSocket server = new ServerSocket(8182);
-                Socket socket = server.accept();
-
-                InputStream input = socket.getInputStream();
-                BufferedReader reader = new BufferedReader(new InputStreamReader(input));
-                try {
-                    for (int i = 0; i < keepAliveCount; i++) {
-                        reader.readLine();
-                        headers.clear();
-                        while (true) {
-                            String header = reader.readLine();
-                            if (header.length() == 0) {
-                                break;
-                            }
-                            int colon = header.indexOf(":");
-                            String key = header.substring(0, colon);
-                            String value = header.substring(colon + 1).trim();
-                            headers.put(key, value);
-                        }
-
-                        OutputStream output = socket.getOutputStream();
-                        PrintWriter writer = new PrintWriter(output);
-
-                        try {
-                            writer.println("HTTP/1.1 200 OK");
-                            String body = "Hello, Android world #" + i + "!";
-                            writer.println("Content-Length: " + body.length());
-                            writer.println("");
-                            writer.print(body);
-                            writer.flush();
-                        } finally {
-                            writer.close();
-                        }
-                    }
-                } finally {
-                    reader.close();
-                }
-                socket.close();
-                server.close();
-            } catch (Exception ex) {
-                throw new RuntimeException(ex);
-            }
-        }
-    }
-
-    /**
-     * Does a request to the given URL, reads and returns the result.
-     */
-    private String request(URL url) throws Exception {
-        URLConnection connection = url.openConnection();
-        connection.connect();
-
-        InputStream input = connection.getInputStream();
-        BufferedReader reader = new BufferedReader(new InputStreamReader(input));
-        try {
-            return reader.readLine();
-        } finally {
-            reader.close();
-        }
-    }
-
-    /**
-     * Test case for HTTP keep-alive behavior.
-     */
-    @Suppress
-    public void testGetKeepAlive() throws Exception {
-        new Thread(new DummyServer(3)).start();
-        Thread.sleep(100);
-
-        // We expect the request to work three times, then it fails.
-        URL url = new URL("http://localhost:8182");
-        assertEquals("Hello, Android world #0!", request(url));
-        assertEquals("Hello, Android world #1!", request(url));
-        assertEquals("Hello, Android world #2!", request(url));
-
-        try {
-            request(url);
-            fail("ConnectException expected.");
-        } catch (Exception ex) {
-            // Ok.
-        }
-    }
-
-    @Suppress
-    public void testUserAgentHeader() throws Exception {
-        DummyServer server = new DummyServer(1);
-        new Thread(server).start();
-        Thread.sleep(100);
-
-        // We expect the request to work three times, then it fails.
-        request(new URL("http://localhost:8182"));
-
-        String userAgent = server.headers.get("User-Agent");
-        assertTrue("Unexpected User-Agent: " + userAgent, userAgent.matches(
-                "Dalvik/[\\d.]+ \\(Linux; U; Android \\w+(;.*)?( Build/\\w+)?\\)"));
-    }
-
-    /**
-     * Regression for issue 1001814.
-     */
-    @Suppress
-    public void testHttpConnectionTimeout() throws Exception {
-        int timeout = 5000;
-        HttpURLConnection cn = null;
-        long start = 0;
-        try {
-            start = System.currentTimeMillis();
-            URL url = new URL("http://123.123.123.123");
-            cn = (HttpURLConnection) url.openConnection();
-            cn.setConnectTimeout(5000);
-            cn.connect();
-            fail("should have thrown an exception");
-        } catch (IOException ioe) {
-            long delay = System.currentTimeMillis() - start;
-            if (Math.abs(timeout - delay) > 1000) {
-                fail("Timeout was not accurate. it needed " + delay +
-                        " instead of " + timeout + "miliseconds");
-            }
-        } finally {
-            if (cn != null) {
-                cn.disconnect();
-            }
-        }
-    }
-
-    /** 
-     * Regression test for issue 1158780 where using '{' and '}' in an URL threw
-     * an NPE. The RI accepts this URL and returns the status 404.
-     */
-    @Suppress
-    public void testMalformedUrl() throws Exception {
-        URL url = new URL("http://www.google.com/cgi-bin/myscript?g={United+States}+Borders+Mexico+{Climate+change}+Marketing+{Automotive+industry}+News+Health+Internet");
-        HttpURLConnection conn = (HttpURLConnection)url.openConnection();
-        int status = conn.getResponseCode();
-        android.util.Log.d("URLTest", "status: " + status);
-    }
-}
diff --git a/tests/DumpRenderTree/src/com/android/dumprendertree/WebViewEventSender.java b/tests/DumpRenderTree/src/com/android/dumprendertree/WebViewEventSender.java
index 383d782..17345ae 100644
--- a/tests/DumpRenderTree/src/com/android/dumprendertree/WebViewEventSender.java
+++ b/tests/DumpRenderTree/src/com/android/dumprendertree/WebViewEventSender.java
@@ -357,11 +357,11 @@
     }
 
     private int contentsToWindowX(int x) {
-        return (int) (x * mWebView.getScale()) - mWebView.getScrollX();
+        return Math.round(x * mWebView.getScale()) - mWebView.getScrollX();
     }
 
     private int contentsToWindowY(int y) {
-        return (int) (y * mWebView.getScale()) - mWebView.getScrollY();
+        return Math.round(y * mWebView.getScale()) - mWebView.getScrollY();
     }
 
     private WebView mWebView = null;
diff --git a/tests/DumpRenderTree2/src/com/android/dumprendertree2/EventSenderImpl.java b/tests/DumpRenderTree2/src/com/android/dumprendertree2/EventSenderImpl.java
index d425734..af22039 100644
--- a/tests/DumpRenderTree2/src/com/android/dumprendertree2/EventSenderImpl.java
+++ b/tests/DumpRenderTree2/src/com/android/dumprendertree2/EventSenderImpl.java
@@ -73,8 +73,8 @@
     }
 
     private Point createViewPointFromContentCoordinates(int x, int y) {
-        return new Point((int)(x * mWebView.getScale()) - mWebView.getScrollX(),
-                         (int)(y * mWebView.getScale()) - mWebView.getScrollY());
+        return new Point(Math.round(x * mWebView.getScale()) - mWebView.getScrollX(),
+                         Math.round(y * mWebView.getScale()) - mWebView.getScrollY());
     }
 
     public static class TouchPoint {
diff --git a/tools/preload/Record.java b/tools/preload/Record.java
index 9d45a26..2f2ffaf 100644
--- a/tools/preload/Record.java
+++ b/tools/preload/Record.java
@@ -30,6 +30,8 @@
             "com.google.android.apps.maps\\u003Adriveabout",
             "com.google.android.apps.maps:LocationFriendService",
             "com.google.android.apps.maps\\u003ALocationFriendService",
+            "com.google.android.apps.maps:NetworkLocationService",
+            "com.google.android.apps.maps\\u003ANetworkLocationService",
     };
 
     enum Type {
@@ -69,7 +71,7 @@
 
     /** Record time (ns). */
     final long time;
-    
+
     /** Source file line# */
     int sourceLineNumber;
 
@@ -91,7 +93,7 @@
         for (int i = 0; i < REPLACE_CLASSES.length; i+= 2) {
             line = line.replace(REPLACE_CLASSES[i], REPLACE_CLASSES[i+1]);
         }
-        
+
         line = line.substring(1);
         String[] parts = line.split(":");
 
@@ -106,12 +108,12 @@
 
         time = Long.parseLong(parts[6]);
     }
-    
+
     /**
      * Decode any escaping that may have been written to the log line.
-     * 
+     *
      * Supports unicode-style escaping:  \\uXXXX = character in hex
-     * 
+     *
      * @param rawField the field as it was written into the log
      * @result the same field with any escaped characters replaced
      */
@@ -122,11 +124,11 @@
             String before = result.substring(0, offset);
             String escaped = result.substring(offset+2, offset+6);
             String after = result.substring(offset+6);
-            
+
             result = String.format("%s%c%s", before, Integer.parseInt(escaped, 16), after);
 
-            // find another but don't recurse  
-            offset = result.indexOf("\\u", offset + 1);          
+            // find another but don't recurse
+            offset = result.indexOf("\\u", offset + 1);
         }
         return result;
     }
@@ -135,13 +137,13 @@
      * Converts a VM-style name to a language-style name.
      */
     String vmTypeToLanguage(String typeName) {
-        // if the typename is (null), just return it as-is.  This is probably in dexopt and 
+        // if the typename is (null), just return it as-is.  This is probably in dexopt and
         // will be discarded anyway.  NOTE: This corresponds to the case in dalvik/vm/oo/Class.c
         // where dvmLinkClass() returns false and we clean up and exit.
         if ("(null)".equals(typeName)) {
             return typeName;
         }
-        
+
         if (!typeName.startsWith("L") || !typeName.endsWith(";") ) {
             throw new AssertionError("Bad name: " + typeName + " in line " + sourceLineNumber);
         }