diff options
313 files changed, 1718 insertions, 692 deletions
diff --git a/api/current.txt b/api/current.txt index 9251d394408e..a8b5efd3c801 100644 --- a/api/current.txt +++ b/api/current.txt @@ -20,13 +20,10 @@ package android { 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 @@ package android { 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 @@ package android.app { 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 @@ package android.content { 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 @@ package android.view { 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 @@ package android.view.accessibility { 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 @@ package android.view.accessibility { 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 @@ package android.view.accessibility { 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 a38fbbfbac3c..e29f8ea63647 100644 --- a/core/java/android/app/Activity.java +++ b/core/java/android/app/Activity.java @@ -1455,12 +1455,14 @@ public class Activity extends ContextThemeWrapper } /** - * 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 1e65098faaaf..1067eb1b2add 100644 --- a/core/java/android/app/ActivityManager.java +++ b/core/java/android/app/ActivityManager.java @@ -1463,7 +1463,10 @@ public class ActivityManager { /** * 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 @@ public class ActivityManager { * 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 961ee5768b94..74266ccf58a2 100644 --- a/core/java/android/app/ActivityManagerNative.java +++ b/core/java/android/app/ActivityManagerNative.java @@ -1160,7 +1160,10 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM 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 @@ class ActivityManagerProxy implements IActivityManager } @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 b364af7bded8..df63ab342dfe 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -95,6 +95,7 @@ import com.android.internal.os.SamplingProfilerIntegration; 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 @@ public final class ActivityThread { } } } + + @Override + public void scheduleInstallProvider(ProviderInfo provider) { + queueOrSendMessage(H.INSTALL_PROVIDER, provider); + } } private class H extends Handler { @@ -1325,6 +1331,7 @@ public final class ActivityThread { 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 @@ public final class ActivityThread { 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 @@ public final class ActivityThread { 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 final class ActivityThread { } } + public void handleInstallProvider(ProviderInfo info) { + installContentProviders(mInitialApplication, Lists.newArrayList(info)); + } + private static final ThreadLocal<Intent> sCurrentBroadcastIntent = new ThreadLocal<Intent>(); /** @@ -4636,15 +4651,14 @@ public final class ActivityThread { 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 e40a04b41ec0..347d43f63a69 100644 --- a/core/java/android/app/ApplicationThreadNative.java +++ b/core/java/android/app/ApplicationThreadNative.java @@ -618,6 +618,15 @@ public abstract class ApplicationThreadNative extends Binder 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 @@ class ApplicationThreadProxy implements IApplicationThread { 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 dfea73671dc3..77c2ea0c1694 100644 --- a/core/java/android/app/IActivityManager.java +++ b/core/java/android/app/IActivityManager.java @@ -215,7 +215,8 @@ public interface IActivityManager extends IInterface { 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 43a5fbdc8875..d0cc1bbc9c2b 100644 --- a/core/java/android/app/IApplicationThread.java +++ b/core/java/android/app/IApplicationThread.java @@ -137,6 +137,7 @@ public interface IApplicationThread extends IInterface { 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 @@ public interface IApplicationThread extends IInterface { 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 2bc7cbf8ec26..c39415f3c2d8 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.pm.ResolveInfo; 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.util.Log; 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 @@ public class WallpaperManager { /** * 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 @@ public class WallpaperManager { } /** + * 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 @@ public class WallpaperManager { * * @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 @@ public class WallpaperManager { * * @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 @@ public class WallpaperManager { * * @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 @@ public class WallpaperManager { } /** - * 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 916a6cd762b0..49dfdb5ef29d 100644 --- a/core/java/android/content/ContentResolver.java +++ b/core/java/android/content/ContentResolver.java @@ -1659,8 +1659,9 @@ public abstract class ContentResolver { } /** - * 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 abstract class ContentResolver { */ 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 5760a5d30b9e..dad0dfb91a75 100644 --- a/core/java/android/content/IntentFilter.java +++ b/core/java/android/content/IntentFilter.java @@ -722,6 +722,14 @@ public class IntentFilter implements Parcelable { * 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 f30bcc541ecf..898f1232b832 100644 --- a/core/java/android/hardware/camera2/CaptureRequest.java +++ b/core/java/android/hardware/camera2/CaptureRequest.java @@ -82,6 +82,7 @@ public final class CaptureRequest extends CameraMetadata implements Parcelable { 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 9319d4a90201..1b7d9eab9fc1 100644 --- a/core/java/android/inputmethodservice/InputMethodService.java +++ b/core/java/android/inputmethodservice/InputMethodService.java @@ -687,6 +687,8 @@ public class InputMethodService extends AbstractInputMethodService { 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 fc53580f9cc1..db5cf1c4094e 100644 --- a/core/java/android/os/Environment.java +++ b/core/java/android/os/Environment.java @@ -24,9 +24,11 @@ import android.text.TextUtils; 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 @@ public class Environment { 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 @@ public class Environment { /** {@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 @@ public class Environment { 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 @@ public class Environment { 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 @@ public class Environment { } // /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 1c14c38f840b..c5e4f2110f56 100644 --- a/core/java/android/provider/DocumentsContract.java +++ b/core/java/android/provider/DocumentsContract.java @@ -23,8 +23,7 @@ import android.content.ContentProviderClient; 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 @@ public final class DocumentsContract { 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 @@ public final class DocumentsContract { 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 50777fd34245..6f1c6baf48ca 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -5920,6 +5920,16 @@ public final class Settings { 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 caeb1d8cfc80..01da6b333d0e 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -1738,47 +1738,41 @@ public class View implements Drawable.Callback, KeyEvent.Callback, /** * 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 @@ public class View implements Drawable.Callback, KeyEvent.Callback, 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 @@ public class View implements Drawable.Callback, KeyEvent.Callback, 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 @@ public class View implements Drawable.Callback, KeyEvent.Callback, /** * 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 @@ public class View implements Drawable.Callback, KeyEvent.Callback, * {@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 @@ public class View implements Drawable.Callback, KeyEvent.Callback, * @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 @@ public class View implements Drawable.Callback, KeyEvent.Callback, */ 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 @@ public class View implements Drawable.Callback, KeyEvent.Callback, * @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 @@ public class View implements Drawable.Callback, KeyEvent.Callback, * @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 04ce7e2665b8..00f4adb911bc 100644 --- a/core/java/android/view/accessibility/AccessibilityManager.java +++ b/core/java/android/view/accessibility/AccessibilityManager.java @@ -91,25 +91,45 @@ public final class AccessibilityManager { 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 @@ public final class AccessibilityManager { } /** - * Sets the current state. + * Registers a {@link TouchExplorationStateChangeListener} for changes in + * the global touch exploration state of the system. * - * @param stateFlags The state flags. + * @param listener The listener. + * @return True if successfully registered. */ - private void setState(int stateFlags) { - final boolean accessibilityEnabled = (stateFlags & STATE_FLAG_ACCESSIBILITY_ENABLED) != 0; - setAccessibilityState(accessibilityEnabled); - mIsTouchExplorationEnabled = (stateFlags & STATE_FLAG_TOUCH_EXPLORATION_ENABLED) != 0; + 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 enabled state. + * Sets the current state and notifies listeners, if necessary. * - * @param isEnabled The accessibility state. + * @param stateFlags The state flags. */ - private void setAccessibilityState(boolean isEnabled) { + private void setState(int stateFlags) { + 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 @@ public final class AccessibilityManager { } /** + * 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 6bef78e37f9b..7dd1e8a26a0d 100644 --- a/core/java/android/view/accessibility/AccessibilityNodeInfoCache.java +++ b/core/java/android/view/accessibility/AccessibilityNodeInfoCache.java @@ -86,7 +86,9 @@ public class AccessibilityNodeInfoCache { 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 2cbe0e2e63aa..5bc39f158408 100644 --- a/core/java/android/webkit/WebView.java +++ b/core/java/android/webkit/WebView.java @@ -670,7 +670,6 @@ public class WebView extends AbsoluteLayout */ @Deprecated public static void enablePlatformNotifications() { - checkThread(); getFactory().getStatics().setPlatformNotificationsEnabled(true); } @@ -683,7 +682,6 @@ public class WebView extends AbsoluteLayout */ @Deprecated public static void disablePlatformNotifications() { - checkThread(); getFactory().getStatics().setPlatformNotificationsEnabled(false); } @@ -1691,7 +1689,6 @@ public class WebView extends AbsoluteLayout * @param enabled whether to enable web contents debugging */ public static void setWebContentsDebuggingEnabled(boolean enabled) { - checkThread(); getFactory().getStatics().setWebContentsDebuggingEnabled(enabled); } @@ -1704,7 +1701,6 @@ public class WebView extends AbsoluteLayout */ @Deprecated public static synchronized PluginList getPluginList() { - checkThread(); return new PluginList(); } @@ -2058,13 +2054,18 @@ public class WebView extends AbsoluteLayout 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 0fd4e33a43d1..16daba05c9b7 100644 --- a/core/java/android/webkit/WebViewFactory.java +++ b/core/java/android/webkit/WebViewFactory.java @@ -28,19 +28,6 @@ import android.util.Log; * @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 @@ public final class WebViewFactory { 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 @@ public final class WebViewFactory { // 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 000000000000..f070a58d467b --- /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 04351da6dff7..73d34c315c24 100644 --- a/core/java/com/android/internal/os/ZygoteInit.java +++ b/core/java/com/android/internal/os/ZygoteInit.java @@ -322,6 +322,9 @@ public class ZygoteInit { // 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 15e1d0f6494e..768fefced915 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 5bdcbd9c8b9d..9e913e97f78a 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 f80d62876c26..23d71893fd99 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 81ee3af51900..28e7af7ac8d9 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 ad9144c5008d..edfdcc2e2fde 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 db3119b252c2..14469bf0380f 100644 --- a/docs/html/training/basics/fragments/fragment-ui.jd +++ b/docs/html/training/basics/fragments/fragment-ui.jd @@ -122,11 +122,11 @@ public class MainActivity extends FragmentActivity { 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 000000000000..71550924a8f8 --- /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 000000000000..06136125e8a6 --- /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" + ><intent-filter></a></code> element for the + <code><a href="{@docRoot}guide/topics/manifest/activity-element.html" + ><activity></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" + ><intent-filter></a></code> element, add the following child elements: +</p> +<dl> + <dt> + <code><a href="{@docRoot}guide/topics/manifest/action-element.html" + ><action android:name="android.intent.action.VIEW" /></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" + ><category android:name="android.intent.category.CATEGORY_DEFAULT" /></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" + ><data android:mimeType="<i>mime-type</i>" /></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> + <activity + android:name="com.example.android.nfctransfer.ViewActivity" + android:label="Android Beam Viewer" > + ... + <intent-filter> + <action android:name="android.intent.action.VIEW"/> + <category android:name="android.intent.category.DEFAULT"/> + ... + </intent-filter> + </activity> +</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> + <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /></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 && + 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 000000000000..917b87f11594 --- /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" + ><manifest></a></code> element: +<pre> + <uses-permission android:name="android.permission.NFC" /> +</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" + ><manifest></a></code> element: +<pre> + <uses-permission + android:name="android.permission.READ_EXTERNAL_STORAGE" /> +</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" + ><uses-feature></a></code> element as a child + of the <code><a href="{@docRoot}guide/topics/manifest/manifest-element.html" + ><manifest></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" + ><uses-feature></a></code> element: +</p> +<pre> +<uses-feature + android:name="android.hardware.nfc" + android:required="true" /></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" + ><uses-sdk></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> +<uses-feature android:name="android.hardware.nfc" android:required="false" /></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; + ... + @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 < + 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 + */ + @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; + ... + @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 77ac235e8860..27e7004cadba 100644 --- a/docs/html/training/training_toc.cs +++ b/docs/html/training/training_toc.cs @@ -423,7 +423,22 @@ include the action bar on devices running Android 2.1 or higher." </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 @@ include the action bar on devices running Android 2.1 or higher." "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 @@ include the action bar on devices running Android 2.1 or higher." </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 32e85d97d820..7865ec8138de 100644 --- a/media/java/android/media/RemoteController.java +++ b/media/java/android/media/RemoteController.java @@ -36,6 +36,8 @@ import android.util.DisplayMetrics; 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 @@ public final class RemoteController } 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 @@ public final class RemoteController //================================================== // 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 @@ public final class RemoteController } 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 @@ public final class RemoteController 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 22dd6e40285f..90be197b87cb 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/CreateDirectoryFragment.java +++ b/packages/DocumentsUI/src/com/android/documentsui/CreateDirectoryFragment.java @@ -73,7 +73,7 @@ public class CreateDirectoryFragment extends DialogFragment { 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 @@ public class CreateDirectoryFragment extends DialogFragment { } 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 @@ public class CreateDirectoryFragment extends DialogFragment { @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 76607796d60d..d675e8ddbbd3 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java +++ b/packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java @@ -292,7 +292,7 @@ public class DocumentsActivity extends Activity { @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 @@ public class DocumentsActivity extends Activity { 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 @@ public class DocumentsActivity extends Activity { 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 @@ public class DocumentsActivity extends Activity { } // 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 eb5676509840..b98e1eedd7e2 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/RootsCache.java +++ b/packages/DocumentsUI/src/com/android/documentsui/RootsCache.java @@ -194,16 +194,6 @@ public class RootsCache { 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 d1f387375668..98ba51241be8 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 71d3ed7d5ff9..5ee226b78115 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 f1af3b3b4989..c4be72fff671 100644 --- a/packages/Keyguard/src/com/android/keyguard/KeyguardHostView.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardHostView.java @@ -405,6 +405,12 @@ public class KeyguardHostView extends KeyguardViewBase { 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 3e42c14b2f69..57fd82ce901f 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 @@ public class KeyguardStatusView extends GridLayout { private LockPatternUtils mLockPatternUtils; private TextView mAlarmStatusView; + private TextClock mDateView; private KeyguardUpdateMonitorCallback mInfoCallback = new KeyguardUpdateMonitorCallback() { @@ -58,10 +55,12 @@ public class KeyguardStatusView extends GridLayout { } }; + @Override public void onScreenTurnedOn() { setEnableMarquee(true); }; + @Override public void onScreenTurnedOff(int why) { setEnableMarquee(false); }; @@ -88,6 +87,7 @@ public class KeyguardStatusView extends GridLayout { 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 @@ public class KeyguardStatusView extends GridLayout { } 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 65841805ee31..58ca0b086ce8 100644 --- a/packages/Keyguard/src/com/android/keyguard/KeyguardViewManager.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardViewManager.java @@ -420,6 +420,7 @@ public class KeyguardViewManager { 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 @@ public class KeyguardViewManager { 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 @@ public class KeyguardViewManager { }); } else { try { - callback.onShown(null); + callback.onShown(token); } catch (RemoteException e) { Slog.w(TAG, "Exception calling onShown():", e); } @@ -453,7 +450,7 @@ public class KeyguardViewManager { } } 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 4f377a376c75..5e7816c9881e 100644 --- a/packages/Keyguard/src/com/android/keyguard/SlidingChallengeLayout.java +++ b/packages/Keyguard/src/com/android/keyguard/SlidingChallengeLayout.java @@ -48,7 +48,7 @@ public class SlidingChallengeLayout extends ViewGroup implements ChallengeLayout 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 @@ public class SlidingChallengeLayout extends ViewGroup implements ChallengeLayout 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 @@ public class SlidingChallengeLayout extends ViewGroup implements ChallengeLayout 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 @@ public class SlidingChallengeLayout extends ViewGroup implements ChallengeLayout 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 @@ public class SlidingChallengeLayout extends ViewGroup implements ChallengeLayout mGestureStartChallengeBottom = getChallengeBottom(); mDragging = true; enableHardwareLayerForChallengeView(); - } else if (mChallengeShowing && isInChallengeView(x, y)) { + } else if (mChallengeShowing && isInChallengeView(x, y) + && shouldEnableChallengeDragging()) { mBlockDrag = true; } } @@ -596,6 +603,10 @@ public class SlidingChallengeLayout extends ViewGroup implements ChallengeLayout 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 20315caae650..7a91cef275b2 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.MenuInflater; 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 @@ public final class SelectPrinterFragment extends ListFragment { 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 bfb0931c5dae..a1d8f22d48a9 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 120b28f2fcbd..09c21f3f1997 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 @@ public class DatabaseHelper extends SQLiteOpenHelper { // 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 @@ public class DatabaseHelper extends SQLiteOpenHelper { 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 @@ public class DatabaseHelper extends SQLiteOpenHelper { 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 Binary files differindex e8cfc0f61f2a..d1948d605c13 100644 --- a/packages/SystemUI/res/drawable-hdpi/bottom_divider_glow.png +++ b/packages/SystemUI/res/drawable-hdpi/bottom_divider_glow.png diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_0.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_0.png Binary files differdeleted file mode 100644 index beb0e058d188..000000000000 --- a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_0.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_100.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_100.png Binary files differdeleted file mode 100644 index 14832c5f5c35..000000000000 --- a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_100.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_15.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_15.png Binary files differdeleted file mode 100644 index 603fff1daa7d..000000000000 --- a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_15.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_28.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_28.png Binary files differdeleted file mode 100644 index 5556d6a20192..000000000000 --- a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_28.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_43.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_43.png Binary files differdeleted file mode 100644 index 0004633ae14b..000000000000 --- a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_43.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_57.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_57.png Binary files differdeleted file mode 100644 index abd336bdd8e7..000000000000 --- a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_57.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_71.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_71.png Binary files differdeleted file mode 100644 index f23dda803c3d..000000000000 --- a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_71.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_85.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_85.png Binary files differdeleted file mode 100644 index c7482a90d977..000000000000 --- a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_85.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 29a853d76662..000000000000 --- a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_bang_orange.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 988aa129f5dd..000000000000 --- a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_bang_red.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 64c0d827d0f4..000000000000 --- a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_bang_white.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 9ab1d8f6f990..000000000000 --- a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_charge_0.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index e8f92e21a85c..000000000000 --- a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_charge_100.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 0d01eb56a59a..000000000000 --- a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_charge_15.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 3d66ffbc947a..000000000000 --- a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_charge_28.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 3562cea1ab57..000000000000 --- a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_charge_43.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 2b2ebf6f07d5..000000000000 --- a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_charge_57.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index f9f9537b7c9e..000000000000 --- a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_charge_71.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 2c7532a81109..000000000000 --- a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_charge_85.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_unknown.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_unknown.png Binary files differdeleted file mode 100644 index ebcd33695f1b..000000000000 --- a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_unknown.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_settings.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_settings.png Binary files differindex 8b6ecc20b7e3..a53108d0c966 100644 --- a/packages/SystemUI/res/drawable-hdpi/ic_qs_settings.png +++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_settings.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_0.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_0.png Binary files differdeleted file mode 100644 index 4ff22d2762ce..000000000000 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_0.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_100.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_100.png Binary files differdeleted file mode 100644 index 612b3622176a..000000000000 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_100.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_15.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_15.png Binary files differdeleted file mode 100644 index c971443da621..000000000000 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_15.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_28.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_28.png Binary files differdeleted file mode 100644 index a6d47967bea1..000000000000 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_28.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_43.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_43.png Binary files differdeleted file mode 100644 index 67a6a731ff14..000000000000 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_43.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_57.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_57.png Binary files differdeleted file mode 100644 index f972ebd2e8f2..000000000000 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_57.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_71.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_71.png Binary files differdeleted file mode 100644 index b707fa1de37c..000000000000 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_71.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_85.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_85.png Binary files differdeleted file mode 100644 index 82d654531e97..000000000000 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_85.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index fe33891b8e58..000000000000 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim0.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index edd03e360814..000000000000 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim100.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 5d90d2b29138..000000000000 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim15.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 9e18046f6f4f..000000000000 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim28.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index a2f2cf73ec07..000000000000 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim43.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index bd5d92246431..000000000000 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim57.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 9a021998a4bd..000000000000 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim71.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index aa1b25c4e9f7..000000000000 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim85.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 432b16600928..000000000000 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_0.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index aa071c777cf1..000000000000 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_0_fully.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 194698a05200..000000000000 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_1.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 0b4b368f3656..000000000000 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_1_fully.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 8887f2e0f366..000000000000 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_2.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 87c3244df27f..000000000000 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_2_fully.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 8206cd85a192..000000000000 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_3.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 293f88cde239..000000000000 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_3_fully.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index cb9c8ac250f6..000000000000 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_disconnected.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 88eafcbdc0fe..000000000000 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_idle.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-hdpi/status_background.9.png b/packages/SystemUI/res/drawable-hdpi/status_background.9.png Binary files differindex 66d1467507e7..7957c593d225 100644 --- a/packages/SystemUI/res/drawable-hdpi/status_background.9.png +++ b/packages/SystemUI/res/drawable-hdpi/status_background.9.png diff --git a/packages/SystemUI/res/drawable-hdpi/top_divider_glow.png b/packages/SystemUI/res/drawable-hdpi/top_divider_glow.png Binary files differindex 89cd10ef92cc..a540efb181f4 100644 --- a/packages/SystemUI/res/drawable-hdpi/top_divider_glow.png +++ b/packages/SystemUI/res/drawable-hdpi/top_divider_glow.png 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 Binary files differdeleted file mode 100644 index 295d8fa7db5a..000000000000 --- a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_wimax_signal_0.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index d875fafd702d..000000000000 --- a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_wimax_signal_0_fully.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index f3235e4a1a70..000000000000 --- a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_wimax_signal_1.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 6cd48091de70..000000000000 --- a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_wimax_signal_1_fully.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 9bbf17ec0544..000000000000 --- a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_wimax_signal_2.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index c3013669b686..000000000000 --- a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_wimax_signal_2_fully.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 56244b905840..000000000000 --- a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_wimax_signal_3.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index d2af46ddecb5..000000000000 --- a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_wimax_signal_3_fully.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index cee9234d1adf..000000000000 --- a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_wimax_signal_disconnected.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 91768a2ec6b8..000000000000 --- a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_wimax_signal_idle.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 383015e8528a..000000000000 --- a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_wimax_signal_0.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index ab73c9f0c60a..000000000000 --- a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_wimax_signal_0_fully.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 07a81a711004..000000000000 --- a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_wimax_signal_1.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 9303aeee359d..000000000000 --- a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_wimax_signal_1_fully.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index def4430f6c84..000000000000 --- a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_wimax_signal_2.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 43c9fb2394fb..000000000000 --- a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_wimax_signal_2_fully.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index ddbd04aed2dd..000000000000 --- a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_wimax_signal_3.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index c8493ff4edad..000000000000 --- a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_wimax_signal_3_fully.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index de04176e8ae6..000000000000 --- a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_wimax_signal_disconnected.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index abee91e9acb3..000000000000 --- a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_wimax_signal_idle.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index e00a33a7b09a..000000000000 --- a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_wimax_signal_0.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 21286bfe6b55..000000000000 --- a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_wimax_signal_0_fully.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 8be5950b8534..000000000000 --- a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_wimax_signal_1.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 7cdd39323a00..000000000000 --- a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_wimax_signal_1_fully.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 07aa536eb55b..000000000000 --- a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_wimax_signal_2.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 3ca652925213..000000000000 --- a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_wimax_signal_2_fully.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 095a1a8d3ba8..000000000000 --- a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_wimax_signal_3.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index eb8e313c54f5..000000000000 --- a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_wimax_signal_3_fully.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 0f571e60fb7b..000000000000 --- a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_wimax_signal_disconnected.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 3edbd149e622..000000000000 --- a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_wimax_signal_idle.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 4cb141029174..000000000000 --- a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_data_wimax_signal_0.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 7a0b11c55c15..000000000000 --- a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_data_wimax_signal_0_fully.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 12d5d6f3076c..000000000000 --- a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_data_wimax_signal_1.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 08da7e460b9b..000000000000 --- a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_data_wimax_signal_1_fully.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 6ecd2e891d3b..000000000000 --- a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_data_wimax_signal_2.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 9e7e3f2e3069..000000000000 --- a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_data_wimax_signal_2_fully.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index bdd4f599ee6e..000000000000 --- a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_data_wimax_signal_3.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 1eb054744488..000000000000 --- a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_data_wimax_signal_3_fully.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 06e4480f3129..000000000000 --- a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_data_wimax_signal_disconnected.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index f904325caf4e..000000000000 --- a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_data_wimax_signal_idle.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/bottom_divider_glow.png b/packages/SystemUI/res/drawable-mdpi/bottom_divider_glow.png Binary files differindex 7d7868d2b9e7..ba25f653e566 100644 --- a/packages/SystemUI/res/drawable-mdpi/bottom_divider_glow.png +++ b/packages/SystemUI/res/drawable-mdpi/bottom_divider_glow.png diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_0.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_0.png Binary files differdeleted file mode 100644 index 8dd3d4db68cb..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_0.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_100.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_100.png Binary files differdeleted file mode 100644 index 2a9bf50c0320..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_100.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_15.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_15.png Binary files differdeleted file mode 100644 index f59ba484d73b..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_15.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_28.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_28.png Binary files differdeleted file mode 100644 index 12f16ddbaca9..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_28.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_43.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_43.png Binary files differdeleted file mode 100644 index 649c89d9534b..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_43.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_57.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_57.png Binary files differdeleted file mode 100644 index 95494e6132f1..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_57.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_71.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_71.png Binary files differdeleted file mode 100644 index dfd92ee81159..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_71.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_85.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_85.png Binary files differdeleted file mode 100644 index dcabf3f7aafa..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_85.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 41fc2e950448..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_bang_orange.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 414be9de886a..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_bang_red.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 398a08bf0710..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_bang_white.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index b9172811a26a..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_charge_0.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 2a05827ecdeb..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_charge_100.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 86d11588478e..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_charge_15.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 076add96d58d..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_charge_28.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 4bdae3c7d6fd..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_charge_43.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 8353d9172097..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_charge_57.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 91bd62ec2ed6..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_charge_71.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index a36d25d90758..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_charge_85.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_unknown.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_unknown.png Binary files differdeleted file mode 100644 index a2e3cc968a28..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_unknown.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_settings.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_settings.png Binary files differindex 021ae6d9977c..0f7607b33eed 100644 --- a/packages/SystemUI/res/drawable-mdpi/ic_qs_settings.png +++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_settings.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_0.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_0.png Binary files differdeleted file mode 100644 index edcb1b3d9cdc..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_0.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_100.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_100.png Binary files differdeleted file mode 100644 index 8e0ec0f47c52..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_100.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_15.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_15.png Binary files differdeleted file mode 100644 index b1b675bf492a..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_15.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_28.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_28.png Binary files differdeleted file mode 100644 index 868bbbc28a1e..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_28.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_43.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_43.png Binary files differdeleted file mode 100644 index 890129e94b0b..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_43.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_57.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_57.png Binary files differdeleted file mode 100644 index 86279af539d9..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_57.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_71.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_71.png Binary files differdeleted file mode 100644 index de2aa4e5c5b1..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_71.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_85.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_85.png Binary files differdeleted file mode 100644 index c008d6f4c95c..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_85.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 0c637935729e..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim0.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index c16c289178d7..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim100.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index f4f59b40d819..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim15.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 1d2c557ae36e..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim28.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index ebf78887b00c..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim43.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index b10072861036..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim57.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 8b8e872e2909..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim71.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index de78a9ce4f9b..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim85.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index e5a8f9531dc5..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_0.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index c1c2b5c79b24..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_0_fully.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 421eee828820..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_1.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index bfd249491e6c..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_1_fully.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index b1af67862c30..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_2.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 9ad245bb532a..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_2_fully.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 69a1a970bd6b..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_3.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index d86567348f92..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_3_fully.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 6bd3189e4dfb..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_disconnected.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index f7f0e9396f65..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_idle.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/status_background.9.png b/packages/SystemUI/res/drawable-mdpi/status_background.9.png Binary files differindex 49076d315c3a..b79a6d907423 100644 --- a/packages/SystemUI/res/drawable-mdpi/status_background.9.png +++ b/packages/SystemUI/res/drawable-mdpi/status_background.9.png diff --git a/packages/SystemUI/res/drawable-mdpi/top_divider_glow.png b/packages/SystemUI/res/drawable-mdpi/top_divider_glow.png Binary files differindex f93da095dda8..53d85de10ba0 100644 --- a/packages/SystemUI/res/drawable-mdpi/top_divider_glow.png +++ b/packages/SystemUI/res/drawable-mdpi/top_divider_glow.png diff --git a/packages/SystemUI/res/drawable-xhdpi/bottom_divider_glow.png b/packages/SystemUI/res/drawable-xhdpi/bottom_divider_glow.png Binary files differindex bbcea9eb30f1..0b012b48f261 100644 --- a/packages/SystemUI/res/drawable-xhdpi/bottom_divider_glow.png +++ b/packages/SystemUI/res/drawable-xhdpi/bottom_divider_glow.png diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_0.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_0.png Binary files differdeleted file mode 100644 index ff3bdf0d1356..000000000000 --- a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_0.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_100.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_100.png Binary files differdeleted file mode 100644 index 8bc6d17362b6..000000000000 --- a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_100.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_15.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_15.png Binary files differdeleted file mode 100644 index 39fccc88febd..000000000000 --- a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_15.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_28.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_28.png Binary files differdeleted file mode 100644 index 70829a10dbdd..000000000000 --- a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_28.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_43.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_43.png Binary files differdeleted file mode 100644 index ebd97c808f31..000000000000 --- a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_43.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_57.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_57.png Binary files differdeleted file mode 100644 index 9d5be12bc47d..000000000000 --- a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_57.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_71.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_71.png Binary files differdeleted file mode 100644 index 1ffa24579cf8..000000000000 --- a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_71.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_85.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_85.png Binary files differdeleted file mode 100644 index b6aebe6fbe6c..000000000000 --- a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_85.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 28ec7a86a093..000000000000 --- a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_bang_orange.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 432b496836e4..000000000000 --- a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_bang_red.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 9ed63f380ea3..000000000000 --- a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_bang_white.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 1ecedca5ca33..000000000000 --- a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_charge_0.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 37cb7c4c8f43..000000000000 --- a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_charge_100.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 1a595edc2be2..000000000000 --- a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_charge_15.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index e36e68cb5f78..000000000000 --- a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_charge_28.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index e58f9c041623..000000000000 --- a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_charge_43.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index c7fafa422d7e..000000000000 --- a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_charge_57.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 5dcec0ece294..000000000000 --- a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_charge_71.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 6e8197482f57..000000000000 --- a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_charge_85.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_unknown.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_unknown.png Binary files differdeleted file mode 100644 index 1db2eb3323f1..000000000000 --- a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_unknown.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_settings.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_settings.png Binary files differindex e888ac237fca..4ce9460fdebc 100644 --- a/packages/SystemUI/res/drawable-xhdpi/ic_qs_settings.png +++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_settings.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_0.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_0.png Binary files differdeleted file mode 100644 index 8ea54eee32ec..000000000000 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_0.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_100.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_100.png Binary files differdeleted file mode 100644 index 877abf42a3f0..000000000000 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_100.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_15.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_15.png Binary files differdeleted file mode 100644 index 94605c9c726c..000000000000 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_15.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_28.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_28.png Binary files differdeleted file mode 100644 index c4b77ec07659..000000000000 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_28.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_43.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_43.png Binary files differdeleted file mode 100644 index 9983d60cf6d8..000000000000 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_43.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_57.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_57.png Binary files differdeleted file mode 100644 index de09dc6f5217..000000000000 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_57.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_71.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_71.png Binary files differdeleted file mode 100644 index 99908696f08c..000000000000 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_71.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_85.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_85.png Binary files differdeleted file mode 100644 index 7a630f93f80b..000000000000 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_85.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 8a0a50f8191f..000000000000 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim0.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 58ff765fa81b..000000000000 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim100.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index ca1484104bc9..000000000000 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim15.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 9b1a47cb1c84..000000000000 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim28.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index dd0066817740..000000000000 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim43.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 556c7107407b..000000000000 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim57.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index b87eb8782613..000000000000 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim71.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index fe7c1afe4c78..000000000000 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim85.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index f64d58236b32..000000000000 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_0.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 31f5b90159bd..000000000000 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_0_fully.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 881d5e83fad5..000000000000 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_1.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 2d80c4d4a202..000000000000 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_1_fully.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index ad85c83e6c48..000000000000 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_2.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index bde43c6e88bd..000000000000 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_2_fully.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 914ac495de90..000000000000 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_3.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index c83e9fe41495..000000000000 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_3_fully.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 48bca909572b..000000000000 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_disconnected.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 155143404c42..000000000000 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_idle.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xhdpi/status_background.9.png b/packages/SystemUI/res/drawable-xhdpi/status_background.9.png Binary files differindex 75ec8f5d5d1b..87c641b06515 100644 --- a/packages/SystemUI/res/drawable-xhdpi/status_background.9.png +++ b/packages/SystemUI/res/drawable-xhdpi/status_background.9.png diff --git a/packages/SystemUI/res/drawable-xhdpi/top_divider_glow.png b/packages/SystemUI/res/drawable-xhdpi/top_divider_glow.png Binary files differindex 56b63d0ee7a5..d4526c0a6a3f 100644 --- a/packages/SystemUI/res/drawable-xhdpi/top_divider_glow.png +++ b/packages/SystemUI/res/drawable-xhdpi/top_divider_glow.png diff --git a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_0.png b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_0.png Binary files differdeleted file mode 100644 index 6ddf734beb5e..000000000000 --- a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_0.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_100.png b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_100.png Binary files differdeleted file mode 100644 index c04dc4b7db35..000000000000 --- a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_100.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_15.png b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_15.png Binary files differdeleted file mode 100644 index e1e1b2e2f92e..000000000000 --- a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_15.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_28.png b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_28.png Binary files differdeleted file mode 100644 index 6ff8518a2cb9..000000000000 --- a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_28.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_43.png b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_43.png Binary files differdeleted file mode 100644 index c0e94f2da140..000000000000 --- a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_43.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_57.png b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_57.png Binary files differdeleted file mode 100644 index 175e14bc86f0..000000000000 --- a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_57.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_71.png b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_71.png Binary files differdeleted file mode 100644 index ca6ba47260a2..000000000000 --- a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_71.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_85.png b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_85.png Binary files differdeleted file mode 100644 index 95017e4fea6c..000000000000 --- a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_85.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 2b333d79f085..000000000000 --- a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_bang_orange.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 4c71154030e2..000000000000 --- a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_bang_red.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 976a36b294cd..000000000000 --- a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_bang_white.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 82d4806cdfd1..000000000000 --- a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_charge_0.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 7d11599aa466..000000000000 --- a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_charge_100.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 3b36bb970828..000000000000 --- a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_charge_15.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index d36bd5a1b275..000000000000 --- a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_charge_28.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index a3f543aa4bd0..000000000000 --- a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_charge_43.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 0208baf415ad..000000000000 --- a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_charge_57.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index ea46076756aa..000000000000 --- a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_charge_71.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 4cbfea69f3b1..000000000000 --- a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_charge_85.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_unknown.png b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_unknown.png Binary files differdeleted file mode 100644 index 5ae0221b3954..000000000000 --- a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_battery_unknown.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_settings.png b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_settings.png Binary files differindex d1a72bebefbf..74a78dca2dea 100644 --- a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_settings.png +++ b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_settings.png diff --git a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_0.png b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_0.png Binary files differdeleted file mode 100644 index 2d916d7b7fd9..000000000000 --- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_0.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_100.png b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_100.png Binary files differdeleted file mode 100644 index fe3c7506bab7..000000000000 --- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_100.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_15.png b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_15.png Binary files differdeleted file mode 100644 index a2bab6d58274..000000000000 --- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_15.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_28.png b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_28.png Binary files differdeleted file mode 100644 index 224be03d419a..000000000000 --- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_28.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_43.png b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_43.png Binary files differdeleted file mode 100644 index dabed32a8a60..000000000000 --- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_43.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_57.png b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_57.png Binary files differdeleted file mode 100644 index 82d04c5754e6..000000000000 --- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_57.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_71.png b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_71.png Binary files differdeleted file mode 100644 index 1d403c6fccf3..000000000000 --- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_71.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_85.png b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_85.png Binary files differdeleted file mode 100644 index b917d37be165..000000000000 --- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_85.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 1da84be163d4..000000000000 --- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_charge_anim0.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 17989b5f7c9f..000000000000 --- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_charge_anim100.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 8733bc36d866..000000000000 --- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_charge_anim15.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 54cc84740787..000000000000 --- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_charge_anim28.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 5d5ba2fc16bb..000000000000 --- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_charge_anim43.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 6a5035ee115c..000000000000 --- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_charge_anim57.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 82a891f93d19..000000000000 --- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_charge_anim71.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 399bb97446ce..000000000000 --- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_charge_anim85.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 21daf5c16559..000000000000 --- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_0.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 3397570da08e..000000000000 --- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_0_fully.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 87039c5bf639..000000000000 --- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_1.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index a21f3c4d8e2d..000000000000 --- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_1_fully.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 65b323f559fa..000000000000 --- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_2.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index c5c35500a55b..000000000000 --- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_2_fully.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 801cb3cac528..000000000000 --- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_3.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 149d22785a1c..000000000000 --- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_3_fully.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 6edb37a8b377..000000000000 --- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_disconnected.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 2b01e9b59bca..000000000000 --- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_idle.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-xxhdpi/status_background.9.png b/packages/SystemUI/res/drawable-xxhdpi/status_background.9.png Binary files differindex 679ca5d5c0e4..727c8040ddf0 100644 --- a/packages/SystemUI/res/drawable-xxhdpi/status_background.9.png +++ b/packages/SystemUI/res/drawable-xxhdpi/status_background.9.png 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 4e2a265890a9..000000000000 --- 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 dd36aa53ee06..000000000000 --- 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 cee50811ac70..000000000000 --- 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 744ab93da9af..000000000000 --- 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 6918eb21ed9d..000000000000 --- 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 ce9416286109..0bbdeade208a 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 a08eb9b0a722..28c2772f5c9f 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.media.RingtoneManager; 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 @@ public class PowerUI extends SystemUI { AlertDialog mLowBatteryDialog; TextView mBatteryLevelTextView; + private long mScreenOffTime = -1; + public void start() { mLowBatteryAlertCloseLevel = mContext.getResources().getInteger( @@ -71,10 +75,14 @@ public class PowerUI extends SystemUI { 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 @@ public class PowerUI extends SystemUI { 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 @@ public class PowerUI extends SystemUI { } 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 @@ public class PowerUI extends SystemUI { } void playLowBatterySound() { + 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; + } + if (DEBUG) { - Log.i(TAG, "playing low battery sound. WOMP-WOMP!"); + Slog.d(TAG, "playing low battery sound. pick-a-doop!"); // WOMP-WOMP is deprecated } - final ContentResolver cr = mContext.getContentResolver(); 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 @@ public class PowerUI extends SystemUI { } void showInvalidChargerDialog() { - Log.d(TAG, "showing invalid charger dialog"); + Slog.d(TAG, "showing invalid charger dialog"); dismissLowBatteryWarning(); @@ -301,6 +325,17 @@ public class PowerUI extends SystemUI { 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 932fe208c4fc..6a2bc5ff1739 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 @@ public abstract class BaseStatusBar extends SystemUI implements 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 @@ public abstract class BaseStatusBar extends SystemUI implements 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 7b1df91e6bd6..1c8702abdd1a 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 @@ public class BarTransitions { 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 6e5336384d44..d1c4109c4c92 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.Display; 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 @@ public class NavigationBarView extends LinearLayout { // 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 @@ public class NavigationBarView extends LinearLayout { 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 @@ public class NavigationBarView extends LinearLayout { mCurrentView = mRotatedViews[Surface.ROTATION_0]; + watchForAccessibilityChanges(); + } - final AccessibilityManager accessibilityManager = + private void watchForAccessibilityChanges() { + final AccessibilityManager am = (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); - } + + // Set the initial state + enableAccessibility(am.isTouchExplorationEnabled()); + + // Watch for changes + am.addTouchExplorationStateChangeListener(new TouchExplorationStateChangeListener() { + @Override + public void onTouchExplorationStateChanged(boolean enabled) { + enableAccessibility(enabled); } - } 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); - } + }); + } + + 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); } } - } - - protected void launchForAccessibilityClick(View v) { - if (v == getCameraButton()) { - KeyguardTouchDelegate.getInstance(getContext()).launchCamera(); - } else if (v == getSearchLight()) { - KeyguardTouchDelegate.getInstance(getContext()).showAssistant(); + 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 c02a99b58d96..3ddcb1b03b51 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 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode { } @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 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode { } 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 36ba4d9d3f8d..33edd721b582 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 @@ class QuickSettings { 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 @@ class QuickSettings { 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 575b44ebce6f..6db9bc38b173 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.Context; 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 class BatteryController extends BroadcastReceiver { } 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 @@ public class BatteryController extends BroadcastReceiver { 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 01c27f21a623..09f1695aa30a 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 @@ public class NetworkController extends BroadcastReceiver implements DemoMode { 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 9ce7331cf87f..000000000000 --- 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 48fbcc53e5f2..710e8e470d4d 100644 --- a/packages/WallpaperCropper/src/com/android/wallpapercropper/WallpaperCropActivity.java +++ b/packages/WallpaperCropper/src/com/android/wallpapercropper/WallpaperCropActivity.java @@ -102,8 +102,8 @@ public class WallpaperCropActivity extends Activity { 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 d8af0072e98b..eba689d62338 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 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { 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 de841da31735..e9e3b27e7f84 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 @@ public class PhoneWindowManager implements WindowManagerPolicy { */ 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 @@ public class PhoneWindowManager implements WindowManagerPolicy { 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 @@ public class PhoneWindowManager implements WindowManagerPolicy { })) { 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 cb2ace388398..d161bc162f72 100644 --- a/preloaded-classes +++ b/preloaded-classes @@ -76,7 +76,6 @@ android.app.ActivityThread$ProviderClientRecord 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.os.storage.StorageVolume$1 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$CallbackRecord 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.EdgeEffect 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.UnsafeByteSequence 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$Sync$ThreadLocalHoldCounter 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 59b559e0de87..5695ee510d1b 100644 --- a/services/java/com/android/server/ConnectivityService.java +++ b/services/java/com/android/server/ConnectivityService.java @@ -4247,6 +4247,9 @@ public class ConnectivityService extends IConnectivityManager.Stub { 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 @@ public class ConnectivityService extends IConnectivityManager.Stub { } // 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 @@ public class ConnectivityService extends IConnectivityManager.Stub { 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 59ec7777c6c9..c7ca1ea9cb3f 100644 --- a/services/java/com/android/server/MountService.java +++ b/services/java/com/android/server/MountService.java @@ -1227,6 +1227,9 @@ class MountService extends IMountService.Stub 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 @@ class MountService extends IMountService.Stub 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 b881934879d6..7431f1d0af43 100644 --- a/services/java/com/android/server/NotificationManagerService.java +++ b/services/java/com/android/server/NotificationManagerService.java @@ -1167,11 +1167,19 @@ public class NotificationManagerService extends INotificationManager.Stub } 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 dd9ae4c9397e..cc43a9cce6ef 100644 --- a/services/java/com/android/server/accounts/AccountManagerService.java +++ b/services/java/com/android/server/accounts/AccountManagerService.java @@ -293,17 +293,16 @@ public class AccountManagerService 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 @@ public class AccountManagerService 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 @@ public class AccountManagerService 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 @@ public class AccountManagerService || 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 1987d049f0c8..6c6cc9839687 100644 --- a/services/java/com/android/server/am/ActivityManagerService.java +++ b/services/java/com/android/server/am/ActivityManagerService.java @@ -6489,26 +6489,53 @@ public final class ActivityManagerService extends ActivityManagerNative } @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 @@ public final class ActivityManagerService extends ActivityManagerNative 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 @@ public final class ActivityManagerService extends ActivityManagerNative + 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 dbc05fa4288b..a6375e120da3 100644 --- a/services/java/com/android/server/am/ProcessStatsService.java +++ b/services/java/com/android/server/am/ProcessStatsService.java @@ -566,6 +566,15 @@ public final class ProcessStatsService extends IProcessStats.Stub { 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 5868c08afae9..684f247f63f7 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.content.Intent; 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 e089ca695911..aa8851ce5030 100644 --- a/services/java/com/android/server/wm/WindowManagerService.java +++ b/services/java/com/android/server/wm/WindowManagerService.java @@ -3386,9 +3386,9 @@ public class WindowManagerService extends IWindowManager.Stub 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 @@ public class WindowManagerService extends IWindowManager.Stub 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 @@ public class WindowManagerService extends IWindowManager.Stub 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 @@ public class WindowManagerService extends IWindowManager.Stub //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 @@ public class WindowManagerService extends IWindowManager.Stub 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 69785510789c..e3c664b4066c 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.content.Context; 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 @@ public class CallerInfo { * 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 de56472c3ea8..b4c583e85076 100644 --- a/wifi/java/android/net/wifi/WifiStateMachine.java +++ b/wifi/java/android/net/wifi/WifiStateMachine.java @@ -2958,7 +2958,9 @@ public class WifiStateMachine extends StateMachine { 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 */ |