Merge "WifiStateMachine: fix for exiting L2ConnectedState" into klp-dev
diff --git a/api/current.txt b/api/current.txt
index 9251d39..a8b5efd 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -20,13 +20,10 @@
     field public static final java.lang.String BATTERY_STATS = "android.permission.BATTERY_STATS";
     field public static final java.lang.String BIND_ACCESSIBILITY_SERVICE = "android.permission.BIND_ACCESSIBILITY_SERVICE";
     field public static final java.lang.String BIND_APPWIDGET = "android.permission.BIND_APPWIDGET";
-    field public static final java.lang.String BIND_CALL_SERVICE = "android.permission.BIND_CALL_SERVICE";
     field public static final java.lang.String BIND_DEVICE_ADMIN = "android.permission.BIND_DEVICE_ADMIN";
     field public static final java.lang.String BIND_INPUT_METHOD = "android.permission.BIND_INPUT_METHOD";
-    field public static final java.lang.String BIND_NFC_SERVICE = "android.permission.BIND_NFC_SERVICE";
     field public static final java.lang.String BIND_NOTIFICATION_LISTENER_SERVICE = "android.permission.BIND_NOTIFICATION_LISTENER_SERVICE";
     field public static final java.lang.String BIND_PRINT_SERVICE = "android.permission.BIND_PRINT_SERVICE";
-    field public static final java.lang.String BIND_PRINT_SPOOLER_SERVICE = "android.permission.BIND_PRINT_SPOOLER_SERVICE";
     field public static final java.lang.String BIND_REMOTEVIEWS = "android.permission.BIND_REMOTEVIEWS";
     field public static final java.lang.String BIND_TEXT_SERVICE = "android.permission.BIND_TEXT_SERVICE";
     field public static final java.lang.String BIND_VPN_SERVICE = "android.permission.BIND_VPN_SERVICE";
@@ -79,7 +76,6 @@
     field public static final java.lang.String LOCATION_HARDWARE = "android.permission.LOCATION_HARDWARE";
     field public static final java.lang.String MANAGE_ACCOUNTS = "android.permission.MANAGE_ACCOUNTS";
     field public static final java.lang.String MANAGE_APP_TOKENS = "android.permission.MANAGE_APP_TOKENS";
-    field public static final java.lang.String MANAGE_DEVICE_ADMINS = "android.permission.MANAGE_DEVICE_ADMINS";
     field public static final java.lang.String MANAGE_DOCUMENTS = "android.permission.MANAGE_DOCUMENTS";
     field public static final java.lang.String MASTER_CLEAR = "android.permission.MASTER_CLEAR";
     field public static final java.lang.String MEDIA_CONTENT_CONTROL = "android.permission.MEDIA_CONTENT_CONTROL";
@@ -4368,6 +4364,8 @@
     method public void clear() throws java.io.IOException;
     method public void clearWallpaperOffsets(android.os.IBinder);
     method public void forgetLoadedWallpaper();
+    method public android.graphics.drawable.Drawable getBuiltInDrawable();
+    method public android.graphics.drawable.Drawable getBuiltInDrawable(int, int, boolean, float, float);
     method public android.content.Intent getCropAndSetWallpaperIntent(android.net.Uri);
     method public int getDesiredMinimumHeight();
     method public int getDesiredMinimumWidth();
@@ -5759,6 +5757,7 @@
     method public static java.util.List<android.content.SyncInfo> getCurrentSyncs();
     method public static int getIsSyncable(android.accounts.Account, java.lang.String);
     method public static boolean getMasterSyncAutomatically();
+    method public java.util.List<android.content.UriPermission> getOutgoingPersistedUriPermissions();
     method public static java.util.List<android.content.PeriodicSync> getPeriodicSyncs(android.accounts.Account, java.lang.String);
     method public java.util.List<android.content.UriPermission> getPersistedUriPermissions();
     method public java.lang.String[] getStreamTypes(android.net.Uri, java.lang.String);
@@ -28397,6 +28396,7 @@
     field public static final int SYSTEM_UI_FLAG_FULLSCREEN = 4; // 0x4
     field public static final int SYSTEM_UI_FLAG_HIDE_NAVIGATION = 2; // 0x2
     field public static final int SYSTEM_UI_FLAG_IMMERSIVE = 2048; // 0x800
+    field public static final int SYSTEM_UI_FLAG_IMMERSIVE_STICKY = 4096; // 0x1000
     field public static final int SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN = 1024; // 0x400
     field public static final int SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION = 512; // 0x200
     field public static final int SYSTEM_UI_FLAG_LAYOUT_STABLE = 256; // 0x100
@@ -29285,6 +29285,7 @@
 
   public final class AccessibilityManager {
     method public boolean addAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener);
+    method public boolean addTouchExplorationStateChangeListener(android.view.accessibility.AccessibilityManager.TouchExplorationStateChangeListener);
     method public deprecated java.util.List<android.content.pm.ServiceInfo> getAccessibilityServiceList();
     method public java.util.List<android.accessibilityservice.AccessibilityServiceInfo> getEnabledAccessibilityServiceList(int);
     method public java.util.List<android.accessibilityservice.AccessibilityServiceInfo> getInstalledAccessibilityServiceList();
@@ -29292,6 +29293,7 @@
     method public boolean isEnabled();
     method public boolean isTouchExplorationEnabled();
     method public boolean removeAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener);
+    method public boolean removeTouchExplorationStateChangeListener(android.view.accessibility.AccessibilityManager.TouchExplorationStateChangeListener);
     method public void sendAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
   }
 
@@ -29299,6 +29301,10 @@
     method public abstract void onAccessibilityStateChanged(boolean);
   }
 
+  public static abstract interface AccessibilityManager.TouchExplorationStateChangeListener {
+    method public abstract void onTouchExplorationStateChanged(boolean);
+  }
+
   public class AccessibilityNodeInfo implements android.os.Parcelable {
     method public void addAction(int);
     method public void addChild(android.view.View);
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java
index a38fbbf..e29f8ea 100644
--- a/core/java/android/app/Activity.java
+++ b/core/java/android/app/Activity.java
@@ -1455,12 +1455,14 @@
     }
 
     /**
-     * Report to the system that your app is now fully drawn.  This is only used
-     * to help instrument app launch times, so that the app can report when it is
-     * fully in a usable state; without this, all the system can determine is when
-     * its window is first drawn and displayed.  To participate in app launch time
+     * Report to the system that your app is now fully drawn, purely for diagnostic
+     * purposes (calling it does not impact the visible behavior of the activity).
+     * This is only used to help instrument application launch times, so that the
+     * app can report when it is fully in a usable state; without this, the only thing
+     * the system itself can determine is the point at which the activity's window
+     * is <em>first</em> drawn and displayed.  To participate in app launch time
      * measurement, you should always call this method after first launch (when
-     * {@link #onCreate(android.os.Bundle)} is called) at the point where you have
+     * {@link #onCreate(android.os.Bundle)} is called), at the point where you have
      * entirely drawn your UI and populated with all of the significant data.  You
      * can safely call this method any time after first launch as well, in which case
      * it will simply be ignored.
diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java
index 1e65098..1067eb1 100644
--- a/core/java/android/app/ActivityManager.java
+++ b/core/java/android/app/ActivityManager.java
@@ -1463,7 +1463,10 @@
 
     /**
      * Permits an application to erase its own data from disk.  This is equivalent to
-     * the user choosing to clear the app's data from within the device settings UI.
+     * the user choosing to clear the app's data from within the device settings UI.  It
+     * erases all dynamic data associated with the app -- its private data and data in its
+     * private area on external storage -- but does not remove the installed application
+     * itself, nor any OBB files.
      *
      * @return {@code true} if the application successfully requested that the application's
      *     data be erased; {@code false} otherwise.
@@ -2253,7 +2256,9 @@
      * not be done on a UI thread.  The data will be written to the given file
      * descriptor as text.  An application must hold the
      * {@link android.Manifest.permission#DUMP} permission to make this call.
-     * @param fd The file descriptor that the dump should be written to.
+     * @param fd The file descriptor that the dump should be written to.  The file
+     * descriptor is <em>not</em> closed by this function; the caller continues to
+     * own it.
      * @param packageName The name of the package that is to be dumped.
      */
     public void dumpPackageState(FileDescriptor fd, String packageName) {
diff --git a/core/java/android/app/ActivityManagerNative.java b/core/java/android/app/ActivityManagerNative.java
index 961ee57..74266cc 100644
--- a/core/java/android/app/ActivityManagerNative.java
+++ b/core/java/android/app/ActivityManagerNative.java
@@ -1160,7 +1160,10 @@
 
         case GET_PERSISTED_URI_PERMISSIONS_TRANSACTION: {
             data.enforceInterface(IActivityManager.descriptor);
-            final ParceledListSlice<UriPermission> perms = getPersistedUriPermissions();
+            final String packageName = data.readString();
+            final boolean incoming = data.readInt() != 0;
+            final ParceledListSlice<UriPermission> perms = getPersistedUriPermissions(
+                    packageName, incoming);
             reply.writeNoException();
             perms.writeToParcel(reply, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
             return true;
@@ -3500,10 +3503,13 @@
     }
 
     @Override
-    public ParceledListSlice<UriPermission> getPersistedUriPermissions() throws RemoteException {
+    public ParceledListSlice<UriPermission> getPersistedUriPermissions(
+            String packageName, boolean incoming) throws RemoteException {
         Parcel data = Parcel.obtain();
         Parcel reply = Parcel.obtain();
         data.writeInterfaceToken(IActivityManager.descriptor);
+        data.writeString(packageName);
+        data.writeInt(incoming ? 1 : 0);
         mRemote.transact(GET_PERSISTED_URI_PERMISSIONS_TRANSACTION, data, reply, 0);
         reply.readException();
         final ParceledListSlice<UriPermission> perms = ParceledListSlice.CREATOR.createFromParcel(
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java
index b364af7..df63ab3 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -95,6 +95,7 @@
 import com.android.internal.util.FastPrintWriter;
 import com.android.internal.util.Objects;
 import com.android.org.conscrypt.OpenSSLSocketImpl;
+import com.google.android.collect.Lists;
 
 import java.io.File;
 import java.io.FileDescriptor;
@@ -1277,6 +1278,11 @@
                 }
             }
         }
+
+        @Override
+        public void scheduleInstallProvider(ProviderInfo provider) {
+            queueOrSendMessage(H.INSTALL_PROVIDER, provider);
+        }
     }
 
     private class H extends Handler {
@@ -1325,6 +1331,7 @@
         public static final int UNSTABLE_PROVIDER_DIED  = 142;
         public static final int REQUEST_ASSIST_CONTEXT_EXTRAS = 143;
         public static final int TRANSLUCENT_CONVERSION_COMPLETE = 144;
+        public static final int INSTALL_PROVIDER        = 145;
         String codeToString(int code) {
             if (DEBUG_MESSAGES) {
                 switch (code) {
@@ -1373,6 +1380,7 @@
                     case UNSTABLE_PROVIDER_DIED: return "UNSTABLE_PROVIDER_DIED";
                     case REQUEST_ASSIST_CONTEXT_EXTRAS: return "REQUEST_ASSIST_CONTEXT_EXTRAS";
                     case TRANSLUCENT_CONVERSION_COMPLETE: return "TRANSLUCENT_CONVERSION_COMPLETE";
+                    case INSTALL_PROVIDER: return "INSTALL_PROVIDER";
                 }
             }
             return Integer.toString(code);
@@ -1590,6 +1598,9 @@
                 case TRANSLUCENT_CONVERSION_COMPLETE:
                     handleTranslucentConversionComplete((IBinder)msg.obj, msg.arg1 == 1);
                     break;
+                case INSTALL_PROVIDER:
+                    handleInstallProvider((ProviderInfo) msg.obj);
+                    break;
             }
             if (DEBUG_MESSAGES) Slog.v(TAG, "<<< done: " + codeToString(msg.what));
         }
@@ -2330,6 +2341,10 @@
         }
     }
 
+    public void handleInstallProvider(ProviderInfo info) {
+        installContentProviders(mInitialApplication, Lists.newArrayList(info));
+    }
+
     private static final ThreadLocal<Intent> sCurrentBroadcastIntent = new ThreadLocal<Intent>();
 
     /**
@@ -4636,15 +4651,14 @@
             if (DEBUG_PROVIDER) Slog.v(TAG, "Cleaning up dead provider "
                     + provider + " " + prc.holder.info.name);
             mProviderRefCountMap.remove(provider);
-            if (prc.client != null && prc.client.mNames != null) {
-                for (String name : prc.client.mNames) {
-                    ProviderClientRecord pr = mProviderMap.get(name);
-                    if (pr != null && pr.mProvider.asBinder() == provider) {
-                        Slog.i(TAG, "Removing dead content provider: " + name);
-                        mProviderMap.remove(name);
-                    }
+            for (int i=mProviderMap.size()-1; i>=0; i--) {
+                ProviderClientRecord pr = mProviderMap.valueAt(i);
+                if (pr != null && pr.mProvider.asBinder() == provider) {
+                    Slog.i(TAG, "Removing dead content provider:" + pr.mProvider.toString());
+                    mProviderMap.removeAt(i);
                 }
             }
+
             if (fromClient) {
                 // We found out about this due to execution in our client
                 // code.  Tell the activity manager about it now, to ensure
diff --git a/core/java/android/app/ApplicationThreadNative.java b/core/java/android/app/ApplicationThreadNative.java
index e40a04b..347d43f 100644
--- a/core/java/android/app/ApplicationThreadNative.java
+++ b/core/java/android/app/ApplicationThreadNative.java
@@ -618,6 +618,15 @@
             reply.writeNoException();
             return true;
         }
+
+        case SCHEDULE_INSTALL_PROVIDER_TRANSACTION:
+        {
+            data.enforceInterface(IApplicationThread.descriptor);
+            ProviderInfo provider = ProviderInfo.CREATOR.createFromParcel(data);
+            scheduleInstallProvider(provider);
+            reply.writeNoException();
+            return true;
+        }
         }
 
         return super.onTransact(code, data, reply, flags);
@@ -1248,4 +1257,13 @@
         mRemote.transact(SET_PROCESS_STATE_TRANSACTION, data, null, IBinder.FLAG_ONEWAY);
         data.recycle();
     }
+
+    @Override
+    public void scheduleInstallProvider(ProviderInfo provider) throws RemoteException {
+        Parcel data = Parcel.obtain();
+        data.writeInterfaceToken(IApplicationThread.descriptor);
+        provider.writeToParcel(data, 0);
+        mRemote.transact(SCHEDULE_INSTALL_PROVIDER_TRANSACTION, data, null, IBinder.FLAG_ONEWAY);
+        data.recycle();
+    }
 }
diff --git a/core/java/android/app/IActivityManager.java b/core/java/android/app/IActivityManager.java
index dfea736..77c2ea0 100644
--- a/core/java/android/app/IActivityManager.java
+++ b/core/java/android/app/IActivityManager.java
@@ -215,7 +215,8 @@
             int mode) throws RemoteException;
     public void takePersistableUriPermission(Uri uri, int modeFlags) throws RemoteException;
     public void releasePersistableUriPermission(Uri uri, int modeFlags) throws RemoteException;
-    public ParceledListSlice<UriPermission> getPersistedUriPermissions() throws RemoteException;
+    public ParceledListSlice<UriPermission> getPersistedUriPermissions(
+            String packageName, boolean incoming) throws RemoteException;
 
     public void showWaitingForDebugger(IApplicationThread who, boolean waiting)
             throws RemoteException;
diff --git a/core/java/android/app/IApplicationThread.java b/core/java/android/app/IApplicationThread.java
index 43a5fbd..d0cc1bb 100644
--- a/core/java/android/app/IApplicationThread.java
+++ b/core/java/android/app/IApplicationThread.java
@@ -137,6 +137,7 @@
     void scheduleTranslucentConversionComplete(IBinder token, boolean timeout)
             throws RemoteException;
     void setProcessState(int state) throws RemoteException;
+    void scheduleInstallProvider(ProviderInfo provider) throws RemoteException;
 
     String descriptor = "android.app.IApplicationThread";
 
@@ -189,4 +190,5 @@
     int REQUEST_ASSIST_CONTEXT_EXTRAS_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+47;
     int SCHEDULE_TRANSLUCENT_CONVERSION_COMPLETE_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+48;
     int SET_PROCESS_STATE_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+49;
+    int SCHEDULE_INSTALL_PROVIDER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+50;
 }
diff --git a/core/java/android/app/WallpaperManager.java b/core/java/android/app/WallpaperManager.java
index 2bc7cbf..c39415f 100644
--- a/core/java/android/app/WallpaperManager.java
+++ b/core/java/android/app/WallpaperManager.java
@@ -16,7 +16,6 @@
 
 package android.app;
 
-import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
 import android.content.pm.PackageManager;
@@ -24,13 +23,16 @@
 import android.content.res.Resources;
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
+import android.graphics.BitmapRegionDecoder;
 import android.graphics.Canvas;
 import android.graphics.ColorFilter;
+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.graphics.RectF;
 import android.graphics.drawable.BitmapDrawable;
 import android.graphics.drawable.Drawable;
 import android.net.Uri;
@@ -47,6 +49,7 @@
 import android.view.WindowManager;
 import android.view.WindowManagerGlobal;
 
+import java.io.BufferedInputStream;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
@@ -367,7 +370,7 @@
     
     /**
      * Retrieve the current system wallpaper; if
-     * no wallpaper is set, the system default wallpaper is returned.
+     * no wallpaper is set, the system built-in static wallpaper is returned.
      * This is returned as an
      * abstract Drawable that you can install in a View to display whatever
      * wallpaper the user has currently set. 
@@ -385,6 +388,178 @@
     }
 
     /**
+     * Returns a drawable for the system built-in static wallpaper .
+     *
+     */
+    public Drawable getBuiltInDrawable() {
+        return getBuiltInDrawable(0, 0, false, 0, 0);
+    }
+
+    /**
+     * Returns a drawable for the system built-in static wallpaper. Based on the parameters, the
+     * drawable can be cropped and scaled
+     *
+     * @param outWidth The width of the returned drawable
+     * @param outWidth The height of the returned drawable
+     * @param scaleToFit If true, scale the wallpaper down rather than just cropping it
+     * @param horizontalAlignment A float value between 0 and 1 specifying where to crop the image;
+     *        0 for left-aligned, 0.5 for horizontal center-aligned, and 1 for right-aligned
+     * @param verticalAlignment A float value between 0 and 1 specifying where to crop the image;
+     *        0 for top-aligned, 0.5 for vertical center-aligned, and 1 for bottom-aligned
+     *
+     */
+    public Drawable getBuiltInDrawable(int outWidth, int outHeight,
+            boolean scaleToFit, float horizontalAlignment, float verticalAlignment) {
+        if (sGlobals.mService == null) {
+            Log.w(TAG, "WallpaperService not running");
+            return null;
+        }
+        Resources resources = mContext.getResources();
+        horizontalAlignment = Math.max(0, Math.min(1, horizontalAlignment));
+        verticalAlignment = Math.max(0, Math.min(1, verticalAlignment));
+
+        InputStream is = new BufferedInputStream(
+                resources.openRawResource(com.android.internal.R.drawable.default_wallpaper));
+
+        if (is == null) {
+            Log.e(TAG, "default wallpaper input stream is null");
+            return null;
+        } else {
+            if (outWidth <= 0 || outHeight <= 0) {
+                Bitmap fullSize = BitmapFactory.decodeStream(is, null, null);
+                return new BitmapDrawable(resources, fullSize);
+            } else {
+                int inWidth;
+                int inHeight;
+                {
+                    BitmapFactory.Options options = new BitmapFactory.Options();
+                    options.inJustDecodeBounds = true;
+                    BitmapFactory.decodeStream(is, null, options);
+                    if (options.outWidth != 0 && options.outHeight != 0) {
+                        inWidth = options.outWidth;
+                        inHeight = options.outHeight;
+                    } else {
+                        Log.e(TAG, "default wallpaper dimensions are 0");
+                        return null;
+                    }
+                }
+
+                is = new BufferedInputStream(resources.openRawResource(
+                        com.android.internal.R.drawable.default_wallpaper));
+
+                RectF cropRectF;
+
+                outWidth = Math.min(inWidth, outWidth);
+                outHeight = Math.min(inHeight, outHeight);
+                if (scaleToFit) {
+                    cropRectF = getMaxCropRect(inWidth, inHeight, outWidth, outHeight,
+                        horizontalAlignment, verticalAlignment);
+                } else {
+                    float left = (inWidth - outWidth) * horizontalAlignment;
+                    float right = left + outWidth;
+                    float top = (inHeight - outHeight) * verticalAlignment;
+                    float bottom = top + outHeight;
+                    cropRectF = new RectF(bottom, left, right, top);
+                }
+                Rect roundedTrueCrop = new Rect();
+                cropRectF.roundOut(roundedTrueCrop);
+
+                if (roundedTrueCrop.width() <= 0 || roundedTrueCrop.height() <= 0) {
+                    Log.w(TAG, "crop has bad values for full size image");
+                    return null;
+                }
+
+                // See how much we're reducing the size of the image
+                int scaleDownSampleSize = Math.min(roundedTrueCrop.width() / outWidth,
+                        roundedTrueCrop.height() / outHeight);
+
+                // Attempt to open a region decoder
+                BitmapRegionDecoder decoder = null;
+                try {
+                    decoder = BitmapRegionDecoder.newInstance(is, true);
+                } catch (IOException e) {
+                    Log.w(TAG, "cannot open region decoder for default wallpaper");
+                }
+
+                Bitmap crop = null;
+                if (decoder != null) {
+                    // Do region decoding to get crop bitmap
+                    BitmapFactory.Options options = new BitmapFactory.Options();
+                    if (scaleDownSampleSize > 1) {
+                        options.inSampleSize = scaleDownSampleSize;
+                    }
+                    crop = decoder.decodeRegion(roundedTrueCrop, options);
+                    decoder.recycle();
+                }
+
+                if (crop == null) {
+                    // BitmapRegionDecoder has failed, try to crop in-memory
+                    is = new BufferedInputStream(resources.openRawResource(
+                            com.android.internal.R.drawable.default_wallpaper));
+                    Bitmap fullSize = null;
+                    if (is != null) {
+                        BitmapFactory.Options options = new BitmapFactory.Options();
+                        if (scaleDownSampleSize > 1) {
+                            options.inSampleSize = scaleDownSampleSize;
+                        }
+                        fullSize = BitmapFactory.decodeStream(is, null, options);
+                    }
+                    if (fullSize != null) {
+                        crop = Bitmap.createBitmap(fullSize, roundedTrueCrop.left,
+                                roundedTrueCrop.top, roundedTrueCrop.width(),
+                                roundedTrueCrop.height());
+                    }
+                }
+
+                if (crop == null) {
+                    Log.w(TAG, "cannot decode default wallpaper");
+                    return null;
+                }
+
+                // Scale down if necessary
+                if (outWidth > 0 && outHeight > 0 &&
+                        (crop.getWidth() != outWidth || crop.getHeight() != outHeight)) {
+                    Matrix m = new Matrix();
+                    RectF cropRect = new RectF(0, 0, crop.getWidth(), crop.getHeight());
+                    RectF returnRect = new RectF(0, 0, outWidth, outHeight);
+                    m.setRectToRect(cropRect, returnRect, Matrix.ScaleToFit.FILL);
+                    Bitmap tmp = Bitmap.createBitmap((int) returnRect.width(),
+                            (int) returnRect.height(), Bitmap.Config.ARGB_8888);
+                    if (tmp != null) {
+                        Canvas c = new Canvas(tmp);
+                        Paint p = new Paint();
+                        p.setFilterBitmap(true);
+                        c.drawBitmap(crop, m, p);
+                        crop = tmp;
+                    }
+                }
+
+                return new BitmapDrawable(resources, crop);
+            }
+        }
+    }
+
+    private static RectF getMaxCropRect(int inWidth, int inHeight, int outWidth, int outHeight,
+                float horizontalAlignment, float verticalAlignment) {
+        RectF cropRect = new RectF();
+        // Get a crop rect that will fit this
+        if (inWidth / (float) inHeight > outWidth / (float) outHeight) {
+             cropRect.top = 0;
+             cropRect.bottom = inHeight;
+             float cropWidth = outWidth * (inHeight / (float) outHeight);
+             cropRect.left = (inWidth - cropWidth) * horizontalAlignment;
+             cropRect.right = cropRect.left + cropWidth;
+        } else {
+            cropRect.left = 0;
+            cropRect.right = inWidth;
+            float cropHeight = outHeight * (inWidth / (float) outWidth);
+            cropRect.top = (inHeight - cropHeight) * verticalAlignment;
+            cropRect.bottom = cropRect.top + cropHeight;
+        }
+        return cropRect;
+    }
+
+    /**
      * Retrieve the current system wallpaper; if there is no wallpaper set,
      * a null pointer is returned. This is returned as an
      * abstract Drawable that you can install in a View to display whatever
@@ -519,7 +694,7 @@
      *
      * @param resid The bitmap to save.
      *
-     * @throws IOException If an error occurs reverting to the default
+     * @throws IOException If an error occurs reverting to the built-in
      * wallpaper.
      */
     public void setResource(int resid) throws IOException {
@@ -558,7 +733,7 @@
      *
      * @param bitmap The bitmap to save.
      *
-     * @throws IOException If an error occurs reverting to the default
+     * @throws IOException If an error occurs reverting to the built-in
      * wallpaper.
      */
     public void setBitmap(Bitmap bitmap) throws IOException {
@@ -597,7 +772,7 @@
      *
      * @param data A stream containing the raw data to install as a wallpaper.
      *
-     * @throws IOException If an error occurs reverting to the default
+     * @throws IOException If an error occurs reverting to the built-in
      * wallpaper.
      */
     public void setStream(InputStream data) throws IOException {
@@ -819,14 +994,14 @@
     }
     
     /**
-     * Remove any currently set wallpaper, reverting to the system's default
+     * Remove any currently set wallpaper, reverting to the system's built-in
      * wallpaper. On success, the intent {@link Intent#ACTION_WALLPAPER_CHANGED}
      * is broadcast.
      *
      * <p>This method requires the caller to hold the permission
      * {@link android.Manifest.permission#SET_WALLPAPER}.
      *
-     * @throws IOException If an error occurs reverting to the default
+     * @throws IOException If an error occurs reverting to the built-in
      * wallpaper.
      */
     public void clear() throws IOException {
diff --git a/core/java/android/content/ContentResolver.java b/core/java/android/content/ContentResolver.java
index 916a6cd..49dfdb5 100644
--- a/core/java/android/content/ContentResolver.java
+++ b/core/java/android/content/ContentResolver.java
@@ -1659,8 +1659,9 @@
     }
 
     /**
-     * Return list of all Uri permission grants that have been persisted for the
-     * calling app. Only persistable grants taken with
+     * Return list of all Uri permission grants that have been persisted by the
+     * calling app. That is, the returned permissions have been granted
+     * <em>to</em> the calling app. Only persistable grants taken with
      * {@link #takePersistableUriPermission(Uri, int)} are returned.
      *
      * @see #takePersistableUriPermission(Uri, int)
@@ -1668,7 +1669,23 @@
      */
     public List<UriPermission> getPersistedUriPermissions() {
         try {
-            return ActivityManagerNative.getDefault().getPersistedUriPermissions().getList();
+            return ActivityManagerNative.getDefault()
+                    .getPersistedUriPermissions(mPackageName, true).getList();
+        } catch (RemoteException e) {
+            throw new RuntimeException("Activity manager has died", e);
+        }
+    }
+
+    /**
+     * Return list of all persisted Uri permission grants that are hosted by the
+     * calling app. That is, the returned permissions have been granted
+     * <em>from</em> the calling app. Only grants taken with
+     * {@link #takePersistableUriPermission(Uri, int)} are returned.
+     */
+    public List<UriPermission> getOutgoingPersistedUriPermissions() {
+        try {
+            return ActivityManagerNative.getDefault()
+                    .getPersistedUriPermissions(mPackageName, false).getList();
         } catch (RemoteException e) {
             throw new RuntimeException("Activity manager has died", e);
         }
diff --git a/core/java/android/content/IntentFilter.java b/core/java/android/content/IntentFilter.java
index 5760a5d..dad0dfb 100644
--- a/core/java/android/content/IntentFilter.java
+++ b/core/java/android/content/IntentFilter.java
@@ -722,6 +722,14 @@
      * included in the filter, then an Intent's data must match one of
      * them.  If no scheme specific parts are included, then only the scheme must match.
      *
+     * <p>The "scheme specific part" that this matches against is the string returned
+     * by {@link android.net.Uri#getSchemeSpecificPart() Uri.getSchemeSpecificPart}.
+     * For Uris that contain a path, this kind of matching is not generally of interest,
+     * since {@link #addDataAuthority(String, String)} and
+     * {@link #addDataPath(String, int)} can provide a better mechanism for matching
+     * them.  However, for Uris that do not contain a path, the authority and path
+     * are empty, so this is the only way to match against the non-scheme part.</p>
+     *
      * @param ssp Either a raw string that must exactly match the scheme specific part
      * path, or a simple pattern, depending on <var>type</var>.
      * @param type Determines how <var>ssp</var> will be compared to
diff --git a/core/java/android/hardware/camera2/CaptureRequest.java b/core/java/android/hardware/camera2/CaptureRequest.java
index f30bcc5..898f123 100644
--- a/core/java/android/hardware/camera2/CaptureRequest.java
+++ b/core/java/android/hardware/camera2/CaptureRequest.java
@@ -82,6 +82,7 @@
     private CaptureRequest(CaptureRequest source) {
         mSettings = new CameraMetadataNative(source.mSettings);
         mSurfaceSet = (HashSet<Surface>) source.mSurfaceSet.clone();
+        mUserTag = source.mUserTag;
     }
 
     /**
diff --git a/core/java/android/inputmethodservice/InputMethodService.java b/core/java/android/inputmethodservice/InputMethodService.java
index 9319d4a..1b7d9ea 100644
--- a/core/java/android/inputmethodservice/InputMethodService.java
+++ b/core/java/android/inputmethodservice/InputMethodService.java
@@ -687,6 +687,8 @@
         mThemeAttrs = obtainStyledAttributes(android.R.styleable.InputMethodService);
         mRootView = mInflater.inflate(
                 com.android.internal.R.layout.input_method, null);
+        mRootView.setSystemUiVisibility(
+                View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
         mWindow.setContentView(mRootView);
         mRootView.getViewTreeObserver().addOnComputeInternalInsetsListener(mInsetsComputer);
         if (Settings.Global.getInt(getContentResolver(),
diff --git a/core/java/android/os/Environment.java b/core/java/android/os/Environment.java
index fc53580..db5cf1c 100644
--- a/core/java/android/os/Environment.java
+++ b/core/java/android/os/Environment.java
@@ -24,9 +24,11 @@
 import android.util.Log;
 
 import com.android.internal.annotations.GuardedBy;
+import com.google.android.collect.Lists;
 
 import java.io.File;
 import java.io.IOException;
+import java.util.ArrayList;
 
 /**
  * Provides access to environment variables.
@@ -38,6 +40,7 @@
     private static final String ENV_EMULATED_STORAGE_SOURCE = "EMULATED_STORAGE_SOURCE";
     private static final String ENV_EMULATED_STORAGE_TARGET = "EMULATED_STORAGE_TARGET";
     private static final String ENV_MEDIA_STORAGE = "MEDIA_STORAGE";
+    private static final String ENV_SECONDARY_STORAGE = "SECONDARY_STORAGE";
     private static final String ENV_ANDROID_ROOT = "ANDROID_ROOT";
 
     /** {@hide} */
@@ -107,7 +110,6 @@
     /** {@hide} */
     public static class UserEnvironment {
         // TODO: generalize further to create package-specific environment
-        // TODO: add support for secondary external storage
 
         /** External storage dirs, as visible to vold */
         private final File[] mExternalDirsForVold;
@@ -121,11 +123,15 @@
             String rawExternalStorage = System.getenv(ENV_EXTERNAL_STORAGE);
             String rawEmulatedSource = System.getenv(ENV_EMULATED_STORAGE_SOURCE);
             String rawEmulatedTarget = System.getenv(ENV_EMULATED_STORAGE_TARGET);
+
             String rawMediaStorage = System.getenv(ENV_MEDIA_STORAGE);
             if (TextUtils.isEmpty(rawMediaStorage)) {
                 rawMediaStorage = "/data/media";
             }
 
+            ArrayList<File> externalForVold = Lists.newArrayList();
+            ArrayList<File> externalForApp = Lists.newArrayList();
+
             if (!TextUtils.isEmpty(rawEmulatedTarget)) {
                 // Device has emulated storage; external storage paths should have
                 // userId burned into them.
@@ -135,8 +141,8 @@
                 final File mediaBase = new File(rawMediaStorage);
 
                 // /storage/emulated/0
-                mExternalDirsForVold = new File[] { buildPath(emulatedSourceBase, rawUserId) };
-                mExternalDirsForApp = new File[] { buildPath(emulatedTargetBase, rawUserId) };
+                externalForVold.add(buildPath(emulatedSourceBase, rawUserId));
+                externalForApp.add(buildPath(emulatedTargetBase, rawUserId));
                 // /data/media/0
                 mEmulatedDirForDirect = buildPath(mediaBase, rawUserId);
 
@@ -148,11 +154,23 @@
                 }
 
                 // /storage/sdcard0
-                mExternalDirsForVold = new File[] { new File(rawExternalStorage) };
-                mExternalDirsForApp = new File[] { new File(rawExternalStorage) };
+                externalForVold.add(new File(rawExternalStorage));
+                externalForApp.add(new File(rawExternalStorage));
                 // /data/media
                 mEmulatedDirForDirect = new File(rawMediaStorage);
             }
+
+            // Splice in any secondary storage paths, but only for owner
+            final String rawSecondaryStorage = System.getenv(ENV_SECONDARY_STORAGE);
+            if (!TextUtils.isEmpty(rawSecondaryStorage) && userId == UserHandle.USER_OWNER) {
+                for (String secondaryPath : rawSecondaryStorage.split(":")) {
+                    externalForVold.add(new File(secondaryPath));
+                    externalForApp.add(new File(secondaryPath));
+                }
+            }
+
+            mExternalDirsForVold = externalForVold.toArray(new File[externalForVold.size()]);
+            mExternalDirsForApp = externalForApp.toArray(new File[externalForApp.size()]);
         }
 
         @Deprecated
diff --git a/core/java/android/provider/DocumentsContract.java b/core/java/android/provider/DocumentsContract.java
index 1c14c38..c5e4f21 100644
--- a/core/java/android/provider/DocumentsContract.java
+++ b/core/java/android/provider/DocumentsContract.java
@@ -23,8 +23,7 @@
 import android.content.ContentResolver;
 import android.content.Context;
 import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.content.pm.ProviderInfo;
+import android.content.pm.ResolveInfo;
 import android.content.res.AssetFileDescriptor;
 import android.database.Cursor;
 import android.graphics.Bitmap;
@@ -69,16 +68,15 @@
     private DocumentsContract() {
     }
 
-    /** {@hide} */
-    @Deprecated
-    public static final String META_DATA_DOCUMENT_PROVIDER = "android.content.DOCUMENT_PROVIDER";
-
     /**
      * Intent action used to identify {@link DocumentsProvider} instances.
      */
     public static final String PROVIDER_INTERFACE = "android.content.action.DOCUMENTS_PROVIDER";
 
     /** {@hide} */
+    public static final String EXTRA_PACKAGE_NAME = "android.content.extra.PACKAGE_NAME";
+
+    /** {@hide} */
     public static final String ACTION_MANAGE_ROOT = "android.provider.action.MANAGE_ROOT";
     /** {@hide} */
     public static final String ACTION_MANAGE_DOCUMENT = "android.provider.action.MANAGE_DOCUMENT";
@@ -565,11 +563,13 @@
             return false;
         }
 
-        final ProviderInfo info = context.getPackageManager()
-                .resolveContentProvider(uri.getAuthority(), PackageManager.GET_META_DATA);
-        if (info != null && info.metaData != null && info.metaData.containsKey(
-                DocumentsContract.META_DATA_DOCUMENT_PROVIDER)) {
-            return true;
+        final Intent intent = new Intent(PROVIDER_INTERFACE);
+        final List<ResolveInfo> infos = context.getPackageManager()
+                .queryIntentContentProviders(intent, 0);
+        for (ResolveInfo info : infos) {
+            if (uri.getAuthority().equals(info.providerInfo.authority)) {
+                return true;
+            }
         }
         return false;
     }
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 50777fd..6f1c6ba 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -5920,6 +5920,16 @@
         public static final String DEVELOPMENT_FORCE_RTL = "debug.force_rtl";
 
         /**
+         * Milliseconds after screen-off after which low battery sounds will be silenced.
+         *
+         * If zero, battery sounds will always play.
+         * Defaults to @integer/def_low_battery_sound_timeout in SettingsProvider.
+         *
+         * @hide
+         */
+        public static final String LOW_BATTERY_SOUND_TIMEOUT = "low_battery_sound_timeout";
+
+        /**
          * Settings to backup. This is here so that it's in the same place as the settings
          * keys and easy to update.
          *
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index caeb1d8..01da6b3 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -1738,47 +1738,41 @@
     /**
      * Masks for mPrivateFlags2, as generated by dumpFlags():
      *
-     * -------|-------|-------|-------|
-     *                                  PFLAG2_TEXT_ALIGNMENT_FLAGS[0]
-     *                                  PFLAG2_TEXT_DIRECTION_FLAGS[0]
-     *                                1 PFLAG2_DRAG_CAN_ACCEPT
-     *                               1  PFLAG2_DRAG_HOVERED
-     *                               1  PFLAG2_LAYOUT_DIRECTION_MASK_SHIFT
-     *                              11  PFLAG2_TEXT_DIRECTION_MASK_SHIFT
-     *                             1 1  PFLAG2_TEXT_DIRECTION_RESOLVED_MASK_SHIFT
-     *                             11   PFLAG2_LAYOUT_DIRECTION_MASK
-     *                             11 1 PFLAG2_TEXT_ALIGNMENT_MASK_SHIFT
-     *                            1     PFLAG2_LAYOUT_DIRECTION_RESOLVED_RTL
-     *                            1   1 PFLAG2_TEXT_ALIGNMENT_RESOLVED_MASK_SHIFT
-     *                            1 1   PFLAG2_IMPORTANT_FOR_ACCESSIBILITY_SHIFT
-     *                           1      PFLAG2_LAYOUT_DIRECTION_RESOLVED
-     *                           11     PFLAG2_LAYOUT_DIRECTION_RESOLVED_MASK
-     *                          1       PFLAG2_TEXT_DIRECTION_FLAGS[1]
-     *                         1        PFLAG2_TEXT_DIRECTION_FLAGS[2]
-     *                         11       PFLAG2_TEXT_DIRECTION_FLAGS[3]
-     *                        1         PFLAG2_TEXT_DIRECTION_FLAGS[4]
-     *                        1 1       PFLAG2_TEXT_DIRECTION_FLAGS[5]
-     *                        111       PFLAG2_TEXT_DIRECTION_MASK
-     *                       1          PFLAG2_TEXT_DIRECTION_RESOLVED
-     *                      1           PFLAG2_TEXT_DIRECTION_RESOLVED_DEFAULT
-     *                    111           PFLAG2_TEXT_DIRECTION_RESOLVED_MASK
-     *                   1              PFLAG2_TEXT_ALIGNMENT_FLAGS[1]
-     *                  1               PFLAG2_TEXT_ALIGNMENT_FLAGS[2]
-     *                  11              PFLAG2_TEXT_ALIGNMENT_FLAGS[3]
-     *                 1                PFLAG2_TEXT_ALIGNMENT_FLAGS[4]
-     *                 1 1              PFLAG2_TEXT_ALIGNMENT_FLAGS[5]
-     *                 11               PFLAG2_TEXT_ALIGNMENT_FLAGS[6]
-     *                 111              PFLAG2_TEXT_ALIGNMENT_MASK
-     *                1                 PFLAG2_TEXT_ALIGNMENT_RESOLVED
-     *               1                  PFLAG2_TEXT_ALIGNMENT_RESOLVED_DEFAULT
-     *             111                  PFLAG2_TEXT_ALIGNMENT_RESOLVED_MASK
-     *           11                     PFLAG2_IMPORTANT_FOR_ACCESSIBILITY_MASK
-     *          1                       PFLAG2_HAS_TRANSIENT_STATE
-     *      1                           PFLAG2_ACCESSIBILITY_FOCUSED
-     *     1                            PFLAG2_ACCESSIBILITY_STATE_CHANGED
-     *    1                             PFLAG2_VIEW_QUICK_REJECTED
-     *   1                              PFLAG2_PADDING_RESOLVED
-     * -------|-------|-------|-------|
+     * |-------|-------|-------|-------|
+     *                                 1 PFLAG2_DRAG_CAN_ACCEPT
+     *                                1  PFLAG2_DRAG_HOVERED
+     *                              11   PFLAG2_LAYOUT_DIRECTION_MASK
+     *                             1     PFLAG2_LAYOUT_DIRECTION_RESOLVED_RTL
+     *                            1      PFLAG2_LAYOUT_DIRECTION_RESOLVED
+     *                            11     PFLAG2_LAYOUT_DIRECTION_RESOLVED_MASK
+     *                           1       PFLAG2_TEXT_DIRECTION_FLAGS[1]
+     *                          1        PFLAG2_TEXT_DIRECTION_FLAGS[2]
+     *                          11       PFLAG2_TEXT_DIRECTION_FLAGS[3]
+     *                         1         PFLAG2_TEXT_DIRECTION_FLAGS[4]
+     *                         1 1       PFLAG2_TEXT_DIRECTION_FLAGS[5]
+     *                         111       PFLAG2_TEXT_DIRECTION_MASK
+     *                        1          PFLAG2_TEXT_DIRECTION_RESOLVED
+     *                       1           PFLAG2_TEXT_DIRECTION_RESOLVED_DEFAULT
+     *                     111           PFLAG2_TEXT_DIRECTION_RESOLVED_MASK
+     *                    1              PFLAG2_TEXT_ALIGNMENT_FLAGS[1]
+     *                   1               PFLAG2_TEXT_ALIGNMENT_FLAGS[2]
+     *                   11              PFLAG2_TEXT_ALIGNMENT_FLAGS[3]
+     *                  1                PFLAG2_TEXT_ALIGNMENT_FLAGS[4]
+     *                  1 1              PFLAG2_TEXT_ALIGNMENT_FLAGS[5]
+     *                  11               PFLAG2_TEXT_ALIGNMENT_FLAGS[6]
+     *                  111              PFLAG2_TEXT_ALIGNMENT_MASK
+     *                 1                 PFLAG2_TEXT_ALIGNMENT_RESOLVED
+     *                1                  PFLAG2_TEXT_ALIGNMENT_RESOLVED_DEFAULT
+     *              111                  PFLAG2_TEXT_ALIGNMENT_RESOLVED_MASK
+     *           111                     PFLAG2_IMPORTANT_FOR_ACCESSIBILITY_MASK
+     *         11                        PFLAG2_ACCESSIBILITY_LIVE_REGION_MASK
+     *       1                           PFLAG2_ACCESSIBILITY_FOCUSED
+     *      1                            PFLAG2_SUBTREE_ACCESSIBILITY_STATE_CHANGED
+     *     1                             PFLAG2_VIEW_QUICK_REJECTED
+     *    1                              PFLAG2_PADDING_RESOLVED
+     *   1                               PFLAG2_DRAWABLE_RESOLVED
+     *  1                                PFLAG2_HAS_TRANSIENT_STATE
+     * |-------|-------|-------|-------|
      */
 
     /**
@@ -1876,15 +1870,6 @@
     static final int LAYOUT_DIRECTION_RESOLVED_DEFAULT = LAYOUT_DIRECTION_LTR;
 
     /**
-     * Indicates that the view is tracking some sort of transient state
-     * that the app should not need to be aware of, but that the framework
-     * should take special care to preserve.
-     *
-     * @hide
-     */
-    static final int PFLAG2_HAS_TRANSIENT_STATE = 0x1 << 22;
-
-    /**
      * Text direction is inherited thru {@link ViewGroup}
      */
     public static final int TEXT_DIRECTION_INHERIT = 0;
@@ -2216,6 +2201,13 @@
     static final int PFLAG2_DRAWABLE_RESOLVED = 0x40000000;
 
     /**
+     * Indicates that the view is tracking some sort of transient state
+     * that the app should not need to be aware of, but that the framework
+     * should take special care to preserve.
+     */
+    static final int PFLAG2_HAS_TRANSIENT_STATE = 0x80000000;
+
+    /**
      * Group of bits indicating that RTL properties resolution is done.
      */
     static final int ALL_RTL_PROPERTIES_RESOLVED = PFLAG2_LAYOUT_DIRECTION_RESOLVED |
@@ -2431,6 +2423,16 @@
 
     /**
      * Flag for {@link #setSystemUiVisibility(int)}: View would like to remain interactive when
+     * hiding the navigation bar with {@link #SYSTEM_UI_FLAG_HIDE_NAVIGATION}.  If this flag is
+     * not set, {@link #SYSTEM_UI_FLAG_HIDE_NAVIGATION} will be force cleared by the system on any
+     * user interaction.
+     * <p>Since this flag is a modifier for {@link #SYSTEM_UI_FLAG_HIDE_NAVIGATION}, it only
+     * has an effect when used in combination with that flag.</p>
+     */
+    public static final int SYSTEM_UI_FLAG_IMMERSIVE = 0x00000800;
+
+    /**
+     * Flag for {@link #setSystemUiVisibility(int)}: View would like to remain interactive when
      * hiding the status bar with {@link #SYSTEM_UI_FLAG_FULLSCREEN} and/or hiding the navigation
      * bar with {@link #SYSTEM_UI_FLAG_HIDE_NAVIGATION}.  Use this flag to create an immersive
      * experience while also hiding the system bars.  If this flag is not set,
@@ -2445,7 +2447,7 @@
      * {@link #SYSTEM_UI_FLAG_HIDE_NAVIGATION}, it only has an effect when used in combination
      * with one or both of those flags.</p>
      */
-    public static final int SYSTEM_UI_FLAG_IMMERSIVE = 0x00000800;
+    public static final int SYSTEM_UI_FLAG_IMMERSIVE_STICKY = 0x00001000;
 
     /**
      * @deprecated Use {@link #SYSTEM_UI_FLAG_LOW_PROFILE} instead.
@@ -7090,12 +7092,18 @@
      * @see #IMPORTANT_FOR_ACCESSIBILITY_AUTO
      */
     public void setImportantForAccessibility(int mode) {
-        final boolean oldIncludeForAccessibility = includeForAccessibility();
-        if (mode != getImportantForAccessibility()) {
+        final int oldMode = getImportantForAccessibility();
+        if (mode != oldMode) {
+            // If we're moving between AUTO and another state, we might not need
+            // to send a subtree changed notification. We'll store the computed
+            // importance, since we'll need to check it later to make sure.
+            final boolean maySkipNotify = oldMode == IMPORTANT_FOR_ACCESSIBILITY_AUTO
+                    || mode == IMPORTANT_FOR_ACCESSIBILITY_AUTO;
+            final boolean oldIncludeForAccessibility = maySkipNotify && includeForAccessibility();
             mPrivateFlags2 &= ~PFLAG2_IMPORTANT_FOR_ACCESSIBILITY_MASK;
             mPrivateFlags2 |= (mode << PFLAG2_IMPORTANT_FOR_ACCESSIBILITY_SHIFT)
                     & PFLAG2_IMPORTANT_FOR_ACCESSIBILITY_MASK;
-            if (oldIncludeForAccessibility != includeForAccessibility()) {
+            if (!maySkipNotify || oldIncludeForAccessibility != includeForAccessibility()) {
                 notifySubtreeAccessibilityStateChangedIfNeeded();
             } else {
                 notifyViewAccessibilityStateChangedIfNeeded(
@@ -8887,10 +8895,10 @@
              */
             mPrivateFlags |= PFLAG_DRAWN;
 
-            if (((mViewFlags & VISIBILITY_MASK) == INVISIBLE) && hasFocus()) {
+            if (((mViewFlags & VISIBILITY_MASK) == INVISIBLE)) {
                 // root view becoming invisible shouldn't clear focus and accessibility focus
                 if (getRootView() != this) {
-                    clearFocus();
+                    if (hasFocus()) clearFocus();
                     clearAccessibilityFocus();
                 }
             }
@@ -16936,7 +16944,8 @@
      * @param visibility  Bitwise-or of flags {@link #SYSTEM_UI_FLAG_LOW_PROFILE},
      * {@link #SYSTEM_UI_FLAG_HIDE_NAVIGATION}, {@link #SYSTEM_UI_FLAG_FULLSCREEN},
      * {@link #SYSTEM_UI_FLAG_LAYOUT_STABLE}, {@link #SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION},
-     * {@link #SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN}, and {@link #SYSTEM_UI_FLAG_IMMERSIVE}.
+     * {@link #SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN}, {@link #SYSTEM_UI_FLAG_IMMERSIVE},
+     * and {@link #SYSTEM_UI_FLAG_IMMERSIVE_STICKY}.
      */
     public void setSystemUiVisibility(int visibility) {
         if (visibility != mSystemUiVisibility) {
@@ -16952,7 +16961,8 @@
      * @return  Bitwise-or of flags {@link #SYSTEM_UI_FLAG_LOW_PROFILE},
      * {@link #SYSTEM_UI_FLAG_HIDE_NAVIGATION}, {@link #SYSTEM_UI_FLAG_FULLSCREEN},
      * {@link #SYSTEM_UI_FLAG_LAYOUT_STABLE}, {@link #SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION},
-     * {@link #SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN}, and {@link #SYSTEM_UI_FLAG_IMMERSIVE}.
+     * {@link #SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN}, {@link #SYSTEM_UI_FLAG_IMMERSIVE},
+     * and {@link #SYSTEM_UI_FLAG_IMMERSIVE_STICKY}.
      */
     public int getSystemUiVisibility() {
         return mSystemUiVisibility;
diff --git a/core/java/android/view/accessibility/AccessibilityManager.java b/core/java/android/view/accessibility/AccessibilityManager.java
index 04ce7e2..00f4adb 100644
--- a/core/java/android/view/accessibility/AccessibilityManager.java
+++ b/core/java/android/view/accessibility/AccessibilityManager.java
@@ -91,25 +91,45 @@
 
     boolean mIsTouchExplorationEnabled;
 
-    final CopyOnWriteArrayList<AccessibilityStateChangeListener> mAccessibilityStateChangeListeners =
-        new CopyOnWriteArrayList<AccessibilityStateChangeListener>();
+    private final CopyOnWriteArrayList<AccessibilityStateChangeListener>
+            mAccessibilityStateChangeListeners = new CopyOnWriteArrayList<
+                    AccessibilityStateChangeListener>();
+
+    private final CopyOnWriteArrayList<TouchExplorationStateChangeListener>
+            mTouchExplorationStateChangeListeners = new CopyOnWriteArrayList<
+                    TouchExplorationStateChangeListener>();
 
     /**
-     * Listener for the system accessibility state. To listen for changes to the accessibility
-     * state on the device, implement this interface and register it with the system by
-     * calling {@link AccessibilityManager#addAccessibilityStateChangeListener
-     * addAccessibilityStateChangeListener()}.
+     * Listener for the system accessibility state. To listen for changes to the
+     * accessibility state on the device, implement this interface and register
+     * it with the system by calling {@link #addAccessibilityStateChangeListener}.
      */
     public interface AccessibilityStateChangeListener {
 
         /**
-         * Called back on change in the accessibility state.
+         * Called when the accessibility enabled state changes.
          *
          * @param enabled Whether accessibility is enabled.
          */
         public void onAccessibilityStateChanged(boolean enabled);
     }
 
+    /**
+     * Listener for the system touch exploration state. To listen for changes to
+     * the touch exploration state on the device, implement this interface and
+     * register it with the system by calling
+     * {@link #addTouchExplorationStateChangeListener}.
+     */
+    public interface TouchExplorationStateChangeListener {
+
+        /**
+         * Called when the touch exploration enabled state changes.
+         *
+         * @param enabled Whether touch exploration is enabled.
+         */
+        public void onTouchExplorationStateChanged(boolean enabled);
+    }
+
     final IAccessibilityManagerClient.Stub mClient = new IAccessibilityManagerClient.Stub() {
         public void setState(int state) {
             mHandler.obtainMessage(DO_SET_STATE, state, 0).sendToTarget();
@@ -363,34 +383,61 @@
     }
 
     /**
-     * Sets the current state.
+     * Registers a {@link TouchExplorationStateChangeListener} for changes in
+     * the global touch exploration state of the system.
+     *
+     * @param listener The listener.
+     * @return True if successfully registered.
+     */
+    public boolean addTouchExplorationStateChangeListener(
+            TouchExplorationStateChangeListener listener) {
+        return mTouchExplorationStateChangeListeners.add(listener);
+    }
+
+    /**
+     * Unregisters a {@link TouchExplorationStateChangeListener}.
+     *
+     * @param listener The listener.
+     * @return True if successfully unregistered.
+     */
+    public boolean removeTouchExplorationStateChangeListener(
+            TouchExplorationStateChangeListener listener) {
+        return mTouchExplorationStateChangeListeners.remove(listener);
+    }
+
+    /**
+     * Sets the current state and notifies listeners, if necessary.
      *
      * @param stateFlags The state flags.
      */
     private void setState(int stateFlags) {
-        final boolean accessibilityEnabled = (stateFlags & STATE_FLAG_ACCESSIBILITY_ENABLED) != 0;
-        setAccessibilityState(accessibilityEnabled);
-        mIsTouchExplorationEnabled = (stateFlags & STATE_FLAG_TOUCH_EXPLORATION_ENABLED) != 0;
-    }
-
-    /**
-     * Sets the enabled state.
-     *
-     * @param isEnabled The accessibility state.
-     */
-    private void setAccessibilityState(boolean isEnabled) {
+        final boolean enabled = (stateFlags & STATE_FLAG_ACCESSIBILITY_ENABLED) != 0;
+        final boolean touchExplorationEnabled =
+                (stateFlags & STATE_FLAG_TOUCH_EXPLORATION_ENABLED) != 0;
         synchronized (mHandler) {
-            if (isEnabled != mIsEnabled) {
-                mIsEnabled = isEnabled;
-                notifyAccessibilityStateChanged();
+            final boolean wasEnabled = mIsEnabled;
+            final boolean wasTouchExplorationEnabled = mIsTouchExplorationEnabled;
+
+            // Ensure listeners get current state from isZzzEnabled() calls.
+            mIsEnabled = enabled;
+            mIsTouchExplorationEnabled = touchExplorationEnabled;
+
+            if (wasEnabled != enabled) {
+                notifyAccessibilityStateChangedLh();
+            }
+
+            if (wasTouchExplorationEnabled != touchExplorationEnabled) {
+                notifyTouchExplorationStateChangedLh();
             }
         }
     }
 
     /**
      * Notifies the registered {@link AccessibilityStateChangeListener}s.
+     * <p>
+     * The caller must be locked on {@link #mHandler}.
      */
-    private void notifyAccessibilityStateChanged() {
+    private void notifyAccessibilityStateChangedLh() {
         final int listenerCount = mAccessibilityStateChangeListeners.size();
         for (int i = 0; i < listenerCount; i++) {
             mAccessibilityStateChangeListeners.get(i).onAccessibilityStateChanged(mIsEnabled);
@@ -398,6 +445,19 @@
     }
 
     /**
+     * Notifies the registered {@link TouchExplorationStateChangeListener}s.
+     * <p>
+     * The caller must be locked on {@link #mHandler}.
+     */
+    private void notifyTouchExplorationStateChangedLh() {
+        final int listenerCount = mTouchExplorationStateChangeListeners.size();
+        for (int i = 0; i < listenerCount; i++) {
+            mTouchExplorationStateChangeListeners.get(i)
+                    .onTouchExplorationStateChanged(mIsTouchExplorationEnabled);
+        }
+    }
+
+    /**
      * Adds an accessibility interaction connection interface for a given window.
      * @param windowToken The window token to which a connection is added.
      * @param connection The connection.
diff --git a/core/java/android/view/accessibility/AccessibilityNodeInfoCache.java b/core/java/android/view/accessibility/AccessibilityNodeInfoCache.java
index 6bef78e..7dd1e8a 100644
--- a/core/java/android/view/accessibility/AccessibilityNodeInfoCache.java
+++ b/core/java/android/view/accessibility/AccessibilityNodeInfoCache.java
@@ -86,7 +86,9 @@
                     refreshCachedNode(event.getSourceNodeId());
                 } break;
                 case AccessibilityEvent.TYPE_VIEW_SCROLLED: {
-                    clearSubTreeLocked(event.getSourceNodeId());
+                    synchronized (mLock) {
+                        clearSubTreeLocked(event.getSourceNodeId());
+                    }
                 } break;
                 case AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED: {
                     synchronized (mLock) {
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java
index 2cbe0e2..5bc39f15 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -670,7 +670,6 @@
      */
     @Deprecated
     public static void enablePlatformNotifications() {
-        checkThread();
         getFactory().getStatics().setPlatformNotificationsEnabled(true);
     }
 
@@ -683,7 +682,6 @@
      */
     @Deprecated
     public static void disablePlatformNotifications() {
-        checkThread();
         getFactory().getStatics().setPlatformNotificationsEnabled(false);
     }
 
@@ -1691,7 +1689,6 @@
      * @param enabled whether to enable web contents debugging
      */
     public static void setWebContentsDebuggingEnabled(boolean enabled) {
-        checkThread();
         getFactory().getStatics().setWebContentsDebuggingEnabled(enabled);
     }
 
@@ -1704,7 +1701,6 @@
      */
     @Deprecated
     public static synchronized PluginList getPluginList() {
-        checkThread();
         return new PluginList();
     }
 
@@ -2058,13 +2054,18 @@
         return WebViewFactory.getProvider();
     }
 
-    private static void checkThread() {
-        if (Looper.myLooper() != Looper.getMainLooper()) {
+    private final Looper mWebViewThread = Looper.myLooper();
+
+    private void checkThread() {
+        // Ignore mWebViewThread == null because this can be called during in the super class
+        // constructor, before this class's own constructor has even started.
+        if (mWebViewThread != null && Looper.myLooper() != mWebViewThread) {
             Throwable throwable = new Throwable(
-                    "Warning: A WebView method was called on thread '" +
+                    "A WebView method was called on thread '" +
                     Thread.currentThread().getName() + "'. " +
-                    "All WebView methods must be called on the UI thread. " +
-                    "Future versions of WebView may not support use on other threads.");
+                    "All WebView methods must be called on the same thread. " +
+                    "(Expected Looper " + mWebViewThread + " called on " + Looper.myLooper() +
+                    ", FYI main Looper is " + Looper.getMainLooper() + ")");
             Log.w(LOGTAG, Log.getStackTraceString(throwable));
             StrictMode.onWebViewMethodCalledOnWrongThread(throwable);
 
diff --git a/core/java/android/webkit/WebViewFactory.java b/core/java/android/webkit/WebViewFactory.java
index 0fd4e33..16daba0 100644
--- a/core/java/android/webkit/WebViewFactory.java
+++ b/core/java/android/webkit/WebViewFactory.java
@@ -28,19 +28,6 @@
  * @hide
  */
 public final class WebViewFactory {
-    private static final boolean DEFAULT_TO_EXPERIMENTAL_WEBVIEW = true;
-    // REMEMBER: property names must be <= 31 chars total.
-    private static final String EXPERIMENTAL_PROPERTY_DEFAULT_OFF = "persist.sys.webview.exp";
-    private static final String EXPERIMENTAL_PROPERTY_DEFAULT_ON =
-            "persist.sys.webview." + Build.ID;
-
-    // Modify the persisted property name when the new webview is on-by-default, so that any user
-    // setting override only lives as long as that build.
-    private static final String LONG_PROPERTY_NAME = DEFAULT_TO_EXPERIMENTAL_WEBVIEW ?
-            EXPERIMENTAL_PROPERTY_DEFAULT_ON : EXPERIMENTAL_PROPERTY_DEFAULT_OFF;
-    private static final String WEBVIEW_EXPERIMENTAL_PROPERTY =
-            LONG_PROPERTY_NAME.length() > SystemProperties.PROP_NAME_MAX ?
-            LONG_PROPERTY_NAME.substring(0, SystemProperties.PROP_NAME_MAX) : LONG_PROPERTY_NAME;
 
     private static final String FORCE_PROVIDER_PROPERTY = "webview.force_provider";
     private static final String FORCE_PROVIDER_PROPERTY_VALUE_CHROMIUM = "chromium";
@@ -73,32 +60,25 @@
     private static final Object sProviderLock = new Object();
 
     public static boolean isExperimentalWebViewAvailable() {
-        try {
-            // Pass false so we don't initialize the class at this point, as this will be wasted if
-            // it's not enabled.
-            Class.forName(CHROMIUM_WEBVIEW_FACTORY, false, WebViewFactory.class.getClassLoader());
-            return true;
-        } catch (ClassNotFoundException e) {
-            return false;
-        }
+        // TODO: Remove callers of this method then remove it.
+        return false;  // Hide the toggle in Developer Settings.
     }
 
     /** @hide */
     public static void setUseExperimentalWebView(boolean enable) {
-        SystemProperties.set(WEBVIEW_EXPERIMENTAL_PROPERTY, enable ? "true" : "false");
-        Log.i(LOGTAG, "Use Experimental WebView changed: "
-                + SystemProperties.get(WebViewFactory.WEBVIEW_EXPERIMENTAL_PROPERTY, ""));
+        // TODO: Remove callers of this method then remove it.
     }
 
     /** @hide */
     public static boolean useExperimentalWebView() {
-        return SystemProperties.getBoolean(WEBVIEW_EXPERIMENTAL_PROPERTY,
-            DEFAULT_TO_EXPERIMENTAL_WEBVIEW);
+        // TODO: Remove callers of this method then remove it.
+        return isChromiumWebViewEnabled();
     }
 
     /** @hide */
     public static boolean isUseExperimentalWebViewSet() {
-        return !SystemProperties.get(WEBVIEW_EXPERIMENTAL_PROPERTY).isEmpty();
+        // TODO: Remove callers of this method then remove it.
+        return false;  // User has not modifed Developer Settings
     }
 
     static WebViewFactoryProvider getProvider() {
@@ -140,21 +120,20 @@
 
     // We allow a system property to specify that we should use the experimental Chromium powered
     // WebView. This enables us to switch between implementations at runtime.
-    private static boolean isExperimentalWebViewEnabled() {
-        if (!isExperimentalWebViewAvailable()) return false;
+    private static boolean isChromiumWebViewEnabled() {
         String forceProviderName = SystemProperties.get(FORCE_PROVIDER_PROPERTY);
-        if (forceProviderName.isEmpty()) return useExperimentalWebView();
+        if (forceProviderName.isEmpty()) return true;
 
         Log.i(LOGTAG, String.format("Provider overridden by property: %s=%s",
                 FORCE_PROVIDER_PROPERTY, forceProviderName));
         if (forceProviderName.equals(FORCE_PROVIDER_PROPERTY_VALUE_CHROMIUM)) return true;
         if (forceProviderName.equals(FORCE_PROVIDER_PROPERTY_VALUE_CLASSIC)) return false;
         Log.e(LOGTAG, String.format("Unrecognized provider: %s", forceProviderName));
-        return useExperimentalWebView();
+        return true;
     }
 
     private static Class<WebViewFactoryProvider> getFactoryClass() throws ClassNotFoundException {
-        if (isExperimentalWebViewEnabled()) {
+        if (isChromiumWebViewEnabled()) {
             return (Class<WebViewFactoryProvider>) Class.forName(CHROMIUM_WEBVIEW_FACTORY);
         } else  {
             return (Class<WebViewFactoryProvider>) Class.forName(DEFAULT_WEBVIEW_FACTORY);
diff --git a/core/java/com/android/internal/inputmethod/InputMethodRoot.java b/core/java/com/android/internal/inputmethod/InputMethodRoot.java
new file mode 100644
index 0000000..f070a58
--- /dev/null
+++ b/core/java/com/android/internal/inputmethod/InputMethodRoot.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.internal.inputmethod;
+
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.Paint;
+import android.graphics.Rect;
+import android.util.AttributeSet;
+import android.widget.LinearLayout;
+
+public class InputMethodRoot extends LinearLayout {
+    private final Rect mGuardRect = new Rect();
+    private final Paint mGuardPaint = new Paint();
+
+    public InputMethodRoot(Context context) {
+        this(context, null);
+    }
+
+    public InputMethodRoot(Context context, AttributeSet attrs) {
+        this(context, attrs, 0);
+    }
+
+    public InputMethodRoot(Context context, AttributeSet attrs, int defStyle) {
+        super(context, attrs);
+        setWillNotDraw(false);
+        mGuardPaint.setColor(context.getResources()
+                .getColor(com.android.internal.R.color.input_method_navigation_guard));
+    }
+
+    @Override
+    protected boolean fitSystemWindows(Rect insets) {
+        setPadding(0, 0, 0, insets.bottom);
+        return true;
+    }
+
+    @Override
+    protected void onDraw(Canvas canvas) {
+        super.onDraw(canvas);
+
+        // draw navigation bar guard
+        final int w = getMeasuredWidth();
+        final int h = getMeasuredHeight();
+        mGuardRect.set(0, h - getPaddingBottom(), w, h);
+        canvas.drawRect(mGuardRect, mGuardPaint);
+    }
+}
diff --git a/core/java/com/android/internal/os/ZygoteInit.java b/core/java/com/android/internal/os/ZygoteInit.java
index 04351da..73d34c3 100644
--- a/core/java/com/android/internal/os/ZygoteInit.java
+++ b/core/java/com/android/internal/os/ZygoteInit.java
@@ -322,6 +322,9 @@
                 // Restore default.
                 runtime.setTargetHeapUtilization(defaultUtilization);
 
+                // Fill in dex caches with classes, fields, and methods brought in by preloading.
+                runtime.preloadDexCaches();
+
                 Debug.stopAllocCounting();
 
                 // Bring back root. We'll need it later.
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index 15e1d0f..768fefc 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -773,7 +773,8 @@
         android:description="@string/permdesc_bluetoothAdmin"
         android:label="@string/permlab_bluetoothAdmin" />
 
-    <!-- Allows applications to pair bluetooth devices without user interaction -->
+    <!-- Allows applications to pair bluetooth devices without user interaction.
+         This is not available to third party applications. -->
     <permission android:name="android.permission.BLUETOOTH_PRIVILEGED"
         android:permissionGroup="android.permission-group.BLUETOOTH_NETWORK"
         android:protectionLevel="system|signature"
@@ -1110,7 +1111,8 @@
         android:description="@string/permdesc_use_sip"
         android:label="@string/permlab_use_sip" />
 
-    <!-- Allows an application to request CallHandlerService implementations. -->
+    <!-- Allows an application to request CallHandlerService implementations.
+         @hide -->
     <permission android:name="android.permission.BIND_CALL_SERVICE"
         android:permissionGroup="android.permission-group.PHONE_CALLS"
         android:protectionLevel="system|signature"
@@ -1956,13 +1958,15 @@
 
     <!-- Must be required by a {@link android.nfc.cardemulation.HostApduService}
          or {@link android.nfc.cardemulation.OffHostApduService} to ensure that only
-         the system can bind to it. -->
+         the system can bind to it.
+         @hide -->
     <permission android:name="android.permission.BIND_NFC_SERVICE"
         android:label="@string/permlab_bindNfcService"
         android:description="@string/permdesc_bindNfcService"
         android:protectionLevel="signature" />
 
-    <!-- Must be required by the PrintSpooler to ensure that only the system can bind to it. -->
+    <!-- Must be required by the PrintSpooler to ensure that only the system can bind to it.
+         @hide -->
     <permission android:name="android.permission.BIND_PRINT_SPOOLER_SERVICE"
         android:label="@string/permlab_bindPrintSpoolerService"
         android:description="@string/permdesc_bindPrintSpoolerService"
@@ -1997,7 +2001,8 @@
         android:protectionLevel="signature" />
 
     <!-- Required to add or remove another application as a device admin.
-         <p/>Not for use by third-party applications. -->
+         <p>Not for use by third-party applications.
+         @hide -->
     <permission android:name="android.permission.MANAGE_DEVICE_ADMINS"
         android:label="@string/permlab_manageDeviceAdmins"
         android:description="@string/permdesc_manageDeviceAdmins"
diff --git a/core/res/res/drawable/edit_text_holo_light.xml b/core/res/res/drawable/edit_text_holo_light.xml
index 5bdcbd9..9e913e9 100644
--- a/core/res/res/drawable/edit_text_holo_light.xml
+++ b/core/res/res/drawable/edit_text_holo_light.xml
@@ -27,7 +27,7 @@
     <item android:state_window_focused="false" android:state_enabled="true" android:drawable="@drawable/textfield_default_holo_light" />
     <item android:state_window_focused="false" android:state_enabled="false" android:drawable="@drawable/textfield_disabled_holo_light" />
     <item android:state_enabled="true" android:state_focused="true" android:drawable="@drawable/textfield_activated_holo_light" />
-    <iten android:state_enabled="true" android:state_activated="true" android:drawable="@drawable/textfield_focused_holo_light" />
+    <item android:state_enabled="true" android:state_activated="true" android:drawable="@drawable/textfield_focused_holo_light" />
     <item android:state_enabled="true" android:drawable="@drawable/textfield_default_holo_light" />
     <item android:state_focused="true" android:drawable="@drawable/textfield_disabled_focused_holo_light" />
     <item android:drawable="@drawable/textfield_disabled_holo_light" />
diff --git a/core/res/res/layout/input_method.xml b/core/res/res/layout/input_method.xml
index f80d628..23d7189 100644
--- a/core/res/res/layout/input_method.xml
+++ b/core/res/res/layout/input_method.xml
@@ -18,7 +18,7 @@
 */
 -->
 
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<com.android.internal.inputmethod.InputMethodRoot xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/parentPanel"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
@@ -52,4 +52,4 @@
         android:layout_height="wrap_content"
         android:visibility="gone">
     </FrameLayout>
-</LinearLayout>
+</com.android.internal.inputmethod.InputMethodRoot>
diff --git a/core/res/res/values/colors.xml b/core/res/res/values/colors.xml
index 81ee3af..28e7af7 100644
--- a/core/res/res/values/colors.xml
+++ b/core/res/res/values/colors.xml
@@ -78,6 +78,7 @@
 
     <drawable name="input_method_fullscreen_background">#fff9f9f9</drawable>
     <drawable name="input_method_fullscreen_background_holo">@drawable/screen_background_holo_dark</drawable>
+    <color name="input_method_navigation_guard">#ff000000</color>
 
     <!-- For date picker widget -->
     <drawable name="selected_day_background">#ff0092f4</drawable>
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index ad9144c..edfdcc2 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -1441,6 +1441,7 @@
   <java-symbol type="bool" name="config_wimaxEnabled" />
   <java-symbol type="bool" name="show_ongoing_ime_switcher" />
   <java-symbol type="color" name="config_defaultNotificationColor" />
+  <java-symbol type="color" name="input_method_navigation_guard" />
   <java-symbol type="drawable" name="ic_notification_ime_default" />
   <java-symbol type="drawable" name="ic_notify_wifidisplay" />
   <java-symbol type="drawable" name="ic_menu_refresh" />
diff --git a/docs/html/training/basics/fragments/fragment-ui.jd b/docs/html/training/basics/fragments/fragment-ui.jd
index db3119b..14469bf 100644
--- a/docs/html/training/basics/fragments/fragment-ui.jd
+++ b/docs/html/training/basics/fragments/fragment-ui.jd
@@ -122,11 +122,11 @@
                 return;
             }
 
-            // Create an instance of ExampleFragment
+            // Create a new Fragment to be placed in the activity layout
             HeadlinesFragment firstFragment = new HeadlinesFragment();
             
-            // In case this activity was started with special instructions from an Intent,
-            // pass the Intent's extras to the fragment as arguments
+            // In case this activity was started with special instructions from an
+            // Intent, pass the Intent's extras to the fragment as arguments
             firstFragment.setArguments(getIntent().getExtras());
             
             // Add the fragment to the 'fragment_container' FrameLayout
diff --git a/docs/html/training/beam-files/index.jd b/docs/html/training/beam-files/index.jd
new file mode 100644
index 0000000..7155092
--- /dev/null
+++ b/docs/html/training/beam-files/index.jd
@@ -0,0 +1,61 @@
+page.title=Sharing Files with NFC
+
+trainingnavtop=true
+startpage=true
+
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>Dependencies and prerequisites</h2>
+<ul>
+  <li>Android 4.1 (API Level 16) or higher</li>
+  <li>At least two NFC-enabled Android devices (NFC is not supported in the emulator)</li>
+</ul>
+
+<h2>You should also read</h2>
+<ul>
+  <li>
+    <a href="{@docRoot}guide/topics/data/data-storage.html#filesExternal"
+    >Using the External Storage</a>
+  </li>
+</ul>
+
+</div>
+</div>
+
+<p>
+    Android allows you to transfer large files between devices using the Android Beam file transfer
+    feature. This feature has a simple API and allows users to start the transfer process by simply
+    touching devices. In response, Android Beam file transfer automatically copies files from one
+    device to the other and notifies the user when it's finished.
+</p>
+<p>
+    While the Android Beam file transfer API handles large amounts of data, the Android Beam NDEF
+    transfer API introduced in Android 4.0 (API level 14) handles small amounts of data such as
+    URIs or other small messages. In addition, Android Beam is only one of the features available
+    in the Android NFC framework, which allows you to read NDEF messages from NFC tags. To learn
+    more about Android Beam, see the topic
+    <a href="{@docRoot}guide/topics/connectivity/nfc/nfc.html#p2p"
+    >Beaming NDEF Messages to Other Devices</a>. To learn more about the NFC framework, see the
+    <a href="{@docRoot}guide/topics/connectivity/nfc/index.html"
+    >Near Field Communication</a> API guide.
+</p>
+<h2>Lessons</h2>
+<dl>
+    <dt>
+        <b><a href="send-files.html">Sending Files to Another Device</a></b>
+    </dt>
+    <dd>Learn how to set up your app to send files to another device.</dd>
+
+    <dt>
+        <b><a href="receive-files.html">Receiving Files from Another Device</a></b>
+    </dt>
+    <dd>
+        Learn how to set up your app to receive files sent by another device.
+    </dd>
+</dl>
+
+
diff --git a/docs/html/training/beam-files/receive-files.jd b/docs/html/training/beam-files/receive-files.jd
new file mode 100644
index 0000000..0613612
--- /dev/null
+++ b/docs/html/training/beam-files/receive-files.jd
@@ -0,0 +1,313 @@
+page.title=Receiving Files from Another Device
+
+trainingnavtop=true
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>This lesson teaches you to</h2>
+<ol>
+    <li><a href="#IntentFilter">Respond to a Request to Display Data</a></li>
+    <li><a href="#RequestPermissions">Request File Permissions</a></li>
+    <li><a href="#GetFilePath">Get the Directory for Copied Files</a></li>
+</ol>
+<h2>You should also read</h2>
+<ul>
+    <li>
+        <a href="{@docRoot}guide/topics/providers/content-provider-basics.html#ContentURIs"
+        >Content URIs</a>
+    </li>
+    <li>
+        <a href="{@docRoot}guide/components/intents-filters.html">Intents and Intent Filters</a>
+    </li>
+    <li>
+        <a href="{@docRoot}guide/topics/ui/notifiers/notifications.html">Notifications</a>
+    </li>
+    <li>
+        <a href="{@docRoot}guide/topics/data/data-storage.html#filesExternal"
+        >Using the External Storage</a>
+    </li>
+</ul>
+
+</div>
+</div>
+
+<p>
+    Android Beam file transfer copies files to a special directory on the receiving device. It also
+    scans the copied files using the Android Media Scanner and adds entries for media files to
+    the {@link android.provider.MediaStore} provider. This lesson shows you how to respond when the
+    file copy is complete, and how to locate the copied files on the receiving device.
+</p>
+<h2 id="IntentFilter">Respond to a Request to Display Data</h2>
+<p>
+    When Android Beam file transfer finishes copying files to the receiving device, it posts a
+    notification containing an {@link android.content.Intent} with the action
+    {@link android.content.Intent#ACTION_VIEW ACTION_VIEW}, the MIME type of the first file that
+    was transferred, and a URI that points to the first file. When the user clicks the notification,
+    this intent is sent out to the system. To have your app respond to this intent, add an
+    <code><a href="{@docRoot}guide/topics/manifest/intent-filter-element.html"
+    >&lt;intent-filter&gt;</a></code> element for the
+    <code><a href="{@docRoot}guide/topics/manifest/activity-element.html"
+    >&lt;activity&gt;</a></code> element of the {@link android.app.Activity} that should respond.
+    In the <code><a href="{@docRoot}guide/topics/manifest/intent-filter-element.html"
+    >&lt;intent-filter&gt;</a></code> element, add the following child elements:
+</p>
+<dl>
+    <dt>
+        <code><a href="{@docRoot}guide/topics/manifest/action-element.html"
+        >&lt;action android:name="android.intent.action.VIEW" /&gt;</a></code>
+    </dt>
+    <dd>
+        Matches the {@link android.content.Intent#ACTION_VIEW ACTION_VIEW} intent sent from the
+        notification.
+    </dd>
+    <dt>
+        <code><a href="{@docRoot}guide/topics/manifest/category-element.html"
+        >&lt;category android:name="android.intent.category.CATEGORY_DEFAULT" /&gt;</a></code>
+    </dt>
+    <dd>
+        Matches an {@link android.content.Intent} that doesn't have an explicit category.
+    </dd>
+    <dt>
+        <code><a href="{@docRoot}guide/topics/manifest/data-element.html"
+        >&lt;data android:mimeType="<i>mime-type</i>" /&gt;</a></code>
+    </dt>
+    <dd>
+        Matches a MIME type. Specify only those MIME types that your app can handle.
+    </dd>
+</dl>
+<p>
+    For example, the following snippet shows you how to add an intent filter that
+    triggers the activity <code>com.example.android.nfctransfer.ViewActivity</code>:
+</p>
+<pre>
+    &lt;activity
+        android:name="com.example.android.nfctransfer.ViewActivity"
+        android:label="Android Beam Viewer" &gt;
+        ...
+        &lt;intent-filter&gt;
+            &lt;action android:name="android.intent.action.VIEW"/&gt;
+            &lt;category android:name="android.intent.category.DEFAULT"/&gt;
+            ...
+        &lt;/intent-filter&gt;
+    &lt;/activity&gt;
+</pre>
+<p class="note">
+    <strong>Note:</strong> Android Beam file transfer is not the only source of an
+    {@link android.content.Intent#ACTION_VIEW ACTION_VIEW} intent. Other apps on the receiving
+    device can also send an {@link android.content.Intent} with this action.
+    Handling this situation is discussed in the section <a href="#GetDirectory"
+    >Get the directory from a content URI</a>.
+</p>
+<h2 id="RequestPermissions">Request File Permissions</h2>
+<p>
+    To read files that Android Beam file transfer copies to the device, request the permission
+    {@link android.Manifest.permission#READ_EXTERNAL_STORAGE READ_EXTERNAL_STORAGE}. For example:
+</p>
+<pre>
+    &lt;uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /&gt;</pre>
+<p>
+    If you want to copy transferred files to your app's own storage area, request the permission
+    {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE WRITE_EXTERNAL_STORAGE} instead.
+    {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE WRITE_EXTERNAL_STORAGE} includes
+    {@link android.Manifest.permission#READ_EXTERNAL_STORAGE READ_EXTERNAL_STORAGE}.
+</p>
+<p class="note">
+    <strong>Note:</strong> As of Android 4.2.2 (API level 17), the permission
+    {@link android.Manifest.permission#READ_EXTERNAL_STORAGE READ_EXTERNAL_STORAGE} is
+    only enforced if the user chooses to do so. Future versions of the platform may require this
+    permission in all cases. To ensure forward compatibility, request the permission now, before it
+    becomes required.
+</p>
+<p>
+    Since your app has control over its internal storage area, you don't need to request
+    write permission to copy a transferred file to your internal storage area.
+</p>
+<h2 id="GetFilePath">Get the Directory for Copied Files</h2>
+<p>
+    Android Beam file transfer copies all the files in a single transfer to one directory
+    on the receiving device. The URI in the content {@link android.content.Intent} sent by the
+    Android Beam file transfer notification points to the first transferred file. However, your
+    app may also receive an {@link android.content.Intent#ACTION_VIEW ACTION_VIEW} intent from a
+    source other than Android Beam file transfer. To determine how you should handle the incoming
+    {@link android.content.Intent}, you need to examine its scheme and authority.
+</p>
+<p>
+    To get the scheme for the URI, call {@link android.net.Uri#getScheme() Uri.getScheme()}. The
+    following code snippet shows you how to determine the scheme and handle the URI accordingly:
+</p>
+<pre>
+public class MainActivity extends Activity {
+    ...
+    // A File object containing the path to the transferred files
+    private File mParentPath;
+    // Incoming Intent
+    private Intent mIntent;
+    ...
+    /*
+     * Called from onNewIntent() for a SINGLE_TOP Activity
+     * or onCreate() for a new Activity. For onNewIntent(),
+     * remember to call setIntent() to store the most
+     * current Intent
+     *
+     */
+    private void handleViewIntent() {
+        ...
+        // Get the Intent action
+        mIntent = getIntent();
+        String action = mIntent.getAction();
+        /*
+         * For ACTION_VIEW, the Activity is being asked to display data.
+         * Get the URI.
+         */
+        if (TextUtils.equals(action, Intent.ACTION_VIEW)) {
+            // Get the URI from the Intent
+            Uri beamUri = mIntent.getData();
+            /*
+             * Test for the type of URI, by getting its scheme value
+             */
+            if (TextUtils.equals(beamUri.getScheme(), "file")) {
+                mParentPath = handleFileUri(beamUri);
+            } else if (TextUtils.equals(
+                    beamUri.getScheme(), "content")) {
+                mParentPath = handleContentUri(beamUri);
+            }
+        }
+        ...
+    }
+    ...
+}
+</pre>
+<h3>Get the directory from a file URI</h3>
+<p>
+    If the incoming {@link android.content.Intent} contains a file URI, the URI contains the
+    absolute file name of a file, including the full directory path and file name. For Android Beam
+    file transfer, the directory path points to the location of the other transferred files, if
+    any. To get the directory path, get the path part of the URI, which contains all of the URI
+    except the <code>file:</code> prefix. Create a {@link java.io.File} from the path part, then
+    get the parent path of the {@link java.io.File}:
+</p>
+<pre>
+    ...
+    public String handleFileUri(Uri beamUri) {
+        // Get the path part of the URI
+        String fileName = beamUri.getPath();
+        // Create a File object for this filename
+        File copiedFile = new File(fileName);
+        // Get a string containing the file's parent directory
+        return copiedFile.getParent();
+    }
+    ...
+</pre>
+
+<h3 id="GetDirectory">Get the directory from a content URI</h3>
+<p>
+    If the incoming {@link android.content.Intent} contains a content URI, the URI may point to a
+    directory and file name stored in the {@link android.provider.MediaStore} content provider. You
+    can detect a content URI for {@link android.provider.MediaStore} by testing the URI's
+    authority value. A content URI for {@link android.provider.MediaStore} may come from
+    Android Beam file transfer or from another app, but in both cases you can retrieve a directory
+    and file name for the content URI.
+</p>
+<p>
+    You can also receive an incoming {@link android.content.Intent#ACTION_VIEW ACTION_VIEW}
+    intent containing a content URI for a content provider other than
+    {@link android.provider.MediaStore}. In this case, the content URI doesn't contain the
+    {@link android.provider.MediaStore} authority value, and the content URI usually doesn't point
+    to a directory.
+</p>
+<p class="note">
+    <strong>Note:</strong> For Android Beam file transfer, you receive a content URI in the
+    {@link android.content.Intent#ACTION_VIEW ACTION_VIEW} intent if the first incoming file
+    has a MIME type of "audio/*", "image/*", or "video/*", indicating that the file is media-
+    related. Android Beam file transfer indexes the media files it transfers by running Media
+    Scanner on the directory where it stores transferred files. Media Scanner writes its results
+    to the {@link android.provider.MediaStore} content provider, then it passes a content URI
+    for the first file back to Android Beam file transfer. This content URI is the one you
+    receive in the notification {@link android.content.Intent}. To get the directory
+    of the first file, you retrieve it from {@link android.provider.MediaStore} using the content
+    URI.
+</p>
+<h3>Determine the content provider</h3>
+<p>
+    To determine if you can retrieve a file directory from the content URI, determine the
+    the content provider associated with the URI by calling
+    {@link android.net.Uri#getAuthority Uri.getAuthority()} to get the URI's authority. The
+    result has two possible values:
+</p>
+<dl>
+    <dt>
+        {@link android.provider.MediaStore#AUTHORITY MediaStore.AUTHORITY}
+    </dt>
+    <dd>
+        The URI is for a file or files tracked by {@link android.provider.MediaStore}. Retrieve the
+        full file name from {@link android.provider.MediaStore}, and get directory from the file
+        name.
+    </dd>
+    <dt>
+        Any other authority value
+    </dt>
+    <dd>
+        A content URI from another content provider. Display the data associated with the content
+        URI, but don't get the file directory.
+    </dd>
+</dl>
+<p>
+    To get the directory for a {@link android.provider.MediaStore} content URI,
+    run a query that specifies the incoming content URI for the {@link android.net.Uri} argument and
+    the column {@link android.provider.MediaStore.MediaColumns#DATA MediaColumns.DATA} for the
+    projection. The returned {@link android.database.Cursor} contains the full path and name for
+    the file represented by the URI. This path also contains all the other files that Android Beam
+    file transfer just copied to the device.
+</p>
+<p>
+    The following snippet shows you how to test the authority of the content URI and retrieve the
+    the path and file name for the transferred file:
+</p>
+<pre>
+    ...
+    public String handleContentUri(Uri beamUri) {
+        // Position of the filename in the query Cursor
+        int filenameIndex;
+        // File object for the filename
+        File copiedFile;
+        // The filename stored in MediaStore
+        String fileName;
+        // Test the authority of the URI
+        if (!TextUtils.equals(beamUri.getAuthority(), MediaStore.AUTHORITY)) {
+            /*
+             * Handle content URIs for other content providers
+             */
+        // For a MediaStore content URI
+        } else {
+            // Get the column that contains the file name
+            String[] projection = { MediaStore.MediaColumns.DATA };
+            Cursor pathCursor =
+                    getContentResolver().query(beamUri, projection,
+                    null, null, null);
+            // Check for a valid cursor
+            if (pathCursor != null &amp;&amp;
+                    pathCursor.moveToFirst()) {
+                // Get the column index in the Cursor
+                filenameIndex = pathCursor.getColumnIndex(
+                        MediaStore.MediaColumns.DATA);
+                // Get the full file name including path
+                fileName = pathCursor.getString(filenameIndex);
+                // Create a File object for the filename
+                copiedFile = new File(fileName);
+                // Return the parent directory of the file
+                return new File(copiedFile.getParent());
+             } else {
+                // The query didn't work; return null
+                return null;
+             }
+        }
+    }
+    ...
+</pre>
+<p>
+    To learn more about retrieving data from a content provider, see the section
+    <a href="{@docRoot}guide/topics/providers/content-provider-basics.html#SimpleQuery"
+    >Retrieving Data from the Provider</a>.
+</p>
diff --git a/docs/html/training/beam-files/send-files.jd b/docs/html/training/beam-files/send-files.jd
new file mode 100644
index 0000000..917b87f
--- /dev/null
+++ b/docs/html/training/beam-files/send-files.jd
@@ -0,0 +1,294 @@
+page.title=Sending Files to Another Device
+
+trainingnavtop=true
+@jd:body
+
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<!-- table of contents -->
+<h2>This lesson teaches you to</h2>
+<ol>
+  <li><a href="#DeclareFeatures">Declare Features in the Manifest</a>
+  <li><a href="#TestAndroidBeam">Test for Android Beam File Transfer Support</a></li>
+  <li>
+    <a href="#CreateCallback"
+    >Create a Callback Method That Provides Files</a>
+  </li>
+  <li><a href="#ProvideUri">Specify the Files to Send</a>
+</ol>
+
+<h2>You should also read</h2>
+<ul>
+    <li><a href="{@docRoot}guide/topics/data/data-storage.html">Storage Options</a></li>
+</ul>
+
+</div>
+</div>
+<p>
+    This lesson shows you how to design your app to send large files to another device using
+    Android Beam file transfer. To send files, you request permission to use NFC and external
+    storage, test to ensure your device supports NFC, and provide URIs to Android Beam file
+    transfer.
+</p>
+<p>
+    The Android Beam file transfer feature has the following requirements:
+</p>
+<ol>
+    <li>
+        Android Beam file transfer for large files is only available in Android 4.1 (API level 16)
+        and higher.
+    </li>
+    <li>
+        Files you want to transfer must reside in external storage. To learn more about using
+        external storage, read <a href="{@docRoot}guide/topics/data/data-storage.html#filesExternal"
+        >Using the External Storage</a>.
+    </li>
+    <li>
+        Each file you want to transfer must be world-readable. You can set this permission by
+        calling the method {@link java.io.File#setReadable File.setReadable(true,false)}.
+    </li>
+    <li>
+        You must provide a file URI for the files you want to transfer. Android Beam file transfer
+        is unable to handle content URIs generated by
+        {@link android.support.v4.content.FileProvider#getUriForFile FileProvider.getUriForFile}.
+    </li>
+</ol>
+
+<h2 id="DeclareFeatures">Declare Features in the Manifest</h2>
+<p>
+    First, edit your app manifest to declare the permissions and features your app needs.
+</p>
+<h3>Request Permissions</h3>
+<p>
+    To allow your app to use Android Beam file transfer to send files from external storage using
+    NFC, you must request the following permissions in your app manifest:
+</p>
+<dl>
+    <dt>
+        {@link android.Manifest.permission#NFC NFC}
+    </dt>
+    <dd>
+        Allows your app to send data over NFC. To specify this permission, add the following element
+        as a child of the <code><a href="{@docRoot}guide/topics/manifest/manifest-element.html"
+        >&lt;manifest&gt;</a></code> element:
+<pre>
+    &lt;uses-permission android:name="android.permission.NFC" /&gt;
+</pre>
+    </dd>
+    <dt>
+        {@link android.Manifest.permission#READ_EXTERNAL_STORAGE READ_EXTERNAL_STORAGE}
+    </dt>
+    <dd>
+        Allows your app to read from external storage. To specify this permission, add the following
+        element as a child of the
+        <code><a href="{@docRoot}guide/topics/manifest/manifest-element.html"
+        >&lt;manifest&gt;</a></code> element:
+<pre>
+    &lt;uses-permission
+            android:name="android.permission.READ_EXTERNAL_STORAGE" /&gt;
+</pre>
+    <p class="note">
+        <strong>Note:</strong> As of Android 4.2.2 (API level 17), this permission is not
+        enforced. Future versions of the platform may require it for apps that want to read from
+        external storage. To ensure forward compatibility, request the permission now, before it
+        becomes required.
+    </p>
+    </dd>
+</dl>
+<h3>Specify the NFC feature</h3>
+<p>
+    Specify that your app uses NFC, by adding a
+    <code><a href="{@docRoot}guide/topics/manifest/uses-feature-element.html"
+    >&lt;uses-feature&gt;</a></code> element as a child
+    of the <code><a href="{@docRoot}guide/topics/manifest/manifest-element.html"
+    >&lt;manifest&gt;</a></code> element. Set the <code>android:required</code> attribute to
+    <code>true</code> to indicate that your app won't function unless NFC is present.
+</p>
+<p>
+    The following snippet shows you how to specify the
+    <code><a href="{@docRoot}guide/topics/manifest/uses-feature-element.html"
+    >&lt;uses-feature&gt;</a></code> element:
+</p>
+<pre>
+&lt;uses-feature
+    android:name="android.hardware.nfc"
+    android:required="true" /&gt;</pre>
+<p>
+    Note that if your app only uses NFC as an option, but still functions if NFC isn't present, you
+    should set <code>android:required</code> to <code>false</code>, and test for NFC in code.
+</p>
+<h3>Specify Android Beam file transfer</h3>
+<p>
+    Since Android Beam file transfer is only available in Android 4.1 (API level 16) and later,
+    if your app depends on Android Beam file transfer for a key part of its functionality you must
+    specify the <code><a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"
+    >&lt;uses-sdk&gt;</a></code> element with the
+    <code><a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min"
+    >android:minSdkVersion</a>="16"</code> attribute. Otherwise, you can set
+    <code><a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min"
+    >android:minSdkVersion</a></code> to another value as necessary, and test for the platform
+    version in code, as described in the following section.
+</p>
+<h2 id="TestAndroidBeam">Test for Android Beam File Transfer Support</h2>
+<p>
+    To specify in your app manifest that NFC is optional, you use the following element:
+</p>
+<pre>
+&lt;uses-feature android:name="android.hardware.nfc" android:required="false" /&gt;</pre>
+<p>
+    If you set the attribute
+    <code><a href="guide/topics/manifest/uses-feature-element.html#required"
+    >android:required</a>="false"</code>, you must test for NFC support and Android Beam file
+    transfer support in code.
+</p>
+<p>
+    To test for Android Beam file transfer support in code, start by testing that the device
+    supports NFC by calling {@link android.content.pm.PackageManager#hasSystemFeature
+    PackageManager.hasSystemFeature()} with the argument
+    {@link android.content.pm.PackageManager#FEATURE_NFC FEATURE_NFC}. Next, check that the Android
+    version supports Android Beam file transfer by testing the value of
+    {@link android.os.Build.VERSION#SDK_INT}. If Android Beam file transfer is supported, get an
+    instance of the NFC controller, which allows you to communicate with the NFC hardware.
+    For example:
+</p>
+<pre>
+public class MainActivity extends Activity {
+    ...
+    NfcAdapter mNfcAdapter;
+    // Flag to indicate that Android Beam is available
+    boolean mAndroidBeamAvailable  = false;
+    ...
+    &#64;Override
+    protected void onCreate(Bundle savedInstanceState) {
+        ...
+        // NFC isn't available on the device
+        if (!PackageManager.hasSystemFeature(PackageManager.FEATURE_NFC)) {
+            /*
+             * Disable NFC features here.
+             * For example, disable menu items or buttons that activate
+             * NFC-related features
+             */
+            ...
+        // Android Beam file transfer isn't supported
+        } else if (Build.VERSION.SDK_INT &lt;
+                Build.VERSION_CODES.JELLY_BEAN_MR1) {
+            // If Android Beam isn't available, don't continue.
+            mAndroidBeamAvailable = false;
+            /*
+             * Disable Android Beam file transfer features here.
+             */
+            ...
+        // Android Beam file transfer is available, continue
+        } else {
+        mNfcAdapter = NfcAdapter.getDefaultAdapter(this);
+        ...
+        }
+    }
+    ...
+}</pre>
+
+<h2 id="CreateCallback">
+    Create a Callback Method that Provides Files
+</h2>
+<p>
+    Once you've verified that the device supports Android Beam file transfer, add a callback
+    method that the system invokes when Android Beam file transfer detects that the user wants
+    to send files to another NFC-enabled device. In this callback method, return an array of
+    {@link android.net.Uri} objects. Android Beam file transfer copies the files represented by
+    these URIs to the receiving device.
+</p>
+<p>
+    To add the callback method, implement the
+    {@link android.nfc.NfcAdapter.CreateBeamUrisCallback} interface and its method
+    {@link android.nfc.NfcAdapter.CreateBeamUrisCallback#createBeamUris createBeamUris()}. The
+    following snippet shows you how to do this:
+</p>
+<pre>
+public class MainActivity extends Activity {
+    ...
+    // List of URIs to provide to Android Beam
+    private Uri[] mFileUris = new Uri[10];
+    ...
+    /**
+     * Callback that Android Beam file transfer calls to get
+     * files to share
+     */
+    private class FileUriCallback implements
+            NfcAdapter.CreateBeamUrisCallback {
+        public FileUriCallback() {
+        }
+        /**
+         * Create content URIs as needed to share with another device
+         */
+        &#64;Override
+        public Uri[] createBeamUris(NfcEvent event) {
+            return mFileUris;
+        }
+    }
+    ...
+}
+</pre>
+<p>
+    Once you've implemented the interface, provide the callback to Android Beam file transfer by
+    calling {@link android.nfc.NfcAdapter#setBeamPushUrisCallback setBeamPushUrisCallback()}. The
+    following snippet shows you how to do this:
+</p>
+<pre>
+public class MainActivity extends Activity {
+    ...
+    // Instance that returns available files from this app
+    private FileUriCallback mFileUriCallback;
+    ...
+    &#64;Override
+    protected void onCreate(Bundle savedInstanceState) {
+        ...
+        // Android Beam file transfer is available, continue
+        ...
+        mNfcAdapter = NfcAdapter.getDefaultAdapter(this);
+        /*
+         * Instantiate a new FileUriCallback to handle requests for
+         * URIs
+         */
+        mFileUriCallback = new FileUriCallback();
+        // Set the dynamic callback for URI requests.
+        mNfcAdapter.setBeamPushUrisCallback(mFileUriCallback,this);
+        ...
+    }
+    ...
+}
+</pre>
+<p class="note">
+    <strong>Note:</strong> You can also provide the array of {@link android.net.Uri} objects
+    directly to the NFC framework through your app's {@link android.nfc.NfcAdapter} instance. Choose
+    this approach if you can define the URIs to transfer before the NFC touch event occurs.
+    To learn more about this approach, see {@link android.nfc.NfcAdapter#setBeamPushUris
+    NfcAdapter.setBeamPushUris()}.
+</p>
+<h2 id="ProvideUri">Specify the Files to Send</h2>
+<p>
+    To transfer one or more files to another NFC-enabled device, get a file URI (a URI with a
+    <code>file</code> scheme) for each file and then add the URI to an array of
+    {@link android.net.Uri} objects. To transfer a file, you must also have permanent read access
+    for the file. For example, the following snippet shows you how to get a file URI from a file
+    name and then add the URI to the array:
+</p>
+<pre>
+        /*
+         * Create a list of URIs, get a File,
+         * and set its permissions
+         */
+        private Uri[] mFileUris = new Uri[10];
+        String transferFile = "transferimage.jpg";
+        File extDir = getExternalFilesDir(null);
+        File requestFile = new File(extDir, transferFile);
+        requestFile.setReadable(true, false);
+        // Get a URI for the File and add it to the list of URIs
+        fileUri = Uri.fromFile(requestFile);
+        if (fileUri != null) {
+            mFileUris[0] = fileUri;
+        } else {
+            Log.e("My Activity", "No File URI available for file.");
+        }
+</pre>
diff --git a/docs/html/training/training_toc.cs b/docs/html/training/training_toc.cs
index 77ac235..27e7004 100644
--- a/docs/html/training/training_toc.cs
+++ b/docs/html/training/training_toc.cs
@@ -423,7 +423,22 @@
           </li>
         </ul>
       </li>
-
+      <li class="nav-section">
+        <div class="nav-section-header">
+          <a href="<?cs var:toroot ?>training/beam-files/index.html"
+             description=
+             "How to transfer files between devices using the NFC Android Beam feature."
+             >Sharing Files with NFC</a>
+        </div>
+        <ul>
+            <li>
+                <a href="<?cs var:toroot ?>training/beam-files/send-files.html"
+                >Sending Files to Another Device</a>
+            </li>
+            <li><a href="<?cs var:toroot ?>training/beam-files/receive-files.html"
+            >Receiving Files from Another Device</a></li>
+        </ul>
+       </li>
        <li class="nav-section">
         <div class="nav-section-header">
           <a href="<?cs var:toroot ?>training/basics/network-ops/index.html"
@@ -498,7 +513,7 @@
            "How to design a robust conflict resolution strategy for apps that save data to the cloud."
            >Resolving Cloud Save Conflicts
           </a>
-          </li>
+        </li>
       </li>
       <li class="nav-section">
         <div class="nav-section-header">
@@ -1181,7 +1196,6 @@
       </a>
     </div>
     <ul>
-
       <li>
         <a href="<?cs var:toroot ?>training/articles/security-tips.html"
            description=
diff --git a/media/java/android/media/RemoteController.java b/media/java/android/media/RemoteController.java
index 32e85d9..7865ec8 100644
--- a/media/java/android/media/RemoteController.java
+++ b/media/java/android/media/RemoteController.java
@@ -36,6 +36,8 @@
 import android.util.Log;
 import android.view.KeyEvent;
 
+import java.lang.ref.WeakReference;
+
 /**
  * The RemoteController class is used to control media playback, display and update media metadata
  * and playback status, published by applications using the {@link RemoteControlClient} class.
@@ -122,7 +124,7 @@
         }
         mOnClientUpdateListener = updateListener;
         mContext = context;
-        mRcd = new RcDisplay();
+        mRcd = new RcDisplay(this);
         mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
 
         if (ActivityManager.isLowRamDeviceStatic()) {
@@ -505,34 +507,51 @@
 
     //==================================================
     // Implementation of IRemoteControlDisplay interface
-    private class RcDisplay extends IRemoteControlDisplay.Stub {
+    private static class RcDisplay extends IRemoteControlDisplay.Stub {
+        private final WeakReference<RemoteController> mController;
+
+        RcDisplay(RemoteController rc) {
+            mController = new WeakReference<RemoteController>(rc);
+        }
 
         public void setCurrentClientId(int genId, PendingIntent clientMediaIntent,
                 boolean clearing) {
+            final RemoteController rc = mController.get();
+            if (rc == null) {
+                return;
+            }
             boolean isNew = false;
             synchronized(mGenLock) {
-                if (mClientGenerationIdCurrent != genId) {
-                    mClientGenerationIdCurrent = genId;
+                if (rc.mClientGenerationIdCurrent != genId) {
+                    rc.mClientGenerationIdCurrent = genId;
                     isNew = true;
                 }
             }
             if (clientMediaIntent != null) {
-                sendMsg(mEventHandler, MSG_NEW_PENDING_INTENT, SENDMSG_REPLACE,
+                sendMsg(rc.mEventHandler, MSG_NEW_PENDING_INTENT, SENDMSG_REPLACE,
                         genId /*arg1*/, 0, clientMediaIntent /*obj*/, 0 /*delay*/);
             }
             if (isNew || clearing) {
-                sendMsg(mEventHandler, MSG_CLIENT_CHANGE, SENDMSG_REPLACE,
+                sendMsg(rc.mEventHandler, MSG_CLIENT_CHANGE, SENDMSG_REPLACE,
                         genId /*arg1*/, clearing ? 1 : 0, null /*obj*/, 0 /*delay*/);
             }
         }
 
         public void setEnabled(boolean enabled) {
-            sendMsg(mEventHandler, MSG_DISPLAY_ENABLE, SENDMSG_REPLACE,
+            final RemoteController rc = mController.get();
+            if (rc == null) {
+                return;
+            }
+            sendMsg(rc.mEventHandler, MSG_DISPLAY_ENABLE, SENDMSG_REPLACE,
                     enabled ? 1 : 0 /*arg1*/, 0, null /*obj*/, 0 /*delay*/);
         }
 
         public void setPlaybackState(int genId, int state,
                 long stateChangeTimeMs, long currentPosMs, float speed) {
+            final RemoteController rc = mController.get();
+            if (rc == null) {
+                return;
+            }
             if (DEBUG) {
                 Log.d(TAG, "> new playback state: genId="+genId
                         + " state="+ state
@@ -542,65 +561,81 @@
             }
 
             synchronized(mGenLock) {
-                if (mClientGenerationIdCurrent != genId) {
+                if (rc.mClientGenerationIdCurrent != genId) {
                     return;
                 }
             }
             final PlaybackInfo playbackInfo =
                     new PlaybackInfo(state, stateChangeTimeMs, currentPosMs, speed);
-            sendMsg(mEventHandler, MSG_NEW_PLAYBACK_INFO, SENDMSG_REPLACE,
+            sendMsg(rc.mEventHandler, MSG_NEW_PLAYBACK_INFO, SENDMSG_REPLACE,
                     genId /*arg1*/, 0, playbackInfo /*obj*/, 0 /*delay*/);
 
         }
 
         public void setTransportControlInfo(int genId, int transportControlFlags,
                 int posCapabilities) {
+            final RemoteController rc = mController.get();
+            if (rc == null) {
+                return;
+            }
             synchronized(mGenLock) {
-                if (mClientGenerationIdCurrent != genId) {
+                if (rc.mClientGenerationIdCurrent != genId) {
                     return;
                 }
             }
-            sendMsg(mEventHandler, MSG_NEW_TRANSPORT_INFO, SENDMSG_REPLACE,
+            sendMsg(rc.mEventHandler, MSG_NEW_TRANSPORT_INFO, SENDMSG_REPLACE,
                     genId /*arg1*/, transportControlFlags /*arg2*/,
                     null /*obj*/, 0 /*delay*/);
         }
 
         public void setMetadata(int genId, Bundle metadata) {
+            final RemoteController rc = mController.get();
+            if (rc == null) {
+                return;
+            }
             if (DEBUG) { Log.e(TAG, "setMetadata("+genId+")"); }
             if (metadata == null) {
                 return;
             }
             synchronized(mGenLock) {
-                if (mClientGenerationIdCurrent != genId) {
+                if (rc.mClientGenerationIdCurrent != genId) {
                     return;
                 }
             }
-            sendMsg(mEventHandler, MSG_NEW_METADATA, SENDMSG_QUEUE,
+            sendMsg(rc.mEventHandler, MSG_NEW_METADATA, SENDMSG_QUEUE,
                     genId /*arg1*/, 0 /*arg2*/,
                     metadata /*obj*/, 0 /*delay*/);
         }
 
         public void setArtwork(int genId, Bitmap artwork) {
+            final RemoteController rc = mController.get();
+            if (rc == null) {
+                return;
+            }
             if (DEBUG) { Log.v(TAG, "setArtwork("+genId+")"); }
             synchronized(mGenLock) {
-                if (mClientGenerationIdCurrent != genId) {
+                if (rc.mClientGenerationIdCurrent != genId) {
                     return;
                 }
             }
             Bundle metadata = new Bundle(1);
             metadata.putParcelable(String.valueOf(MediaMetadataEditor.BITMAP_KEY_ARTWORK), artwork);
-            sendMsg(mEventHandler, MSG_NEW_METADATA, SENDMSG_QUEUE,
+            sendMsg(rc.mEventHandler, MSG_NEW_METADATA, SENDMSG_QUEUE,
                     genId /*arg1*/, 0 /*arg2*/,
                     metadata /*obj*/, 0 /*delay*/);
         }
 
         public void setAllMetadata(int genId, Bundle metadata, Bitmap artwork) {
+            final RemoteController rc = mController.get();
+            if (rc == null) {
+                return;
+            }
             if (DEBUG) { Log.e(TAG, "setAllMetadata("+genId+")"); }
             if ((metadata == null) && (artwork == null)) {
                 return;
             }
             synchronized(mGenLock) {
-                if (mClientGenerationIdCurrent != genId) {
+                if (rc.mClientGenerationIdCurrent != genId) {
                     return;
                 }
             }
@@ -611,7 +646,7 @@
                 metadata.putParcelable(String.valueOf(MediaMetadataEditor.BITMAP_KEY_ARTWORK),
                         artwork);
             }
-            sendMsg(mEventHandler, MSG_NEW_METADATA, SENDMSG_QUEUE,
+            sendMsg(rc.mEventHandler, MSG_NEW_METADATA, SENDMSG_QUEUE,
                     genId /*arg1*/, 0 /*arg2*/,
                     metadata /*obj*/, 0 /*delay*/);
         }
diff --git a/packages/DocumentsUI/src/com/android/documentsui/CreateDirectoryFragment.java b/packages/DocumentsUI/src/com/android/documentsui/CreateDirectoryFragment.java
index 22dd6e4..90be197 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/CreateDirectoryFragment.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/CreateDirectoryFragment.java
@@ -73,7 +73,7 @@
                 final DocumentsActivity activity = (DocumentsActivity) getActivity();
                 final DocumentInfo cwd = activity.getCurrentDirectory();
 
-                new CreateDirectoryTask(displayName).executeOnExecutor(
+                new CreateDirectoryTask(activity, cwd, displayName).executeOnExecutor(
                         ProviderExecutor.forAuthority(cwd.authority));
             }
         });
@@ -83,25 +83,26 @@
     }
 
     private class CreateDirectoryTask extends AsyncTask<Void, Void, DocumentInfo> {
+        private final DocumentsActivity mActivity;
+        private final DocumentInfo mCwd;
         private final String mDisplayName;
 
-        public CreateDirectoryTask(String displayName) {
+        public CreateDirectoryTask(
+                DocumentsActivity activity, DocumentInfo cwd, String displayName) {
+            mActivity = activity;
+            mCwd = cwd;
             mDisplayName = displayName;
         }
 
         @Override
         protected DocumentInfo doInBackground(Void... params) {
-            final DocumentsActivity activity = (DocumentsActivity) getActivity();
-            final ContentResolver resolver = activity.getContentResolver();
-
-            final DocumentInfo cwd = activity.getCurrentDirectory();
-
+            final ContentResolver resolver = mActivity.getContentResolver();
             ContentProviderClient client = null;
             try {
                 client = DocumentsApplication.acquireUnstableProviderOrThrow(
-                        resolver, cwd.derivedUri.getAuthority());
+                        resolver, mCwd.derivedUri.getAuthority());
                 final Uri childUri = DocumentsContract.createDocument(
-                        client, cwd.derivedUri, Document.MIME_TYPE_DIR, mDisplayName);
+                        client, mCwd.derivedUri, Document.MIME_TYPE_DIR, mDisplayName);
                 return DocumentInfo.fromUri(resolver, childUri);
             } catch (Exception e) {
                 Log.w(TAG, "Failed to create directory", e);
@@ -113,12 +114,11 @@
 
         @Override
         protected void onPostExecute(DocumentInfo result) {
-            final DocumentsActivity activity = (DocumentsActivity) getActivity();
             if (result != null) {
                 // Navigate into newly created child
-                activity.onDocumentPicked(result);
+                mActivity.onDocumentPicked(result);
             } else {
-                Toast.makeText(activity, R.string.create_error, Toast.LENGTH_SHORT).show();
+                Toast.makeText(mActivity, R.string.create_error, Toast.LENGTH_SHORT).show();
             }
         }
     }
diff --git a/packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java b/packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java
index 7660779..d675e8d 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java
@@ -292,7 +292,7 @@
         @Override
         protected Void doInBackground(Void... params) {
             // Restore last stack for calling package
-            final String packageName = getCallingPackage();
+            final String packageName = getCallingPackageMaybeExtra();
             final Cursor cursor = getContentResolver()
                     .query(RecentsProvider.buildResume(packageName), null, null, null, null);
             try {
@@ -783,6 +783,11 @@
         return mState.stack.peek();
     }
 
+    private String getCallingPackageMaybeExtra() {
+        final String extra = getIntent().getStringExtra(DocumentsContract.EXTRA_PACKAGE_NAME);
+        return (extra != null) ? extra : getCallingPackage();
+    }
+
     public Executor getCurrentExecutor() {
         final DocumentInfo cwd = getCurrentDirectory();
         if (cwd != null && cwd.authority != null) {
@@ -921,7 +926,7 @@
         if (requestCode == CODE_FORWARD && resultCode != RESULT_CANCELED) {
 
             // Remember that we last picked via external app
-            final String packageName = getCallingPackage();
+            final String packageName = getCallingPackageMaybeExtra();
             final ContentValues values = new ContentValues();
             values.put(ResumeColumns.EXTERNAL, 1);
             getContentResolver().insert(RecentsProvider.buildResume(packageName), values);
@@ -1002,7 +1007,7 @@
         }
 
         // Remember location for next app launch
-        final String packageName = getCallingPackage();
+        final String packageName = getCallingPackageMaybeExtra();
         values.clear();
         values.put(ResumeColumns.STACK, rawStack);
         values.put(ResumeColumns.EXTERNAL, 0);
diff --git a/packages/DocumentsUI/src/com/android/documentsui/RootsCache.java b/packages/DocumentsUI/src/com/android/documentsui/RootsCache.java
index eb56765..b98e1ee 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/RootsCache.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/RootsCache.java
@@ -194,16 +194,6 @@
                 handleDocumentsProvider(info.providerInfo);
             }
 
-            // Pick up legacy providers
-            final List<ProviderInfo> legacyProviders = pm.queryContentProviders(
-                    null, -1, PackageManager.GET_META_DATA);
-            for (ProviderInfo info : legacyProviders) {
-                if (info.metaData != null && info.metaData.containsKey(
-                        DocumentsContract.META_DATA_DOCUMENT_PROVIDER)) {
-                    handleDocumentsProvider(info);
-                }
-            }
-
             final long delta = SystemClock.elapsedRealtime() - start;
             Log.d(TAG, "Update found " + mTaskRoots.size() + " roots in " + delta + "ms");
             synchronized (mLock) {
diff --git a/packages/Keyguard/res/layout/keyguard_status_area.xml b/packages/Keyguard/res/layout/keyguard_status_area.xml
index d1f3873..98ba512 100644
--- a/packages/Keyguard/res/layout/keyguard_status_area.xml
+++ b/packages/Keyguard/res/layout/keyguard_status_area.xml
@@ -29,8 +29,6 @@
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:textColor="@color/clock_white"
-        android:format12Hour="@string/abbrev_wday_month_day_no_year"
-        android:format24Hour="@string/abbrev_wday_month_day_no_year"
         style="@style/widget_label"
         android:gravity="center"
         />
diff --git a/packages/Keyguard/res/values/donottranslate.xml b/packages/Keyguard/res/values/donottranslate.xml
index 71d3ed7..5ee226b 100644
--- a/packages/Keyguard/res/values/donottranslate.xml
+++ b/packages/Keyguard/res/values/donottranslate.xml
@@ -16,7 +16,5 @@
 
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <!-- String matching the lock screen format for displaying the date. -->
-    <string name="abbrev_wday_month_day_no_year">EEE, MMMM d</string>
-    <!-- Format for describing the date, for accessibility. -->
-    <string name="full_wday_month_day_no_year">EEEE, MMMM d</string>
+    <string name="abbrev_wday_month_day_no_year">EEEMMMMd</string>
 </resources>
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardHostView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardHostView.java
index f1af3b3b..c4be72f 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardHostView.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardHostView.java
@@ -405,6 +405,12 @@
             mAppWidgetContainer.setAddWidgetEnabled(false);
         }
         checkAppWidgetConsistency();
+
+        // Don't let the user drag the challenge down if widgets are disabled.
+        if (mSlidingChallengeLayout != null) {
+            mSlidingChallengeLayout.setEnableChallengeDragging(!widgetsDisabled());
+        }
+
         mSwitchPageRunnable.run();
         // This needs to be called after the pages are all added.
         mViewStateManager.showUsabilityHints();
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardStatusView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardStatusView.java
index 3e42c14..57fd82c 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardStatusView.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardStatusView.java
@@ -17,24 +17,20 @@
 package com.android.keyguard;
 
 import android.content.Context;
-import android.content.res.Resources;
-import android.graphics.Typeface;
 import android.text.TextUtils;
+import android.text.format.DateFormat;
 import android.util.AttributeSet;
 import android.util.Log;
 import android.util.Slog;
 import android.view.View;
 import android.widget.GridLayout;
+import android.widget.TextClock;
 import android.widget.TextView;
 
 import com.android.internal.widget.LockPatternUtils;
 
-import java.text.SimpleDateFormat;
-import java.util.Date;
 import java.util.Locale;
 
-import libcore.icu.ICU;
-
 public class KeyguardStatusView extends GridLayout {
     private static final boolean DEBUG = KeyguardViewMediator.DEBUG;
     private static final String TAG = "KeyguardStatusView";
@@ -42,6 +38,7 @@
     private LockPatternUtils mLockPatternUtils;
 
     private TextView mAlarmStatusView;
+    private TextClock mDateView;
 
     private KeyguardUpdateMonitorCallback mInfoCallback = new KeyguardUpdateMonitorCallback() {
 
@@ -58,10 +55,12 @@
             }
         };
 
+        @Override
         public void onScreenTurnedOn() {
             setEnableMarquee(true);
         };
 
+        @Override
         public void onScreenTurnedOff(int why) {
             setEnableMarquee(false);
         };
@@ -88,6 +87,7 @@
     protected void onFinishInflate() {
         super.onFinishInflate();
         mAlarmStatusView = (TextView) findViewById(R.id.alarm_status);
+        mDateView = (TextClock) findViewById(R.id.date_view);
         mLockPatternUtils = new LockPatternUtils(getContext());
         final boolean screenOn = KeyguardUpdateMonitor.getInstance(mContext).isScreenOn();
         setEnableMarquee(screenOn);
@@ -95,7 +95,11 @@
     }
 
     protected void refresh() {
-        refreshAlarmStatus(); // might as well
+        final String fmt = DateFormat.getBestDateTimePattern(Locale.getDefault(),
+                mContext.getResources().getString(R.string.abbrev_wday_month_day_no_year));
+        mDateView.setFormat24Hour(fmt);
+        mDateView.setFormat12Hour(fmt);
+        refreshAlarmStatus();
     }
 
     void refreshAlarmStatus() {
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardViewManager.java b/packages/Keyguard/src/com/android/keyguard/KeyguardViewManager.java
index 65841805..58ca0b0 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardViewManager.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardViewManager.java
@@ -420,6 +420,7 @@
     public synchronized void onScreenTurnedOn(final IKeyguardShowCallback callback) {
         if (DEBUG) Log.d(TAG, "onScreenTurnedOn()");
         mScreenOn = true;
+        final IBinder token = mKeyguardHost == null ? null : mKeyguardHost.getWindowToken();
         if (mKeyguardView != null) {
             mKeyguardView.onScreenTurnedOn();
 
@@ -432,10 +433,6 @@
                     mKeyguardHost.post(new Runnable() {
                         @Override
                         public void run() {
-                            IBinder token = null;
-                            if (mKeyguardHost.getVisibility() == View.VISIBLE) {
-                                token = mKeyguardHost.getWindowToken();
-                            }
                             try {
                                 callback.onShown(token);
                             } catch (RemoteException e) {
@@ -445,7 +442,7 @@
                     });
                 } else {
                     try {
-                        callback.onShown(null);
+                        callback.onShown(token);
                     } catch (RemoteException e) {
                         Slog.w(TAG, "Exception calling onShown():", e);
                     }
@@ -453,7 +450,7 @@
             }
         } else if (callback != null) {
             try {
-                callback.onShown(null);
+                callback.onShown(token);
             } catch (RemoteException e) {
                 Slog.w(TAG, "Exception calling onShown():", e);
             }
diff --git a/packages/Keyguard/src/com/android/keyguard/SlidingChallengeLayout.java b/packages/Keyguard/src/com/android/keyguard/SlidingChallengeLayout.java
index 4f377a3..5e7816c 100644
--- a/packages/Keyguard/src/com/android/keyguard/SlidingChallengeLayout.java
+++ b/packages/Keyguard/src/com/android/keyguard/SlidingChallengeLayout.java
@@ -48,7 +48,7 @@
     private static final boolean DEBUG = false;
 
     // The drag handle is measured in dp above & below the top edge of the
-    // challenge view; these parameters change based on whether the challenge 
+    // challenge view; these parameters change based on whether the challenge
     // is open or closed.
     private static final int DRAG_HANDLE_CLOSED_ABOVE = 8; // dp
     private static final int DRAG_HANDLE_CLOSED_BELOW = 0; // dp
@@ -81,6 +81,7 @@
     private int mScrollState;
     private OnChallengeScrolledListener mScrollListener;
     private OnBouncerStateChangedListener mBouncerListener;
+    private boolean mEnableChallengeDragging;
 
     public static final int SCROLL_STATE_IDLE = 0;
     public static final int SCROLL_STATE_DRAGGING = 1;
@@ -263,6 +264,10 @@
         setSystemUiVisibility(SYSTEM_UI_FLAG_LAYOUT_STABLE | SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
     }
 
+    public void setEnableChallengeDragging(boolean enabled) {
+        mEnableChallengeDragging = enabled;
+    }
+
     public void setInsets(Rect insets) {
         mInsets.set(insets);
     }
@@ -573,7 +578,8 @@
                     final float y = ev.getY(i);
                     if (!mIsBouncing && mActivePointerId == INVALID_POINTER
                                 && (crossedDragHandle(x, y, mGestureStartY)
-                                || (isInChallengeView(x, y) &&
+                                        && shouldEnableChallengeDragging()
+                                        || (isInChallengeView(x, y) &&
                                         mScrollState == SCROLL_STATE_SETTLING))) {
                         mActivePointerId = ev.getPointerId(i);
                         mGestureStartX = x;
@@ -581,7 +587,8 @@
                         mGestureStartChallengeBottom = getChallengeBottom();
                         mDragging = true;
                         enableHardwareLayerForChallengeView();
-                    } else if (mChallengeShowing && isInChallengeView(x, y)) {
+                    } else if (mChallengeShowing && isInChallengeView(x, y)
+                            && shouldEnableChallengeDragging()) {
                         mBlockDrag = true;
                     }
                 }
@@ -596,6 +603,10 @@
         return mDragging;
     }
 
+    private boolean shouldEnableChallengeDragging() {
+        return mEnableChallengeDragging || !mChallengeShowing;
+    }
+
     private boolean isChallengeInteractionBlocked() {
         return !mChallengeInteractiveExternal || !mChallengeInteractiveInternal;
     }
diff --git a/packages/PrintSpooler/src/com/android/printspooler/SelectPrinterFragment.java b/packages/PrintSpooler/src/com/android/printspooler/SelectPrinterFragment.java
index 20315ca..7a91cef 100644
--- a/packages/PrintSpooler/src/com/android/printspooler/SelectPrinterFragment.java
+++ b/packages/PrintSpooler/src/com/android/printspooler/SelectPrinterFragment.java
@@ -52,6 +52,7 @@
 import android.view.MenuItem;
 import android.view.View;
 import android.view.ViewGroup;
+import android.view.accessibility.AccessibilityManager;
 import android.widget.ArrayAdapter;
 import android.widget.BaseAdapter;
 import android.widget.Filter;
@@ -138,13 +139,19 @@
         searchView.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() {
             @Override
             public void onViewAttachedToWindow(View view) {
-                view.announceForAccessibility(getString(
-                        R.string.print_search_box_shown_utterance));
+                if (AccessibilityManager.getInstance(getActivity()).isEnabled()) {
+                    view.announceForAccessibility(getString(
+                            R.string.print_search_box_shown_utterance));
+                }
             }
             @Override
             public void onViewDetachedFromWindow(View view) {
-                view.announceForAccessibility(getString(
-                        R.string.print_search_box_hidden_utterance));
+                Activity activity = getActivity();
+                if (activity != null && !activity.isFinishing()
+                        && AccessibilityManager.getInstance(activity).isEnabled()) {
+                    view.announceForAccessibility(getString(
+                            R.string.print_search_box_hidden_utterance));
+                }
             }
         });
 
diff --git a/packages/SettingsProvider/res/values/defaults.xml b/packages/SettingsProvider/res/values/defaults.xml
index bfb0931..a1d8f22 100644
--- a/packages/SettingsProvider/res/values/defaults.xml
+++ b/packages/SettingsProvider/res/values/defaults.xml
@@ -168,4 +168,9 @@
 
     <!-- Default for Settings.Secure.USER_SETUP_COMPLETE -->
     <bool name="def_user_setup_complete">false</bool>
+
+    <!-- Default for Settings.Global.LOW_BATTERY_SOUND_TIMEOUT.
+         0 means no timeout; battery sounds will always play
+         >0 is milliseconds of screen-off time after which battery sounds will not play -->
+    <integer name="def_low_battery_sound_timeout">0</integer>
 </resources>
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
index 120b28f2..09c21f3 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
@@ -72,7 +72,7 @@
     // database gets upgraded properly. At a minimum, please confirm that 'upgradeVersion'
     // is properly propagated through your change.  Not doing so will result in a loss of user
     // settings.
-    private static final int DATABASE_VERSION = 97;
+    private static final int DATABASE_VERSION = 98;
 
     private Context mContext;
     private int mUserHandle;
@@ -1541,6 +1541,24 @@
             upgradeVersion = 97;
         }
 
+        if (upgradeVersion == 97) {
+            if (mUserHandle == UserHandle.USER_OWNER) {
+                db.beginTransaction();
+                SQLiteStatement stmt = null;
+                try {
+                    stmt = db.compileStatement("INSERT OR REPLACE INTO global(name,value)"
+                            + " VALUES(?,?);");
+                    loadIntegerSetting(stmt, Settings.Global.LOW_BATTERY_SOUND_TIMEOUT,
+                            R.integer.def_low_battery_sound_timeout);
+                    db.setTransactionSuccessful();
+                } finally {
+                    db.endTransaction();
+                    if (stmt != null) stmt.close();
+                }
+            }
+            upgradeVersion = 98;
+        }
+
         // *** Remember to update DATABASE_VERSION above!
 
         if (upgradeVersion != currentVersion) {
@@ -2253,6 +2271,9 @@
                         CdmaSubscriptionSourceManager.PREFERRED_CDMA_SUBSCRIPTION);
             loadSetting(stmt, Settings.Global.CDMA_SUBSCRIPTION_MODE, type);
 
+            loadIntegerSetting(stmt, Settings.Global.LOW_BATTERY_SOUND_TIMEOUT,
+                    R.integer.def_low_battery_sound_timeout);
+
             // --- New global settings start here
         } finally {
             if (stmt != null) stmt.close();
diff --git a/packages/SystemUI/res/drawable-hdpi/bottom_divider_glow.png b/packages/SystemUI/res/drawable-hdpi/bottom_divider_glow.png
index e8cfc0f..d1948d6 100644
--- a/packages/SystemUI/res/drawable-hdpi/bottom_divider_glow.png
+++ b/packages/SystemUI/res/drawable-hdpi/bottom_divider_glow.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_0.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_0.png
deleted file mode 100644
index beb0e05..0000000
--- a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_0.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_100.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_100.png
deleted file mode 100644
index 14832c5f..0000000
--- a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_100.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_15.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_15.png
deleted file mode 100644
index 603fff1..0000000
--- a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_15.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_28.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_28.png
deleted file mode 100644
index 5556d6a..0000000
--- a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_28.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_43.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_43.png
deleted file mode 100644
index 0004633..0000000
--- a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_43.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_57.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_57.png
deleted file mode 100644
index abd336b..0000000
--- a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_57.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_71.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_71.png
deleted file mode 100644
index f23dda8..0000000
--- a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_71.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_85.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_85.png
deleted file mode 100644
index c7482a9..0000000
--- a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_85.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_bang_orange.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_bang_orange.png
deleted file mode 100644
index 29a853d..0000000
--- a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_bang_orange.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_bang_red.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_bang_red.png
deleted file mode 100644
index 988aa12..0000000
--- a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_bang_red.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_bang_white.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_bang_white.png
deleted file mode 100644
index 64c0d82..0000000
--- a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_bang_white.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_charge_0.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_charge_0.png
deleted file mode 100644
index 9ab1d8f..0000000
--- a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_charge_0.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_charge_100.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_charge_100.png
deleted file mode 100644
index e8f92e2..0000000
--- a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_charge_100.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_charge_15.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_charge_15.png
deleted file mode 100644
index 0d01eb5..0000000
--- a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_charge_15.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_charge_28.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_charge_28.png
deleted file mode 100644
index 3d66ffb..0000000
--- a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_charge_28.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_charge_43.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_charge_43.png
deleted file mode 100644
index 3562cea..0000000
--- a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_charge_43.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_charge_57.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_charge_57.png
deleted file mode 100644
index 2b2ebf6..0000000
--- a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_charge_57.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_charge_71.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_charge_71.png
deleted file mode 100644
index f9f9537..0000000
--- a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_charge_71.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_charge_85.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_charge_85.png
deleted file mode 100644
index 2c7532a..0000000
--- a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_charge_85.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_unknown.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_unknown.png
deleted file mode 100644
index ebcd336..0000000
--- a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_unknown.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_settings.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_settings.png
index 8b6ecc2..a53108d 100644
--- a/packages/SystemUI/res/drawable-hdpi/ic_qs_settings.png
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_settings.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_0.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_0.png
deleted file mode 100644
index 4ff22d2..0000000
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_0.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_100.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_100.png
deleted file mode 100644
index 612b362..0000000
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_100.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_15.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_15.png
deleted file mode 100644
index c971443..0000000
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_15.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_28.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_28.png
deleted file mode 100644
index a6d4796..0000000
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_28.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_43.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_43.png
deleted file mode 100644
index 67a6a73..0000000
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_43.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_57.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_57.png
deleted file mode 100644
index f972ebd..0000000
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_57.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_71.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_71.png
deleted file mode 100644
index b707fa1..0000000
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_71.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_85.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_85.png
deleted file mode 100644
index 82d6545..0000000
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_85.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim0.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim0.png
deleted file mode 100644
index fe33891..0000000
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim0.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim100.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim100.png
deleted file mode 100644
index edd03e3..0000000
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim100.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim15.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim15.png
deleted file mode 100644
index 5d90d2b..0000000
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim15.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim28.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim28.png
deleted file mode 100644
index 9e18046..0000000
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim28.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim43.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim43.png
deleted file mode 100644
index a2f2cf7..0000000
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim43.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim57.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim57.png
deleted file mode 100644
index bd5d922..0000000
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim57.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim71.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim71.png
deleted file mode 100644
index 9a02199..0000000
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim71.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim85.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim85.png
deleted file mode 100644
index aa1b25c..0000000
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim85.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_0.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_0.png
deleted file mode 100644
index 432b166..0000000
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_0.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_0_fully.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_0_fully.png
deleted file mode 100644
index aa071c77..0000000
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_0_fully.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_1.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_1.png
deleted file mode 100644
index 194698a..0000000
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_1.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_1_fully.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_1_fully.png
deleted file mode 100644
index 0b4b368..0000000
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_1_fully.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_2.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_2.png
deleted file mode 100644
index 8887f2e0..0000000
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_2.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_2_fully.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_2_fully.png
deleted file mode 100644
index 87c3244..0000000
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_2_fully.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_3.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_3.png
deleted file mode 100644
index 8206cd8..0000000
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_3.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_3_fully.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_3_fully.png
deleted file mode 100644
index 293f88c..0000000
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_3_fully.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_disconnected.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_disconnected.png
deleted file mode 100644
index cb9c8ac..0000000
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_disconnected.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_idle.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_idle.png
deleted file mode 100644
index 88eafcb..0000000
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_idle.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/status_background.9.png b/packages/SystemUI/res/drawable-hdpi/status_background.9.png
index 66d14675..7957c59 100644
--- a/packages/SystemUI/res/drawable-hdpi/status_background.9.png
+++ b/packages/SystemUI/res/drawable-hdpi/status_background.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/top_divider_glow.png b/packages/SystemUI/res/drawable-hdpi/top_divider_glow.png
index 89cd10e..a540efb1 100644
--- a/packages/SystemUI/res/drawable-hdpi/top_divider_glow.png
+++ b/packages/SystemUI/res/drawable-hdpi/top_divider_glow.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_wimax_signal_0.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_wimax_signal_0.png
deleted file mode 100644
index 295d8fa..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_wimax_signal_0.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_wimax_signal_0_fully.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_wimax_signal_0_fully.png
deleted file mode 100644
index d875faf..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_wimax_signal_0_fully.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_wimax_signal_1.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_wimax_signal_1.png
deleted file mode 100644
index f3235e4..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_wimax_signal_1.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_wimax_signal_1_fully.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_wimax_signal_1_fully.png
deleted file mode 100644
index 6cd4809..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_wimax_signal_1_fully.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_wimax_signal_2.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_wimax_signal_2.png
deleted file mode 100644
index 9bbf17e..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_wimax_signal_2.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_wimax_signal_2_fully.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_wimax_signal_2_fully.png
deleted file mode 100644
index c301366..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_wimax_signal_2_fully.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_wimax_signal_3.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_wimax_signal_3.png
deleted file mode 100644
index 56244b9..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_wimax_signal_3.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_wimax_signal_3_fully.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_wimax_signal_3_fully.png
deleted file mode 100644
index d2af46d..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_wimax_signal_3_fully.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_wimax_signal_disconnected.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_wimax_signal_disconnected.png
deleted file mode 100644
index cee9234..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_wimax_signal_disconnected.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_wimax_signal_idle.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_wimax_signal_idle.png
deleted file mode 100644
index 91768a2..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_wimax_signal_idle.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_wimax_signal_0.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_wimax_signal_0.png
deleted file mode 100644
index 383015e..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_wimax_signal_0.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_wimax_signal_0_fully.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_wimax_signal_0_fully.png
deleted file mode 100644
index ab73c9f..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_wimax_signal_0_fully.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_wimax_signal_1.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_wimax_signal_1.png
deleted file mode 100644
index 07a81a7..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_wimax_signal_1.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_wimax_signal_1_fully.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_wimax_signal_1_fully.png
deleted file mode 100644
index 9303aee..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_wimax_signal_1_fully.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_wimax_signal_2.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_wimax_signal_2.png
deleted file mode 100644
index def4430..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_wimax_signal_2.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_wimax_signal_2_fully.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_wimax_signal_2_fully.png
deleted file mode 100644
index 43c9fb2..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_wimax_signal_2_fully.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_wimax_signal_3.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_wimax_signal_3.png
deleted file mode 100644
index ddbd04a..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_wimax_signal_3.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_wimax_signal_3_fully.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_wimax_signal_3_fully.png
deleted file mode 100644
index c8493ff..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_wimax_signal_3_fully.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_wimax_signal_disconnected.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_wimax_signal_disconnected.png
deleted file mode 100644
index de04176..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_wimax_signal_disconnected.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_wimax_signal_idle.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_wimax_signal_idle.png
deleted file mode 100644
index abee91e..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_wimax_signal_idle.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_wimax_signal_0.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_wimax_signal_0.png
deleted file mode 100644
index e00a33a..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_wimax_signal_0.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_wimax_signal_0_fully.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_wimax_signal_0_fully.png
deleted file mode 100644
index 21286bf..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_wimax_signal_0_fully.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_wimax_signal_1.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_wimax_signal_1.png
deleted file mode 100644
index 8be5950..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_wimax_signal_1.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_wimax_signal_1_fully.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_wimax_signal_1_fully.png
deleted file mode 100644
index 7cdd393..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_wimax_signal_1_fully.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_wimax_signal_2.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_wimax_signal_2.png
deleted file mode 100644
index 07aa536..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_wimax_signal_2.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_wimax_signal_2_fully.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_wimax_signal_2_fully.png
deleted file mode 100644
index 3ca6529..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_wimax_signal_2_fully.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_wimax_signal_3.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_wimax_signal_3.png
deleted file mode 100644
index 095a1a8..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_wimax_signal_3.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_wimax_signal_3_fully.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_wimax_signal_3_fully.png
deleted file mode 100644
index eb8e313..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_wimax_signal_3_fully.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_wimax_signal_disconnected.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_wimax_signal_disconnected.png
deleted file mode 100644
index 0f571e6..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_wimax_signal_disconnected.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_wimax_signal_idle.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_wimax_signal_idle.png
deleted file mode 100644
index 3edbd14..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_wimax_signal_idle.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_data_wimax_signal_0.png b/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_data_wimax_signal_0.png
deleted file mode 100644
index 4cb1410..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_data_wimax_signal_0.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_data_wimax_signal_0_fully.png b/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_data_wimax_signal_0_fully.png
deleted file mode 100644
index 7a0b11c..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_data_wimax_signal_0_fully.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_data_wimax_signal_1.png b/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_data_wimax_signal_1.png
deleted file mode 100644
index 12d5d6f..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_data_wimax_signal_1.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_data_wimax_signal_1_fully.png b/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_data_wimax_signal_1_fully.png
deleted file mode 100644
index 08da7e4..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_data_wimax_signal_1_fully.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_data_wimax_signal_2.png b/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_data_wimax_signal_2.png
deleted file mode 100644
index 6ecd2e8..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_data_wimax_signal_2.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_data_wimax_signal_2_fully.png b/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_data_wimax_signal_2_fully.png
deleted file mode 100644
index 9e7e3f2..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_data_wimax_signal_2_fully.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_data_wimax_signal_3.png b/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_data_wimax_signal_3.png
deleted file mode 100644
index bdd4f59..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_data_wimax_signal_3.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_data_wimax_signal_3_fully.png b/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_data_wimax_signal_3_fully.png
deleted file mode 100644
index 1eb0547..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_data_wimax_signal_3_fully.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_data_wimax_signal_disconnected.png b/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_data_wimax_signal_disconnected.png
deleted file mode 100644
index 06e4480..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_data_wimax_signal_disconnected.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_data_wimax_signal_idle.png b/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_data_wimax_signal_idle.png
deleted file mode 100644
index f904325..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_data_wimax_signal_idle.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/bottom_divider_glow.png b/packages/SystemUI/res/drawable-mdpi/bottom_divider_glow.png
index 7d7868d..ba25f65 100644
--- a/packages/SystemUI/res/drawable-mdpi/bottom_divider_glow.png
+++ b/packages/SystemUI/res/drawable-mdpi/bottom_divider_glow.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_0.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_0.png
deleted file mode 100644
index 8dd3d4d..0000000
--- a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_0.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_100.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_100.png
deleted file mode 100644
index 2a9bf50..0000000
--- a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_100.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_15.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_15.png
deleted file mode 100644
index f59ba48..0000000
--- a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_15.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_28.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_28.png
deleted file mode 100644
index 12f16dd..0000000
--- a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_28.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_43.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_43.png
deleted file mode 100644
index 649c89d..0000000
--- a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_43.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_57.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_57.png
deleted file mode 100644
index 95494e6..0000000
--- a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_57.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_71.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_71.png
deleted file mode 100644
index dfd92ee..0000000
--- a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_71.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_85.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_85.png
deleted file mode 100644
index dcabf3f..0000000
--- a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_85.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_bang_orange.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_bang_orange.png
deleted file mode 100644
index 41fc2e9..0000000
--- a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_bang_orange.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_bang_red.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_bang_red.png
deleted file mode 100644
index 414be9d..0000000
--- a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_bang_red.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_bang_white.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_bang_white.png
deleted file mode 100644
index 398a08b..0000000
--- a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_bang_white.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_charge_0.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_charge_0.png
deleted file mode 100644
index b917281..0000000
--- a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_charge_0.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_charge_100.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_charge_100.png
deleted file mode 100644
index 2a05827..0000000
--- a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_charge_100.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_charge_15.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_charge_15.png
deleted file mode 100644
index 86d1158..0000000
--- a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_charge_15.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_charge_28.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_charge_28.png
deleted file mode 100644
index 076add9..0000000
--- a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_charge_28.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_charge_43.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_charge_43.png
deleted file mode 100644
index 4bdae3c..0000000
--- a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_charge_43.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_charge_57.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_charge_57.png
deleted file mode 100644
index 8353d91..0000000
--- a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_charge_57.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_charge_71.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_charge_71.png
deleted file mode 100644
index 91bd62e..0000000
--- a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_charge_71.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_charge_85.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_charge_85.png
deleted file mode 100644
index a36d25d..0000000
--- a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_charge_85.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_unknown.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_unknown.png
deleted file mode 100644
index a2e3cc9..0000000
--- a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_unknown.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_settings.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_settings.png
index 021ae6d..0f7607b 100644
--- a/packages/SystemUI/res/drawable-mdpi/ic_qs_settings.png
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_settings.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_0.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_0.png
deleted file mode 100644
index edcb1b3..0000000
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_0.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_100.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_100.png
deleted file mode 100644
index 8e0ec0f..0000000
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_100.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_15.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_15.png
deleted file mode 100644
index b1b675b..0000000
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_15.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_28.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_28.png
deleted file mode 100644
index 868bbbc..0000000
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_28.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_43.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_43.png
deleted file mode 100644
index 890129e..0000000
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_43.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_57.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_57.png
deleted file mode 100644
index 86279af..0000000
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_57.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_71.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_71.png
deleted file mode 100644
index de2aa4e..0000000
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_71.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_85.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_85.png
deleted file mode 100644
index c008d6f..0000000
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_85.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim0.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim0.png
deleted file mode 100644
index 0c63793..0000000
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim0.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim100.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim100.png
deleted file mode 100644
index c16c289..0000000
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim100.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim15.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim15.png
deleted file mode 100644
index f4f59b4..0000000
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim15.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim28.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim28.png
deleted file mode 100644
index 1d2c557..0000000
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim28.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim43.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim43.png
deleted file mode 100644
index ebf7888..0000000
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim43.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim57.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim57.png
deleted file mode 100644
index b100728..0000000
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim57.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim71.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim71.png
deleted file mode 100644
index 8b8e872..0000000
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim71.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim85.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim85.png
deleted file mode 100644
index de78a9c..0000000
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim85.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_0.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_0.png
deleted file mode 100644
index e5a8f95..0000000
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_0.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_0_fully.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_0_fully.png
deleted file mode 100644
index c1c2b5c..0000000
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_0_fully.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_1.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_1.png
deleted file mode 100644
index 421eee8..0000000
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_1.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_1_fully.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_1_fully.png
deleted file mode 100644
index bfd2494..0000000
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_1_fully.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_2.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_2.png
deleted file mode 100644
index b1af6786..0000000
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_2.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_2_fully.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_2_fully.png
deleted file mode 100644
index 9ad245b..0000000
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_2_fully.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_3.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_3.png
deleted file mode 100644
index 69a1a97..0000000
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_3.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_3_fully.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_3_fully.png
deleted file mode 100644
index d865673..0000000
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_3_fully.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_disconnected.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_disconnected.png
deleted file mode 100644
index 6bd3189..0000000
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_disconnected.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_idle.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_idle.png
deleted file mode 100644
index f7f0e93..0000000
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_idle.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/status_background.9.png b/packages/SystemUI/res/drawable-mdpi/status_background.9.png
index 49076d3..b79a6d9 100644
--- a/packages/SystemUI/res/drawable-mdpi/status_background.9.png
+++ b/packages/SystemUI/res/drawable-mdpi/status_background.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/top_divider_glow.png b/packages/SystemUI/res/drawable-mdpi/top_divider_glow.png
index f93da09..53d85de 100644
--- a/packages/SystemUI/res/drawable-mdpi/top_divider_glow.png
+++ b/packages/SystemUI/res/drawable-mdpi/top_divider_glow.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/bottom_divider_glow.png b/packages/SystemUI/res/drawable-xhdpi/bottom_divider_glow.png
index bbcea9e..0b012b4 100644
--- a/packages/SystemUI/res/drawable-xhdpi/bottom_divider_glow.png
+++ b/packages/SystemUI/res/drawable-xhdpi/bottom_divider_glow.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_0.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_0.png
deleted file mode 100644
index ff3bdf0..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_0.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_100.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_100.png
deleted file mode 100644
index 8bc6d17..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_100.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_15.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_15.png
deleted file mode 100644
index 39fccc8..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_15.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_28.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_28.png
deleted file mode 100644
index 70829a1..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_28.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_43.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_43.png
deleted file mode 100644
index ebd97c8..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_43.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_57.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_57.png
deleted file mode 100644
index 9d5be12..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_57.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_71.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_71.png
deleted file mode 100644
index 1ffa245..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_71.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_85.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_85.png
deleted file mode 100644
index b6aebe6..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_85.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_bang_orange.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_bang_orange.png
deleted file mode 100644
index 28ec7a8..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_bang_orange.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_bang_red.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_bang_red.png
deleted file mode 100644
index 432b496..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_bang_red.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_bang_white.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_bang_white.png
deleted file mode 100644
index 9ed63f3..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_bang_white.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_charge_0.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_charge_0.png
deleted file mode 100644
index 1ecedca..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_charge_0.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_charge_100.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_charge_100.png
deleted file mode 100644
index 37cb7c4..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_charge_100.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_charge_15.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_charge_15.png
deleted file mode 100644
index 1a595ed..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_charge_15.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_charge_28.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_charge_28.png
deleted file mode 100644
index e36e68c..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_charge_28.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_charge_43.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_charge_43.png
deleted file mode 100644
index e58f9c0..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_charge_43.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_charge_57.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_charge_57.png
deleted file mode 100644
index c7fafa4..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_charge_57.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_charge_71.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_charge_71.png
deleted file mode 100644
index 5dcec0e..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_charge_71.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_charge_85.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_charge_85.png
deleted file mode 100644
index 6e81974..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_charge_85.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_unknown.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_unknown.png
deleted file mode 100644
index 1db2eb3..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_unknown.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_settings.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_settings.png
index e888ac2..4ce9460 100644
--- a/packages/SystemUI/res/drawable-xhdpi/ic_qs_settings.png
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_settings.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_0.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_0.png
deleted file mode 100644
index 8ea54ee..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_0.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_100.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_100.png
deleted file mode 100644
index 877abf4..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_100.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_15.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_15.png
deleted file mode 100644
index 94605c9..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_15.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_28.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_28.png
deleted file mode 100644
index c4b77ec..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_28.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_43.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_43.png
deleted file mode 100644
index 9983d60..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_43.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_57.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_57.png
deleted file mode 100644
index de09dc6..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_57.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_71.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_71.png
deleted file mode 100644
index 99908696..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_71.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_85.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_85.png
deleted file mode 100644
index 7a630f9..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_85.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim0.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim0.png
deleted file mode 100644
index 8a0a50f..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim0.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim100.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim100.png
deleted file mode 100644
index 58ff765..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim100.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim15.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim15.png
deleted file mode 100644
index ca14841..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim15.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim28.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim28.png
deleted file mode 100644
index 9b1a47c..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim28.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim43.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim43.png
deleted file mode 100644
index dd00668..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim43.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim57.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim57.png
deleted file mode 100644
index 556c710..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim57.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim71.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim71.png
deleted file mode 100644
index b87eb87..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim71.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim85.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim85.png
deleted file mode 100644
index fe7c1af..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim85.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_0.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_0.png
deleted file mode 100644
index f64d582..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_0.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_0_fully.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_0_fully.png
deleted file mode 100644
index 31f5b90..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_0_fully.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_1.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_1.png
deleted file mode 100644
index 881d5e8..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_1.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_1_fully.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_1_fully.png
deleted file mode 100644
index 2d80c4d..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_1_fully.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_2.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_2.png
deleted file mode 100644
index ad85c83..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_2.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_2_fully.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_2_fully.png
deleted file mode 100644
index bde43c6..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_2_fully.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_3.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_3.png
deleted file mode 100644
index 914ac49..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_3.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_3_fully.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_3_fully.png
deleted file mode 100644
index c83e9fe..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_3_fully.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_disconnected.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_disconnected.png
deleted file mode 100644
index 48bca90..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_disconnected.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_idle.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_idle.png
deleted file mode 100644
index 15514340..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_idle.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/status_background.9.png b/packages/SystemUI/res/drawable-xhdpi/status_background.9.png
index 75ec8f5..87c641b 100644
--- a/packages/SystemUI/res/drawable-xhdpi/status_background.9.png
+++ b/packages/SystemUI/res/drawable-xhdpi/status_background.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/top_divider_glow.png b/packages/SystemUI/res/drawable-xhdpi/top_divider_glow.png
index 56b63d0..d4526c0 100644
--- a/packages/SystemUI/res/drawable-xhdpi/top_divider_glow.png
+++ b/packages/SystemUI/res/drawable-xhdpi/top_divider_glow.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_0.png b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_0.png
deleted file mode 100644
index 6ddf734..0000000
--- a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_0.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_100.png b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_100.png
deleted file mode 100644
index c04dc4b..0000000
--- a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_100.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_15.png b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_15.png
deleted file mode 100644
index e1e1b2e..0000000
--- a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_15.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_28.png b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_28.png
deleted file mode 100644
index 6ff8518..0000000
--- a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_28.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_43.png b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_43.png
deleted file mode 100644
index c0e94f2..0000000
--- a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_43.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_57.png b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_57.png
deleted file mode 100644
index 175e14b..0000000
--- a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_57.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_71.png b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_71.png
deleted file mode 100644
index ca6ba47..0000000
--- a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_71.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_85.png b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_85.png
deleted file mode 100644
index 95017e4..0000000
--- a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_85.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_bang_orange.png b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_bang_orange.png
deleted file mode 100644
index 2b333d7..0000000
--- a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_bang_orange.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_bang_red.png b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_bang_red.png
deleted file mode 100644
index 4c71154..0000000
--- a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_bang_red.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_bang_white.png b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_bang_white.png
deleted file mode 100644
index 976a36b..0000000
--- a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_bang_white.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_charge_0.png b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_charge_0.png
deleted file mode 100644
index 82d4806..0000000
--- a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_charge_0.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_charge_100.png b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_charge_100.png
deleted file mode 100644
index 7d11599..0000000
--- a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_charge_100.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_charge_15.png b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_charge_15.png
deleted file mode 100644
index 3b36bb9..0000000
--- a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_charge_15.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_charge_28.png b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_charge_28.png
deleted file mode 100644
index d36bd5a..0000000
--- a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_charge_28.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_charge_43.png b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_charge_43.png
deleted file mode 100644
index a3f543a..0000000
--- a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_charge_43.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_charge_57.png b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_charge_57.png
deleted file mode 100644
index 0208baf..0000000
--- a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_charge_57.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_charge_71.png b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_charge_71.png
deleted file mode 100644
index ea46076..0000000
--- a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_charge_71.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_charge_85.png b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_charge_85.png
deleted file mode 100644
index 4cbfea6..0000000
--- a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_charge_85.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_unknown.png b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_unknown.png
deleted file mode 100644
index 5ae0221..0000000
--- a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_unknown.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_settings.png b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_settings.png
index d1a72be..74a78dc 100644
--- a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_settings.png
+++ b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_settings.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_0.png b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_0.png
deleted file mode 100644
index 2d916d7..0000000
--- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_0.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_100.png b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_100.png
deleted file mode 100644
index fe3c750..0000000
--- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_100.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_15.png b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_15.png
deleted file mode 100644
index a2bab6d..0000000
--- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_15.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_28.png b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_28.png
deleted file mode 100644
index 224be03..0000000
--- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_28.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_43.png b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_43.png
deleted file mode 100644
index dabed32..0000000
--- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_43.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_57.png b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_57.png
deleted file mode 100644
index 82d04c5..0000000
--- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_57.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_71.png b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_71.png
deleted file mode 100644
index 1d403c6..0000000
--- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_71.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_85.png b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_85.png
deleted file mode 100644
index b917d37..0000000
--- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_85.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_charge_anim0.png b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_charge_anim0.png
deleted file mode 100644
index 1da84be..0000000
--- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_charge_anim0.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_charge_anim100.png b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_charge_anim100.png
deleted file mode 100644
index 17989b5..0000000
--- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_charge_anim100.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_charge_anim15.png b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_charge_anim15.png
deleted file mode 100644
index 8733bc3..0000000
--- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_charge_anim15.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_charge_anim28.png b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_charge_anim28.png
deleted file mode 100644
index 54cc847..0000000
--- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_charge_anim28.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_charge_anim43.png b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_charge_anim43.png
deleted file mode 100644
index 5d5ba2f..0000000
--- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_charge_anim43.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_charge_anim57.png b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_charge_anim57.png
deleted file mode 100644
index 6a5035e..0000000
--- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_charge_anim57.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_charge_anim71.png b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_charge_anim71.png
deleted file mode 100644
index 82a891f..0000000
--- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_charge_anim71.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_charge_anim85.png b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_charge_anim85.png
deleted file mode 100644
index 399bb97..0000000
--- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_charge_anim85.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_0.png b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_0.png
deleted file mode 100644
index 21daf5c..0000000
--- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_0.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_0_fully.png b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_0_fully.png
deleted file mode 100644
index 3397570..0000000
--- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_0_fully.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_1.png b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_1.png
deleted file mode 100644
index 87039c5..0000000
--- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_1.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_1_fully.png b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_1_fully.png
deleted file mode 100644
index a21f3c4..0000000
--- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_1_fully.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_2.png b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_2.png
deleted file mode 100644
index 65b323f..0000000
--- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_2.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_2_fully.png b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_2_fully.png
deleted file mode 100644
index c5c3550..0000000
--- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_2_fully.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_3.png b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_3.png
deleted file mode 100644
index 801cb3c..0000000
--- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_3.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_3_fully.png b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_3_fully.png
deleted file mode 100644
index 149d227..0000000
--- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_3_fully.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_disconnected.png b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_disconnected.png
deleted file mode 100644
index 6edb37a..0000000
--- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_disconnected.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_idle.png b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_idle.png
deleted file mode 100644
index 2b01e9b..0000000
--- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_idle.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/status_background.9.png b/packages/SystemUI/res/drawable-xxhdpi/status_background.9.png
index 679ca5d..727c804 100644
--- a/packages/SystemUI/res/drawable-xxhdpi/status_background.9.png
+++ b/packages/SystemUI/res/drawable-xxhdpi/status_background.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable/ic_qs_battery.xml b/packages/SystemUI/res/drawable/ic_qs_battery.xml
deleted file mode 100644
index 4e2a265..0000000
--- a/packages/SystemUI/res/drawable/ic_qs_battery.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2012 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<clip
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:drawable="@drawable/stat_sys_battery_100"
-    android:clipOrientation="vertical"
-    android:gravity="bottom" />
diff --git a/packages/SystemUI/res/drawable/qs_sys_battery.xml b/packages/SystemUI/res/drawable/qs_sys_battery.xml
deleted file mode 100644
index dd36aa5..0000000
--- a/packages/SystemUI/res/drawable/qs_sys_battery.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** 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.
-*/
--->
-
-<level-list xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:maxLevel="4" android:drawable="@drawable/ic_qs_battery_0" />
-    <item android:maxLevel="15" android:drawable="@drawable/ic_qs_battery_15" />
-    <item android:maxLevel="35" android:drawable="@drawable/ic_qs_battery_28" />
-    <item android:maxLevel="49" android:drawable="@drawable/ic_qs_battery_43" />
-    <item android:maxLevel="60" android:drawable="@drawable/ic_qs_battery_57" />
-    <item android:maxLevel="75" android:drawable="@drawable/ic_qs_battery_71" />
-    <item android:maxLevel="90" android:drawable="@drawable/ic_qs_battery_85" />
-    <item android:maxLevel="100" android:drawable="@drawable/ic_qs_battery_100" />
-</level-list>
diff --git a/packages/SystemUI/res/drawable/qs_sys_battery_charging.xml b/packages/SystemUI/res/drawable/qs_sys_battery_charging.xml
deleted file mode 100644
index cee5081..0000000
--- a/packages/SystemUI/res/drawable/qs_sys_battery_charging.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** 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.
-*/
--->
-
-<level-list xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:maxLevel="4" android:drawable="@drawable/ic_qs_battery_charge_0" />
-    <item android:maxLevel="15" android:drawable="@drawable/ic_qs_battery_charge_15" />
-    <item android:maxLevel="35" android:drawable="@drawable/ic_qs_battery_charge_28" />
-    <item android:maxLevel="49" android:drawable="@drawable/ic_qs_battery_charge_43" />
-    <item android:maxLevel="60" android:drawable="@drawable/ic_qs_battery_charge_57" />
-    <item android:maxLevel="75" android:drawable="@drawable/ic_qs_battery_charge_71" />
-    <item android:maxLevel="90" android:drawable="@drawable/ic_qs_battery_charge_85" />
-    <item android:maxLevel="100" android:drawable="@drawable/ic_qs_battery_charge_100" />
-</level-list>
diff --git a/packages/SystemUI/res/drawable/stat_sys_battery.xml b/packages/SystemUI/res/drawable/stat_sys_battery.xml
deleted file mode 100644
index 744ab93..0000000
--- a/packages/SystemUI/res/drawable/stat_sys_battery.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/* 
-** 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.
-*/
--->
-
-<level-list xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:maxLevel="4" android:drawable="@drawable/stat_sys_battery_0" />
-    <item android:maxLevel="15" android:drawable="@drawable/stat_sys_battery_15" />
-    <item android:maxLevel="35" android:drawable="@drawable/stat_sys_battery_28" />
-    <item android:maxLevel="49" android:drawable="@drawable/stat_sys_battery_43" />
-    <item android:maxLevel="60" android:drawable="@drawable/stat_sys_battery_57" />
-    <item android:maxLevel="75" android:drawable="@drawable/stat_sys_battery_71" />
-    <item android:maxLevel="90" android:drawable="@drawable/stat_sys_battery_85" />
-    <item android:maxLevel="100" android:drawable="@drawable/stat_sys_battery_100" />
-</level-list>
-
diff --git a/packages/SystemUI/res/drawable/stat_sys_battery_charge.xml b/packages/SystemUI/res/drawable/stat_sys_battery_charge.xml
deleted file mode 100644
index 6918eb2..0000000
--- a/packages/SystemUI/res/drawable/stat_sys_battery_charge.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** 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.
-*/
--->
-
-<level-list xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:maxLevel="4" android:drawable="@drawable/stat_sys_battery_charge_anim0" />
-    <item android:maxLevel="15" android:drawable="@drawable/stat_sys_battery_charge_anim15" />
-    <item android:maxLevel="35" android:drawable="@drawable/stat_sys_battery_charge_anim28" />
-    <item android:maxLevel="49" android:drawable="@drawable/stat_sys_battery_charge_anim43" />
-    <item android:maxLevel="60" android:drawable="@drawable/stat_sys_battery_charge_anim57" />
-    <item android:maxLevel="75" android:drawable="@drawable/stat_sys_battery_charge_anim71" />
-    <item android:maxLevel="90" android:drawable="@drawable/stat_sys_battery_charge_anim85" />
-    <item android:maxLevel="100" android:drawable="@drawable/stat_sys_battery_charge_anim100" />
-</level-list>
-
-
diff --git a/packages/SystemUI/res/values/colors.xml b/packages/SystemUI/res/values/colors.xml
index ce94162..0bbdead 100644
--- a/packages/SystemUI/res/values/colors.xml
+++ b/packages/SystemUI/res/values/colors.xml
@@ -19,7 +19,8 @@
 <resources>
     <drawable name="notification_number_text_color">#ffffffff</drawable>
     <drawable name="ticker_background_color">#ff1d1d1d</drawable>
-    <drawable name="system_bar_background">#ff000000</drawable>
+    <drawable name="system_bar_background">@color/system_bar_background_opaque</drawable>
+    <color name="system_bar_background_opaque">#ff000000</color>
     <color name="system_bar_background_semi_transparent">#66000000</color> <!-- 40% black -->
     <color name="notification_panel_solid_background">#ff000000</color>
     <drawable name="status_bar_recents_app_thumbnail_background">#88000000</drawable>
diff --git a/packages/SystemUI/src/com/android/systemui/power/PowerUI.java b/packages/SystemUI/src/com/android/systemui/power/PowerUI.java
index a08eb9b..28c2772 100644
--- a/packages/SystemUI/src/com/android/systemui/power/PowerUI.java
+++ b/packages/SystemUI/src/com/android/systemui/power/PowerUI.java
@@ -29,9 +29,11 @@
 import android.net.Uri;
 import android.os.BatteryManager;
 import android.os.Handler;
+import android.os.PowerManager;
+import android.os.SystemClock;
 import android.os.UserHandle;
 import android.provider.Settings;
-import android.util.Log;
+import android.util.Slog;
 import android.view.View;
 import android.view.WindowManager;
 import android.widget.TextView;
@@ -62,6 +64,8 @@
     AlertDialog mLowBatteryDialog;
     TextView mBatteryLevelTextView;
 
+    private long mScreenOffTime = -1;
+
     public void start() {
 
         mLowBatteryAlertCloseLevel = mContext.getResources().getInteger(
@@ -71,10 +75,14 @@
         mLowBatteryReminderLevels[1] = mContext.getResources().getInteger(
                 com.android.internal.R.integer.config_criticalBatteryWarningLevel);
 
+        final PowerManager pm = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
+        mScreenOffTime = pm.isScreenOn() ? -1 : SystemClock.elapsedRealtime();
+
         // Register for Intent broadcasts for...
         IntentFilter filter = new IntentFilter();
         filter.addAction(Intent.ACTION_BATTERY_CHANGED);
-        filter.addAction(Intent.ACTION_POWER_CONNECTED);
+        filter.addAction(Intent.ACTION_SCREEN_OFF);
+        filter.addAction(Intent.ACTION_SCREEN_ON);
         mContext.registerReceiver(mIntentReceiver, filter, null, mHandler);
     }
 
@@ -126,19 +134,19 @@
                 int bucket = findBatteryLevelBucket(mBatteryLevel);
 
                 if (DEBUG) {
-                    Log.d(TAG, "buckets   ....." + mLowBatteryAlertCloseLevel
+                    Slog.d(TAG, "buckets   ....." + mLowBatteryAlertCloseLevel
                             + " .. " + mLowBatteryReminderLevels[0]
                             + " .. " + mLowBatteryReminderLevels[1]);
-                    Log.d(TAG, "level          " + oldBatteryLevel + " --> " + mBatteryLevel);
-                    Log.d(TAG, "status         " + oldBatteryStatus + " --> " + mBatteryStatus);
-                    Log.d(TAG, "plugType       " + oldPlugType + " --> " + mPlugType);
-                    Log.d(TAG, "invalidCharger " + oldInvalidCharger + " --> " + mInvalidCharger);
-                    Log.d(TAG, "bucket         " + oldBucket + " --> " + bucket);
-                    Log.d(TAG, "plugged        " + oldPlugged + " --> " + plugged);
+                    Slog.d(TAG, "level          " + oldBatteryLevel + " --> " + mBatteryLevel);
+                    Slog.d(TAG, "status         " + oldBatteryStatus + " --> " + mBatteryStatus);
+                    Slog.d(TAG, "plugType       " + oldPlugType + " --> " + mPlugType);
+                    Slog.d(TAG, "invalidCharger " + oldInvalidCharger + " --> " + mInvalidCharger);
+                    Slog.d(TAG, "bucket         " + oldBucket + " --> " + bucket);
+                    Slog.d(TAG, "plugged        " + oldPlugged + " --> " + plugged);
                 }
 
                 if (oldInvalidCharger == 0 && mInvalidCharger != 0) {
-                    Log.d(TAG, "showing invalid charger warning");
+                    Slog.d(TAG, "showing invalid charger warning");
                     showInvalidChargerDialog();
                     return;
                 } else if (oldInvalidCharger != 0 && mInvalidCharger == 0) {
@@ -163,21 +171,25 @@
                 } else if (mBatteryLevelTextView != null) {
                     showLowBatteryWarning();
                 }
+            } else if (Intent.ACTION_SCREEN_OFF.equals(action)) {
+                mScreenOffTime = SystemClock.elapsedRealtime();
+            } else if (Intent.ACTION_SCREEN_ON.equals(action)) {
+                mScreenOffTime = -1;
             } else {
-                Log.w(TAG, "unknown intent: " + intent);
+                Slog.w(TAG, "unknown intent: " + intent);
             }
         }
     };
 
     void dismissLowBatteryWarning() {
         if (mLowBatteryDialog != null) {
-            Log.i(TAG, "closing low battery warning: level=" + mBatteryLevel);
+            Slog.i(TAG, "closing low battery warning: level=" + mBatteryLevel);
             mLowBatteryDialog.dismiss();
         }
     }
 
     void showLowBatteryWarning() {
-        Log.i(TAG,
+        Slog.i(TAG,
                 ((mBatteryLevelTextView == null) ? "showing" : "updating")
                 + " low battery warning: level=" + mBatteryLevel
                 + " [" + findBatteryLevelBucket(mBatteryLevel) + "]");
@@ -233,11 +245,23 @@
     }
 
     void playLowBatterySound() {
-        if (DEBUG) {
-            Log.i(TAG, "playing low battery sound. WOMP-WOMP!");
+        final ContentResolver cr = mContext.getContentResolver();
+
+        final int silenceAfter = Settings.Global.getInt(cr,
+                Settings.Global.LOW_BATTERY_SOUND_TIMEOUT, 0);
+        final long offTime = SystemClock.elapsedRealtime() - mScreenOffTime;
+        if (silenceAfter > 0
+                && mScreenOffTime > 0
+                && offTime > silenceAfter) {
+            Slog.i(TAG, "screen off too long (" + offTime + "ms, limit " + silenceAfter
+                    + "ms): not waking up the user with low battery sound");
+            return;
         }
 
-        final ContentResolver cr = mContext.getContentResolver();
+        if (DEBUG) {
+            Slog.d(TAG, "playing low battery sound. pick-a-doop!"); // WOMP-WOMP is deprecated
+        }
+
         if (Settings.Global.getInt(cr, Settings.Global.POWER_SOUNDS_ENABLED, 1) == 1) {
             final String soundPath = Settings.Global.getString(cr,
                     Settings.Global.LOW_BATTERY_SOUND);
@@ -261,7 +285,7 @@
     }
 
     void showInvalidChargerDialog() {
-        Log.d(TAG, "showing invalid charger dialog");
+        Slog.d(TAG, "showing invalid charger dialog");
 
         dismissLowBatteryWarning();
 
@@ -301,6 +325,17 @@
         pw.println(Integer.toString(mPlugType));
         pw.print("mInvalidCharger=");
         pw.println(Integer.toString(mInvalidCharger));
+        pw.print("mScreenOffTime=");
+        pw.print(mScreenOffTime);
+        if (mScreenOffTime >= 0) {
+            pw.print(" (");
+            pw.print(SystemClock.elapsedRealtime() - mScreenOffTime);
+            pw.print(" ago)");
+        }
+        pw.println();
+        pw.print("soundTimeout=");
+        pw.println(Settings.Global.getInt(mContext.getContentResolver(),
+                Settings.Global.LOW_BATTERY_SOUND_TIMEOUT, 0));
         pw.print("bucket: ");
         pw.println(Integer.toString(findBatteryLevelBucket(mBatteryLevel)));
     }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
index 932fe20..6a2bc5f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
@@ -570,12 +570,14 @@
                  if (DEBUG) Log.d(TAG, "opening search panel");
                  if (mSearchPanelView != null && mSearchPanelView.isAssistantAvailable()) {
                      mSearchPanelView.show(true, true);
+                     onShowSearchPanel();
                  }
                  break;
              case MSG_CLOSE_SEARCH_PANEL:
                  if (DEBUG) Log.d(TAG, "closing search panel");
                  if (mSearchPanelView != null && mSearchPanelView.isShowing()) {
                      mSearchPanelView.show(false, true);
+                     onHideSearchPanel();
                  }
                  break;
             }
@@ -607,6 +609,12 @@
     protected void workAroundBadLayerDrawableOpacity(View v) {
     }
 
+    protected void onHideSearchPanel() {
+    }
+
+    protected void onShowSearchPanel() {
+    }
+
     public boolean inflateViews(NotificationData.Entry entry, ViewGroup parent) {
         int minHeight =
                 mContext.getResources().getDimensionPixelSize(R.dimen.notification_min_height);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/BarTransitions.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/BarTransitions.java
index 7b1df91..1c8702a 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/BarTransitions.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/BarTransitions.java
@@ -71,7 +71,7 @@
             mOpaque = 0xff0000ff;
             mSemiTransparent = 0x7f0000ff;
         } else {
-            mOpaque = res.getColor(R.drawable.system_bar_background);
+            mOpaque = res.getColor(R.color.system_bar_background_opaque);
             mSemiTransparent = res.getColor(R.color.system_bar_background_semi_transparent);
         }
 
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
index 6e53363..d1c4109 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
@@ -37,10 +37,10 @@
 import android.view.MotionEvent;
 import android.view.Surface;
 import android.view.View;
-import android.view.View.OnClickListener;
 import android.view.ViewGroup;
 import android.view.WindowManager;
 import android.view.accessibility.AccessibilityManager;
+import android.view.accessibility.AccessibilityManager.TouchExplorationStateChangeListener;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
 
@@ -89,26 +89,31 @@
     // used to disable the camera icon in navbar when disabled by DPM
     private boolean mCameraDisabledByDpm;
 
+    // simplified click handler to be used when device is in accessibility mode
+    private final OnClickListener mAccessibilityClickListener = new OnClickListener() {
+        @Override
+        public void onClick(View v) {
+            if (v.getId() == R.id.camera_button) {
+                KeyguardTouchDelegate.getInstance(getContext()).launchCamera();
+            } else if (v.getId() == R.id.search_light) {
+                KeyguardTouchDelegate.getInstance(getContext()).showAssistant();
+            }
+        }
+    };
+
     private final OnTouchListener mCameraTouchListener = new OnTouchListener() {
         @Override
         public boolean onTouch(View cameraButtonView, MotionEvent event) {
-            View searchLight = getSearchLight();
             switch (event.getAction()) {
                 case MotionEvent.ACTION_DOWN:
                     // disable search gesture while interacting with camera
                     mDelegateHelper.setDisabled(true);
-                    cameraButtonView.animate().alpha(0.0f).setDuration(CAMERA_BUTTON_FADE_DURATION);
-                    if (searchLight != null) {
-                        searchLight.animate().alpha(0.0f).setDuration(CAMERA_BUTTON_FADE_DURATION);
-                    }
+                    transitionCameraAndSearchButtonAlpha(0.0f);
                     break;
                 case MotionEvent.ACTION_UP:
                 case MotionEvent.ACTION_CANCEL:
                     mDelegateHelper.setDisabled(false);
-                    cameraButtonView.animate().alpha(1.0f).setDuration(CAMERA_BUTTON_FADE_DURATION);
-                    if (searchLight != null) {
-                        searchLight.animate().alpha(1.0f).setDuration(CAMERA_BUTTON_FADE_DURATION);
-                    }
+                    transitionCameraAndSearchButtonAlpha(1.0f);
                     break;
             }
             return KeyguardTouchDelegate.getInstance(getContext()).dispatch(event);
@@ -158,6 +163,17 @@
         watchForDevicePolicyChanges();
     }
 
+    protected void transitionCameraAndSearchButtonAlpha(float alpha) {
+        View cameraButtonView = getCameraButton();
+        if (cameraButtonView != null) {
+            cameraButtonView.animate().alpha(alpha).setDuration(CAMERA_BUTTON_FADE_DURATION);
+        }
+        View searchLight = getSearchLight();
+        if (searchLight != null) {
+            searchLight.animate().alpha(alpha).setDuration(CAMERA_BUTTON_FADE_DURATION);
+        }
+    }
+
     private void watchForDevicePolicyChanges() {
         final IntentFilter filter = new IntentFilter();
         filter.addAction(DevicePolicyManager.ACTION_DEVICE_POLICY_MANAGER_STATE_CHANGED);
@@ -388,44 +404,49 @@
 
         mCurrentView = mRotatedViews[Surface.ROTATION_0];
 
-
-        final AccessibilityManager accessibilityManager =
-                (AccessibilityManager) mContext.getSystemService(Context.ACCESSIBILITY_SERVICE);
-        if (accessibilityManager.isEnabled() && accessibilityManager.isTouchExplorationEnabled()) {
-            // In accessibility mode, we add a simple click handler since swipe is tough to
-            // trigger near screen edges.
-            View camera = getCameraButton();
-            View searchLight = getSearchLight();
-            if (camera != null || searchLight != null) {
-                OnClickListener listener = new OnClickListener() {
-                    @Override
-                    public void onClick(View v) {
-                        launchForAccessibilityClick(v);
-                    }
-                };
-                if (camera != null) {
-                    camera.setOnClickListener(listener);
-                }
-                if (searchLight != null) {
-                    searchLight.setOnClickListener(listener);
-                }
-            }
-        } else {
-            // Add a touch handler for camera icon for all view orientations.
-            for (int i = 0; i < mRotatedViews.length; i++) {
-                View cameraButton = mRotatedViews[i].findViewById(R.id.camera_button);
-                if (cameraButton != null) {
-                    cameraButton.setOnTouchListener(mCameraTouchListener);
-                }
-            }
-        }
+        watchForAccessibilityChanges();
     }
 
-    protected void launchForAccessibilityClick(View v) {
-        if (v == getCameraButton()) {
-            KeyguardTouchDelegate.getInstance(getContext()).launchCamera();
-        } else if (v == getSearchLight()) {
-            KeyguardTouchDelegate.getInstance(getContext()).showAssistant();
+    private void watchForAccessibilityChanges() {
+        final AccessibilityManager am =
+                (AccessibilityManager) mContext.getSystemService(Context.ACCESSIBILITY_SERVICE);
+
+        // Set the initial state
+        enableAccessibility(am.isTouchExplorationEnabled());
+
+        // Watch for changes
+        am.addTouchExplorationStateChangeListener(new TouchExplorationStateChangeListener() {
+            @Override
+            public void onTouchExplorationStateChanged(boolean enabled) {
+                enableAccessibility(enabled);
+            }
+        });
+    }
+
+    private void enableAccessibility(boolean touchEnabled) {
+        Log.v(TAG, "touchEnabled:"  + touchEnabled);
+
+        // Add a touch handler or accessibility click listener for camera and search buttons
+        // for all view orientations.
+        final OnClickListener onClickListener = touchEnabled ? mAccessibilityClickListener : null;
+        final OnTouchListener onTouchListener = touchEnabled ? null : mCameraTouchListener;
+        boolean hasCamera = false;
+        for (int i = 0; i < mRotatedViews.length; i++) {
+            final View cameraButton = mRotatedViews[i].findViewById(R.id.camera_button);
+            final View searchLight = mRotatedViews[i].findViewById(R.id.search_light);
+            if (cameraButton != null) {
+                hasCamera = true;
+                cameraButton.setOnTouchListener(onTouchListener);
+                cameraButton.setOnClickListener(onClickListener);
+            }
+            if (searchLight != null) {
+                searchLight.setOnClickListener(onClickListener);
+            }
+        }
+        if (hasCamera) {
+            // Warm up KeyguardTouchDelegate so it's ready by the time the camera button is touched.
+            // This will connect to KeyguardService so that touch events are processed.
+            KeyguardTouchDelegate.getInstance(mContext);
         }
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
index c02a99b..3ddcb1b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -647,6 +647,20 @@
     }
 
     @Override
+    protected void onShowSearchPanel() {
+        if (mNavigationBarView != null) {
+            mNavigationBarView.transitionCameraAndSearchButtonAlpha(0.0f);
+        }
+    }
+
+    @Override
+    protected void onHideSearchPanel() {
+        if (mNavigationBarView != null) {
+            mNavigationBarView.transitionCameraAndSearchButtonAlpha(1.0f);
+        }
+    }
+
+    @Override
     protected View getStatusBarView() {
         return mStatusBarView;
     }
@@ -1923,10 +1937,8 @@
     }
 
     private void checkBarMode(int mode, int windowState, BarTransitions transitions) {
-        final boolean imeVisible = (mNavigationIconHints & NAVIGATION_HINT_BACK_ALT) != 0;
-        final int finalMode = imeVisible ? MODE_OPAQUE : mode;
         final boolean anim = (mScreenOn == null || mScreenOn) && windowState != WINDOW_STATE_HIDDEN;
-        transitions.transitionTo(finalMode, anim);
+        transitions.transitionTo(mode, anim);
     }
 
     private final Runnable mCheckBarModes = new Runnable() {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettings.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettings.java
index 36ba4d9..33edd72 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettings.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettings.java
@@ -107,9 +107,6 @@
     private AsyncTask<Void, Void, Pair<String, Drawable>> mUserInfoTask;
     private AsyncTask<Void, Void, Pair<Boolean, Boolean>> mQueryCertTask;
 
-    private LevelListDrawable mBatteryLevels;
-    private LevelListDrawable mChargingBatteryLevels;
-
     boolean mTilesSetUp = false;
     boolean mUseDefaultAvatar = false;
 
@@ -134,11 +131,6 @@
 
         mHandler = new Handler();
 
-        Resources r = mContext.getResources();
-        mBatteryLevels = (LevelListDrawable) r.getDrawable(R.drawable.qs_sys_battery);
-        mChargingBatteryLevels =
-                (LevelListDrawable) r.getDrawable(R.drawable.qs_sys_battery_charging);
-
         IntentFilter filter = new IntentFilter();
         filter.addAction(DisplayManager.ACTION_WIFI_DISPLAY_STATUS_CHANGED);
         filter.addAction(BluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryController.java
index 575b44e..6db9bc3 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryController.java
@@ -21,19 +21,12 @@
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.os.BatteryManager;
-import android.widget.ImageView;
-import android.widget.TextView;
-
-import com.android.systemui.R;
 
 import java.util.ArrayList;
 
 public class BatteryController extends BroadcastReceiver {
     private static final String TAG = "StatusBar.BatteryController";
 
-    private Context mContext;
-    private ArrayList<ImageView> mIconViews = new ArrayList<ImageView>();
-    private ArrayList<TextView> mLabelViews = new ArrayList<TextView>();
 
     private ArrayList<BatteryStateChangeCallback> mChangeCallbacks =
             new ArrayList<BatteryStateChangeCallback>();
@@ -43,21 +36,11 @@
     }
 
     public BatteryController(Context context) {
-        mContext = context;
-
         IntentFilter filter = new IntentFilter();
         filter.addAction(Intent.ACTION_BATTERY_CHANGED);
         context.registerReceiver(this, filter);
     }
 
-    public void addIconView(ImageView v) {
-        mIconViews.add(v);
-    }
-
-    public void addLabelView(TextView v) {
-        mLabelViews.add(v);
-    }
-
     public void addStateChangedCallback(BatteryStateChangeCallback cb) {
         mChangeCallbacks.add(cb);
     }
@@ -77,24 +60,6 @@
                     break;
             }
 
-            final int icon = plugged ? R.drawable.stat_sys_battery_charge
-                                     : R.drawable.stat_sys_battery;
-
-            int N = mIconViews.size();
-            for (int i=0; i<N; i++) {
-                ImageView v = mIconViews.get(i);
-                v.setImageResource(icon);
-                v.setImageLevel(level);
-                v.setContentDescription(mContext.getString(R.string.accessibility_battery_level,
-                        level));
-            }
-            N = mLabelViews.size();
-            for (int i=0; i<N; i++) {
-                TextView v = mLabelViews.get(i);
-                v.setText(mContext.getString(R.string.status_bar_settings_battery_meter_format,
-                        level));
-            }
-
             for (BatteryStateChangeCallback cb : mChangeCallbacks) {
                 cb.onBatteryLevelChanged(level, plugged);
             }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java
index 01c27f2..09f1695 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java
@@ -514,13 +514,9 @@
     private final void updateTelephonySignalStrength() {
         if (!hasService()) {
             if (CHATTY) Log.d(TAG, "updateTelephonySignalStrength: !hasService()");
-            if (!mSimState.iccCardExist()) {
-                mPhoneSignalIconId = R.drawable.stat_sys_no_sim;
-            } else {
-                mPhoneSignalIconId = R.drawable.stat_sys_signal_null;
-            }
-            mDataSignalIconId = mPhoneSignalIconId;
+            mPhoneSignalIconId = R.drawable.stat_sys_signal_null;
             mQSPhoneSignalIconId = R.drawable.ic_qs_signal_no_signal;
+            mDataSignalIconId = R.drawable.stat_sys_signal_null;
         } else {
             if (mSignalStrength == null) {
                 if (CHATTY) Log.d(TAG, "updateTelephonySignalStrength: mSignalStrength == null");
diff --git a/packages/WallpaperCropper/src/com/android/wallpapercropper/TranslucentDecor.java b/packages/WallpaperCropper/src/com/android/wallpapercropper/TranslucentDecor.java
deleted file mode 100644
index 9ce7331..0000000
--- a/packages/WallpaperCropper/src/com/android/wallpapercropper/TranslucentDecor.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright (C) 2013 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.
- */
-/* Copied from Launcher3 */
-package com.android.wallpapercropper;
-
-import android.app.Activity;
-import android.view.View;
-import android.view.Window;
-import android.view.WindowManager;
-
-public class TranslucentDecor {
-    private static final int SYSTEM_UI_FLAG_TRANSPARENT_STATUS = 0x00001000;
-    private static final int SYSTEM_UI_FLAG_TRANSPARENT_NAVIGATION = 0x00002000;
-
-    // Replace with SDK constants when available.
-    public static final int FLAG_TRANSLUCENT_STATUS = 0x04000000;
-    public static final int FLAG_TRANSLUCENT_NAVIGATION = 0x08000000;
-
-    // Behave properly on early K builds.
-    public static final boolean SYSUI_SUPPORTED = !hasSystemUiFlag("ALLOW_TRANSIENT") &&
-            hasSystemUiFlag("TRANSPARENT_STATUS") &&
-            hasSystemUiFlag("TRANSPARENT_NAVIGATION");
-
-    public static final boolean WM_SUPPORTED =
-            hasWindowManagerFlag("TRANSLUCENT_STATUS") &&
-            hasWindowManagerFlag("TRANSLUCENT_NAVIGATION");
-
-    private final View mTarget;
-
-    public TranslucentDecor(View target) {
-        mTarget = target;
-    }
-
-    public void requestTranslucentDecor(boolean translucent) {
-        int sysui = View.SYSTEM_UI_FLAG_LAYOUT_STABLE
-                | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
-                | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION;
-        if (WM_SUPPORTED && mTarget.getContext() instanceof Activity) {
-            Window w = ((Activity) mTarget.getContext()).getWindow();
-            int wmFlags = FLAG_TRANSLUCENT_STATUS | FLAG_TRANSLUCENT_NAVIGATION;
-            if (translucent) {
-                w.addFlags(wmFlags);
-            } else {
-               w.clearFlags(wmFlags);
-            }
-        } else if (SYSUI_SUPPORTED) {  // Remove when droidfood platform is updated
-            if (translucent) {
-                sysui |= SYSTEM_UI_FLAG_TRANSPARENT_STATUS | SYSTEM_UI_FLAG_TRANSPARENT_NAVIGATION;
-            }
-        }
-        mTarget.setSystemUiVisibility(sysui);
-    }
-
-    private static boolean hasWindowManagerFlag(String name) {
-        try {
-            return WindowManager.LayoutParams.class.getField("FLAG_" + name) != null;
-        } catch (NoSuchFieldException e) {
-            return false;
-        }
-    }
-
-    private static boolean hasSystemUiFlag(String name) {
-        try {
-            return View.class.getField("SYSTEM_UI_FLAG_" + name) != null;
-        } catch (NoSuchFieldException e) {
-            return false;
-        }
-    }
-}
diff --git a/packages/WallpaperCropper/src/com/android/wallpapercropper/WallpaperCropActivity.java b/packages/WallpaperCropper/src/com/android/wallpapercropper/WallpaperCropActivity.java
index 48fbcc5..710e8e4 100644
--- a/packages/WallpaperCropper/src/com/android/wallpapercropper/WallpaperCropActivity.java
+++ b/packages/WallpaperCropper/src/com/android/wallpapercropper/WallpaperCropActivity.java
@@ -102,8 +102,8 @@
                         cropImageAndSetWallpaper(imageUri, null, finishActivityWhenDone);
                     }
                 });
-        TranslucentDecor transparentDecor = new TranslucentDecor(findViewById(R.id.wallpaper_root));
-        transparentDecor.requestTranslucentDecor(true);
+        getWindow().addPrivateFlags(
+                WindowManager.LayoutParams.PRIVATE_FLAG_INHERIT_TRANSLUCENT_DECOR);
     }
 
     public boolean enableRotation() {
diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindow.java b/policy/src/com/android/internal/policy/impl/PhoneWindow.java
index d8af007..eba689d 100644
--- a/policy/src/com/android/internal/policy/impl/PhoneWindow.java
+++ b/policy/src/com/android/internal/policy/impl/PhoneWindow.java
@@ -2338,6 +2338,10 @@
                     originalView.getWindowToken());
             if (helper != null) {
                 helper.setPresenterCallback(mContextMenuCallback);
+            } else if (mContextMenuHelper != null) {
+                // No menu to show, but if we have a menu currently showing it just became blank.
+                // Close it.
+                mContextMenuHelper.dismiss();
             }
             mContextMenuHelper = helper;
             return helper != null;
diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
index de841da..e9e3b27 100644
--- a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
+++ b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
@@ -163,7 +163,9 @@
      */
     static final int SYSTEM_UI_CHANGING_LAYOUT =
               View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
-            | View.SYSTEM_UI_FLAG_FULLSCREEN;
+            | View.SYSTEM_UI_FLAG_FULLSCREEN
+            | View.STATUS_BAR_TRANSLUCENT
+            | View.NAVIGATION_BAR_TRANSLUCENT;
 
     /**
      * Keyguard stuff
@@ -2989,8 +2991,10 @@
             pf.left = df.left = of.left = cf.left = vf.left = mDockLeft;
             pf.top = df.top = of.top = cf.top = vf.top = mDockTop;
             pf.right = df.right = of.right = cf.right = vf.right = mDockRight;
-            // IM dock windows always go above the nav bar.
-            pf.bottom = df.bottom = of.bottom = cf.bottom = vf.bottom = mStableBottom;
+            // IM dock windows layout below the nav bar...
+            pf.bottom = df.bottom = of.bottom = mRestrictedScreenTop + mRestrictedScreenHeight;
+            // ...with content insets above the nav bar
+            cf.bottom = vf.bottom = mStableBottom;
             // IM dock windows always go to the bottom of the screen.
             attrs.gravity = Gravity.BOTTOM;
             mDockLayer = win.getSurfaceLayer();
@@ -4280,12 +4284,14 @@
                 })) {
                     return;
                 }
+                Slog.i(TAG, "No lock screen! waitForWindowDrawn false");
+
             } catch (RemoteException ex) {
                 // Can't happen in system process.
             }
         }
 
-        Slog.i(TAG, "No lock screen!");
+        Slog.i(TAG, "No lock screen! windowToken=" + windowToken);
         finishScreenTurningOn(screenOnListener);
     }
 
diff --git a/preloaded-classes b/preloaded-classes
index cb2ace3..d161bc1 100644
--- a/preloaded-classes
+++ b/preloaded-classes
@@ -76,7 +76,6 @@
 android.app.ActivityThread$ProviderKey
 android.app.ActivityThread$ProviderRefCount
 android.app.ActivityThread$ReceiverData
-android.app.ActivityThread$ResourcesKey
 android.app.ActivityThread$ResultData
 android.app.ActivityThread$ServiceArgsData
 android.app.ActivityThread$StopInfo
@@ -796,7 +795,6 @@
 android.preference.CheckBoxPreference
 android.preference.GenericInflater
 android.preference.GenericInflater$Parent
-android.preference.OnDependencyChangeListener
 android.preference.Preference
 android.preference.Preference$OnPreferenceChangeInternalListener
 android.preference.Preference$OnPreferenceChangeListener
@@ -971,7 +969,6 @@
 android.view.Choreographer$FrameDisplayEventReceiver
 android.view.Choreographer$FrameHandler
 android.view.CollapsibleActionView
-android.view.CompatibilityInfoHolder
 android.view.ContextMenu
 android.view.ContextMenu$ContextMenuInfo
 android.view.ContextThemeWrapper
@@ -1313,10 +1310,8 @@
 android.widget.EditText
 android.widget.Editor
 android.widget.Editor$Blink
-android.widget.Editor$EasyEditSpanController
 android.widget.Editor$InputContentType
 android.widget.Editor$InputMethodState
-android.widget.Editor$UserDictionaryListener
 android.widget.ExpandableListView
 android.widget.Filter
 android.widget.Filter$FilterListener
@@ -1946,7 +1941,6 @@
 java.lang.UnsatisfiedLinkError
 java.lang.UnsupportedOperationException
 java.lang.VMClassLoader
-java.lang.VMThread
 java.lang.VerifyError
 java.lang.VirtualMachineError
 java.lang.Void
@@ -2310,7 +2304,6 @@
 java.util.concurrent.locks.ReentrantReadWriteLock$WriteLock
 java.util.jar.Attributes
 java.util.jar.Attributes$Name
-java.util.jar.InitManifest
 java.util.jar.JarEntry
 java.util.jar.JarFile
 java.util.jar.JarFile$1JarFileEnumerator
diff --git a/services/java/com/android/server/ConnectivityService.java b/services/java/com/android/server/ConnectivityService.java
index 59b559e..5695ee5 100644
--- a/services/java/com/android/server/ConnectivityService.java
+++ b/services/java/com/android/server/ConnectivityService.java
@@ -4247,6 +4247,9 @@
                                 addrTried ++) {
 
                             // Choose the address at random but make sure its type is supported
+                            // TODO: This doesn't work 100% of the time, because we may end up
+                            // trying the same invalid address more than once and ignoring one
+                            // of the valid addresses.
                             InetAddress hostAddr = addresses[rand.nextInt(addresses.length)];
                             if (((hostAddr instanceof Inet4Address) && linkHasIpv4)
                                     || ((hostAddr instanceof Inet6Address) && linkHasIpv6)) {
@@ -4271,10 +4274,8 @@
                             }
 
                             // Rewrite the url to have numeric address to use the specific route.
-                            // I also set the "Connection" to "Close" as by default "Keep-Alive"
-                            // is used which is useless in this case.
-                            URL newUrl = new URL(orgUri.getScheme() + "://"
-                                    + hostAddr.getHostAddress() + orgUri.getPath());
+                            URL newUrl = new URL(orgUri.getScheme(),
+                                    hostAddr.getHostAddress(), orgUri.getPath());
                             log("isMobileOk: newUrl=" + newUrl);
 
                             HttpURLConnection urlConn = null;
@@ -4287,6 +4288,8 @@
                                 urlConn.setReadTimeout(SOCKET_TIMEOUT_MS);
                                 urlConn.setUseCaches(false);
                                 urlConn.setAllowUserInteraction(false);
+                                // Set the "Connection" to "Close" as by default "Keep-Alive"
+                                // is used which is useless in this case.
                                 urlConn.setRequestProperty("Connection", "close");
                                 int responseCode = urlConn.getResponseCode();
 
diff --git a/services/java/com/android/server/MountService.java b/services/java/com/android/server/MountService.java
index 59ec777..c7ca1ea 100644
--- a/services/java/com/android/server/MountService.java
+++ b/services/java/com/android/server/MountService.java
@@ -1227,6 +1227,9 @@
                                     descriptionId, primary, removable, emulated, mtpReserve,
                                     allowMassStorage, maxFileSize, null);
                             addVolumeLocked(volume);
+
+                            // Until we hear otherwise, treat as unmounted
+                            mVolumeStates.put(volume.getPath(), Environment.MEDIA_UNMOUNTED);
                         }
                     }
 
@@ -2781,6 +2784,7 @@
                 final StorageVolume v = mVolumes.get(i);
                 pw.print("    ");
                 pw.println(v.toString());
+                pw.println("      state=" + mVolumeStates.get(v.getPath()));
             }
         }
 
diff --git a/services/java/com/android/server/NotificationManagerService.java b/services/java/com/android/server/NotificationManagerService.java
index b881934..7431f1d 100644
--- a/services/java/com/android/server/NotificationManagerService.java
+++ b/services/java/com/android/server/NotificationManagerService.java
@@ -1167,11 +1167,19 @@
                     }
                     if (packageChanged) {
                         // We cancel notifications for packages which have just been disabled
-                        final int enabled = mContext.getPackageManager()
-                                .getApplicationEnabledSetting(pkgName);
-                        if (enabled == PackageManager.COMPONENT_ENABLED_STATE_ENABLED
-                                || enabled == PackageManager.COMPONENT_ENABLED_STATE_DEFAULT) {
-                            cancelNotifications = false;
+                        try {
+                            final int enabled = mContext.getPackageManager()
+                                    .getApplicationEnabledSetting(pkgName);
+                            if (enabled == PackageManager.COMPONENT_ENABLED_STATE_ENABLED
+                                    || enabled == PackageManager.COMPONENT_ENABLED_STATE_DEFAULT) {
+                                cancelNotifications = false;
+                            }
+                        } catch (IllegalArgumentException e) {
+                            // Package doesn't exist; probably racing with uninstall.
+                            // cancelNotifications is already true, so nothing to do here.
+                            if (DBG) {
+                                Slog.i(TAG, "Exception trying to look up app enabled setting", e);
+                            }
                         }
                     }
                     pkgList = new String[]{pkgName};
diff --git a/services/java/com/android/server/accounts/AccountManagerService.java b/services/java/com/android/server/accounts/AccountManagerService.java
index dd9ae4c..cc43a9c 100644
--- a/services/java/com/android/server/accounts/AccountManagerService.java
+++ b/services/java/com/android/server/accounts/AccountManagerService.java
@@ -293,17 +293,16 @@
         return mUserManager;
     }
 
-    private UserAccounts initUser(int userId) {
-        synchronized (mUsers) {
-            UserAccounts accounts = mUsers.get(userId);
-            if (accounts == null) {
-                accounts = new UserAccounts(mContext, userId);
-                mUsers.append(userId, accounts);
-                purgeOldGrants(accounts);
-                validateAccountsInternal(accounts, true /* invalidateAuthenticatorCache */);
-            }
-            return accounts;
+    /* Caller should lock mUsers */
+    private UserAccounts initUserLocked(int userId) {
+        UserAccounts accounts = mUsers.get(userId);
+        if (accounts == null) {
+            accounts = new UserAccounts(mContext, userId);
+            mUsers.append(userId, accounts);
+            purgeOldGrants(accounts);
+            validateAccountsInternal(accounts, true /* invalidateAuthenticatorCache */);
         }
+        return accounts;
     }
 
     private void purgeOldGrantsAll() {
@@ -427,7 +426,7 @@
         synchronized (mUsers) {
             UserAccounts accounts = mUsers.get(userId);
             if (accounts == null) {
-                accounts = initUser(userId);
+                accounts = initUserLocked(userId);
                 mUsers.append(userId, accounts);
             }
             return accounts;
@@ -1798,16 +1797,14 @@
 
     private AccountAndUser[] getAccounts(int[] userIds) {
         final ArrayList<AccountAndUser> runningAccounts = Lists.newArrayList();
-        synchronized (mUsers) {
-            for (int userId : userIds) {
-                UserAccounts userAccounts = getUserAccounts(userId);
-                if (userAccounts == null) continue;
-                synchronized (userAccounts.cacheLock) {
-                    Account[] accounts = getAccountsFromCacheLocked(userAccounts, null,
-                            Binder.getCallingUid(), null);
-                    for (int a = 0; a < accounts.length; a++) {
-                        runningAccounts.add(new AccountAndUser(accounts[a], userId));
-                    }
+        for (int userId : userIds) {
+            UserAccounts userAccounts = getUserAccounts(userId);
+            if (userAccounts == null) continue;
+            synchronized (userAccounts.cacheLock) {
+                Account[] accounts = getAccountsFromCacheLocked(userAccounts, null,
+                        Binder.getCallingUid(), null);
+                for (int a = 0; a < accounts.length; a++) {
+                    runningAccounts.add(new AccountAndUser(accounts[a], userId));
                 }
             }
         }
@@ -2858,7 +2855,8 @@
                 || callingUid == Process.myUid()) {
             return unfiltered;
         }
-        if (mUserManager.getUserInfo(userAccounts.userId).isRestricted()) {
+        UserInfo user = mUserManager.getUserInfo(userAccounts.userId);
+        if (user != null && user.isRestricted()) {
             String[] packages = mPackageManager.getPackagesForUid(callingUid);
             // If any of the packages is a white listed package, return the full set,
             // otherwise return non-shared accounts only.
diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java
index 1987d04..6c6cc98 100644
--- a/services/java/com/android/server/am/ActivityManagerService.java
+++ b/services/java/com/android/server/am/ActivityManagerService.java
@@ -6489,26 +6489,53 @@
     }
 
     @Override
-    public ParceledListSlice<android.content.UriPermission> getPersistedUriPermissions() {
+    public ParceledListSlice<android.content.UriPermission> getPersistedUriPermissions(
+            String packageName, boolean incoming) {
         enforceNotIsolatedCaller("getPersistedUriPermissions");
+        Preconditions.checkNotNull(packageName, "packageName");
 
+        final int callingUid = Binder.getCallingUid();
+        final IPackageManager pm = AppGlobals.getPackageManager();
+        try {
+            final int packageUid = pm.getPackageUid(packageName, UserHandle.getUserId(callingUid));
+            if (packageUid != callingUid) {
+                throw new SecurityException(
+                        "Package " + packageName + " does not belong to calling UID " + callingUid);
+            }
+        } catch (RemoteException e) {
+            throw new SecurityException("Failed to verify package name ownership");
+        }
+
+        final ArrayList<android.content.UriPermission> result = Lists.newArrayList();
         synchronized (this) {
-            final int callingUid = Binder.getCallingUid();
-            final ArrayList<android.content.UriPermission> result = Lists.newArrayList();
-            final ArrayMap<Uri, UriPermission> perms = mGrantedUriPermissions.get(callingUid);
-            if (perms == null) {
-                Slog.w(TAG, "No permission grants found for UID " + callingUid);
+            if (incoming) {
+                final ArrayMap<Uri, UriPermission> perms = mGrantedUriPermissions.get(callingUid);
+                if (perms == null) {
+                    Slog.w(TAG, "No permission grants found for " + packageName);
+                } else {
+                    final int size = perms.size();
+                    for (int i = 0; i < size; i++) {
+                        final UriPermission perm = perms.valueAt(i);
+                        if (packageName.equals(perm.targetPkg) && perm.persistedModeFlags != 0) {
+                            result.add(perm.buildPersistedPublicApiObject());
+                        }
+                    }
+                }
             } else {
-                final int size = perms.size();
+                final int size = mGrantedUriPermissions.size();
                 for (int i = 0; i < size; i++) {
-                    final UriPermission perm = perms.valueAt(i);
-                    if (perm.persistedModeFlags != 0) {
-                        result.add(perm.buildPersistedPublicApiObject());
+                    final ArrayMap<Uri, UriPermission> perms = mGrantedUriPermissions.valueAt(i);
+                    final int permsSize = perms.size();
+                    for (int j = 0; j < permsSize; j++) {
+                        final UriPermission perm = perms.valueAt(j);
+                        if (packageName.equals(perm.sourcePkg) && perm.persistedModeFlags != 0) {
+                            result.add(perm.buildPersistedPublicApiObject());
+                        }
                     }
                 }
             }
-            return new ParceledListSlice<android.content.UriPermission>(result);
         }
+        return new ParceledListSlice<android.content.UriPermission>(result);
     }
 
     @Override
@@ -6755,7 +6782,6 @@
     private void cleanUpRemovedTaskLocked(TaskRecord tr, int flags) {
         tr.disposeThumbnail();
         mRecentTasks.remove(tr);
-        mStackSupervisor.removeTask(tr);
         final boolean killProcesses = (flags&ActivityManager.REMOVE_TASK_KILL_PROCESS) != 0;
         Intent baseIntent = new Intent(
                 tr.intent != null ? tr.intent : tr.affinityIntent);
@@ -7526,16 +7552,30 @@
                                     + cpr.appInfo.packageName + ": " + e);
                         }
 
-                        ProcessRecord proc = startProcessLocked(cpi.processName,
-                                cpr.appInfo, false, 0, "content provider",
-                                new ComponentName(cpi.applicationInfo.packageName,
-                                        cpi.name), false, false, false);
-                        if (proc == null) {
-                            Slog.w(TAG, "Unable to launch app "
-                                    + cpi.applicationInfo.packageName + "/"
-                                    + cpi.applicationInfo.uid + " for provider "
-                                    + name + ": process is bad");
-                            return null;
+                        // Use existing process if already started
+                        ProcessRecord proc = getProcessRecordLocked(
+                                cpi.processName, cpr.appInfo.uid, false);
+                        if (proc != null) {
+                            if (DEBUG_PROVIDER) {
+                                Slog.d(TAG, "Installing in existing process " + proc);
+                            }
+                            proc.pubProviders.put(cpi.name, cpr);
+                            try {
+                                proc.thread.scheduleInstallProvider(cpi);
+                            } catch (RemoteException e) {
+                            }
+                        } else {
+                            proc = startProcessLocked(cpi.processName,
+                                    cpr.appInfo, false, 0, "content provider",
+                                    new ComponentName(cpi.applicationInfo.packageName,
+                                            cpi.name), false, false, false);
+                            if (proc == null) {
+                                Slog.w(TAG, "Unable to launch app "
+                                        + cpi.applicationInfo.packageName + "/"
+                                        + cpi.applicationInfo.uid + " for provider "
+                                        + name + ": process is bad");
+                                return null;
+                            }
                         }
                         cpr.launchingApp = proc;
                         mLaunchingProviders.add(cpr);
diff --git a/services/java/com/android/server/am/ProcessStatsService.java b/services/java/com/android/server/am/ProcessStatsService.java
index dbc05fa..a6375e1 100644
--- a/services/java/com/android/server/am/ProcessStatsService.java
+++ b/services/java/com/android/server/am/ProcessStatsService.java
@@ -566,6 +566,15 @@
             return;
         }
 
+        long ident = Binder.clearCallingIdentity();
+        try {
+            dumpInner(fd, pw, args);
+        } finally {
+            Binder.restoreCallingIdentity(ident);
+        }
+    }
+
+    private void dumpInner(FileDescriptor fd, PrintWriter pw, String[] args) {
         final long now = SystemClock.uptimeMillis();
 
         boolean isCheckin = false;
diff --git a/services/java/com/android/server/am/UriPermission.java b/services/java/com/android/server/am/UriPermission.java
index 5868c08..684f247 100644
--- a/services/java/com/android/server/am/UriPermission.java
+++ b/services/java/com/android/server/am/UriPermission.java
@@ -20,7 +20,6 @@
 import android.net.Uri;
 import android.os.UserHandle;
 import android.util.Log;
-import android.util.Slog;
 
 import com.android.internal.util.Preconditions;
 import com.google.android.collect.Sets;
diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java
index e089ca6..aa8851c 100644
--- a/services/java/com/android/server/wm/WindowManagerService.java
+++ b/services/java/com/android/server/wm/WindowManagerService.java
@@ -3386,9 +3386,9 @@
             throw new IllegalArgumentException("addAppToken: invalid stackId=" + stackId);
         }
         Task task = new Task(atoken, stack, userId);
+        mTaskIdToTask.put(taskId, task);
         stack.addTask(task, true);
         stack.getDisplayContent().moveStack(stack, true);
-        mTaskIdToTask.put(taskId, task);
         return task;
     }
 
@@ -4724,23 +4724,6 @@
         return index;
     }
 
-    private void moveHomeTasksLocked(boolean toTop) {
-        final DisplayContent displayContent = getDefaultDisplayContentLocked();
-        if (toTop ^ displayContent.homeOnTop()) {
-            final ArrayList<Task> tasks = displayContent.getHomeStack().getTasks();
-            final int numTasks = tasks.size();
-            for (int i = 0; i < numTasks; ++i) {
-                if (toTop) {
-                    // Keep pulling the bottom task off and moving it to the top.
-                    moveTaskToTop(tasks.get(0).taskId);
-                } else {
-                    // Keep pulling the top task off and moving it to the bottom.
-                    moveTaskToBottom(tasks.get(numTasks - 1).taskId);
-                }
-            }
-        }
-    }
-
     void moveStackWindowsLocked(TaskStack stack) {
         DisplayContent displayContent = stack.getDisplayContent();
 
@@ -4797,15 +4780,9 @@
                 final TaskStack stack = task.mStack;
                 final DisplayContent displayContent = task.getDisplayContent();
                 final boolean isHomeStackTask = stack.isHomeStack();
-                final boolean homeIsOnTop = displayContent.homeOnTop();
-                if (!isHomeStackTask && homeIsOnTop) {
-                    // First move move the home tasks all to the bottom to rearrange the windows.
-                    moveHomeTasksLocked(false);
-                    // Now move the stack itself.
-                    displayContent.moveHomeStackBox(false);
-                } else if (isHomeStackTask && !homeIsOnTop) {
-                    // Move the stack to the top.
-                    displayContent.moveHomeStackBox(true);
+                if (isHomeStackTask != displayContent.homeOnTop()) {
+                    // First move the stack itself.
+                    displayContent.moveHomeStackBox(isHomeStackTask);
                 }
                 stack.moveTaskToTop(task);
                 displayContent.moveStack(stack, true);
@@ -9473,9 +9450,8 @@
                 //Slog.i(TAG, "Waiting for drawn " + win + ": removed="
                 //        + win.mRemoved + " visible=" + win.isVisibleLw()
                 //        + " shown=" + win.mSurfaceShown);
-                if (win.mRemoved || !win.isVisibleLw()) {
-                    // Window has been removed or made invisible; no draw
-                    // will now happen, so stop waiting.
+                if (win.mRemoved) {
+                    // Window has been removed; no draw will now happen, so stop waiting.
                     Slog.w(TAG, "Aborted waiting for drawn: " + pair.first);
                     try {
                         pair.second.sendResult(null);
@@ -9510,6 +9486,7 @@
                     checkDrawnWindowsLocked();
                     return true;
                 }
+                Slog.i(TAG, "waitForWindowDrawn: win null");
             }
         }
         return false;
diff --git a/telephony/java/com/android/internal/telephony/CallerInfo.java b/telephony/java/com/android/internal/telephony/CallerInfo.java
index 6978551..e3c664b 100644
--- a/telephony/java/com/android/internal/telephony/CallerInfo.java
+++ b/telephony/java/com/android/internal/telephony/CallerInfo.java
@@ -20,6 +20,7 @@
 import android.database.Cursor;
 import android.graphics.Bitmap;
 import android.graphics.drawable.Drawable;
+import android.location.Country;
 import android.location.CountryDetector;
 import android.net.Uri;
 import android.provider.ContactsContract.CommonDataKinds.Phone;
@@ -561,17 +562,23 @@
      *         is in.
      */
     private static String getCurrentCountryIso(Context context, Locale locale) {
-      String countryIso;
-      CountryDetector detector = (CountryDetector) context.getSystemService(
-          Context.COUNTRY_DETECTOR);
-      if (detector != null) {
-        countryIso = detector.detectCountry().getCountryIso();
-      } else {
-        countryIso = locale.getCountry();
-        Rlog.w(TAG, "No CountryDetector; falling back to countryIso based on locale: "
-              + countryIso);
-      }
-      return countryIso;
+        String countryIso = null;
+        CountryDetector detector = (CountryDetector) context.getSystemService(
+                Context.COUNTRY_DETECTOR);
+        if (detector != null) {
+            Country country = detector.detectCountry();
+            if (country != null) {
+                countryIso = country.getCountryIso();
+            } else {
+                Rlog.e(TAG, "CountryDetector.detectCountry() returned null.");
+            }
+        }
+        if (countryIso == null) {
+            countryIso = locale.getCountry();
+            Rlog.w(TAG, "No CountryDetector; falling back to countryIso based on locale: "
+                    + countryIso);
+        }
+        return countryIso;
     }
 
     /**
diff --git a/wifi/java/android/net/wifi/WifiStateMachine.java b/wifi/java/android/net/wifi/WifiStateMachine.java
index de56472..b4c583e 100644
--- a/wifi/java/android/net/wifi/WifiStateMachine.java
+++ b/wifi/java/android/net/wifi/WifiStateMachine.java
@@ -2958,7 +2958,9 @@
             if (mOperationalMode != CONNECT_MODE) {
                 mWifiNative.disconnect();
                 mWifiConfigStore.disableAllNetworks();
-                setWifiState(WIFI_STATE_DISABLED);
+                if (mOperationalMode == SCAN_ONLY_WITH_WIFI_OFF_MODE) {
+                    setWifiState(WIFI_STATE_DISABLED);
+                }
                 transitionTo(mScanModeState);
             } else {
                 /* Driver stop may have disabled networks, enable right after start */