diff --git a/Android.mk b/Android.mk index 41a75c76511..6f1d32be7a8 100644 --- a/Android.mk +++ b/Android.mk @@ -171,6 +171,7 @@ LOCAL_SRC_FILES += \ core/java/com/android/internal/app/IBatteryStats.aidl \ core/java/com/android/internal/app/IUsageStats.aidl \ core/java/com/android/internal/app/IMediaContainerService.aidl \ + core/java/com/android/internal/app/IAssetRedirectionManager.aidl \ core/java/com/android/internal/appwidget/IAppWidgetService.aidl \ core/java/com/android/internal/appwidget/IAppWidgetHost.aidl \ core/java/com/android/internal/backup/IBackupTransport.aidl \ diff --git a/api/current.txt b/api/current.txt index 086c8914c1d..027efcafaab 100644 --- a/api/current.txt +++ b/api/current.txt @@ -1153,6 +1153,7 @@ package android { field public static final int holo_purple = 17170458; // 0x106001a field public static final int holo_red_dark = 17170455; // 0x1060017 field public static final int holo_red_light = 17170454; // 0x1060016 + field public static final int holo_white_light = 17170460; // 0x106001c field public static final int primary_text_dark = 17170433; // 0x1060001 field public static final int primary_text_dark_nodisable = 17170434; // 0x1060002 field public static final int primary_text_light = 17170435; // 0x1060003 @@ -1355,6 +1356,7 @@ package android { field public static final int title_bar = 17301653; // 0x1080095 field public static final int title_bar_tall = 17301670; // 0x10800a6 field public static final int toast_frame = 17301654; // 0x1080096 + field public static final int weather_condition = 17301684; // 0x10800b4 field public static final int zoom_plate = 17301655; // 0x1080097 } @@ -1507,6 +1509,7 @@ package android { field public static final int status_bar_notification_info_overflow = 17039383; // 0x1040017 field public static final int unknownName = 17039374; // 0x104000e field public static final int untitled = 17039375; // 0x104000f + field public static final int weatherpanel_slash = 17039384; // 0x1040018 field public static final int yes = 17039379; // 0x1040013 } @@ -9644,6 +9647,7 @@ package android.hardware { method public int getJpegQuality(); method public int getJpegThumbnailQuality(); method public android.hardware.Camera.Size getJpegThumbnailSize(); + method public java.lang.String getPowerMode(); method public int getMaxExposureCompensation(); method public int getMaxNumDetectedFaces(); method public int getMaxNumFocusAreas(); @@ -9680,6 +9684,7 @@ package android.hardware { method public java.util.List getZoomRatios(); method public boolean isAutoExposureLockSupported(); method public boolean isAutoWhiteBalanceLockSupported(); + method public boolean isPowerModeSupported(); method public boolean isSmoothZoomSupported(); method public boolean isVideoSnapshotSupported(); method public boolean isVideoStabilizationSupported(); @@ -9707,6 +9712,7 @@ package android.hardware { method public void setMeteringAreas(java.util.List); method public void setPictureFormat(int); method public void setPictureSize(int, int); + method public void setPowerMode(java.lang.String); method public void setPreviewFormat(int); method public void setPreviewFpsRange(int, int); method public deprecated void setPreviewFrameRate(int); @@ -9746,6 +9752,8 @@ package android.hardware { field public static final java.lang.String FOCUS_MODE_FIXED = "fixed"; field public static final java.lang.String FOCUS_MODE_INFINITY = "infinity"; field public static final java.lang.String FOCUS_MODE_MACRO = "macro"; + field public static final java.lang.String LOW_POWER = "Low_Power"; + field public static final java.lang.String NORMAL_POWER = "Normal_Power"; field public static final int PREVIEW_FPS_MAX_INDEX = 1; // 0x1 field public static final int PREVIEW_FPS_MIN_INDEX = 0; // 0x0 field public static final java.lang.String SCENE_MODE_ACTION = "action"; @@ -10637,7 +10645,12 @@ package android.media { field public static final int CHANNEL_OUT_QUAD = 204; // 0xcc field public static final int CHANNEL_OUT_STEREO = 12; // 0xc field public static final int CHANNEL_OUT_SURROUND = 1052; // 0x41c + field public static final int ENCODING_AMRNB = 100; // 0x64 + field public static final int ENCODING_AMRWB = 101; // 0x65 field public static final int ENCODING_DEFAULT = 1; // 0x1 + field public static final int ENCODING_EVRC = 102; // 0x66 + field public static final int ENCODING_EVRCB = 103; // 0x67 + field public static final int ENCODING_EVRCWB = 104; // 0x68 field public static final int ENCODING_INVALID = 0; // 0x0 field public static final int ENCODING_PCM_16BIT = 2; // 0x2 field public static final int ENCODING_PCM_8BIT = 3; // 0x3 @@ -11468,7 +11481,10 @@ package android.media { field public static final int AMR_NB = 1; // 0x1 field public static final int AMR_WB = 2; // 0x2 field public static final int DEFAULT = 0; // 0x0 + field public static final int EVRC = 6; // 0x6 field public static final int HE_AAC = 4; // 0x4 + field public static final int LPCM = 8; // 0x8 + field public static final int QCELP = 7; // 0x7 } public final class MediaRecorder.AudioSource { @@ -11496,6 +11512,7 @@ package android.media { field public static final int AMR_WB = 4; // 0x4 field public static final int DEFAULT = 0; // 0x0 field public static final int MPEG_4 = 2; // 0x2 + field public static final int QCP = 9; // 0x9 field public static final deprecated int RAW_AMR = 3; // 0x3 field public static final int THREE_GPP = 1; // 0x1 } @@ -21525,9 +21542,9 @@ package android.text.format { method public static java.lang.String formatElapsedTime(long); method public static java.lang.String formatElapsedTime(java.lang.StringBuilder, long); method public static final java.lang.CharSequence formatSameDayTime(long, long, int, int); - method public static java.lang.String getAMPMString(int); - method public static java.lang.String getDayOfWeekString(int, int); - method public static java.lang.String getMonthString(int, int); + method public static deprecated java.lang.String getAMPMString(int); + method public static deprecated java.lang.String getDayOfWeekString(int, int); + method public static deprecated java.lang.String getMonthString(int, int); method public static java.lang.CharSequence getRelativeDateTimeString(android.content.Context, long, long, long, int); method public static java.lang.CharSequence getRelativeTimeSpanString(long); method public static java.lang.CharSequence getRelativeTimeSpanString(long, long, long); @@ -21535,24 +21552,24 @@ package android.text.format { method public static java.lang.CharSequence getRelativeTimeSpanString(android.content.Context, long, boolean); method public static java.lang.CharSequence getRelativeTimeSpanString(android.content.Context, long); method public static boolean isToday(long); - field public static final java.lang.String ABBREV_MONTH_FORMAT = "%b"; + field public static final deprecated java.lang.String ABBREV_MONTH_FORMAT = "%b"; field public static final java.lang.String ABBREV_WEEKDAY_FORMAT = "%a"; field public static final long DAY_IN_MILLIS = 86400000L; // 0x5265c00L - field public static final int FORMAT_12HOUR = 64; // 0x40 - field public static final int FORMAT_24HOUR = 128; // 0x80 + field public static final deprecated int FORMAT_12HOUR = 64; // 0x40 + field public static final deprecated int FORMAT_24HOUR = 128; // 0x80 field public static final int FORMAT_ABBREV_ALL = 524288; // 0x80000 field public static final int FORMAT_ABBREV_MONTH = 65536; // 0x10000 field public static final int FORMAT_ABBREV_RELATIVE = 262144; // 0x40000 field public static final int FORMAT_ABBREV_TIME = 16384; // 0x4000 field public static final int FORMAT_ABBREV_WEEKDAY = 32768; // 0x8000 - field public static final int FORMAT_CAP_AMPM = 256; // 0x100 - field public static final int FORMAT_CAP_MIDNIGHT = 4096; // 0x1000 - field public static final int FORMAT_CAP_NOON = 1024; // 0x400 - field public static final int FORMAT_CAP_NOON_MIDNIGHT = 5120; // 0x1400 + field public static final deprecated int FORMAT_CAP_AMPM = 256; // 0x100 + field public static final deprecated int FORMAT_CAP_MIDNIGHT = 4096; // 0x1000 + field public static final deprecated int FORMAT_CAP_NOON = 1024; // 0x400 + field public static final deprecated int FORMAT_CAP_NOON_MIDNIGHT = 5120; // 0x1400 field public static final int FORMAT_NO_MIDNIGHT = 2048; // 0x800 field public static final int FORMAT_NO_MONTH_DAY = 32; // 0x20 field public static final int FORMAT_NO_NOON = 512; // 0x200 - field public static final int FORMAT_NO_NOON_MIDNIGHT = 2560; // 0xa00 + field public static final deprecated int FORMAT_NO_NOON_MIDNIGHT = 2560; // 0xa00 field public static final int FORMAT_NO_YEAR = 8; // 0x8 field public static final int FORMAT_NUMERIC_DATE = 131072; // 0x20000 field public static final int FORMAT_SHOW_DATE = 16; // 0x10 @@ -21561,12 +21578,12 @@ package android.text.format { field public static final int FORMAT_SHOW_YEAR = 4; // 0x4 field public static final deprecated int FORMAT_UTC = 8192; // 0x2000 field public static final long HOUR_IN_MILLIS = 3600000L; // 0x36ee80L - field public static final java.lang.String HOUR_MINUTE_24 = "%H:%M"; - field public static final int LENGTH_LONG = 10; // 0xa - field public static final int LENGTH_MEDIUM = 20; // 0x14 - field public static final int LENGTH_SHORT = 30; // 0x1e - field public static final int LENGTH_SHORTER = 40; // 0x28 - field public static final int LENGTH_SHORTEST = 50; // 0x32 + field public static final deprecated java.lang.String HOUR_MINUTE_24 = "%H:%M"; + field public static final deprecated int LENGTH_LONG = 10; // 0xa + field public static final deprecated int LENGTH_MEDIUM = 20; // 0x14 + field public static final deprecated int LENGTH_SHORT = 30; // 0x1e + field public static final deprecated int LENGTH_SHORTER = 40; // 0x28 + field public static final deprecated int LENGTH_SHORTEST = 50; // 0x32 field public static final long MINUTE_IN_MILLIS = 60000L; // 0xea60L field public static final java.lang.String MONTH_DAY_FORMAT = "%-d"; field public static final java.lang.String MONTH_FORMAT = "%B"; @@ -21577,8 +21594,8 @@ package android.text.format { field public static final java.lang.String YEAR_FORMAT = "%Y"; field public static final java.lang.String YEAR_FORMAT_TWO_DIGITS = "%g"; field public static final long YEAR_IN_MILLIS = 31449600000L; // 0x7528ad000L - field public static final int[] sameMonthTable; - field public static final int[] sameYearTable; + field public static final deprecated int[] sameMonthTable; + field public static final deprecated int[] sameYearTable; } public final class Formatter { @@ -23250,9 +23267,6 @@ package android.view { field public static final int KEYCODE_BACKSLASH = 73; // 0x49 field public static final int KEYCODE_BOOKMARK = 174; // 0xae field public static final int KEYCODE_BREAK = 121; // 0x79 - field public static final int KEYCODE_BRIGHTNESS_AUTO = 225; // 0xe1 - field public static final int KEYCODE_BRIGHTNESS_DOWN = 223; // 0xdf - field public static final int KEYCODE_BRIGHTNESS_UP = 224; // 0xe0 field public static final int KEYCODE_BUTTON_1 = 188; // 0xbc field public static final int KEYCODE_BUTTON_10 = 197; // 0xc5 field public static final int KEYCODE_BUTTON_11 = 198; // 0xc6 @@ -23412,7 +23426,6 @@ package android.view { field public static final int KEYCODE_RIGHT_BRACKET = 72; // 0x48 field public static final int KEYCODE_RO = 217; // 0xd9 field public static final int KEYCODE_S = 47; // 0x2f - field public static final int KEYCODE_SCREENSHOT = 226; // 0xe2 field public static final int KEYCODE_SCROLL_LOCK = 116; // 0x74 field public static final int KEYCODE_SEARCH = 84; // 0x54 field public static final int KEYCODE_SEMICOLON = 74; // 0x4a @@ -23431,9 +23444,6 @@ package android.view { field public static final int KEYCODE_SYSRQ = 120; // 0x78 field public static final int KEYCODE_T = 48; // 0x30 field public static final int KEYCODE_TAB = 61; // 0x3d - field public static final int KEYCODE_TOGGLE_BT = 221; // 0xdd - field public static final int KEYCODE_TOGGLE_TOUCHPAD = 222; // 0xde - field public static final int KEYCODE_TOGGLE_WIFI = 220; // 0xdc field public static final int KEYCODE_TV = 170; // 0xaa field public static final int KEYCODE_TV_INPUT = 178; // 0xb2 field public static final int KEYCODE_TV_POWER = 177; // 0xb1 diff --git a/cmds/bootanimation/Android.mk b/cmds/bootanimation/Android.mk index d71483bbef6..14e713cd4c3 100644 --- a/cmds/bootanimation/Android.mk +++ b/cmds/bootanimation/Android.mk @@ -33,6 +33,10 @@ ifeq ($(TARGET_BOOTANIMATION_TEXTURE_CACHE),false) LOCAL_CFLAGS += -DNO_TEXTURE_CACHE=1 endif +ifeq ($(TARGET_BOOTANIMATION_USE_RGB565),true) + LOCAL_CFLAGS += -DUSE_565 +endif + LOCAL_MODULE:= bootanimation diff --git a/cmds/bootanimation/BootAnimation.cpp b/cmds/bootanimation/BootAnimation.cpp index 1920ed8fcbc..a0733c9b998 100644 --- a/cmds/bootanimation/BootAnimation.cpp +++ b/cmds/bootanimation/BootAnimation.cpp @@ -161,7 +161,11 @@ status_t BootAnimation::initTexture(void* buffer, size_t len) codec->setDitherImage(false); if (codec) { codec->decode(&stream, &bitmap, + #ifdef USE_565 + SkBitmap::kRGB_565_Config, + #else SkBitmap::kARGB_8888_Config, + #endif SkImageDecoder::kDecodePixels_Mode); delete codec; } diff --git a/cmds/input/src/com/android/commands/input/Input.java b/cmds/input/src/com/android/commands/input/Input.java old mode 100755 new mode 100644 diff --git a/cmds/installd/commands.c b/cmds/installd/commands.c index f1c48744195..c6857527cac 100644 --- a/cmds/installd/commands.c +++ b/cmds/installd/commands.c @@ -1061,7 +1061,12 @@ int unlinklib(const char* dataDir) rc = -errno; goto out; } - + if (chmod(libdir, 0755) < 0) { + ALOGE("cannot chmod dir '%s': %s\n", libdir, strerror(errno)); + unlink(libdir); + rc = -errno; + goto out; + } if (chown(libdir, AID_SYSTEM, AID_SYSTEM) < 0) { ALOGE("cannot chown dir '%s': %s\n", libdir, strerror(errno)); unlink(libdir); diff --git a/core/java/android/accessibilityservice/AccessibilityService.java b/core/java/android/accessibilityservice/AccessibilityService.java index b6001ebeedd..81ee1920e4a 100644 --- a/core/java/android/accessibilityservice/AccessibilityService.java +++ b/core/java/android/accessibilityservice/AccessibilityService.java @@ -66,7 +66,7 @@ * accessibility service. Following is an example declaration: *

*
 <service android:name=".MyAccessibilityService"
- *         android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE>
+ *         android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
  *     <intent-filter>
  *         <action android:name="android.accessibilityservice.AccessibilityService" />
  *     </intent-filter>
diff --git a/core/java/android/accounts/AccountManagerService.java b/core/java/android/accounts/AccountManagerService.java
index 079b9bd2847..22e454f9dc2 100644
--- a/core/java/android/accounts/AccountManagerService.java
+++ b/core/java/android/accounts/AccountManagerService.java
@@ -220,8 +220,6 @@ public AccountManagerService(Context context, PackageManager packageManager,
 
         sThis.set(this);
 
-        UserAccounts accounts = initUser(0);
-
         IntentFilter intentFilter = new IntentFilter();
         intentFilter.addAction(Intent.ACTION_PACKAGE_REMOVED);
         intentFilter.addDataScheme("package");
@@ -242,6 +240,11 @@ public void onReceive(Context context, Intent intent) {
         }, userFilter);
     }
 
+    public void systemReady() {
+        mAuthenticatorCache.generateServicesMap();
+        initUser(0);
+    }
+
     private UserAccounts initUser(int userId) {
         synchronized (mUsers) {
             UserAccounts accounts = mUsers.get(userId);
diff --git a/core/java/android/accounts/ChooseAccountTypeActivity.java b/core/java/android/accounts/ChooseAccountTypeActivity.java
index acc85496ba2..5b3b553fa78 100644
--- a/core/java/android/accounts/ChooseAccountTypeActivity.java
+++ b/core/java/android/accounts/ChooseAccountTypeActivity.java
@@ -134,7 +134,6 @@ private void buildTypeToAuthDescriptionMap() {
                 if (sequence != null) {
                     name = sequence.toString();
                 }
-                name = sequence.toString();
             } catch (PackageManager.NameNotFoundException e) {
                 // Nothing we can do much here, just log
                 if (Log.isLoggable(TAG, Log.WARN)) {
diff --git a/core/java/android/accounts/IAccountAuthenticatorCache.java b/core/java/android/accounts/IAccountAuthenticatorCache.java
index 618771f3541..20dd585a45a 100644
--- a/core/java/android/accounts/IAccountAuthenticatorCache.java
+++ b/core/java/android/accounts/IAccountAuthenticatorCache.java
@@ -60,4 +60,9 @@ RegisteredServicesCache.ServiceInfo getServiceInfo(
      */
     void setListener(RegisteredServicesCacheListener listener,
             Handler handler);
+
+    /**
+     * Refreshes the authenticator cache.
+     */
+    void generateServicesMap();
 }
\ No newline at end of file
diff --git a/core/java/android/animation/ValueAnimator.java b/core/java/android/animation/ValueAnimator.java
old mode 100755
new mode 100644
diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java
index 92b6f7216c0..14ab59697e5 100644
--- a/core/java/android/app/ActivityManager.java
+++ b/core/java/android/app/ActivityManager.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2007 The Android Open Source Project
+ * This code has been modified.  Portions copyright (C) 2010, T-Mobile USA, Inc.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -27,6 +28,7 @@
 import android.content.pm.ConfigurationInfo;
 import android.content.pm.IPackageDataObserver;
 import android.content.pm.PackageManager;
+import android.content.res.Configuration;
 import android.content.res.Resources;
 import android.graphics.Bitmap;
 import android.graphics.Point;
@@ -1559,6 +1561,16 @@ public List getRunningExternalApplications() {
             return null;
         }
     }
+    /**
+     * @hide
+     */
+    public Configuration getConfiguration() {
+        try {
+            return ActivityManagerNative.getDefault().getConfiguration();
+        } catch (RemoteException e) {
+            return null;
+        }
+    }
 
     /**
      * Returns a list of application processes that are running on the device.
@@ -1869,4 +1881,17 @@ public boolean switchUser(int userid) {
             return false;
         }
     }
+
+    /**
+     * @throws SecurityException Throws SecurityException if the caller does
+     * not hold the {@link android.Manifest.permission#CHANGE_CONFIGURATION} permission.
+     *
+     * @hide
+     */
+    public void updateConfiguration(Configuration values) throws SecurityException {
+        try {
+            ActivityManagerNative.getDefault().updateConfiguration(values);
+        } catch (RemoteException e) {
+        }
+    }
 }
diff --git a/core/java/android/app/ActivityManagerNative.java b/core/java/android/app/ActivityManagerNative.java
index e12fa19f447..f6dff3d4149 100644
--- a/core/java/android/app/ActivityManagerNative.java
+++ b/core/java/android/app/ActivityManagerNative.java
@@ -3692,7 +3692,7 @@ public UserInfo getCurrentUser() throws RemoteException {
         Parcel data = Parcel.obtain();
         Parcel reply = Parcel.obtain();
         data.writeInterfaceToken(IActivityManager.descriptor);
-        mRemote.transact(SWITCH_USER_TRANSACTION, data, reply, 0);
+        mRemote.transact(GET_CURRENT_USER_TRANSACTION, data, reply, 0);
         reply.readException();
         UserInfo userInfo = UserInfo.CREATOR.createFromParcel(reply);
         reply.recycle();
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java
index 7242029a7c0..8260c685496 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2006 The Android Open Source Project
+ * This code has been modified.  Portions copyright (C) 2010, T-Mobile USA, Inc.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -22,11 +23,13 @@
 import android.content.ComponentName;
 import android.content.ContentProvider;
 import android.content.Context;
+import android.content.ContextWrapper;
 import android.content.IContentProvider;
 import android.content.Intent;
 import android.content.IIntentReceiver;
 import android.content.pm.ActivityInfo;
 import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageInfo;
 import android.content.pm.IPackageManager;
 import android.content.pm.InstrumentationInfo;
 import android.content.pm.PackageManager;
@@ -36,6 +39,8 @@
 import android.content.res.AssetManager;
 import android.content.res.CompatibilityInfo;
 import android.content.res.Configuration;
+import android.content.res.CustomTheme;
+import android.content.res.PackageRedirectionMap;
 import android.content.res.Resources;
 import android.database.sqlite.SQLiteDatabase;
 import android.database.sqlite.SQLiteDebug;
@@ -47,6 +52,7 @@
 import android.net.ProxyProperties;
 import android.opengl.GLUtils;
 import android.os.AsyncTask;
+import android.net.Uri;
 import android.os.Binder;
 import android.os.Bundle;
 import android.os.Debug;
@@ -61,6 +67,7 @@
 import android.os.ServiceManager;
 import android.os.StrictMode;
 import android.os.SystemClock;
+import android.text.TextUtils;
 import android.os.Trace;
 import android.os.UserId;
 import android.util.AndroidRuntimeException;
@@ -72,6 +79,7 @@
 import android.util.Slog;
 import android.view.Display;
 import android.view.HardwareRenderer;
+import android.view.InflateException;
 import android.view.View;
 import android.view.ViewDebug;
 import android.view.ViewManager;
@@ -81,6 +89,7 @@
 import android.view.WindowManagerImpl;
 import android.renderscript.RenderScript;
 
+import com.android.internal.app.IAssetRedirectionManager;
 import com.android.internal.os.BinderInternal;
 import com.android.internal.os.RuntimeInit;
 import com.android.internal.os.SamplingProfilerIntegration;
@@ -150,6 +159,7 @@ public final class ActivityThread {
     static ContextImpl mSystemContext = null;
 
     static IPackageManager sPackageManager;
+    static IAssetRedirectionManager sAssetRedirectionManager;
 
     final ApplicationThread mAppThread = new ApplicationThread();
     final Looper mLooper = Looper.myLooper();
@@ -1468,12 +1478,14 @@ public final boolean queueIdle() {
     private static class ResourcesKey {
         final private String mResDir;
         final private float mScale;
+        final private boolean mIsThemeable;
         final private int mHash;
 
-        ResourcesKey(String resDir, float scale) {
+        ResourcesKey(String resDir, float scale, boolean isThemeable) {
             mResDir = resDir;
             mScale = scale;
-            mHash = mResDir.hashCode() << 2 + (int) (mScale * 2);
+            mIsThemeable = isThemeable;
+            mHash = mResDir.hashCode() << 3 + ((mIsThemeable ? 1 : 0) << 2) + (int) (mScale * 2);
         }
 
         @Override
@@ -1487,7 +1499,8 @@ public boolean equals(Object obj) {
                 return false;
             }
             ResourcesKey peer = (ResourcesKey) obj;
-            return mResDir.equals(peer.mResDir) && mScale == peer.mScale;
+            return mResDir.equals(peer.mResDir) && mScale == peer.mScale &&
+                    mIsThemeable == peer.mIsThemeable;
         }
     }
 
@@ -1518,6 +1531,18 @@ public static IPackageManager getPackageManager() {
         return sPackageManager;
     }
 
+    // NOTE: this method can return null if the SystemServer is still
+    // initializing (for example, of another SystemServer component is accessing
+    // a resources object)
+    public static IAssetRedirectionManager getAssetRedirectionManager() {
+        if (sAssetRedirectionManager != null) {
+            return sAssetRedirectionManager;
+        }
+        IBinder b = ServiceManager.getService("assetredirection");
+        sAssetRedirectionManager = IAssetRedirectionManager.Stub.asInterface(b);
+        return sAssetRedirectionManager;
+    }
+
     DisplayMetrics getDisplayMetricsLocked(CompatibilityInfo ci, boolean forceUpdate) {
         DisplayMetrics dm = mDisplayMetrics.get(ci);
         if (dm != null && !forceUpdate) {
@@ -1556,7 +1581,7 @@ Configuration applyConfigCompatMainThread(Configuration config, CompatibilityInf
      * null.
      */
     Resources getTopLevelResources(String resDir, CompatibilityInfo compInfo) {
-        ResourcesKey key = new ResourcesKey(resDir, compInfo.applicationScale);
+        ResourcesKey key = new ResourcesKey(resDir, compInfo.applicationScale, compInfo.isThemeable);
         Resources r;
         synchronized (mPackages) {
             // Resources is app scale dependent.
@@ -1582,10 +1607,23 @@ Resources getTopLevelResources(String resDir, CompatibilityInfo compInfo) {
         //}
 
         AssetManager assets = new AssetManager();
+        assets.setThemeSupport(compInfo.isThemeable);
         if (assets.addAssetPath(resDir) == 0) {
             return null;
         }
 
+        /* Attach theme information to the resulting AssetManager when appropriate. */
+        Configuration config = getConfiguration();
+        if (compInfo.isThemeable && config != null) {
+            if (config.customTheme == null) {
+                config.customTheme = CustomTheme.getBootTheme();
+            }
+
+            if (!TextUtils.isEmpty(config.customTheme.getThemePackageName())) {
+                attachThemeAssets(assets, config.customTheme);
+            }
+        }
+
         //Slog.i(TAG, "Resource: key=" + key + ", display metrics=" + metrics);
         DisplayMetrics metrics = getDisplayMetricsLocked(null, false);
         r = new Resources(assets, metrics, getConfiguration(), compInfo);
@@ -1611,6 +1649,81 @@ Resources getTopLevelResources(String resDir, CompatibilityInfo compInfo) {
         }
     }
 
+    private void detachThemeAssets(AssetManager assets) {
+        String themePackageName = assets.getThemePackageName();
+        int themeCookie = assets.getThemeCookie();
+        if (!TextUtils.isEmpty(themePackageName) && themeCookie != 0) {
+            assets.detachThemePath(themePackageName, themeCookie);
+            assets.setThemePackageName(null);
+            assets.setThemeCookie(0);
+            assets.clearRedirections();
+        }
+    }
+
+    /**
+     * Attach the necessary theme asset paths and meta information to convert an
+     * AssetManager to being globally "theme-aware".
+     *
+     * @param assets
+     * @param theme
+     * @return true if the AssetManager is now theme-aware; false otherwise
+     *         this can fail, for example, if the theme package has been
+     *         removed and the theme manager has yet to revert formally back to
+     *         the framework default.
+     */
+    private boolean attachThemeAssets(AssetManager assets, CustomTheme theme) {
+        IAssetRedirectionManager rm = getAssetRedirectionManager();
+        if (rm == null) {
+            return false;
+        }
+        PackageInfo pi = null;
+        try {
+            pi = getPackageManager().getPackageInfo(theme.getThemePackageName(), 0, 0);
+        } catch (RemoteException e) {
+        }
+        if (pi != null && pi.applicationInfo != null && pi.themeInfos != null) {
+            String themeResDir = pi.applicationInfo.publicSourceDir;
+            int cookie = assets.attachThemePath(themeResDir);
+            if (cookie != 0) {
+                String themePackageName = theme.getThemePackageName();
+                String themeId = theme.getThemeId();
+                int N = assets.getBasePackageCount();
+                for (int i = 0; i < N; i++) {
+                    String packageName = assets.getBasePackageName(i);
+                    int packageId = assets.getBasePackageId(i);
+
+                    /*
+                     * For now, we only consider redirections coming from the
+                     * framework or regular android packages. This excludes
+                     * themes and other specialty APKs we are not aware of.
+                     */
+                    if (packageId != 0x01 && packageId != 0x7f) {
+                        continue;
+                    }
+
+                    try {
+                        PackageRedirectionMap map = rm.getPackageRedirectionMap(themePackageName, themeId,
+                                packageName);
+                        if (map != null) {
+                            assets.addRedirections(map);
+                        }
+                    } catch (RemoteException e) {
+                        Log.e(TAG, "Failure accessing package redirection map, removing theme support.");
+                        assets.detachThemePath(themePackageName, cookie);
+                        return false;
+                    }
+                }
+
+                assets.setThemePackageName(theme.getThemePackageName());
+                assets.setThemeCookie(cookie);
+                return true;
+            } else {
+                Log.e(TAG, "Unable to attach theme assets at " + themeResDir);
+            }
+        }
+        return false;
+    }
+
     /**
      * Creates the top level resources for the given package.
      */
@@ -2056,6 +2169,16 @@ private Activity performLaunchActivity(ActivityClientRecord r, Intent customInte
 
         } catch (Exception e) {
             if (!mInstrumentation.onException(activity, e)) {
+                if (e instanceof InflateException) {
+                    Log.e(TAG, "Failed to inflate", e);
+                    String pkg = null;
+                    if (r.packageInfo != null && !TextUtils.isEmpty(r.packageInfo.getPackageName())) {
+                        pkg = r.packageInfo.getPackageName();
+                    }
+                    Intent intent = new Intent(Intent.ACTION_APP_LAUNCH_FAILURE,
+                            (pkg != null)? Uri.fromParts("package", pkg, null) : null);
+                    getSystemContext().sendBroadcast(intent);
+                }
                 throw new RuntimeException(
                     "Unable to start activity " + component
                     + ": " + e.toString(), e);
@@ -3635,7 +3758,7 @@ public final void applyConfigurationToResources(Configuration config) {
         }
     }
 
-    final boolean applyConfigurationToResourcesLocked(Configuration config,
+    final int applyConfigurationToResourcesLocked(Configuration config,
             CompatibilityInfo compat) {
         if (mResConfiguration == null) {
             mResConfiguration = new Configuration();
@@ -3643,7 +3766,7 @@ final boolean applyConfigurationToResourcesLocked(Configuration config,
         if (!mResConfiguration.isOtherSeqNewer(config) && compat == null) {
             if (DEBUG_CONFIGURATION) Slog.v(TAG, "Skipping new config: curSeq="
                     + mResConfiguration.seq + ", newSeq=" + config.seq);
-            return false;
+            return 0;
         }
         int changes = mResConfiguration.updateFrom(config);
         DisplayMetrics dm = getDisplayMetricsLocked(null, true);
@@ -3676,7 +3799,20 @@ final boolean applyConfigurationToResourcesLocked(Configuration config,
             if (r != null) {
                 if (DEBUG_CONFIGURATION) Slog.v(TAG, "Changing resources "
                         + r + " config to: " + config);
+                boolean themeChanged = (changes & ActivityInfo.CONFIG_THEME_RESOURCE) != 0;
+                if (themeChanged) {
+                    AssetManager am = r.getAssets();
+                    if (am.hasThemeSupport()) {
+                        detachThemeAssets(am);
+                        if (!TextUtils.isEmpty(config.customTheme.getThemePackageName())) {
+                            attachThemeAssets(am, config.customTheme);
+                        }
+                    }
+                }
                 r.updateConfiguration(config, dm, compat);
+                if (themeChanged) {
+                    r.updateStringCache();
+                }
                 //Slog.i(TAG, "Updated app resources " + v.getKey()
                 //        + " " + r + ": " + r.getConfiguration());
             } else {
@@ -3685,7 +3821,7 @@ final boolean applyConfigurationToResourcesLocked(Configuration config,
             }
         }
         
-        return changes != 0;
+        return changes;
     }
 
     final Configuration applyCompatConfiguration() {
@@ -3706,6 +3842,8 @@ final void handleConfigurationChanged(Configuration config, CompatibilityInfo co
         ArrayList callbacks = null;
         int configDiff = 0;
 
+        int diff = 0;
+
         synchronized (mPackages) {
             if (mPendingConfiguration != null) {
                 if (!mPendingConfiguration.isOtherSeqNewer(config)) {
@@ -3721,7 +3859,7 @@ final void handleConfigurationChanged(Configuration config, CompatibilityInfo co
             if (DEBUG_CONFIGURATION) Slog.v(TAG, "Handle configuration changed: "
                     + config);
         
-            applyConfigurationToResourcesLocked(config, compat);
+            diff = applyConfigurationToResourcesLocked(config, compat);
             
             if (mConfiguration == null) {
                 mConfiguration = new Configuration();
@@ -3743,7 +3881,20 @@ final void handleConfigurationChanged(Configuration config, CompatibilityInfo co
         if (callbacks != null) {
             final int N = callbacks.size();
             for (int i=0; i");
 
         Looper.prepareMainLooper();
-        if (sMainThreadHandler == null) {
-            sMainThreadHandler = new Handler();
-        }
 
         ActivityThread thread = new ActivityThread();
         thread.attach(false);
 
+        if (sMainThreadHandler == null) {
+            sMainThreadHandler = thread.getHandler();
+        }
+
         AsyncTask.init();
 
         if (false) {
diff --git a/core/java/android/app/ApplicationPackageManager.java b/core/java/android/app/ApplicationPackageManager.java
index 191a69612a1..17f82d78c3a 100644
--- a/core/java/android/app/ApplicationPackageManager.java
+++ b/core/java/android/app/ApplicationPackageManager.java
@@ -421,6 +421,16 @@ public List getInstalledPackages(int flags) {
         }
     }
 
+    @SuppressWarnings("unchecked")
+    @Override
+    public List getInstalledThemePackages() {
+        try {
+            return mPM.getInstalledThemePackages();
+        } catch (RemoteException e) {
+            throw new RuntimeException("Package manager has died", e);
+        }
+    }
+
     @SuppressWarnings("unchecked")
     @Override
     public List getInstalledApplications(int flags) {
diff --git a/core/java/android/app/ContextImpl.java b/core/java/android/app/ContextImpl.java
index b902550d145..50fe4ed4fda 100644
--- a/core/java/android/app/ContextImpl.java
+++ b/core/java/android/app/ContextImpl.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2006 The Android Open Source Project
+ * This code has been modified.  Portions copyright (C) 2010, T-Mobile USA, Inc.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -18,15 +19,17 @@
 
 import com.android.internal.policy.PolicyManager;
 
+import android.accounts.AccountManager;
+import android.accounts.IAccountManager;
 import android.content.BroadcastReceiver;
 import android.content.ComponentName;
 import android.content.ContentResolver;
 import android.content.Context;
 import android.content.ContextWrapper;
 import android.content.IContentProvider;
+import android.content.IIntentReceiver;
 import android.content.Intent;
 import android.content.IntentFilter;
-import android.content.IIntentReceiver;
 import android.content.IntentSender;
 import android.content.ReceiverCallNotAllowedException;
 import android.content.ServiceConnection;
@@ -36,6 +39,8 @@
 import android.content.pm.PackageManager;
 import android.content.res.AssetManager;
 import android.content.res.CompatibilityInfo;
+import android.content.res.Configuration;
+import android.content.res.CustomTheme;
 import android.content.res.Resources;
 import android.database.DatabaseErrorHandler;
 import android.database.sqlite.SQLiteDatabase;
@@ -361,10 +366,10 @@ public Object createService(ContextImpl ctx) {
                     return PolicyManager.makeNewLayoutInflater(ctx.getOuterContext());
                 }});
 
-        registerService(LOCATION_SERVICE, new StaticServiceFetcher() {
-                public Object createStaticService() {
+        registerService(LOCATION_SERVICE, new ServiceFetcher() {
+                public Object createService(ContextImpl ctx) {
                     IBinder b = ServiceManager.getService(LOCATION_SERVICE);
-                    return new LocationManager(ILocationManager.Stub.asInterface(b));
+                    return new LocationManager(ctx, ILocationManager.Stub.asInterface(b));
                 }});
 
         registerService(NETWORK_POLICY_SERVICE, new ServiceFetcher() {
@@ -511,6 +516,20 @@ public Resources getResources() {
         return mResources;
     }
 
+    /**
+     * Refresh resources object which may have been changed by a theme
+     * configuration change.
+     */
+    /* package */ void refreshResourcesIfNecessary() {
+        if (mResources == Resources.getSystem()) {
+            return;
+        }
+
+        if (mPackageInfo.mCompatibilityInfo.get().isThemeable) {
+            mTheme = null;
+        }
+    }
+
     @Override
     public PackageManager getPackageManager() {
         if (mPackageManager != null) {
diff --git a/core/java/android/app/DatePickerDialog.java b/core/java/android/app/DatePickerDialog.java
index 3f0b4d4add9..d1688004e52 100644
--- a/core/java/android/app/DatePickerDialog.java
+++ b/core/java/android/app/DatePickerDialog.java
@@ -33,8 +33,8 @@
 /**
  * A simple dialog containing an {@link android.widget.DatePicker}.
  *
- * 

See the Date Picker - * tutorial.

+ *

See the Pickers + * guide.

*/ public class DatePickerDialog extends AlertDialog implements OnClickListener, OnDateChangedListener { diff --git a/core/java/android/app/DownloadManager.java b/core/java/android/app/DownloadManager.java index 17700f91213..0b1c5240b3b 100644 --- a/core/java/android/app/DownloadManager.java +++ b/core/java/android/app/DownloadManager.java @@ -344,6 +344,13 @@ public static class Request { */ public static final int NETWORK_WIFI = 1 << 1; + /** + * Bit flag for {@link #setAllowedNetworkTypes} corresponding to + * {@link ConnectivityManager#TYPE_BLUETOOTH}. + * @hide + */ + public static final int NETWORK_BLUETOOTH = 1 << 2; + private Uri mUri; private Uri mDestinationUri; private List> mRequestHeaders = new ArrayList>(); diff --git a/core/java/android/app/IAlarmManager.aidl b/core/java/android/app/IAlarmManager.aidl old mode 100755 new mode 100644 diff --git a/core/java/android/app/IThumbnailReceiver.aidl b/core/java/android/app/IThumbnailReceiver.aidl old mode 100755 new mode 100644 diff --git a/core/java/android/app/MediaRouteButton.java b/core/java/android/app/MediaRouteButton.java index c34c1639dcc..b0bfe743fd8 100644 --- a/core/java/android/app/MediaRouteButton.java +++ b/core/java/android/app/MediaRouteButton.java @@ -60,7 +60,7 @@ public MediaRouteButton(Context context) { } public MediaRouteButton(Context context, AttributeSet attrs) { - this(context, null, com.android.internal.R.attr.mediaRouteButtonStyle); + this(context, attrs, com.android.internal.R.attr.mediaRouteButtonStyle); } public MediaRouteButton(Context context, AttributeSet attrs, int defStyleAttr) { diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java index ceb8cde5087..cb83dc2cdcb 100644 --- a/core/java/android/app/Notification.java +++ b/core/java/android/app/Notification.java @@ -897,12 +897,16 @@ public String toString() { * Builder class for {@link Notification} objects. * * Provides a convenient way to set the various fields of a {@link Notification} and generate - * content views using the platform's notification layout template. + * content views using the platform's notification layout template. If your app supports + * versions of Android as old as API level 4, you can instead use + * {@link android.support.v4.app.NotificationCompat.Builder NotificationCompat.Builder}, + * available in the Android Support + * library. * - * Example: + *

Example: * *

-     * Notification noti = new Notification.Builder()
+     * Notification noti = new Notification.Builder(mContext)
      *         .setContentTitle("New mail from " + sender.toString())
      *         .setContentText(subject)
      *         .setSmallIcon(R.drawable.new_mail)
@@ -1731,6 +1735,9 @@ public BigPictureStyle setSummaryText(CharSequence cs) {
             return this;
         }
 
+        /**
+         * Provide the bitmap to be used as the payload for the BigPicture notification.
+         */
         public BigPictureStyle bigPicture(Bitmap b) {
             mPicture = b;
             return this;
@@ -1809,6 +1816,10 @@ public BigTextStyle setSummaryText(CharSequence cs) {
             return this;
         }
 
+        /**
+         * Provide the longer text to be displayed in the big form of the
+         * template in place of the content text.
+         */
         public BigTextStyle bigText(CharSequence cs) {
             mBigText = cs;
             return this;
@@ -1889,6 +1900,9 @@ public InboxStyle setSummaryText(CharSequence cs) {
             return this;
         }
 
+        /**
+         * Append a line to the digest section of the Inbox notification.
+         */
         public InboxStyle addLine(CharSequence cs) {
             mTexts.add(cs);
             return this;
diff --git a/core/java/android/app/Service.java b/core/java/android/app/Service.java
index cb43d4c527f..02cf3aa1333 100644
--- a/core/java/android/app/Service.java
+++ b/core/java/android/app/Service.java
@@ -142,7 +142,7 @@
  * to the service.  The service will remain running as long as the connection
  * is established (whether or not the client retains a reference on the
  * service's IBinder).  Usually the IBinder returned is for a complex
- * interface that has been written
+ * interface that has been written
  * in aidl.
  * 
  * 

A service can be both started and have connections bound to it. In such @@ -473,7 +473,7 @@ public void onTrimMemory(int level) { * Return the communication channel to the service. May return null if * clients can not bind to the service. The returned * {@link android.os.IBinder} is usually for a complex interface - * that has been described using + * that has been described using * aidl. * *

Note that unlike other application components, calls on to the diff --git a/core/java/android/app/TimePickerDialog.java b/core/java/android/app/TimePickerDialog.java index d773bc8a444..952227fe0c5 100644 --- a/core/java/android/app/TimePickerDialog.java +++ b/core/java/android/app/TimePickerDialog.java @@ -30,8 +30,8 @@ /** * A dialog that prompts the user for the time of day using a {@link TimePicker}. * - *

See the Time Picker - * tutorial.

+ *

See the Pickers + * guide.

*/ public class TimePickerDialog extends AlertDialog implements OnClickListener, OnTimeChangedListener { diff --git a/core/java/android/app/VibrationPickerDialog.java b/core/java/android/app/VibrationPickerDialog.java new file mode 100644 index 00000000000..d88d2b2987e --- /dev/null +++ b/core/java/android/app/VibrationPickerDialog.java @@ -0,0 +1,190 @@ + +package android.app; + +import android.app.Activity; +import android.app.DialogFragment; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.database.Cursor; +import android.media.VibrationPattern; +import android.net.Uri; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.os.Vibrator; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.AdapterView; +import android.widget.ListView; +import android.widget.SimpleCursorAdapter; +import android.widget.TextView; + +import java.io.Serializable; + +import com.android.internal.R; + +public class VibrationPickerDialog extends DialogFragment { + + private static final String TAG = "VibrationPickerDialog"; + + private final int VIB_OK = 10; + private final int VIB_CANCEL = 11; + private final int VIB_DEL = 12; + + private boolean mIsDel; + private Context mContext; + private Handler mHandler; + private Vibrator mVibrator; + private AlertDialog.Builder mBuilder; + private VibrationPattern mPattern; + + public static VibrationPickerDialog newInstance(Handler handler, boolean isDel, + String selectedUri) { + VibrationPickerDialog vpd = new VibrationPickerDialog(); + + Bundle args = new Bundle(); + args.putBoolean("isdel", isDel); + if (selectedUri == null) { + args.putString("uri", ""); + } else { + args.putString("uri", selectedUri); + } + args.putSerializable("handler", new HandlerHolder(handler)); + vpd.setArguments(args); + return vpd; + } + + @Override + public Dialog onCreateDialog(Bundle savedInstanceState) { + mIsDel = getArguments().getBoolean("isdel"); + String mUriString = getArguments().getString("uri"); + mHandler = ((HandlerHolder) getArguments().getSerializable("handler")).getHandler(); + mContext = getActivity(); + mVibrator = (Vibrator) mContext.getSystemService(Context.VIBRATOR_SERVICE); + + final Uri allVibrations = Uri.parse(VibrationPattern.URI); + final Cursor vibrations = mContext.getContentResolver(). + query(allVibrations, null, null, null, null); + + vibrations.moveToFirst(); + int ID = -1; + if (!mUriString.isEmpty()) { + Uri mUri = Uri.parse(mUriString); + do { + try { + if (Integer.parseInt(mUri.getLastPathSegment()) == vibrations.getInt(0)) { + ID = vibrations.getPosition(); + } + } catch (Exception ex) { + // nothing to do here + } + } while (vibrations.moveToNext()); + } + final int selectedID = ID; + final SimpleCursorAdapter adapter = new SimpleCursorAdapter(mContext, + android.R.layout.simple_list_item_single_choice, + vibrations, + new String[] { + "name" + }, + new int[] { + android.R.id.text1 + }, 0) { + + @Override + public Object getItem(int pos) { + vibrations.moveToPosition(pos); + int id = vibrations.getInt(0); + setSelectedVibration(new VibrationPattern( + Uri.parse(VibrationPattern.URI + "/" + id), mContext)); + return getSelectedVibration(); + } + }; + + LayoutInflater factory = LayoutInflater.from(mContext); + final View vibListView = factory.inflate(R.layout.vibration_picker_dialog, null); + + return new AlertDialog.Builder(mContext) + .setTitle( + mIsDel ? R.string.vibration_picker_del_title + : R.string.vibration_picker_title) + .setIcon( + mIsDel ? R.drawable.ic_dialog_alert + : 0) + .setView(vibListView) + .setSingleChoiceItems(adapter, selectedID, + new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + ((VibrationPattern) adapter.getItem(which)).play(); + } + }) + .setPositiveButton(mIsDel ? R.string.delete : R.string.ok, + new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int whichButton) { + if (mIsDel) { + delVib(getSelectedVibration()); + adapter.notifyDataSetChanged(); + } else { + selectVib(getSelectedVibration()); + } + stopAllVibrations(); + } + }) + .setNegativeButton(R.string.cancel, + new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int whichButton) { + stopAllVibrations(); + sendCancel(); + } + }) + .create(); + } + + private void selectVib(VibrationPattern vib) { + final Message m = new Message(); + m.obj = vib; + m.what = VIB_OK; + mHandler.sendMessage(m); + } + + private void sendCancel() { + final Message m = new Message(); + m.what = VIB_CANCEL; + mHandler.sendMessage(m); + } + + private void delVib(VibrationPattern vib) { + final Message m = new Message(); + m.obj = vib; + m.what = VIB_DEL; + mHandler.sendMessage(m); + } + + public void stopAllVibrations() { + if (mVibrator != null) { + mVibrator.cancel(); + } + } + + private void setSelectedVibration(VibrationPattern pattern) { + mPattern = pattern; + } + + private VibrationPattern getSelectedVibration() { + return mPattern; + } + + static class HandlerHolder implements Serializable { + Handler tHandler; + + public HandlerHolder(Handler handler) { + tHandler = handler; + } + + public Handler getHandler() { + return tHandler; + } + } +} diff --git a/core/java/android/app/backup/FullBackup.java b/core/java/android/app/backup/FullBackup.java index d7f1c9f0fab..f859599e18c 100644 --- a/core/java/android/app/backup/FullBackup.java +++ b/core/java/android/app/backup/FullBackup.java @@ -64,7 +64,9 @@ static public native int backupToTar(String packageName, String domain, /** * Copy data from a socket to the given File location on permanent storage. The - * modification time and access mode of the resulting file will be set if desired. + * modification time and access mode of the resulting file will be set if desired, + * although group/all rwx modes will be stripped: the restored file will not be + * accessible from outside the target application even if the original file was. * If the {@code type} parameter indicates that the result should be a directory, * the socket parameter may be {@code null}; even if it is valid, no data will be * read from it in this case. @@ -79,8 +81,9 @@ static public native int backupToTar(String packageName, String domain, * @param type Must be either {@link BackupAgent#TYPE_FILE} for ordinary file data * or {@link BackupAgent#TYPE_DIRECTORY} for a directory. * @param mode Unix-style file mode (as used by the chmod(2) syscall) to be set on - * the output file or directory. If this parameter is negative then neither - * the mode nor the mtime parameters will be used. + * the output file or directory. group/all rwx modes are stripped even if set + * in this parameter. If this parameter is negative then neither + * the mode nor the mtime values will be applied to the restored file. * @param mtime A timestamp in the standard Unix epoch that will be imposed as the * last modification time of the output file. if the {@code mode} parameter is * negative then this parameter will be ignored. @@ -105,8 +108,6 @@ static public void restoreFile(ParcelFileDescriptor data, if (!parent.exists()) { // in practice this will only be for the default semantic directories, // and using the default mode for those is appropriate. - // TODO: support the edge case of apps that have adjusted the - // permissions on these core directories parent.mkdirs(); } out = new FileOutputStream(outFile); @@ -146,6 +147,8 @@ static public void restoreFile(ParcelFileDescriptor data, // Now twiddle the state to match the backup, assuming all went well if (mode >= 0 && outFile != null) { try { + // explicitly prevent emplacement of files accessible by outside apps + mode &= 0700; Libcore.os.chmod(outFile.getPath(), (int)mode); } catch (ErrnoException e) { e.rethrowAsIOException(); diff --git a/core/java/android/appwidget/AppWidgetProvider.java b/core/java/android/appwidget/AppWidgetProvider.java old mode 100755 new mode 100644 diff --git a/core/java/android/bluetooth/BluetoothDevice.java b/core/java/android/bluetooth/BluetoothDevice.java index 56e17354cca..41e0184bc1b 100644 --- a/core/java/android/bluetooth/BluetoothDevice.java +++ b/core/java/android/bluetooth/BluetoothDevice.java @@ -321,6 +321,9 @@ public final class BluetoothDevice implements Parcelable { /**@hide*/ public static final int REQUEST_TYPE_PHONEBOOK_ACCESS = 2; + /**@hide*/ + public static final int REQUEST_TYPE_MESSAGE_ACCESS = 3; + /** * Used as an extra field in {@link #ACTION_CONNECTION_ACCESS_REQUEST} intents, * Contains package name to return reply intent to. @@ -622,9 +625,9 @@ public boolean setAlias(String alias) { * @hide */ public String getAliasName() { - String name = getAlias(); + String name = getName(); if (name == null) { - name = getName(); + name = getAlias(); } return name; } diff --git a/core/java/android/bluetooth/BluetoothUuid.java b/core/java/android/bluetooth/BluetoothUuid.java index 59622351814..1a0bd0202b1 100644 --- a/core/java/android/bluetooth/BluetoothUuid.java +++ b/core/java/android/bluetooth/BluetoothUuid.java @@ -56,6 +56,10 @@ public final class BluetoothUuid { ParcelUuid.fromString("00001105-0000-1000-8000-00805f9b34fb"); public static final ParcelUuid Hid = ParcelUuid.fromString("00001124-0000-1000-8000-00805f9b34fb"); + public static final ParcelUuid MessageAccessServer = + ParcelUuid.fromString("00001132-0000-1000-8000-00805f9b34fb"); + public static final ParcelUuid MessageNotificationServer = + ParcelUuid.fromString("00001133-0000-1000-8000-00805f9b34fb"); public static final ParcelUuid PANU = ParcelUuid.fromString("00001115-0000-1000-8000-00805F9B34FB"); public static final ParcelUuid NAP = @@ -67,7 +71,7 @@ public final class BluetoothUuid { public static final ParcelUuid[] RESERVED_UUIDS = { AudioSink, AudioSource, AdvAudioDist, HSP, Handsfree, AvrcpController, AvrcpTarget, - ObexObjectPush, PANU, NAP}; + ObexObjectPush, MessageAccessServer, MessageNotificationServer, PANU, NAP}; public static boolean isAudioSource(ParcelUuid uuid) { return uuid.equals(AudioSource); @@ -131,6 +135,14 @@ public static boolean isUuidPresent(ParcelUuid[] uuidArray, ParcelUuid uuid) { return false; } + public static boolean isMessageAccessServer(ParcelUuid uuid) { + return uuid.equals(MessageAccessServer); + } + + public static boolean isMessageNotificationServer(ParcelUuid uuid) { + return uuid.equals(MessageNotificationServer); + } + /** * Returns true if there any common ParcelUuids in uuidA and uuidB. * diff --git a/core/java/android/bluetooth/HeadsetBase.java b/core/java/android/bluetooth/HeadsetBase.java index 9ef2eb5f3ce..54ed5eda04f 100644 --- a/core/java/android/bluetooth/HeadsetBase.java +++ b/core/java/android/bluetooth/HeadsetBase.java @@ -109,6 +109,12 @@ public HeadsetBase(PowerManager pm, BluetoothAdapter adapter, private native void initializeNativeDataNative(int socketFd); + // interface for dealing with special input situations + public interface SpecialPDUInputHandler { + void handleInput(String input); + } + public SpecialPDUInputHandler specialPDUInputHandler = null; + /* Process an incoming AT command line */ protected void handleInput(String input) { @@ -158,10 +164,20 @@ public void startEventThread() { public void run() { int last_read_error; while (!mEventThreadInterrupted) { - String input = readNative(500); - if (input != null) { - handleInput(input); + + String input; + if (null == specialPDUInputHandler) { + input = readNative(500); + if (input != null) { + handleInput(input); + } } else { + input = readNativePDUStream((500)); + if (input != null) { + specialPDUInputHandler.handleInput(input); + } + } + if (null == input) { last_read_error = getLastReadStatusNative(); if (last_read_error != 0) { Log.i(TAG, "headset read error " + last_read_error); @@ -181,6 +197,7 @@ public void run() { } private native String readNative(int timeout_ms); + private native String readNativePDUStream(int timeout_ms); private native int getLastReadStatusNative(); private void stopEventThread() { @@ -275,6 +292,15 @@ public synchronized boolean sendURC(String urc) { return true; } private native boolean sendURCNative(String urc); + private native boolean sendURCNativeChars(String urc); + + public synchronized boolean sendURCChars(String urc) { + if (urc.length() > 0) { + boolean ret = sendURCNativeChars(urc); + return ret; + } + return true; + } private synchronized void acquireWakeLock() { if (!mWakeLock.isHeld()) { diff --git a/core/java/android/content/BroadcastReceiver.java b/core/java/android/content/BroadcastReceiver.java index 9ddb2a6f7bd..446f1af4117 100644 --- a/core/java/android/content/BroadcastReceiver.java +++ b/core/java/android/content/BroadcastReceiver.java @@ -735,7 +735,7 @@ public final PendingResult getPendingResult() { /** * Control inclusion of debugging help for mismatched - * calls to {@ Context#registerReceiver(BroadcastReceiver, IntentFilter) + * calls to {@link Context#registerReceiver(BroadcastReceiver, IntentFilter) * Context.registerReceiver()}. * If called with true, before given to registerReceiver(), then the * callstack of the following {@link Context#unregisterReceiver(BroadcastReceiver) diff --git a/core/java/android/content/ContentResolver.java b/core/java/android/content/ContentResolver.java index 0a5a26a979d..0da80f3530f 100644 --- a/core/java/android/content/ContentResolver.java +++ b/core/java/android/content/ContentResolver.java @@ -516,7 +516,7 @@ public final OutputStream openOutputStream(Uri uri, String mode) * ContentProvider.openFile}. * @return Returns a new ParcelFileDescriptor pointing to the file. You * own this descriptor and are responsible for closing it when done. - * @throws FileNotFoundException Throws FileNotFoundException of no + * @throws FileNotFoundException Throws FileNotFoundException if no * file exists under the URI or the mode is invalid. * @see #openAssetFileDescriptor(Uri, String) */ @@ -1047,9 +1047,9 @@ public final IContentProvider acquireProvider(Uri uri) { if (!SCHEME_CONTENT.equals(uri.getScheme())) { return null; } - String auth = uri.getAuthority(); + final String auth = uri.getAuthority(); if (auth != null) { - return acquireProvider(mContext, uri.getAuthority()); + return acquireProvider(mContext, auth); } return null; } @@ -1066,9 +1066,9 @@ public final IContentProvider acquireExistingProvider(Uri uri) { if (!SCHEME_CONTENT.equals(uri.getScheme())) { return null; } - String auth = uri.getAuthority(); + final String auth = uri.getAuthority(); if (auth != null) { - return acquireExistingProvider(mContext, uri.getAuthority()); + return acquireExistingProvider(mContext, auth); } return null; } diff --git a/core/java/android/content/ContentService.java b/core/java/android/content/ContentService.java index f827c3de43c..1a07504f2fb 100644 --- a/core/java/android/content/ContentService.java +++ b/core/java/android/content/ContentService.java @@ -132,6 +132,9 @@ public boolean onTransact(int code, Parcel data, Parcel reply, int flags) /*package*/ ContentService(Context context, boolean factoryTest) { mContext = context; mFactoryTest = factoryTest; + } + + public void systemReady() { getSyncManager(); } @@ -524,7 +527,7 @@ public void removeStatusChangeListener(ISyncStatusObserver callback) { } } - public static IContentService main(Context context, boolean factoryTest) { + public static ContentService main(Context context, boolean factoryTest) { ContentService service = new ContentService(context, factoryTest); ServiceManager.addService(ContentResolver.CONTENT_SERVICE_NAME, service); return service; diff --git a/core/java/android/content/IIntentReceiver.aidl b/core/java/android/content/IIntentReceiver.aidl old mode 100755 new mode 100644 diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java index 3fdf451dcff..58683034c23 100644 --- a/core/java/android/content/Intent.java +++ b/core/java/android/content/Intent.java @@ -1,5 +1,6 @@ /* * Copyright (C) 2006 The Android Open Source Project + * This code has been modified. Portions copyright (C) 2010, T-Mobile USA, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -2284,6 +2285,19 @@ public static Intent createChooser(Intent target, CharSequence title) { public static final String ACTION_USER_SWITCHED = "android.intent.action.USER_SWITCHED"; + /** + * Broadcast Action: Indicate that unrecoverable error happened during app launch. + * Could indicate that curently applied theme is malicious. + * @hide + */ + public static final String ACTION_APP_LAUNCH_FAILURE = "com.tmobile.intent.action.APP_LAUNCH_FAILURE"; + + /** + * Broadcast Action: Request to reset the unrecoverable errors count to 0. + * @hide + */ + public static final String ACTION_APP_LAUNCH_FAILURE_RESET = "com.tmobile.intent.action.APP_LAUNCH_FAILURE_RESET"; + // --------------------------------------------------------------------- // --------------------------------------------------------------------- // Standard intent categories (see addCategory()). @@ -2452,6 +2466,14 @@ public static Intent createChooser(Intent target, CharSequence title) { @SdkConstant(SdkConstantType.INTENT_CATEGORY) public static final String CATEGORY_CAR_MODE = "android.intent.category.CAR_MODE"; + /** + * Used to indicate that a theme package has been installed or un-installed. + * + * @hide + */ + public static final String CATEGORY_THEME_PACKAGE_INSTALLED_STATE_CHANGE = + "com.tmobile.intent.category.THEME_PACKAGE_INSTALL_STATE_CHANGE"; + // --------------------------------------------------------------------- // --------------------------------------------------------------------- // Application launch intent categories (see addCategory()). diff --git a/core/java/android/content/SyncManager.java b/core/java/android/content/SyncManager.java index badcb03a0e4..9771cd9f095 100644 --- a/core/java/android/content/SyncManager.java +++ b/core/java/android/content/SyncManager.java @@ -17,6 +17,7 @@ package android.content; import com.android.internal.R; +import com.android.internal.app.ThemeUtils; import com.google.android.collect.Lists; import com.google.android.collect.Maps; @@ -136,6 +137,7 @@ public class SyncManager implements OnAccountsUpdateListener { private static final int MAX_SIMULTANEOUS_INITIALIZATION_SYNCS; private Context mContext; + private Context mUiContext; private static final AccountAndUser[] INITIAL_ACCOUNTS_ARRAY = new AccountAndUser[0]; @@ -191,6 +193,12 @@ public void onReceive(Context context, Intent intent) { } }; + private BroadcastReceiver mThemeChangeReceiver = new BroadcastReceiver() { + public void onReceive(Context context, Intent intent) { + mUiContext = null; + } + }; + private BroadcastReceiver mBackgroundDataSettingChanged = new BroadcastReceiver() { public void onReceive(Context context, Intent intent) { if (getConnectivityManager().getBackgroundDataSetting()) { @@ -398,6 +406,8 @@ public void onServiceChanged(SyncAdapterType type, boolean removed) { intentFilter.addAction(Intent.ACTION_USER_REMOVED); mContext.registerReceiver(mUserIntentReceiver, intentFilter); + ThemeUtils.registerThemeChangeReceiver(mContext, mThemeChangeReceiver); + if (!factoryTest) { mNotificationMgr = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); @@ -901,6 +911,13 @@ private void onUserRemoved(Intent intent) { } } + private Context getUiContext() { + if (mUiContext == null) { + mUiContext = ThemeUtils.createUiContext(mContext); + } + return mUiContext != null ? mUiContext : mContext; + } + /** * @hide */ @@ -2497,7 +2514,7 @@ private void installHandleTooManyDeletesNotification(Account account, String aut new Notification(R.drawable.stat_notify_sync_error, mContext.getString(R.string.contentServiceSync), System.currentTimeMillis()); - notification.setLatestEventInfo(mContext, + notification.setLatestEventInfo(getUiContext(), mContext.getString(R.string.contentServiceSyncNotificationTitle), String.format(tooManyDeletesDescFormat.toString(), authorityName), pendingIntent); diff --git a/core/java/android/content/pm/ActivityInfo.java b/core/java/android/content/pm/ActivityInfo.java index 6b16e7487fe..e057e39d939 100644 --- a/core/java/android/content/pm/ActivityInfo.java +++ b/core/java/android/content/pm/ActivityInfo.java @@ -1,5 +1,6 @@ /* * Copyright (C) 2007 The Android Open Source Project + * This code has been modified. Portions copyright (C) 2010, T-Mobile USA, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -320,6 +321,10 @@ public class ActivityInfo extends ComponentInfo * {@link android.R.attr#configChanges} attribute. */ public static final int CONFIG_ORIENTATION = 0x0080; + /** + * @hide + */ + public static final int CONFIG_THEME_RESOURCE = 0x008000; /** * Bit in {@link #configChanges} that indicates that the activity * can itself handle changes to the screen layout. Set from the diff --git a/core/java/android/content/pm/ApplicationInfo.java b/core/java/android/content/pm/ApplicationInfo.java index e1434b3bad6..e55ffacd5e6 100644 --- a/core/java/android/content/pm/ApplicationInfo.java +++ b/core/java/android/content/pm/ApplicationInfo.java @@ -1,5 +1,6 @@ /* * Copyright (C) 2007 The Android Open Source Project + * This code has been modified. Portions copyright (C) 2010, T-Mobile USA, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -431,6 +432,30 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { * @hide */ public int enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_DEFAULT; + /** + * Is given application theme agnostic, i.e. behaves properly when default theme is changed. + * {@hide} + */ + public boolean isThemeable = false; + + private static final String PLUTO_SCHEMA = "http://www.w3.org/2001/pluto.html"; + + /** + * @hide + */ + public static final String PLUTO_ISTHEMEABLE_ATTRIBUTE_NAME = "isThemeable"; + + /** + * @hide + */ + public static final String PLUTO_HANDLE_THEME_CONFIG_CHANGES_ATTRIBUTE_NAME = "handleThemeConfigChanges"; + + /** + * @hide + */ + public static boolean isPlutoNamespace(String namespace) { + return namespace != null && namespace.equalsIgnoreCase(PLUTO_SCHEMA); + } /** * For convenient access to package's install location. @@ -541,6 +566,7 @@ public ApplicationInfo(ApplicationInfo orig) { manageSpaceActivityName = orig.manageSpaceActivityName; descriptionRes = orig.descriptionRes; uiOptions = orig.uiOptions; + isThemeable = orig.isThemeable; } @@ -580,6 +606,7 @@ public void writeToParcel(Parcel dest, int parcelableFlags) { dest.writeString(backupAgentName); dest.writeInt(descriptionRes); dest.writeInt(uiOptions); + dest.writeInt(isThemeable? 1 : 0); } public static final Parcelable.Creator CREATOR @@ -618,6 +645,7 @@ private ApplicationInfo(Parcel source) { backupAgentName = source.readString(); descriptionRes = source.readInt(); uiOptions = source.readInt(); + isThemeable = source.readInt() != 0; } /** diff --git a/core/java/android/content/pm/BaseThemeInfo.java b/core/java/android/content/pm/BaseThemeInfo.java new file mode 100644 index 00000000000..0171137bac1 --- /dev/null +++ b/core/java/android/content/pm/BaseThemeInfo.java @@ -0,0 +1,244 @@ +/* + * Copyright (C) 2010, T-Mobile USA, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.content.pm; + +import android.os.Parcelable; +import android.os.Parcel; +import android.util.Log; +import android.util.AttributeSet; +import android.content.res.Resources; + +/** + * @hide + */ +public class BaseThemeInfo implements Parcelable { + + /** + * Wallpaper drawable. + * + * @see wallpaperImage attribute + */ + public int wallpaperResourceId; + + /** + * The resource id of theme thumbnail. + * Specifies a theme thumbnail image resource as @drawable/foo. + * + * @see thumbnail attribute + * + */ + public int thumbnailResourceId; + + /** + * The theme id, which does not change when the theme is modified. + * Specifies an Android UI Style using style name. + * + * @see themeId attribute + * + */ + public String themeId; + + /** + * The style resource id of Android UI Style, supplied by the resource commpiler. + * Specifies an Android UI Style id. + * + * @see styleId attribute + * + */ + public int styleResourceId = 0; + + /** + * The name of the theme (as displayed by UI). + * + * @see name attribute + * + */ + public String name; + + /** + * The name of the call ringtone audio file. + * Specifies a relative path in assets subfolder. + * If the parent's name is "locked" - DRM protected. + * + * @see ringtoneFileName attribute + * + */ + public String ringtoneFileName; + + /** + * The name of the call ringtone as shown to user. + * + * @see ringtoneName attribute + * + */ + public String ringtoneName; + + /** + * The name of the notification ringtone audio file. + * Specifies a relative path in assets subfolder. + * If the parent's name is "locked" - DRM protected. + * + * @see notificationRingtoneFileName attribute + * + */ + public String notificationRingtoneFileName; + + /** + * The name of the notification ringtone as shown to user. + * + * @see notificationRingtoneName attribute + * + */ + public String notificationRingtoneName; + + /** + * The author name of the theme package. + * + * @see author attribute + * + */ + public String author; + + /** + * The copyright text. + * + * @see copyright attribute + * + */ + public String copyright; + + /** + * {@hide} + */ + // There is no corresposponding flag in manifest file + // This flag is set to true iff any media resource is DRM protected + public boolean isDrmProtected = false; + + /** + * The name of the "main" theme style (as displayed by UI). + * + * @see themeStyleName attribute + * + */ + public String themeStyleName; + + /** + * Preview image drawable. + * + * @see preview attribute + */ + public int previewResourceId; + + /** + * The name of a sound pack. + * + * @see soundpack attribute + * + */ + public String soundPackName; + + + private static final String LOCKED_NAME = "locked/"; + + /* + * Describe the kinds of special objects contained in this Parcelable's + * marshalled representation. + * + * @return a bitmask indicating the set of special object types marshalled + * by the Parcelable. + * + * @see android.os.Parcelable#describeContents() + */ + public int describeContents() { + return 0; + } + + /* + * Flatten this object in to a Parcel. + * + * @param dest The Parcel in which the object should be written. + * @param flags Additional flags about how the object should be written. + * May be 0 or {@link #PARCELABLE_WRITE_RETURN_VALUE}. + * + * @see android.os.Parcelable#writeToParcel(android.os.Parcel, int) + */ + public void writeToParcel(Parcel dest, int flags) { + dest.writeInt(wallpaperResourceId); + dest.writeInt(thumbnailResourceId); + dest.writeString(themeId); + dest.writeInt(styleResourceId); + dest.writeString(name); + dest.writeString(ringtoneFileName); + dest.writeString(notificationRingtoneFileName); + dest.writeString(ringtoneName); + dest.writeString(notificationRingtoneName); + dest.writeString(author); + dest.writeString(copyright); + dest.writeInt(isDrmProtected? 1 : 0); + dest.writeString(soundPackName); + dest.writeString(themeStyleName); + dest.writeInt(previewResourceId); + } + + /** @hide */ + public static final Parcelable.Creator CREATOR + = new Parcelable.Creator() { + public BaseThemeInfo createFromParcel(Parcel source) { + return new BaseThemeInfo(source); + } + + public BaseThemeInfo[] newArray(int size) { + return new BaseThemeInfo[size]; + } + }; + + /** @hide */ + public final String getResolvedString(Resources res, AttributeSet attrs, int index) { + int resId = attrs.getAttributeResourceValue(index, 0); + if (resId !=0 ) { + return res.getString(resId); + } + return attrs.getAttributeValue(index); + } + + protected BaseThemeInfo() { + } + + protected BaseThemeInfo(Parcel source) { + wallpaperResourceId = source.readInt(); + thumbnailResourceId = source.readInt(); + themeId = source.readString(); + styleResourceId = source.readInt(); + name = source.readString(); + ringtoneFileName = source.readString(); + notificationRingtoneFileName = source.readString(); + ringtoneName = source.readString(); + notificationRingtoneName = source.readString(); + author = source.readString(); + copyright = source.readString(); + isDrmProtected = (source.readInt() != 0); + soundPackName = source.readString(); + themeStyleName = source.readString(); + previewResourceId = source.readInt(); + } + + protected void changeDrmFlagIfNeeded(String resourcePath) { + if (resourcePath != null && resourcePath.contains(LOCKED_NAME)) { + isDrmProtected = true; + } + } +} diff --git a/core/java/android/content/pm/IPackageManager.aidl b/core/java/android/content/pm/IPackageManager.aidl index 90b42472481..aae2d6ecf31 100644 --- a/core/java/android/content/pm/IPackageManager.aidl +++ b/core/java/android/content/pm/IPackageManager.aidl @@ -40,6 +40,7 @@ import android.content.pm.ResolveInfo; import android.content.pm.ServiceInfo; import android.content.pm.UserInfo; import android.content.pm.VerifierDeviceIdentity; +import android.content.pm.ThemeInfo; import android.net.Uri; import android.content.IntentSender; @@ -126,6 +127,8 @@ interface IPackageManager { */ ParceledListSlice getInstalledPackages(int flags, in String lastRead); + List getInstalledThemePackages(); + /** * This implements getInstalledApplications via a "last returned row" * mechanism that is not exposed in the API. This is to get around the IPC diff --git a/core/java/android/content/pm/PackageInfo.java b/core/java/android/content/pm/PackageInfo.java index 85f7aa5113a..79cc52878a6 100644 --- a/core/java/android/content/pm/PackageInfo.java +++ b/core/java/android/content/pm/PackageInfo.java @@ -1,5 +1,6 @@ /* * Copyright (C) 2007 The Android Open Source Project + * This code has been modified. Portions copyright (C) 2010, T-Mobile USA, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -218,9 +219,69 @@ public class PackageInfo implements Parcelable { */ public int installLocation = INSTALL_LOCATION_INTERNAL_ONLY; + // Is Theme Apk + /** + * {@hide} + */ + public boolean isThemeApk = false; + + // ThemeInfo + /** + * {@hide} + */ + public ThemeInfo [] themeInfos; + public PackageInfo() { } + /* + * Is Theme Apk is DRM protected (contains DRM-protected resources) + * + */ + private boolean drmProtectedThemeApk = false; + + /** + * @hide + * + * @return Is Theme Apk is DRM protected (contains DRM-protected resources) + */ + public boolean isDrmProtectedThemeApk() { + return drmProtectedThemeApk; + } + + /** + * @hide + * + * @param value if Theme Apk is DRM protected (contains DRM-protected resources) + */ + public void setDrmProtectedThemeApk(boolean value) { + drmProtectedThemeApk = value; + } + + /* + * If isThemeApk and isDrmProtectedThemeApk are true - path to hidden locked zip file + * + */ + private String lockedZipFilePath; + + /** + * @hide + * + * @return path for hidden locked zip file + */ + public String getLockedZipFilePath() { + return lockedZipFilePath; + } + + /** + * @hide + * + * @param value path for hidden locked zip file + */ + public void setLockedZipFilePath(String value) { + lockedZipFilePath = value; + } + public String toString() { return "PackageInfo{" + Integer.toHexString(System.identityHashCode(this)) @@ -258,6 +319,12 @@ public void writeToParcel(Parcel dest, int parcelableFlags) { dest.writeTypedArray(configPreferences, parcelableFlags); dest.writeTypedArray(reqFeatures, parcelableFlags); dest.writeInt(installLocation); + + /* Theme-specific. */ + dest.writeInt((isThemeApk)? 1 : 0); + dest.writeInt((drmProtectedThemeApk)? 1 : 0); + dest.writeTypedArray(themeInfos, parcelableFlags); + dest.writeString(lockedZipFilePath); } public static final Parcelable.Creator CREATOR @@ -296,5 +363,11 @@ private PackageInfo(Parcel source) { configPreferences = source.createTypedArray(ConfigurationInfo.CREATOR); reqFeatures = source.createTypedArray(FeatureInfo.CREATOR); installLocation = source.readInt(); + + /* Theme-specific. */ + isThemeApk = (source.readInt() != 0); + drmProtectedThemeApk = (source.readInt() != 0); + themeInfos = source.createTypedArray(ThemeInfo.CREATOR); + lockedZipFilePath = source.readString(); } } diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java index 6de69b034ac..235f060b36b 100644 --- a/core/java/android/content/pm/PackageManager.java +++ b/core/java/android/content/pm/PackageManager.java @@ -1,5 +1,6 @@ /* * Copyright (C) 2006 The Android Open Source Project + * This code has been modified. Portions copyright (C) 2010, T-Mobile USA, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -1418,6 +1419,17 @@ public abstract ProviderInfo getProviderInfo(ComponentName component, */ public abstract List getInstalledPackages(int flags); + /** + * Return a List of all theme packages that are installed + * on the device. + * + * @return A List of PackageInfo objects, one for each theme package + * that is installed on the device. + * + * @hide + */ + public abstract List getInstalledThemePackages(); + /** * Check whether a particular package has been granted a particular * permission. @@ -1610,7 +1622,7 @@ public abstract int getUidForSharedUser(String sharedUserName) * * @param flags Additional option flags. Use any combination of * {@link #GET_META_DATA}, {@link #GET_SHARED_LIBRARY_FILES}, - * {link #GET_UNINSTALLED_PACKAGES} to modify the data returned. + * {@link #GET_UNINSTALLED_PACKAGES} to modify the data returned. * * @return A List of ApplicationInfo objects, one for each application that * is installed on the device. In the unlikely case of there being diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java index f8898c14add..f0f0de10eff 100644 --- a/core/java/android/content/pm/PackageParser.java +++ b/core/java/android/content/pm/PackageParser.java @@ -1,5 +1,6 @@ /* * Copyright (C) 2007 The Android Open Source Project + * This code has been modified. Portions copyright (C) 2010, T-Mobile USA, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -252,6 +253,17 @@ public static PackageInfo generatePackageInfo(PackageParser.Package p, UserId.getCallingUserId()); } + public static String getLockedZipFilePath(String path) { + if (path == null) { + return null; + } + if (isPackageFilename(path)) { + return path.substring(0, path.length() - 4) + ".locked.zip"; + } else { + return path + ".locked.zip"; + } + } + /** * Generate and return the {@link PackageInfo} for a parsed package. * @@ -276,6 +288,21 @@ public static PackageInfo generatePackageInfo(PackageParser.Package p, pi.versionName = p.mVersionName; pi.sharedUserId = p.mSharedUserId; pi.sharedUserLabel = p.mSharedUserLabel; + pi.isThemeApk = p.mIsThemeApk; + pi.setDrmProtectedThemeApk(false); + if (pi.isThemeApk) { + int N = p.mThemeInfos.size(); + if (N > 0) { + pi.themeInfos = new ThemeInfo[N]; + for (int i = 0; i < N; i++) { + pi.themeInfos[i] = p.mThemeInfos.get(i); + pi.setDrmProtectedThemeApk(pi.isDrmProtectedThemeApk() || pi.themeInfos[i].isDrmProtected); + } + if (pi.isDrmProtectedThemeApk()) { + pi.setLockedZipFilePath(PackageParser.getLockedZipFilePath(p.mPath)); + } + } + } pi.applicationInfo = generateApplicationInfo(p, flags, stopped, enabledState, userId); pi.installLocation = p.installLocation; pi.firstInstallTime = firstInstallTime; @@ -1268,7 +1295,10 @@ private Package parsePackage( // Just skip this tag XmlUtils.skipCurrentTag(parser); continue; - + } else if (tagName.equals("theme")) { + // this is a theme apk. + pkg.mIsThemeApk = true; + pkg.mThemeInfos.add(new ThemeInfo(parser, res, attrs)); } else if (RIGID_PARSER) { outError[0] = "Bad element under : " + parser.getName(); @@ -1359,6 +1389,9 @@ private Package parsePackage( >= android.os.Build.VERSION_CODES.DONUT)) { pkg.applicationInfo.flags |= ApplicationInfo.FLAG_SUPPORTS_SCREEN_DENSITIES; } + if (pkg.mIsThemeApk) { + pkg.applicationInfo.isThemeable = false; + } return pkg; } @@ -1660,12 +1693,43 @@ private Instrumentation parseInstrumentation(Package owner, Resources res, return a; } + private void parseApplicationThemeAttributes(XmlPullParser parser, AttributeSet attrs, + ApplicationInfo appInfo) { + for (int i = 0; i < attrs.getAttributeCount(); i++) { + if (!ApplicationInfo.isPlutoNamespace(parser.getAttributeNamespace(i))) { + continue; + } + String attrName = attrs.getAttributeName(i); + if (attrName.equalsIgnoreCase(ApplicationInfo.PLUTO_ISTHEMEABLE_ATTRIBUTE_NAME)) { + appInfo.isThemeable = attrs.getAttributeBooleanValue(i, false); + return; + } + } + } + + private void parseActivityThemeAttributes(XmlPullParser parser, AttributeSet attrs, + ActivityInfo ai) { + for (int i = 0; i < attrs.getAttributeCount(); i++) { + if (!ApplicationInfo.isPlutoNamespace(parser.getAttributeNamespace(i))) { + continue; + } + String attrName = attrs.getAttributeName(i); + if (attrName.equalsIgnoreCase(ApplicationInfo.PLUTO_HANDLE_THEME_CONFIG_CHANGES_ATTRIBUTE_NAME)) { + ai.configChanges |= ActivityInfo.CONFIG_THEME_RESOURCE; + } + } + } + private boolean parseApplication(Package owner, Resources res, XmlPullParser parser, AttributeSet attrs, int flags, String[] outError) throws XmlPullParserException, IOException { final ApplicationInfo ai = owner.applicationInfo; final String pkgName = owner.applicationInfo.packageName; + // assume that this package is themeable unless explicitly set to false. + ai.isThemeable = true; + parseApplicationThemeAttributes(parser, attrs, ai); + TypedArray sa = res.obtainAttributes(attrs, com.android.internal.R.styleable.AndroidManifestApplication); @@ -2180,6 +2244,8 @@ private Activity parseActivity(Package owner, Resources res, return null; } + parseActivityThemeAttributes(parser, attrs, a.info); + int outerDepth = parser.getDepth(); int type; while ((type=parser.next()) != XmlPullParser.END_DOCUMENT @@ -3137,6 +3203,12 @@ public final static class Package { // For use by package manager to keep track of where it has done dexopt. public boolean mDidDexOpt; + + // Is Theme Apk + public boolean mIsThemeApk = false; + + // Theme info + public final ArrayList mThemeInfos = new ArrayList(0); // // User set enabled state. // public int mSetEnabled = PackageManager.COMPONENT_ENABLED_STATE_DEFAULT; diff --git a/core/java/android/content/pm/RegisteredServicesCache.java b/core/java/android/content/pm/RegisteredServicesCache.java index b1fc788c16a..d8f920478aa 100644 --- a/core/java/android/content/pm/RegisteredServicesCache.java +++ b/core/java/android/content/pm/RegisteredServicesCache.java @@ -251,7 +251,7 @@ private boolean inSystemImage(int callerUid) { return false; } - void generateServicesMap() { + public void generateServicesMap() { PackageManager pm = mContext.getPackageManager(); ArrayList> serviceInfos = new ArrayList>(); List resolveInfos = pm.queryIntentServices(new Intent(mInterfaceName), diff --git a/core/java/android/content/pm/ThemeInfo.aidl b/core/java/android/content/pm/ThemeInfo.aidl new file mode 100755 index 00000000000..acbc85e9c8b --- /dev/null +++ b/core/java/android/content/pm/ThemeInfo.aidl @@ -0,0 +1,3 @@ +package android.content.pm; + +parcelable ThemeInfo; diff --git a/core/java/android/content/pm/ThemeInfo.java b/core/java/android/content/pm/ThemeInfo.java new file mode 100644 index 00000000000..e51dbb6ae8c --- /dev/null +++ b/core/java/android/content/pm/ThemeInfo.java @@ -0,0 +1,205 @@ +/* + * Copyright (C) 2010, T-Mobile USA, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.content.pm; + +import java.util.HashMap; +import java.util.Map; + +import org.xmlpull.v1.XmlPullParserException; +import org.xmlpull.v1.XmlPullParser; + +import android.os.Parcel; +import android.os.Parcelable; +import android.util.AttributeSet; +import android.content.res.Resources; + +/** + * Overall information about "theme" package. This corresponds + * to the information collected from AndroidManifest.xml (theme tag). + * + * Below is an example of theme tag + * + * + * @hide + */ +public final class ThemeInfo extends BaseThemeInfo { + private enum AttributeIndex { + THEME_PACKAGE_INDEX, + PREVIEW_INDEX, + AUTHOR_INDEX, + THEME_INDEX, + THEME_STYLE_NAME_INDEX, + THUMBNAIL_INDEX, + RINGTONE_FILE_NAME_INDEX, + NOTIFICATION_RINGTONE_FILE_NAME_INDEX, + WALLPAPER_IMAGE_INDEX, + COPYRIGHT_INDEX, + RINGTONE_NAME_INDEX, + NOTIFICATION_RINGTONE_NAME_INDEX, + STYLE_INDEX; + + public static AttributeIndex get(int ordinal) { + return values()[ordinal]; + } + }; + + private static final String [] compulsoryAttributes = new String [] { + "name", + "preview", + "author", + "themeId", + "styleName", + }; + + private static final String [] optionalAttributes = new String [] { + "thumbnail", + "ringtoneFileName", + "notificationRingtoneFileName", + "wallpaperImage", + "copyright", + "ringtoneName", + "notificationRingtoneName", + "styleId", + }; + + private static final Map sAttributesLookupTable; + + static { + sAttributesLookupTable = new HashMap(); + for (int i = 0; i < compulsoryAttributes.length; i++) { + sAttributesLookupTable.put(compulsoryAttributes[i], AttributeIndex.get(i)); + } + + for (int i = 0; i < optionalAttributes.length; i++) { + sAttributesLookupTable.put(optionalAttributes[i], + AttributeIndex.get(compulsoryAttributes.length + i)); + } + } + + public ThemeInfo(XmlPullParser parser, Resources res, AttributeSet attrs) throws XmlPullParserException { + super(); + + Map tempMap = + new HashMap(sAttributesLookupTable); + int numberOfCompulsoryAttributes = 0; + for (int i = 0; i < attrs.getAttributeCount(); i++) { + if (!ApplicationInfo.isPlutoNamespace(parser.getAttributeNamespace(i))) { + continue; + } + String key = attrs.getAttributeName(i); + if (tempMap.containsKey(key)) { + AttributeIndex index = tempMap.get(key); + tempMap.remove(key); + + if (index.ordinal() < compulsoryAttributes.length) { + numberOfCompulsoryAttributes++; + } + switch (index) { + case THEME_PACKAGE_INDEX: + // theme name + name = getResolvedString(res, attrs, i); + break; + + case THUMBNAIL_INDEX: + // theme thumbprint + thumbnailResourceId = attrs.getAttributeResourceValue(i, 0); + break; + + case AUTHOR_INDEX: + // theme author + author = getResolvedString(res, attrs, i); + break; + + case THEME_INDEX: + // androidUiStyle attribute + themeId = attrs.getAttributeValue(i); + break; + + case THEME_STYLE_NAME_INDEX: + themeStyleName = getResolvedString(res, attrs, i); + break; + + case RINGTONE_FILE_NAME_INDEX: + // ringtone + ringtoneFileName = attrs.getAttributeValue(i); + changeDrmFlagIfNeeded(ringtoneFileName); + break; + + case NOTIFICATION_RINGTONE_FILE_NAME_INDEX: + // notification ringtone + notificationRingtoneFileName = attrs.getAttributeValue(i); + changeDrmFlagIfNeeded(notificationRingtoneFileName); + break; + + case WALLPAPER_IMAGE_INDEX: + // wallpaperImage attribute + wallpaperResourceId = attrs.getAttributeResourceValue(i, 0); + break; + + case COPYRIGHT_INDEX: + // themeCopyright attribute + copyright = getResolvedString(res, attrs, i); + break; + + case RINGTONE_NAME_INDEX: + // ringtone UI name + ringtoneName = attrs.getAttributeValue(i); + break; + + case NOTIFICATION_RINGTONE_NAME_INDEX: + // notification ringtone UI name + notificationRingtoneName = attrs.getAttributeValue(i); + break; + + case STYLE_INDEX: + styleResourceId = attrs.getAttributeResourceValue(i, 0); + break; + + case PREVIEW_INDEX: + // theme thumbprint + previewResourceId = attrs.getAttributeResourceValue(i, 0); + break; + } + } + } + if (numberOfCompulsoryAttributes < compulsoryAttributes.length) { + throw new XmlPullParserException("Not all compulsory attributes are specified in "); + } + } + + public static final Parcelable.Creator CREATOR + = new Parcelable.Creator() { + public ThemeInfo createFromParcel(Parcel source) { + return new ThemeInfo(source); + } + + public ThemeInfo[] newArray(int size) { + return new ThemeInfo[size]; + } + }; + + private ThemeInfo(Parcel source) { + super(source); + } +} diff --git a/core/java/android/content/res/AssetManager.java b/core/java/android/content/res/AssetManager.java index ffefaa27a85..80d09466af1 100644 --- a/core/java/android/content/res/AssetManager.java +++ b/core/java/android/content/res/AssetManager.java @@ -1,5 +1,6 @@ /* * Copyright (C) 2006 The Android Open Source Project + * This code has been modified. Portions copyright (C) 2010, T-Mobile USA, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,6 +19,7 @@ import android.os.ParcelFileDescriptor; import android.util.Log; +import android.util.SparseArray; import android.util.TypedValue; import java.io.FileNotFoundException; @@ -77,6 +79,20 @@ public final class AssetManager { private boolean mOpen = true; private HashMap mRefStacks; + private String mAssetDir; + private String mAppName; + + private boolean mThemeSupport; + private String mThemePackageName; + private int mThemeCookie; + + /** + * Organize all added redirection maps using Java strong references to keep + * the native layer cleanup simple (that is, finalize() in Java will be + * responsible for delete in C++). + */ + private SparseArray mRedirections; + /** * Create a new AssetManager containing only the basic system assets. * Applications will not generally use this method, instead retrieving the @@ -252,6 +268,12 @@ public void close() { } } + /*package*/ final void recreateStringBlocks() { + synchronized (this) { + makeStringBlocks(true); + } + } + /*package*/ final void makeStringBlocks(boolean copyFromSystem) { final int sysNum = copyFromSystem ? sSystem.mStringBlocks.length : 0; final int num = getStringBlockCount(); @@ -458,6 +480,18 @@ public final XmlResourceParser openXmlResourceParser(int cookie, return rp; } + /** + * {@hide} + * Split a theme package with DRM-protected resources into two files. + * + * @param packageFileName Original theme package file name. + * @param lockedFileName Name of the new "locked" file with DRM resources. + * @param drmProtectedresources Array of names of DRM-protected assets. + */ + public final int splitDrmProtectedThemePackage(String packageFileName, String lockedFileName, String [] drmProtectedresources) { + return splitThemePackage(packageFileName, lockedFileName, drmProtectedresources); + } + /** * {@hide} * Retrieve a non-asset as a compiled XML file. Not for use by @@ -624,6 +658,110 @@ public final int[] addAssetPaths(String[] paths) { return cookies; } + /** + * Delete a set of theme assets from the asset manager. Not for use by + * applications. Returns true if succeeded or false on failure. + * + * @hide + */ + public native final boolean detachThemePath(String packageName, int cookie); + + /** + * Attach a set of theme assets to the asset manager. If necessary, this + * method will forcefully update the internal ResTable data structure. + * + * @return Cookie of the added asset or 0 on failure. + * @hide + */ + public native final int attachThemePath(String path); + + /** + * Sets a flag indicating that this AssetManager should have themes + * attached, according to the initial request to create it by the + * ApplicationContext. + * + * {@hide} + */ + public final void setThemeSupport(boolean themeSupport) { + mThemeSupport = themeSupport; + } + + /** + * Should this AssetManager have themes attached, according to the initial + * request to create it by the ApplicationContext? + * + * {@hide} + */ + public final boolean hasThemeSupport() { + return mThemeSupport; + } + + /** + * Apply a heuristic to match-up all attributes from the source style with + * attributes in the destination style. For each match, an entry in the + * package redirection map will be inserted. + * + * {@hide} + */ + public native final boolean generateStyleRedirections(int resMapNative, int sourceStyle, + int destStyle); + + /** + * Get package name of current theme (may return null). + * {@hide} + */ + public String getThemePackageName() { + return mThemePackageName; + } + + /** + * Sets package name and highest level style id for current theme (null, 0 is allowed). + * {@hide} + */ + public void setThemePackageName(String packageName) { + mThemePackageName = packageName; + } + + /** + * Get asset cookie for current theme (may return 0). + * {@hide} + */ + public int getThemeCookie() { + return mThemeCookie; + } + + /** + * Sets asset cookie for current theme (0 if not a themed asset manager). + * {@hide} + */ + public void setThemeCookie(int cookie) { + mThemeCookie = cookie; + } + + /** + * Add a redirection map to the asset manager. All future resource lookups + * will consult this map. + * {@hide} + */ + public void addRedirections(PackageRedirectionMap map) { + if (mRedirections == null) { + mRedirections = new SparseArray(2); + } + mRedirections.append(map.getPackageId(), map); + addRedirectionsNative(map.getNativePointer()); + } + + /** + * Clear redirection map for the asset manager. + * {@hide} + */ + public void clearRedirections() { + if (mRedirections != null) { + mRedirections.clear(); + } + clearRedirectionsNative(); + } + /** * Determine whether the state in this asset manager is up-to-date with * the files on the filesystem. If false is returned, you need to @@ -741,6 +879,26 @@ private native final int loadResourceBagValue(int ident, int bagEntryId, TypedVa private native final int[] getArrayStringInfo(int arrayRes); /*package*/ native final int[] getArrayIntResource(int arrayRes); + private native final int splitThemePackage(String srcFileName, String dstFileName, String [] drmProtectedAssetNames); + + /** + * {@hide} + */ + public native final int getBasePackageCount(); + + /** + * {@hide} + */ + public native final String getBasePackageName(int index); + + /** + * {@hide} + */ + public native final int getBasePackageId(int index); + + private native final void addRedirectionsNative(int redirectionMapNativePointer); + private native final void clearRedirectionsNative(); + private native final void init(); private native final void destroy(); diff --git a/core/java/android/content/res/CompatibilityInfo.java b/core/java/android/content/res/CompatibilityInfo.java index 1c9285e7a9a..d6856c98b96 100644 --- a/core/java/android/content/res/CompatibilityInfo.java +++ b/core/java/android/content/res/CompatibilityInfo.java @@ -92,9 +92,15 @@ public class CompatibilityInfo implements Parcelable { */ public final float applicationInvertedScale; + /** + * Whether the application supports third-party theming. + */ + public final boolean isThemeable; + public CompatibilityInfo(ApplicationInfo appInfo, int screenLayout, int sw, boolean forceCompat) { int compatFlags = 0; + isThemeable = appInfo.isThemeable; if (appInfo.requiresSmallestWidthDp != 0 || appInfo.compatibleWidthLimitDp != 0 || appInfo.largestWidthLimitDp != 0) { @@ -242,17 +248,19 @@ public CompatibilityInfo(ApplicationInfo appInfo, int screenLayout, int sw, } private CompatibilityInfo(int compFlags, - int dens, float scale, float invertedScale) { + int dens, float scale, float invertedScale, boolean isThemeable) { mCompatibilityFlags = compFlags; applicationDensity = dens; applicationScale = scale; applicationInvertedScale = invertedScale; + this.isThemeable = isThemeable; } private CompatibilityInfo() { this(NEVER_NEEDS_COMPAT, DisplayMetrics.DENSITY_DEVICE, 1.0f, - 1.0f); + 1.0f, + true); } /** @@ -519,6 +527,7 @@ public boolean equals(Object o) { if (applicationDensity != oc.applicationDensity) return false; if (applicationScale != oc.applicationScale) return false; if (applicationInvertedScale != oc.applicationInvertedScale) return false; + if (isThemeable != oc.isThemeable) return false; return true; } catch (ClassCastException e) { return false; @@ -556,6 +565,7 @@ public int hashCode() { result = 31 * result + applicationDensity; result = 31 * result + Float.floatToIntBits(applicationScale); result = 31 * result + Float.floatToIntBits(applicationInvertedScale); + result = 31 * result + (isThemeable ? 1 : 0); return result; } @@ -570,6 +580,7 @@ public void writeToParcel(Parcel dest, int flags) { dest.writeInt(applicationDensity); dest.writeFloat(applicationScale); dest.writeFloat(applicationInvertedScale); + dest.writeInt(isThemeable ? 1 : 0); } public static final Parcelable.Creator CREATOR @@ -588,5 +599,6 @@ private CompatibilityInfo(Parcel source) { applicationDensity = source.readInt(); applicationScale = source.readFloat(); applicationInvertedScale = source.readFloat(); + isThemeable = source.readInt() == 1 ? true : false; } } diff --git a/core/java/android/content/res/Configuration.aidl b/core/java/android/content/res/Configuration.aidl old mode 100755 new mode 100644 diff --git a/core/java/android/content/res/Configuration.java b/core/java/android/content/res/Configuration.java index 423b9afa45a..830ebe3e633 100644 --- a/core/java/android/content/res/Configuration.java +++ b/core/java/android/content/res/Configuration.java @@ -1,5 +1,6 @@ /* * Copyright (C) 2008 The Android Open Source Project + * This code has been modified. Portions copyright (C) 2010, T-Mobile USA, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -21,6 +22,9 @@ import android.os.Parcelable; import android.util.LocaleUtil; import android.view.View; +import android.util.Log; +import android.os.SystemProperties; +import android.text.TextUtils; import java.util.Locale; @@ -62,6 +66,11 @@ public final class Configuration implements Parcelable, Comparable
* - *

See the Auto Complete - * tutorial.

+ *

See the Text Fields + * guide.

* * @attr ref android.R.styleable#AutoCompleteTextView_completionHint * @attr ref android.R.styleable#AutoCompleteTextView_completionThreshold diff --git a/core/java/android/widget/Button.java b/core/java/android/widget/Button.java index 99f4cae493c..2ac56ac1c9c 100644 --- a/core/java/android/widget/Button.java +++ b/core/java/android/widget/Button.java @@ -83,8 +83,8 @@ * href="{@docRoot}guide/topics/resources/drawable-resource.html#StateList">State List * Drawable.

* - *

Also see the Form Stuff - * tutorial for an example implementation of a button.

+ *

See the Buttons + * guide.

* *

XML attributes

*

diff --git a/core/java/android/widget/CheckBox.java b/core/java/android/widget/CheckBox.java index 858c415d0f0..f1804f8b97b 100644 --- a/core/java/android/widget/CheckBox.java +++ b/core/java/android/widget/CheckBox.java @@ -44,8 +44,8 @@ * } *

* - *

See the Form Stuff - * tutorial.

+ *

See the Checkboxes + * guide.

* *

XML attributes

*

diff --git a/core/java/android/widget/DatePicker.java b/core/java/android/widget/DatePicker.java index 108b7200f0b..ac3bedb02d4 100644 --- a/core/java/android/widget/DatePicker.java +++ b/core/java/android/widget/DatePicker.java @@ -53,8 +53,8 @@ * displayed. Also the minimal and maximal date from which dates to be selected * can be customized. *

- * See the Date - * Picker tutorial. + * See the Pickers + * guide. *

*

* For a dialog using this view, see {@link android.app.DatePickerDialog}. diff --git a/core/java/android/widget/EditText.java b/core/java/android/widget/EditText.java index 2fd87682236..57e51c25925 100644 --- a/core/java/android/widget/EditText.java +++ b/core/java/android/widget/EditText.java @@ -38,8 +38,8 @@ * EditText is a thin veneer over TextView that configures itself * to be editable. * - *

See the Form Stuff - * tutorial.

+ *

See the Text Fields + * guide.

*

* XML attributes *

diff --git a/core/java/android/widget/GridView.java b/core/java/android/widget/GridView.java index 89751094072..37e0b905510 100644 --- a/core/java/android/widget/GridView.java +++ b/core/java/android/widget/GridView.java @@ -37,8 +37,8 @@ * A view that shows items in two-dimensional scrolling grid. The items in the * grid come from the {@link ListAdapter} associated with this view. * - *

See the Grid - * View tutorial.

+ *

See the Grid + * View guide.

* * @attr ref android.R.styleable#GridView_horizontalSpacing * @attr ref android.R.styleable#GridView_verticalSpacing @@ -2207,8 +2207,13 @@ protected int computeVerticalScrollOffset() { int height = view.getHeight(); if (height > 0) { final int numColumns = mNumColumns; - final int whichRow = mFirstPosition / numColumns; final int rowCount = (mItemCount + numColumns - 1) / numColumns; + // In case of stackFromBottom the calculation of whichRow needs + // to take into account that counting from the top the first row + // might not be entirely filled. + final int oddItemsOnFirstRow = isStackFromBottom() ? ((rowCount * numColumns) - + mItemCount) : 0; + final int whichRow = (mFirstPosition + oddItemsOnFirstRow) / numColumns; return Math.max(whichRow * 100 - (top * 100) / height + (int) ((float) mScrollY / getHeight() * rowCount * 100), 0); } diff --git a/core/java/android/widget/HorizontalScrollView.java b/core/java/android/widget/HorizontalScrollView.java index 18c4fe631af..ff0579cd78f 100644 --- a/core/java/android/widget/HorizontalScrollView.java +++ b/core/java/android/widget/HorizontalScrollView.java @@ -22,6 +22,7 @@ import android.graphics.Rect; import android.os.Bundle; import android.util.AttributeSet; +import android.util.Log; import android.view.FocusFinder; import android.view.InputDevice; import android.view.KeyEvent; @@ -62,6 +63,7 @@ public class HorizontalScrollView extends FrameLayout { private static final float MAX_SCROLL_FACTOR = ScrollView.MAX_SCROLL_FACTOR; + private static final String TAG = "HorizontalScrollView"; private long mLastScroll; @@ -456,6 +458,12 @@ public boolean onInterceptTouchEvent(MotionEvent ev) { } final int pointerIndex = ev.findPointerIndex(activePointerId); + if (pointerIndex == -1) { + Log.e(TAG, "Invalid pointerId=" + activePointerId + + " in onInterceptTouchEvent"); + break; + } + final int x = (int) ev.getX(pointerIndex); final int xDiff = (int) Math.abs(x - mLastMotionX); if (xDiff > mTouchSlop) { @@ -557,6 +565,11 @@ public boolean onTouchEvent(MotionEvent ev) { } case MotionEvent.ACTION_MOVE: final int activePointerIndex = ev.findPointerIndex(mActivePointerId); + if (activePointerIndex == -1) { + Log.e(TAG, "Invalid pointerId=" + mActivePointerId + " in onTouchEvent"); + break; + } + final int x = (int) ev.getX(activePointerIndex); int deltaX = mLastMotionX - x; if (!mIsBeingDragged && Math.abs(deltaX) > mTouchSlop) { diff --git a/core/java/android/widget/ImageButton.java b/core/java/android/widget/ImageButton.java index 59a8f280463..379354caeb0 100644 --- a/core/java/android/widget/ImageButton.java +++ b/core/java/android/widget/ImageButton.java @@ -64,8 +64,8 @@ * it will only be applied after {@code android:state_pressed} and {@code * android:state_focused} have both evaluated false.

* - *

See the Form Stuff - * tutorial.

+ *

See the Buttons + * guide.

* *

XML attributes

*

diff --git a/core/java/android/widget/LinearLayout.java b/core/java/android/widget/LinearLayout.java index 2391898dfa3..09c01295610 100644 --- a/core/java/android/widget/LinearLayout.java +++ b/core/java/android/widget/LinearLayout.java @@ -41,8 +41,8 @@ * {@link android.widget.LinearLayout.LayoutParams LinearLayout.LayoutParams}. * The default orientation is horizontal. * - *

See the Linear Layout - * tutorial.

+ *

See the Linear Layout + * guide.

* *

* Also see {@link LinearLayout.LayoutParams android.widget.LinearLayout.LayoutParams} diff --git a/core/java/android/widget/ListView.java b/core/java/android/widget/ListView.java index d2e55d90546..e011c13a9c8 100644 --- a/core/java/android/widget/ListView.java +++ b/core/java/android/widget/ListView.java @@ -57,8 +57,8 @@ * A view that shows items in a vertically scrolling list. The items * come from the {@link ListAdapter} associated with this view. * - *

See the List View - * tutorial.

+ *

See the List View + * guide.

* * @attr ref android.R.styleable#ListView_entries * @attr ref android.R.styleable#ListView_divider diff --git a/core/java/android/widget/OverScroller.java b/core/java/android/widget/OverScroller.java index 1c72a0d08a0..e94589b6ac5 100644 --- a/core/java/android/widget/OverScroller.java +++ b/core/java/android/widget/OverScroller.java @@ -18,11 +18,13 @@ import android.content.Context; import android.hardware.SensorManager; +import android.os.PowerManager; import android.util.FloatMath; import android.util.Log; import android.view.ViewConfiguration; import android.view.animation.AnimationUtils; import android.view.animation.Interpolator; +import java.io.*; /** * This class encapsulates scrolling with the ability to overshoot the bounds @@ -42,6 +44,26 @@ public class OverScroller { private static final int DEFAULT_DURATION = 250; private static final int SCROLL_MODE = 0; private static final int FLING_MODE = 1; + private static final String scalingMaxFreqFile = "/sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq"; + + private final PowerManager mPm; + + private int maxFreq = readFileIntoInt(scalingMaxFreqFile); + + // Reads file into variable + private int readFileIntoInt(String fileToBeRead) { + try { + File fileObject = new File(fileToBeRead); + Reader readerObject = new FileReader(fileObject); + BufferedReader bufferedReaderObject = new BufferedReader(readerObject); + String stringDataFromFile = bufferedReaderObject.readLine(); + readerObject.close(); + bufferedReaderObject.close(); + return Integer.parseInt(stringDataFromFile.trim()); + } catch (IOException e) { + return 1000000; + } + } /** * Creates an OverScroller with a viscous fluid scroll interpolator and flywheel. @@ -72,9 +94,12 @@ public OverScroller(Context context, Interpolator interpolator) { public OverScroller(Context context, Interpolator interpolator, boolean flywheel) { mInterpolator = interpolator; mFlywheel = flywheel; + mScrollerX = new SplineOverScroller(); mScrollerY = new SplineOverScroller(); + mPm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); + SplineOverScroller.initFromContext(context); } @@ -375,6 +400,7 @@ public void startScroll(int startX, int startY, int dx, int dy) { */ public void startScroll(int startX, int startY, int dx, int dy, int duration) { mMode = SCROLL_MODE; + mPm.cpuBoost(maxFreq); mScrollerX.startScroll(startX, dx, duration); mScrollerY.startScroll(startY, dy, duration); } @@ -445,6 +471,7 @@ public void fling(int startX, int startY, int velocityX, int velocityY, } } + mPm.cpuBoost(maxFreq); mMode = FLING_MODE; mScrollerX.fling(startX, velocityX, minX, maxX, overX); mScrollerY.fling(startY, velocityY, minY, maxY, overY); diff --git a/core/java/android/widget/RadioButton.java b/core/java/android/widget/RadioButton.java index b1bb1c06b1a..a0fef7dafc6 100644 --- a/core/java/android/widget/RadioButton.java +++ b/core/java/android/widget/RadioButton.java @@ -38,8 +38,8 @@ * a radio group, checking one radio button unchecks all the others.

*

* - *

See the Form Stuff - * tutorial.

+ *

See the Radio Buttons + * guide.

* *

XML attributes

*

diff --git a/core/java/android/widget/RatingBar.java b/core/java/android/widget/RatingBar.java index 524d27271aa..4d3c56c1f12 100644 --- a/core/java/android/widget/RatingBar.java +++ b/core/java/android/widget/RatingBar.java @@ -43,9 +43,6 @@ *

* The secondary progress should not be modified by the client as it is used * internally as the background for a fractionally filled star. - * - *

See the Form Stuff - * tutorial.

* * @attr ref android.R.styleable#RatingBar_numStars * @attr ref android.R.styleable#RatingBar_rating diff --git a/core/java/android/widget/RelativeLayout.java b/core/java/android/widget/RelativeLayout.java index 29cf00071e8..569cf993eed 100644 --- a/core/java/android/widget/RelativeLayout.java +++ b/core/java/android/widget/RelativeLayout.java @@ -56,8 +56,8 @@ * {@link #ALIGN_PARENT_BOTTOM}. *

* - *

See the Relative - * Layout tutorial.

+ *

See the Relative + * Layout guide.

* *

* Also see {@link android.widget.RelativeLayout.LayoutParams RelativeLayout.LayoutParams} for diff --git a/core/java/android/widget/RemoteViewsAdapter.java b/core/java/android/widget/RemoteViewsAdapter.java index 46ec923a39f..9d853f594d3 100644 --- a/core/java/android/widget/RemoteViewsAdapter.java +++ b/core/java/android/widget/RemoteViewsAdapter.java @@ -17,10 +17,10 @@ package android.widget; import java.lang.ref.WeakReference; +import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedList; - import android.appwidget.AppWidgetManager; import android.content.Context; import android.content.Intent; @@ -31,6 +31,7 @@ import android.os.Message; import android.os.RemoteException; import android.util.Log; +import android.util.Pair; import android.view.LayoutInflater; import android.view.View; import android.view.View.MeasureSpec; @@ -47,7 +48,7 @@ public class RemoteViewsAdapter extends BaseAdapter implements Handler.Callback { private static final String TAG = "RemoteViewsAdapter"; - // The max number of items in the cache + // The max number of items in the cache private static final int sDefaultCacheSize = 40; // The delay (in millis) to wait until attempting to unbind from a service after a request. // This ensures that we don't stay continually bound to the service and that it can be destroyed @@ -58,7 +59,7 @@ public class RemoteViewsAdapter extends BaseAdapter implements Handler.Callback private static final int sDefaultLoadingViewHeight = 50; // Type defs for controlling different messages across the main and worker message queues - private static final int sDefaultMessageType = 0; + private static final int sDefaultMessageType = 0; private static final int sUnbindServiceMessageType = 1; private final Context mContext; @@ -83,6 +84,26 @@ public class RemoteViewsAdapter extends BaseAdapter implements Handler.Callback private Handler mWorkerQueue; private Handler mMainQueue; + // We cache the FixedSizeRemoteViewsCaches across orientation. These are the related data + // structures; + private static final HashMap, FixedSizeRemoteViewsCache> + sCachedRemoteViewsCaches = new HashMap, + FixedSizeRemoteViewsCache>(); + private static final HashMap, Runnable> + sRemoteViewsCacheRemoveRunnables = new HashMap, + Runnable>(); + private static HandlerThread sCacheRemovalThread; + private static Handler sCacheRemovalQueue; + + // We keep the cache around for a duration after onSaveInstanceState for use on re-inflation. + // If a new RemoteViewsAdapter with the same intent / widget id isn't constructed within this + // duration, the cache is dropped. + private static final int REMOTE_VIEWS_CACHE_DURATION = 5000; + + // Used to indicate to the AdapterView that it can use this Adapter immediately after + // construction (happens when we have a cached FixedSizeRemoteViewsCache). + private boolean mDataReady = false; + /** * An interface for the RemoteAdapter to notify other classes when adapters * are actually connected to/disconnected from their actual services. @@ -246,7 +267,7 @@ public synchronized boolean isConnected() { * A FrameLayout which contains a loading view, and manages the re/applying of RemoteViews when * they are loaded. */ - private class RemoteViewsFrameLayout extends FrameLayout { + private static class RemoteViewsFrameLayout extends FrameLayout { public RemoteViewsFrameLayout(Context context) { super(context); } @@ -301,7 +322,7 @@ public void add(int position, RemoteViewsFrameLayout layout) { * Notifies each of the RemoteViewsFrameLayouts associated with a particular position that * the associated RemoteViews has loaded. */ - public void notifyOnRemoteViewsLoaded(int position, RemoteViews view, int typeId) { + public void notifyOnRemoteViewsLoaded(int position, RemoteViews view) { if (view == null) return; final Integer pos = position; @@ -331,7 +352,7 @@ public void clear() { /** * The meta-data associated with the cache in it's current state. */ - private class RemoteViewsMetaData { + private static class RemoteViewsMetaData { int count; int viewTypeCount; boolean hasStableIds; @@ -390,14 +411,23 @@ public int getMappedViewType(int typeId) { } } + public boolean isViewTypeInRange(int typeId) { + int mappedType = getMappedViewType(typeId); + if (mappedType >= viewTypeCount) { + return false; + } else { + return true; + } + } + private RemoteViewsFrameLayout createLoadingView(int position, View convertView, - ViewGroup parent) { + ViewGroup parent, Object lock, LayoutInflater layoutInflater) { // Create and return a new FrameLayout, and setup the references for this position final Context context = parent.getContext(); RemoteViewsFrameLayout layout = new RemoteViewsFrameLayout(context); // Create a new loading view - synchronized (mCache) { + synchronized (lock) { boolean customLoadingViewAvailable = false; if (mUserLoadingView != null) { @@ -425,7 +455,7 @@ private RemoteViewsFrameLayout createLoadingView(int position, View convertView, mFirstViewHeight = firstView.getMeasuredHeight(); mFirstView = null; } catch (Exception e) { - float density = mContext.getResources().getDisplayMetrics().density; + float density = context.getResources().getDisplayMetrics().density; mFirstViewHeight = (int) Math.round(sDefaultLoadingViewHeight * density); mFirstView = null; @@ -434,7 +464,7 @@ private RemoteViewsFrameLayout createLoadingView(int position, View convertView, } // Compose the loading view text - TextView loadingTextView = (TextView) mLayoutInflater.inflate( + TextView loadingTextView = (TextView) layoutInflater.inflate( com.android.internal.R.layout.remote_views_adapter_default_loading_view, layout, false); loadingTextView.setHeight(mFirstViewHeight); @@ -451,29 +481,28 @@ private RemoteViewsFrameLayout createLoadingView(int position, View convertView, /** * The meta-data associated with a single item in the cache. */ - private class RemoteViewsIndexMetaData { + private static class RemoteViewsIndexMetaData { int typeId; long itemId; - boolean isRequested; - public RemoteViewsIndexMetaData(RemoteViews v, long itemId, boolean requested) { - set(v, itemId, requested); + public RemoteViewsIndexMetaData(RemoteViews v, long itemId) { + set(v, itemId); } - public void set(RemoteViews v, long id, boolean requested) { + public void set(RemoteViews v, long id) { itemId = id; - if (v != null) + if (v != null) { typeId = v.getLayoutId(); - else + } else { typeId = 0; - isRequested = requested; + } } } /** * */ - private class FixedSizeRemoteViewsCache { + private static class FixedSizeRemoteViewsCache { private static final String TAG = "FixedSizeRemoteViewsCache"; // The meta data related to all the RemoteViews, ie. count, is stable, etc. @@ -535,10 +564,11 @@ public FixedSizeRemoteViewsCache(int maxCacheSize) { mLoadIndices = new HashSet(); } - public void insert(int position, RemoteViews v, long itemId, boolean isRequested) { + public void insert(int position, RemoteViews v, long itemId, + ArrayList visibleWindow) { // Trim the cache if we go beyond the count if (mIndexRemoteViews.size() >= mMaxCount) { - mIndexRemoteViews.remove(getFarthestPositionFrom(position)); + mIndexRemoteViews.remove(getFarthestPositionFrom(position, visibleWindow)); } // Trim the cache if we go beyond the available memory size constraints @@ -549,15 +579,15 @@ public void insert(int position, RemoteViews v, long itemId, boolean isRequested // remove based on both its position as well as it's current memory usage, as well // as whether it was directly requested vs. whether it was preloaded by our caching // mechanism. - mIndexRemoteViews.remove(getFarthestPositionFrom(pruneFromPosition)); + mIndexRemoteViews.remove(getFarthestPositionFrom(pruneFromPosition, visibleWindow)); } // Update the metadata cache if (mIndexMetaData.containsKey(position)) { final RemoteViewsIndexMetaData metaData = mIndexMetaData.get(position); - metaData.set(v, itemId, isRequested); + metaData.set(v, itemId); } else { - mIndexMetaData.put(position, new RemoteViewsIndexMetaData(v, itemId, isRequested)); + mIndexMetaData.put(position, new RemoteViewsIndexMetaData(v, itemId)); } mIndexRemoteViews.put(position, v); } @@ -600,29 +630,30 @@ private int getRemoteViewsBitmapMemoryUsage() { } return mem; } - private int getFarthestPositionFrom(int pos) { + + private int getFarthestPositionFrom(int pos, ArrayList visibleWindow) { // Find the index farthest away and remove that int maxDist = 0; int maxDistIndex = -1; - int maxDistNonRequested = 0; - int maxDistIndexNonRequested = -1; + int maxDistNotVisible = 0; + int maxDistIndexNotVisible = -1; for (int i : mIndexRemoteViews.keySet()) { int dist = Math.abs(i-pos); - if (dist > maxDistNonRequested && !mIndexMetaData.get(i).isRequested) { - // maxDistNonRequested/maxDistIndexNonRequested will store the index of the - // farthest non-requested position - maxDistIndexNonRequested = i; - maxDistNonRequested = dist; + if (dist > maxDistNotVisible && !visibleWindow.contains(i)) { + // maxDistNotVisible/maxDistIndexNotVisible will store the index of the + // farthest non-visible position + maxDistIndexNotVisible = i; + maxDistNotVisible = dist; } if (dist >= maxDist) { // maxDist/maxDistIndex will store the index of the farthest position - // regardless of whether it was directly requested or not + // regardless of whether it is visible or not maxDistIndex = i; maxDist = dist; } } - if (maxDistIndexNonRequested > -1) { - return maxDistIndexNonRequested; + if (maxDistIndexNotVisible > -1) { + return maxDistIndexNotVisible; } return maxDistIndex; } @@ -737,11 +768,36 @@ public RemoteViewsAdapter(Context context, Intent intent, RemoteAdapterConnectio mWorkerQueue = new Handler(mWorkerThread.getLooper()); mMainQueue = new Handler(Looper.myLooper(), this); + if (sCacheRemovalThread == null) { + sCacheRemovalThread = new HandlerThread("RemoteViewsAdapter-cachePruner"); + sCacheRemovalThread.start(); + sCacheRemovalQueue = new Handler(sCacheRemovalThread.getLooper()); + } + // Initialize the cache and the service connection on startup - mCache = new FixedSizeRemoteViewsCache(sDefaultCacheSize); mCallback = new WeakReference(callback); mServiceConnection = new RemoteViewsAdapterServiceConnection(this); - requestBindService(); + + Pair key = new Pair + (new Intent.FilterComparison(mIntent), mAppWidgetId); + + synchronized(sCachedRemoteViewsCaches) { + if (sCachedRemoteViewsCaches.containsKey(key)) { + mCache = sCachedRemoteViewsCaches.get(key); + synchronized (mCache.mMetaData) { + if (mCache.mMetaData.count > 0) { + // As a precautionary measure, we verify that the meta data indicates a + // non-zero count before declaring that data is ready. + mDataReady = true; + } + } + } else { + mCache = new FixedSizeRemoteViewsCache(sDefaultCacheSize); + } + if (!mDataReady) { + requestBindService(); + } + } } @Override @@ -755,6 +811,51 @@ protected void finalize() throws Throwable { } } + public boolean isDataReady() { + return mDataReady; + } + + public void saveRemoteViewsCache() { + final Pair key = new Pair (new Intent.FilterComparison(mIntent), mAppWidgetId); + + synchronized(sCachedRemoteViewsCaches) { + // If we already have a remove runnable posted for this key, remove it. + if (sRemoteViewsCacheRemoveRunnables.containsKey(key)) { + sCacheRemovalQueue.removeCallbacks(sRemoteViewsCacheRemoveRunnables.get(key)); + sRemoteViewsCacheRemoveRunnables.remove(key); + } + + int metaDataCount = 0; + int numRemoteViewsCached = 0; + synchronized (mCache.mMetaData) { + metaDataCount = mCache.mMetaData.count; + } + synchronized (mCache) { + numRemoteViewsCached = mCache.mIndexRemoteViews.size(); + } + if (metaDataCount > 0 && numRemoteViewsCached > 0) { + sCachedRemoteViewsCaches.put(key, mCache); + } + + Runnable r = new Runnable() { + @Override + public void run() { + synchronized (sCachedRemoteViewsCaches) { + if (sCachedRemoteViewsCaches.containsKey(key)) { + sCachedRemoteViewsCaches.remove(key); + } + if (sRemoteViewsCacheRemoveRunnables.containsKey(key)) { + sRemoteViewsCacheRemoveRunnables.remove(key); + } + } + } + }; + sRemoteViewsCacheRemoveRunnables.put(key, r); + sCacheRemovalQueue.postDelayed(r, REMOTE_VIEWS_CACHE_DURATION); + } + } + private void loadNextIndexInBackground() { mWorkerQueue.post(new Runnable() { @Override @@ -762,15 +863,13 @@ public void run() { if (mServiceConnection.isConnected()) { // Get the next index to load int position = -1; - boolean isRequested = false; synchronized (mCache) { int[] res = mCache.getNextIndexToLoad(); position = res[0]; - isRequested = res[1] > 0; } if (position > -1) { // Load the item, and notify any existing RemoteViewsFrameLayouts - updateRemoteViews(position, isRequested, true); + updateRemoteViews(position, true); // Queue up for the next one to load loadNextIndexInBackground(); @@ -832,8 +931,7 @@ private void updateTemporaryMetaData() { } } - private void updateRemoteViews(final int position, boolean isRequested, boolean - notifyWhenLoaded) { + private void updateRemoteViews(final int position, boolean notifyWhenLoaded) { IRemoteViewsFactory factory = mServiceConnection.getRemoteViewsFactory(); // Load the item information from the remote service @@ -861,21 +959,40 @@ private void updateRemoteViews(final int position, boolean isRequested, boolean "returned from RemoteViewsFactory."); return; } + + int layoutId = remoteViews.getLayoutId(); + RemoteViewsMetaData metaData = mCache.getMetaData(); + boolean viewTypeInRange; + int cacheCount; + synchronized (metaData) { + viewTypeInRange = metaData.isViewTypeInRange(layoutId); + cacheCount = mCache.mMetaData.count; + } synchronized (mCache) { - // Cache the RemoteViews we loaded - mCache.insert(position, remoteViews, itemId, isRequested); - - // Notify all the views that we have previously returned for this index that - // there is new data for it. - final RemoteViews rv = remoteViews; - final int typeId = mCache.getMetaDataAt(position).typeId; - if (notifyWhenLoaded) { - mMainQueue.post(new Runnable() { - @Override - public void run() { - mRequestedViews.notifyOnRemoteViewsLoaded(position, rv, typeId); - } - }); + if (viewTypeInRange) { + ArrayList visibleWindow = getVisibleWindow(mVisibleWindowLowerBound, + mVisibleWindowUpperBound, cacheCount); + // Cache the RemoteViews we loaded + mCache.insert(position, remoteViews, itemId, visibleWindow); + + // Notify all the views that we have previously returned for this index that + // there is new data for it. + final RemoteViews rv = remoteViews; + if (notifyWhenLoaded) { + mMainQueue.post(new Runnable() { + @Override + public void run() { + mRequestedViews.notifyOnRemoteViewsLoaded(position, rv); + } + }); + } + } else { + // We need to log an error here, as the the view type count specified by the + // factory is less than the number of view types returned. We don't return this + // view to the AdapterView, as this will cause an exception in the hosting process, + // which contains the associated AdapterView. + Log.e(TAG, "Error: widget's RemoteViewsFactory returns more view types than " + + " indicated by getViewTypeCount() "); } } } @@ -885,9 +1002,9 @@ public Intent getRemoteViewsServiceIntent() { } public int getCount() { - final RemoteViewsMetaData metaData = mCache.getMetaData(); - synchronized (metaData) { - return metaData.count; + final RemoteViewsMetaData tmpMetaData = mCache.getTemporaryMetaData(); + synchronized (tmpMetaData) { + return tmpMetaData.count; } } @@ -979,7 +1096,6 @@ public View getView(int position, View convertView, ViewGroup parent) { Context context = parent.getContext(); RemoteViews rv = mCache.getRemoteViewsAt(position); RemoteViewsIndexMetaData indexMetaData = mCache.getMetaDataAt(position); - indexMetaData.isRequested = true; int typeId = indexMetaData.typeId; try { @@ -1010,7 +1126,8 @@ public View getView(int position, View convertView, ViewGroup parent) { RemoteViewsFrameLayout loadingView = null; final RemoteViewsMetaData metaData = mCache.getMetaData(); synchronized (metaData) { - loadingView = metaData.createLoadingView(position, convertView, parent); + loadingView = metaData.createLoadingView(position, convertView, parent, + mCache, mLayoutInflater); } return loadingView; } finally { @@ -1022,7 +1139,8 @@ public View getView(int position, View convertView, ViewGroup parent) { RemoteViewsFrameLayout loadingView = null; final RemoteViewsMetaData metaData = mCache.getMetaData(); synchronized (metaData) { - loadingView = metaData.createLoadingView(position, convertView, parent); + loadingView = metaData.createLoadingView(position, convertView, parent, + mCache, mLayoutInflater); } mRequestedViews.add(position, loadingView); @@ -1068,6 +1186,11 @@ private void onNotifyDataSetChanged() { return; } + // Clear the data in cache + final RemoteViewsMetaData metaData = mCache.getMetaData(); + synchronized (metaData) { + metaData.reset(); + } // Flush the cache so that we can reload new items from the service synchronized (mCache) { mCache.reset(); @@ -1076,18 +1199,21 @@ private void onNotifyDataSetChanged() { // Re-request the new metadata (only after the notification to the factory) updateTemporaryMetaData(); int newCount; + ArrayList visibleWindow; synchronized(mCache.getTemporaryMetaData()) { newCount = mCache.getTemporaryMetaData().count; + visibleWindow = getVisibleWindow(mVisibleWindowLowerBound, + mVisibleWindowUpperBound, newCount); } // Pre-load (our best guess of) the views which are currently visible in the AdapterView. // This mitigates flashing and flickering of loading views when a widget notifies that // its data has changed. - for (int i = mVisibleWindowLowerBound; i <= mVisibleWindowUpperBound; i++) { + for (int i: visibleWindow) { // Because temporary meta data is only ever modified from this thread (ie. // mWorkerThread), it is safe to assume that count is a valid representation. if (i < newCount) { - updateRemoteViews(i, false, false); + updateRemoteViews(i, false); } } @@ -1108,6 +1234,31 @@ public void run() { mNotifyDataSetChangedAfterOnServiceConnected = false; } + private ArrayList getVisibleWindow(int lower, int upper, int count) { + ArrayList window = new ArrayList(); + + // In the case that the window is invalid or uninitialized, return an empty window. + if ((lower == 0 && upper == 0) || lower < 0 || upper < 0) { + return window; + } + + if (lower <= upper) { + for (int i = lower; i <= upper; i++){ + window.add(i); + } + } else { + // If the upper bound is less than the lower bound it means that the visible window + // wraps around. + for (int i = lower; i < count; i++) { + window.add(i); + } + for (int i = 0; i <= upper; i++) { + window.add(i); + } + } + return window; + } + public void notifyDataSetChanged() { // Dequeue any unbind messages mMainQueue.removeMessages(sUnbindServiceMessageType); diff --git a/core/java/android/widget/ScrollView.java b/core/java/android/widget/ScrollView.java index ebc54f4527c..8747dc3dba5 100644 --- a/core/java/android/widget/ScrollView.java +++ b/core/java/android/widget/ScrollView.java @@ -25,6 +25,7 @@ import android.os.Bundle; import android.os.StrictMode; import android.util.AttributeSet; +import android.util.Log; import android.view.FocusFinder; import android.view.InputDevice; import android.view.KeyEvent; @@ -69,6 +70,8 @@ public class ScrollView extends FrameLayout { static final float MAX_SCROLL_FACTOR = 0.5f; + private static final String TAG = "ScrollView"; + private long mLastScroll; private final Rect mTempRect = new Rect(); @@ -478,6 +481,12 @@ public boolean onInterceptTouchEvent(MotionEvent ev) { } final int pointerIndex = ev.findPointerIndex(activePointerId); + if (pointerIndex == -1) { + Log.e(TAG, "Invalid pointerId=" + activePointerId + + " in onInterceptTouchEvent"); + break; + } + final int y = (int) ev.getY(pointerIndex); final int yDiff = Math.abs(y - mLastMotionY); if (yDiff > mTouchSlop) { @@ -585,6 +594,11 @@ public boolean onTouchEvent(MotionEvent ev) { } case MotionEvent.ACTION_MOVE: final int activePointerIndex = ev.findPointerIndex(mActivePointerId); + if (activePointerIndex == -1) { + Log.e(TAG, "Invalid pointerId=" + mActivePointerId + " in onTouchEvent"); + break; + } + final int y = (int) ev.getY(activePointerIndex); int deltaY = mLastMotionY - y; if (!mIsBeingDragged && Math.abs(deltaY) > mTouchSlop) { diff --git a/core/java/android/widget/Scroller.java b/core/java/android/widget/Scroller.java index a6e83f06048..9aec733d6c3 100644 --- a/core/java/android/widget/Scroller.java +++ b/core/java/android/widget/Scroller.java @@ -19,10 +19,12 @@ import android.content.Context; import android.hardware.SensorManager; import android.os.Build; +import android.os.PowerManager; import android.util.FloatMath; import android.view.ViewConfiguration; import android.view.animation.AnimationUtils; import android.view.animation.Interpolator; +import java.io.*; /** @@ -68,10 +70,15 @@ public class Scroller { private static float END_TENSION = 1.0f - START_TENSION; private static final int NB_SAMPLES = 100; private static final float[] SPLINE = new float[NB_SAMPLES + 1]; + private static final String scalingMaxFreqFile = "/sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq"; + + private int maxFreq = readFileIntoInt(scalingMaxFreqFile); private float mDeceleration; private final float mPpi; + private final PowerManager mPm; + static { float x_min = 0.0f; for (int i = 0; i <= NB_SAMPLES; i++) { @@ -100,6 +107,21 @@ public class Scroller { private static float sViscousFluidScale; private static float sViscousFluidNormalize; + + // Reads file into variable + private int readFileIntoInt(String fileToBeRead) { + try { + File fileObject = new File(fileToBeRead); + Reader readerObject = new FileReader(fileObject); + BufferedReader bufferedReaderObject = new BufferedReader(readerObject); + String stringDataFromFile = bufferedReaderObject.readLine(); + readerObject.close(); + bufferedReaderObject.close(); + return Integer.parseInt(stringDataFromFile.trim()); + } catch (IOException e) { + return 1000000; + } + } /** * Create a Scroller with the default duration and interpolator. @@ -129,6 +151,7 @@ public Scroller(Context context, Interpolator interpolator, boolean flywheel) { mPpi = context.getResources().getDisplayMetrics().density * 160.0f; mDeceleration = computeDeceleration(ViewConfiguration.getScrollFriction()); mFlywheel = flywheel; + mPm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); } /** @@ -343,6 +366,7 @@ public void startScroll(int startX, int startY, int dx, int dy, int duration) { mDeltaX = dx; mDeltaY = dy; mDurationReciprocal = 1.0f / (float) mDuration; + mPm.cpuBoost(maxFreq); } /** diff --git a/core/java/android/widget/SearchView.java b/core/java/android/widget/SearchView.java index a0e961fa420..9eca8238e4b 100644 --- a/core/java/android/widget/SearchView.java +++ b/core/java/android/widget/SearchView.java @@ -1506,6 +1506,9 @@ private Intent createVoiceAppSearchIntent(Intent baseIntent, SearchableInfo sear // because the voice search activity will always need to insert "QUERY" into // it anyway. Bundle queryExtras = new Bundle(); + if(this.mAppSearchData != null) { + queryExtras.putParcelable(SearchManager.APP_DATA, this.mAppSearchData); + } // Now build the intent to launch the voice search. Add all necessary // extras to launch the voice recognizer, and then all the necessary extras diff --git a/core/java/android/widget/Spinner.java b/core/java/android/widget/Spinner.java index 36d1ee0c8fc..64834b2a332 100644 --- a/core/java/android/widget/Spinner.java +++ b/core/java/android/widget/Spinner.java @@ -39,10 +39,16 @@ * The items in the Spinner come from the {@link Adapter} associated with * this view. * - *

See the Spinner - * tutorial.

+ *

See the Spinners guide.

* + * @attr ref android.R.styleable#Spinner_dropDownHorizontalOffset + * @attr ref android.R.styleable#Spinner_dropDownSelector + * @attr ref android.R.styleable#Spinner_dropDownVerticalOffset + * @attr ref android.R.styleable#Spinner_dropDownWidth + * @attr ref android.R.styleable#Spinner_gravity + * @attr ref android.R.styleable#Spinner_popupBackground * @attr ref android.R.styleable#Spinner_prompt + * @attr ref android.R.styleable#Spinner_spinnerMode */ @Widget public class Spinner extends AbsSpinner implements OnClickListener { @@ -409,6 +415,7 @@ protected void onDetachedFromWindow() { /** *

A spinner does not support item click events. Calling this method * will raise an exception.

+ *

Instead use {@link AdapterView#setOnItemSelectedListener}. * * @param l this listener will be ignored */ diff --git a/core/java/android/widget/Switch.java b/core/java/android/widget/Switch.java index 471f259cc95..56f66510fe1 100644 --- a/core/java/android/widget/Switch.java +++ b/core/java/android/widget/Switch.java @@ -53,6 +53,17 @@ * {@link #setSwitchTextAppearance(android.content.Context, int) switchTextAppearance} and * the related seSwitchTypeface() methods control that of the thumb. * + *

See the Toggle Buttons + * guide.

+ * + * @attr ref android.R.styleable#Switch_textOn + * @attr ref android.R.styleable#Switch_textOff + * @attr ref android.R.styleable#Switch_switchMinWidth + * @attr ref android.R.styleable#Switch_switchPadding + * @attr ref android.R.styleable#Switch_switchTextAppearance + * @attr ref android.R.styleable#Switch_thumb + * @attr ref android.R.styleable#Switch_thumbTextPadding + * @attr ref android.R.styleable#Switch_track */ public class Switch extends CompoundButton { private static final int TOUCH_MODE_IDLE = 0; diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java index 01617da73b9..0fa26c36088 100644 --- a/core/java/android/widget/TextView.java +++ b/core/java/android/widget/TextView.java @@ -5158,6 +5158,7 @@ private int doKeyDown(int keyCode, KeyEvent event, KeyEvent otherEvent) { switch (keyCode) { case KeyEvent.KEYCODE_ENTER: + case KeyEvent.KEYCODE_NUMPAD_ENTER: if (event.hasNoModifiers()) { // When mInputContentType is set, we know that we are // running in a "modern" cupcake environment, so don't need @@ -5328,6 +5329,7 @@ public boolean onKeyUp(int keyCode, KeyEvent event) { return super.onKeyUp(keyCode, event); case KeyEvent.KEYCODE_ENTER: + case KeyEvent.KEYCODE_NUMPAD_ENTER: if (event.hasNoModifiers()) { if (mEditor != null && mEditor.mInputContentType != null && mEditor.mInputContentType.onEditorActionListener != null diff --git a/core/java/android/widget/TimePicker.java b/core/java/android/widget/TimePicker.java index 18f7a916d68..cb9ed619613 100644 --- a/core/java/android/widget/TimePicker.java +++ b/core/java/android/widget/TimePicker.java @@ -48,8 +48,8 @@ * or 'P' to pick. For a dialog using this view, see * {@link android.app.TimePickerDialog}. *

- * See the Time Picker - * tutorial. + * See the Pickers + * guide. *

*/ @Widget diff --git a/core/java/android/widget/ToggleButton.java b/core/java/android/widget/ToggleButton.java index 4beee96ef54..cedc7772cb2 100644 --- a/core/java/android/widget/ToggleButton.java +++ b/core/java/android/widget/ToggleButton.java @@ -31,8 +31,8 @@ * Displays checked/unchecked states as a button * with a "light" indicator and by default accompanied with the text "ON" or "OFF". * - *

See the Form Stuff - * tutorial.

+ *

See the Toggle Buttons + * guide.

* * @attr ref android.R.styleable#ToggleButton_textOn * @attr ref android.R.styleable#ToggleButton_textOff diff --git a/core/java/android/widget/VideoView.java b/core/java/android/widget/VideoView.java index 0fba498b7eb..7608e6ac969 100644 --- a/core/java/android/widget/VideoView.java +++ b/core/java/android/widget/VideoView.java @@ -79,6 +79,8 @@ public class VideoView extends SurfaceView implements MediaPlayerControl { private int mVideoHeight; private int mSurfaceWidth; private int mSurfaceHeight; + private int mPreviousWidth; + private int mPreviousHeight; private MediaController mMediaController; private OnCompletionListener mOnCompletionListener; private MediaPlayer.OnPreparedListener mOnPreparedListener; @@ -121,6 +123,18 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { //width+"/"+height+"="+ //mVideoWidth+"/"+mVideoHeight); } + mPreviousWidth = mVideoWidth; + mPreviousHeight = mVideoHeight; + } else if (mPreviousWidth > 0 && mPreviousHeight > 0) { + width = getDefaultSize(mPreviousWidth, widthMeasureSpec); + height = getDefaultSize(mPreviousHeight, heightMeasureSpec); + if ( mPreviousWidth * height > width * mPreviousHeight ) { + Log.i("VideoView", "image too tall, correcting"); + height = width * mPreviousHeight / mPreviousWidth; + } else if ( mPreviousWidth * height < width * mPreviousHeight ) { + Log.i("VideoView", "image too wide, correcting"); + width = height * mPreviousWidth / mPreviousHeight; + } } //Log.i("@@@@@@@@@@", "setting size: " + width + 'x' + height); setMeasuredDimension(width, height); diff --git a/core/java/com/android/internal/app/AOKPLogoActivity.java b/core/java/com/android/internal/app/AOKPLogoActivity.java new file mode 100644 index 00000000000..a4eeb97b26e --- /dev/null +++ b/core/java/com/android/internal/app/AOKPLogoActivity.java @@ -0,0 +1,128 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.internal.app; + +import android.app.Activity; +import android.content.ActivityNotFoundException; +import android.content.Intent; +import android.graphics.Typeface; +import android.os.Bundle; +import android.os.Handler; +import android.util.DisplayMetrics; +import android.view.Gravity; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; +import android.widget.Toast; + +public class AOKPLogoActivity extends Activity { + Toast mToast; + ImageView mContent; + int mCount; + final Handler mHandler = new Handler(); + + private View makeView() { + DisplayMetrics metrics = new DisplayMetrics(); + getWindowManager().getDefaultDisplay().getMetrics(metrics); + + LinearLayout view = new LinearLayout(this); + view.setOrientation(LinearLayout.VERTICAL); + view.setLayoutParams( + new ViewGroup.LayoutParams( + ViewGroup.LayoutParams.WRAP_CONTENT, + ViewGroup.LayoutParams.WRAP_CONTENT + )); + final int p = (int)(8 * metrics.density); + view.setPadding(p, p, p, p); + + Typeface light = Typeface.create("sans-serif-light", Typeface.NORMAL); + Typeface normal = Typeface.create("sans-serif", Typeface.BOLD); + + final float size = 14 * metrics.density; + final LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams( + LinearLayout.LayoutParams.WRAP_CONTENT, + LinearLayout.LayoutParams.WRAP_CONTENT); + lp.gravity = Gravity.CENTER_HORIZONTAL; + lp.bottomMargin = (int) (-4*metrics.density); + + TextView tv = new TextView(this); + if (light != null) tv.setTypeface(light); + tv.setTextSize(1.25f*size); + tv.setTextColor(0xFFFFFFFF); + tv.setShadowLayer(4*metrics.density, 0, 2*metrics.density, 0x66000000); + tv.setText("Android Open Kang Project"); + view.addView(tv, lp); + + tv = new TextView(this); + if (normal != null) tv.setTypeface(normal); + tv.setTextSize(size); + tv.setTextColor(0xFFFFFFFF); + tv.setShadowLayer(4*metrics.density, 0, 2*metrics.density, 0x66000000); + tv.setText(""); + view.addView(tv, lp); + + return view; + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + mToast = Toast.makeText(this, "", Toast.LENGTH_LONG); + mToast.setView(makeView()); + + DisplayMetrics metrics = new DisplayMetrics(); + getWindowManager().getDefaultDisplay().getMetrics(metrics); + + mContent = new ImageView(this); + mContent.setImageResource(com.android.internal.R.drawable.aokplogo_alt); + mContent.setScaleType(ImageView.ScaleType.CENTER_INSIDE); + + final int p = (int)(32 * metrics.density); + mContent.setPadding(p, p, p, p); + + mContent.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + mToast.show(); + mContent.setImageResource(com.android.internal.R.drawable.aokplogo); + } + }); + + mContent.setOnLongClickListener(new View.OnLongClickListener() { + @Override + public boolean onLongClick(View v) { + try { + startActivity(new Intent(Intent.ACTION_MAIN) + .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK + | Intent.FLAG_ACTIVITY_CLEAR_TASK + | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS) + .addCategory("com.android.internal.category.AOKPLOGO")); + //.setClassName("com.android.systemui","com.android.systemui.UnicornSack")); + } catch (ActivityNotFoundException ex) { + android.util.Log.e("AOKPLogoActivity", "Couldn't find a sack of unicorns."); + } + finish(); + return true; + } + }); + + setContentView(mContent); + } +} diff --git a/core/java/com/android/internal/app/ActivityTrigger.java b/core/java/com/android/internal/app/ActivityTrigger.java new file mode 100644 index 00000000000..71aeff3c770 --- /dev/null +++ b/core/java/com/android/internal/app/ActivityTrigger.java @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2011, Code Aurora Forum. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of Code Aurora nor + * the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written + * permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package com.android.internal.app; + +import android.content.ComponentName; +import android.content.Intent; +import android.util.Log; + +public class ActivityTrigger +{ + private static final String TAG = "ActivityTrigger"; + + /** &hide */ + public ActivityTrigger() { + //Log.d(TAG, "ActivityTrigger initialized"); + } + + /** &hide */ + protected void finalize() { + native_at_deinit(); + } + + /** &hide */ + public void activityStartTrigger(Intent intent) { + ComponentName cn = intent.getComponent(); + String activity = null; + + if (cn != null) + activity = cn.flattenToString(); + native_at_startActivity(activity); + } + + /** &hide */ + public void activityResumeTrigger(Intent intent) { + ComponentName cn = intent.getComponent(); + String activity = null; + + if (cn != null) + activity = cn.flattenToString(); + native_at_resumeActivity(activity); + } + + private native void native_at_startActivity(String activity); + private native void native_at_resumeActivity(String activity); + private native void native_at_deinit(); +} diff --git a/core/java/com/android/internal/app/AlertController.java b/core/java/com/android/internal/app/AlertController.java index 2061c905ebb..56b5937a0de 100644 --- a/core/java/com/android/internal/app/AlertController.java +++ b/core/java/com/android/internal/app/AlertController.java @@ -347,6 +347,18 @@ public void setIcon(Drawable icon) { } } + /** + * @param attrId the attributeId of the theme-specific drawable + * to resolve the resourceId for. + * + * @return resId the resourceId of the theme-specific drawable + */ + public int getIconAttributeResId(int attrId) { + TypedValue out = new TypedValue(); + mContext.getTheme().resolveAttribute(attrId, out, true); + return out.resourceId; + } + public void setInverseBackgroundForced(boolean forceInverseBackground) { mForceInverseBackground = forceInverseBackground; } @@ -740,6 +752,7 @@ public static class AlertParams { public int mIconId = 0; public Drawable mIcon; + public int mIconAttrId = 0; public CharSequence mTitle; public View mCustomTitleView; public CharSequence mMessage; @@ -806,6 +819,9 @@ public void apply(AlertController dialog) { if (mIconId >= 0) { dialog.setIcon(mIconId); } + if (mIconAttrId > 0) { + dialog.setIcon(dialog.getIconAttributeResId(mIconAttrId)); + } } if (mMessage != null) { dialog.setMessage(mMessage); diff --git a/core/java/com/android/internal/app/IAssetRedirectionManager.aidl b/core/java/com/android/internal/app/IAssetRedirectionManager.aidl new file mode 100644 index 00000000000..8b47f0b31c2 --- /dev/null +++ b/core/java/com/android/internal/app/IAssetRedirectionManager.aidl @@ -0,0 +1,42 @@ +/* + * Copyright (C) 2011, T-Mobile USA, Inc. + * + * 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.app; + +import android.content.res.PackageRedirectionMap; + +/** + * Interface used to interact with the AssetRedirectionManagerService. + */ +interface IAssetRedirectionManager { + /** + * Access the package redirection map for the supplied package name given a + * particular theme. + */ + PackageRedirectionMap getPackageRedirectionMap(in String themePackageName, + String themeId, in String targetPackageName); + + /** + * Clear all redirection maps for the given theme. + */ + void clearRedirectionMapsByTheme(in String themePackageName, + in String themeId); + + /** + * Clear all redirection maps for the given target package. + */ + void clearPackageRedirectionMap(in String targetPackageName); +} diff --git a/core/java/com/android/internal/app/IMediaContainerService.aidl b/core/java/com/android/internal/app/IMediaContainerService.aidl old mode 100755 new mode 100644 diff --git a/core/java/com/android/internal/app/IUsageStats.aidl b/core/java/com/android/internal/app/IUsageStats.aidl old mode 100755 new mode 100644 diff --git a/core/java/com/android/internal/app/NetInitiatedActivity.java b/core/java/com/android/internal/app/NetInitiatedActivity.java old mode 100755 new mode 100644 diff --git a/core/java/com/android/internal/app/ResolverActivity.java b/core/java/com/android/internal/app/ResolverActivity.java index 7334ac304af..8c321bfbb64 100644 --- a/core/java/com/android/internal/app/ResolverActivity.java +++ b/core/java/com/android/internal/app/ResolverActivity.java @@ -38,6 +38,7 @@ import android.os.Process; import android.os.RemoteException; import android.os.UserId; +import android.provider.Settings; import android.util.Log; import android.view.LayoutInflater; import android.view.View; @@ -45,6 +46,7 @@ import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.Button; +import android.widget.CheckBox; import android.widget.GridView; import android.widget.ImageView; import android.widget.ListView; @@ -73,11 +75,13 @@ public class ResolverActivity extends AlertActivity implements AdapterView.OnIte private GridView mGrid; private Button mAlwaysButton; private Button mOnceButton; + private CheckBox mAlwaysCheckBox; private int mIconDpi; private int mIconSize; private int mMaxColumns; private boolean mRegistered; + private boolean mUseAltGrid; private final PackageMonitor mPackageMonitor = new PackageMonitor() { @Override public void onSomePackagesChanged() { mAdapter.handlePackagesChanged(); @@ -113,6 +117,7 @@ protected void onCreate(Bundle savedInstanceState, Intent intent, } catch (RemoteException e) { mLaunchedFromUid = -1; } + mUseAltGrid = Settings.System.getBoolean(getContentResolver(), Settings.System.ACTIVITY_RESOLVER_USE_ALT, false); mPm = getPackageManager(); mAlwaysUseOption = alwaysUseOption; mMaxColumns = getResources().getInteger(R.integer.config_maxResolverActivityColumns); @@ -137,7 +142,11 @@ protected void onCreate(Bundle savedInstanceState, Intent intent, finish(); return; } else if (count > 1) { - ap.mView = getLayoutInflater().inflate(R.layout.resolver_grid, null); + if (mUseAltGrid) { + ap.mView = getLayoutInflater().inflate(R.layout.resolver_grid_alt, null); + } else { + ap.mView = getLayoutInflater().inflate(R.layout.resolver_grid, null); + } mGrid = (GridView) ap.mView.findViewById(R.id.resolver_grid); mGrid.setAdapter(mAdapter); mGrid.setOnItemClickListener(this); @@ -164,8 +173,12 @@ protected void onCreate(Bundle savedInstanceState, Intent intent, final ViewGroup buttonLayout = (ViewGroup) findViewById(R.id.button_bar); if (buttonLayout != null) { buttonLayout.setVisibility(View.VISIBLE); - mAlwaysButton = (Button) buttonLayout.findViewById(R.id.button_always); - mOnceButton = (Button) buttonLayout.findViewById(R.id.button_once); + if (mUseAltGrid) { + mAlwaysCheckBox = (CheckBox) buttonLayout.findViewById(R.id.checkbox_always); + } else { + mAlwaysButton = (Button) buttonLayout.findViewById(R.id.button_always); + mOnceButton = (Button) buttonLayout.findViewById(R.id.button_once); + } } else { mAlwaysUseOption = false; } @@ -247,8 +260,10 @@ protected void onRestoreInstanceState(Bundle savedInstanceState) { if (mAlwaysUseOption) { final int checkedPos = mGrid.getCheckedItemPosition(); final boolean enabled = checkedPos != GridView.INVALID_POSITION; - mAlwaysButton.setEnabled(enabled); - mOnceButton.setEnabled(enabled); + if (!mUseAltGrid) { + mAlwaysButton.setEnabled(enabled); + mOnceButton.setEnabled(enabled); + } if (enabled) { mGrid.setSelection(checkedPos); } @@ -260,10 +275,16 @@ public void onItemClick(AdapterView parent, View view, int position, long id) if (mAlwaysUseOption) { final int checkedPos = mGrid.getCheckedItemPosition(); final boolean enabled = checkedPos != GridView.INVALID_POSITION; - mAlwaysButton.setEnabled(enabled); - mOnceButton.setEnabled(enabled); + if (!mUseAltGrid) { + mAlwaysButton.setEnabled(enabled); + mOnceButton.setEnabled(enabled); + } if (enabled) { - mGrid.smoothScrollToPosition(checkedPos); + if (mUseAltGrid) { + startSelected(position,mAlwaysCheckBox.isChecked()); + } else { + mGrid.smoothScrollToPosition(checkedPos); + } } } else { startSelected(position, false); diff --git a/core/java/com/android/internal/app/ThemeUtils.java b/core/java/com/android/internal/app/ThemeUtils.java new file mode 100644 index 00000000000..4265fd5e1b2 --- /dev/null +++ b/core/java/com/android/internal/app/ThemeUtils.java @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2012 The CyanogenMod 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.app; + +import android.content.Context; +import android.content.BroadcastReceiver; +import android.content.IntentFilter; +import android.content.pm.PackageManager; +import android.util.Log; + +/** + * @hide + */ + +public class ThemeUtils { + private static final String TAG = "ThemeUtils"; + private static final String DATA_TYPE_TMOBILE_STYLE = "vnd.tmobile.cursor.item/style"; + private static final String DATA_TYPE_TMOBILE_THEME = "vnd.tmobile.cursor.item/theme"; + private static final String ACTION_TMOBILE_THEME_CHANGED = "com.tmobile.intent.action.THEME_CHANGED"; + + public static Context createUiContext(final Context context) { + try { + return context.createPackageContext("com.android.systemui", Context.CONTEXT_RESTRICTED); + } catch (PackageManager.NameNotFoundException e) { + } + + return null; + } + + public static void registerThemeChangeReceiver(final Context context, final BroadcastReceiver receiver) { + IntentFilter filter = new IntentFilter(ACTION_TMOBILE_THEME_CHANGED); + try { + filter.addDataType(DATA_TYPE_TMOBILE_THEME); + filter.addDataType(DATA_TYPE_TMOBILE_STYLE); + } catch (IntentFilter.MalformedMimeTypeException e) { + Log.e(TAG, "Could not add MIME types to filter", e); + } + + context.registerReceiver(receiver, filter); + } +} + diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java index 515738555e8..b7711595182 100644 --- a/core/java/com/android/internal/os/BatteryStatsImpl.java +++ b/core/java/com/android/internal/os/BatteryStatsImpl.java @@ -1985,6 +1985,9 @@ public void notePhoneDataConnectionStateLocked(int dataType, boolean hasData) { case TelephonyManager.NETWORK_TYPE_EHRPD: bin = DATA_CONNECTION_EHRPD; break; + case TelephonyManager.NETWORK_TYPE_HSPAP: + bin = DATA_CONNECTION_HSPAP; + break; default: bin = DATA_CONNECTION_OTHER; break; @@ -2302,8 +2305,8 @@ public void noteNetworkInterfaceTypeLocked(String iface, int networkType) { batteryRealtime, which); } - @Override public int getPhoneSignalStrengthCount(int dataType, int which) { - return mPhoneDataConnectionsTimer[dataType].getCountLocked(which); + @Override public int getPhoneSignalStrengthCount(int strengthBin, int which) { + return mPhoneSignalStrengthsTimer[strengthBin].getCountLocked(which); } @Override public long getPhoneDataConnectionTime(int dataType, diff --git a/core/java/com/android/internal/os/PkgUsageStats.aidl b/core/java/com/android/internal/os/PkgUsageStats.aidl old mode 100755 new mode 100644 diff --git a/core/java/com/android/internal/os/PkgUsageStats.java b/core/java/com/android/internal/os/PkgUsageStats.java old mode 100755 new mode 100644 diff --git a/core/java/com/android/internal/os/ProcessStats.java b/core/java/com/android/internal/os/ProcessStats.java index 1923b86b28d..65d0896e4c9 100644 --- a/core/java/com/android/internal/os/ProcessStats.java +++ b/core/java/com/android/internal/os/ProcessStats.java @@ -154,7 +154,7 @@ public class ProcessStats { private boolean mFirst = true; - private byte[] mBuffer = new byte[256]; + private byte[] mBuffer = new byte[4096]; /** * The time in microseconds that the CPU has been running at each speed. @@ -556,7 +556,7 @@ public long[] getLastCpuSpeedTimes() { private long[] getCpuSpeedTimes(long[] out) { long[] tempTimes = out; long[] tempSpeeds = mCpuSpeeds; - final int MAX_SPEEDS = 20; + final int MAX_SPEEDS = 60; if (out == null) { tempTimes = new long[MAX_SPEEDS]; // Hopefully no more than that tempSpeeds = new long[MAX_SPEEDS]; @@ -582,6 +582,9 @@ private long[] getCpuSpeedTimes(long[] out) { } } catch (NumberFormatException nfe) { Slog.i(TAG, "Unable to parse time_in_state"); + } catch (java.util.NoSuchElementException nsee) { + Slog.i(TAG, "time_in_state changed size halfway?"); + break; } } } @@ -702,7 +705,9 @@ final public String printCurrentState(long now) { long sampleTime = mCurrentSampleTime - mLastSampleTime; long sampleRealTime = mCurrentSampleRealTime - mLastSampleRealTime; - long percAwake = sampleRealTime > 0 ? ((sampleTime*100) / sampleRealTime) : 0; + long percAwake = ((sampleRealTime > 0) + ? (sampleTime*100) / sampleRealTime + : 100); if (percAwake != 100) { pw.print(" with "); pw.print(percAwake); diff --git a/core/java/com/android/internal/os/ZygoteInit.java b/core/java/com/android/internal/os/ZygoteInit.java index ceda43b37cf..7538d80e3c3 100644 --- a/core/java/com/android/internal/os/ZygoteInit.java +++ b/core/java/com/android/internal/os/ZygoteInit.java @@ -66,7 +66,10 @@ public class ZygoteInit { private static final int LOG_BOOT_PROGRESS_PRELOAD_END = 3030; /** when preloading, GC after allocating this many bytes */ - private static final int PRELOAD_GC_THRESHOLD = 50000; + private static final String heapgrowthlimit = + SystemProperties.get("dalvik.vm.heapgrowthlimit", "16m"); + private static final int PRELOAD_GC_THRESHOLD = Integer.parseInt( + heapgrowthlimit.substring(0, heapgrowthlimit.length()-1))*1024*1024/2; public static final String USAGE_STRING = " <\"start-system-server\"|\"\" for startSystemServer>"; @@ -97,7 +100,7 @@ public class ZygoteInit { private static final String PRELOADED_CLASSES = "preloaded-classes"; /** Controls whether we should preload resources during zygote init. */ - private static final boolean PRELOAD_RESOURCES = true; + private static final boolean PRELOAD_RESOURCES = false; /** * Invokes a static "main(argv[]) method on class "className". @@ -359,6 +362,8 @@ private static void preloadResources() { ar.recycle(); Log.i(TAG, "...preloaded " + N + " resources in " + (SystemClock.uptimeMillis()-startTime) + "ms."); + } else { + Log.i(TAG, "Preload resources disabled, skipped."); } mResources.finishPreloading(); } catch (RuntimeException e) { diff --git a/core/java/com/android/internal/statusbar/IStatusBar.aidl b/core/java/com/android/internal/statusbar/IStatusBar.aidl index 294d4c44028..a175cfa5666 100644 --- a/core/java/com/android/internal/statusbar/IStatusBar.aidl +++ b/core/java/com/android/internal/statusbar/IStatusBar.aidl @@ -34,6 +34,7 @@ oneway interface IStatusBar void topAppWindowChanged(boolean menuVisible); void setImeWindowStatus(in IBinder token, int vis, int backDisposition); void setHardKeyboardStatus(boolean available, boolean enabled); + void toggleNotificationShade(); void toggleRecentApps(); void preloadRecentApps(); void cancelPreloadRecentApps(); diff --git a/core/java/com/android/internal/statusbar/IStatusBarService.aidl b/core/java/com/android/internal/statusbar/IStatusBarService.aidl index c64f1700d25..819b8d037b3 100644 --- a/core/java/com/android/internal/statusbar/IStatusBarService.aidl +++ b/core/java/com/android/internal/statusbar/IStatusBarService.aidl @@ -46,6 +46,7 @@ interface IStatusBarService void onNotificationClear(String pkg, String tag, int id); void setSystemUiVisibility(int vis, int mask); void setHardKeyboardEnabled(boolean enabled); + void toggleNotificationShade(); void toggleRecentApps(); void preloadRecentApps(); void cancelPreloadRecentApps(); diff --git a/core/java/com/android/internal/view/menu/ActionMenuPresenter.java b/core/java/com/android/internal/view/menu/ActionMenuPresenter.java index 73324c02645..8c94dd59f41 100644 --- a/core/java/com/android/internal/view/menu/ActionMenuPresenter.java +++ b/core/java/com/android/internal/view/menu/ActionMenuPresenter.java @@ -397,6 +397,7 @@ public boolean flagActionItems() { } // Flag as many more requested items as will fit. + // Compute required items prior to optional items for (int i = 0; i < itemsSize; i++) { MenuItemImpl item = visibleItems.get(i); @@ -421,7 +422,12 @@ public boolean flagActionItems() { seenGroups.put(groupId, true); } item.setIsActionButton(true); - } else if (item.requestsActionButton()) { + } + } + for (int i = 0; i < itemsSize; i++) { + MenuItemImpl item = visibleItems.get(i); + + if (item.requestsActionButton()) { // Items in a group with other items that already have an action slot // can break the max actions rule, but not the width limit. final int groupId = item.getGroupId(); diff --git a/core/java/com/android/internal/view/menu/ActionMenuView.java b/core/java/com/android/internal/view/menu/ActionMenuView.java index f54575b827d..cef6a8f5337 100644 --- a/core/java/com/android/internal/view/menu/ActionMenuView.java +++ b/core/java/com/android/internal/view/menu/ActionMenuView.java @@ -524,6 +524,9 @@ public void initialize(MenuBuilder menu) { @Override protected boolean hasDividerBeforeChildAt(int childIndex) { + if (childIndex == 0) { + return false; + } final View childBefore = getChildAt(childIndex - 1); final View child = getChildAt(childIndex); boolean result = false; diff --git a/core/java/com/android/internal/view/menu/MenuItemImpl.java b/core/java/com/android/internal/view/menu/MenuItemImpl.java index 9f7441d6f1e..7189610be9a 100644 --- a/core/java/com/android/internal/view/menu/MenuItemImpl.java +++ b/core/java/com/android/internal/view/menu/MenuItemImpl.java @@ -93,6 +93,7 @@ public final class MenuItemImpl implements MenuItem { */ private ContextMenuInfo mMenuInfo; + private static String sLanguage; private static String sPrependShortcutLabel; private static String sEnterShortcutLabel; private static String sDeleteShortcutLabel; @@ -114,7 +115,9 @@ public final class MenuItemImpl implements MenuItem { MenuItemImpl(MenuBuilder menu, int group, int id, int categoryOrder, int ordering, CharSequence title, int showAsAction) { - if (sPrependShortcutLabel == null) { + String lang = menu.getContext().getResources().getConfiguration().locale.toString(); + if (sPrependShortcutLabel == null || !lang.equals(sLanguage)) { + sLanguage = lang; // This is instantiated from the UI thread, so no chance of sync issues sPrependShortcutLabel = menu.getContext().getResources().getString( com.android.internal.R.string.prepend_shortcut_label); diff --git a/core/java/com/android/internal/widget/DigitalClock.java b/core/java/com/android/internal/widget/DigitalClock.java index af3fd425d4f..cfbe4514115 100644 --- a/core/java/com/android/internal/widget/DigitalClock.java +++ b/core/java/com/android/internal/widget/DigitalClock.java @@ -19,6 +19,7 @@ import com.android.internal.R; import android.content.BroadcastReceiver; +import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; @@ -46,6 +47,7 @@ public class DigitalClock extends RelativeLayout { private static final String SYSTEM_FONT_TIME_FOREGROUND = SYSTEM + "AndroidClock_Highlight.ttf"; private final static String M12 = "h:mm"; private final static String M24 = "kk:mm"; + private static final int COLOR_WHITE = 0xFFFFFFFF; private Calendar mCalendar; private String mFormat; @@ -235,6 +237,13 @@ public void updateTime() { mTimeDisplayBackground.setText(newTime); mTimeDisplayForeground.setText(newTime); mAmPm.setIsMorning(mCalendar.get(Calendar.AM_PM) == 0); + + ContentResolver resolver = mContext.getContentResolver(); + // our custom lockscreen colors need to be applied here + int mLockscreenColor = Settings.System.getInt(resolver, + Settings.System.LOCKSCREEN_CUSTOM_TEXT_COLOR, COLOR_WHITE); + mTimeDisplayBackground.setTextColor(mLockscreenColor); + mTimeDisplayForeground.setTextColor(mLockscreenColor); } private void setDateFormat() { diff --git a/core/java/com/android/internal/widget/DigitalClockAlt.java b/core/java/com/android/internal/widget/DigitalClockAlt.java new file mode 100644 index 00000000000..137cb253200 --- /dev/null +++ b/core/java/com/android/internal/widget/DigitalClockAlt.java @@ -0,0 +1,271 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.internal.widget; + +import com.android.internal.R; + +import android.content.BroadcastReceiver; +import android.content.ContentResolver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.database.ContentObserver; +import android.graphics.Typeface; +import android.os.Handler; +import android.provider.Settings; +import android.text.format.DateFormat; +import android.util.AttributeSet; +import android.view.View; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import java.lang.ref.WeakReference; +import java.text.DateFormatSymbols; +import java.util.Calendar; + +/** + * Displays the time + */ +public class DigitalClockAlt extends RelativeLayout { + + private static final String SYSTEM = "/system/fonts/"; + private static final String SYSTEM_FONT_TIME_BOLD = SYSTEM + "AndroidClockMono-Bold.ttf"; + private static final String SYSTEM_FONT_TIME_LIGHT = SYSTEM + "AndroidClockMono-Light.ttf"; + private static final String SYSTEM_FONT_TIME_THIN = SYSTEM + "AndroidClockMono-Thin.ttf"; + private final static String M12 = "h:mm"; + private final static String M24 = "kk:mm"; + private static final int COLOR_WHITE = 0xFFFFFFFF; + + private Calendar mCalendar; + private AmPm mAmPm; + private String mFormat; + private TextView mTimeDisplayHours; + private TextView mTimeDisplayMinutes; + private TextView mSep; + private ContentObserver mFormatChangeObserver; + private int mAttached = 0; // for debugging - tells us whether attach/detach is unbalanced + + /* called by system on minute ticks */ + private final Handler mHandler = new Handler(); + private BroadcastReceiver mIntentReceiver; + + private static final Typeface sBoldFont; + private static final Typeface sLightFont; + private static final Typeface sThinFont; + + static { + sBoldFont = Typeface.createFromFile(SYSTEM_FONT_TIME_BOLD); + sLightFont = Typeface.createFromFile(SYSTEM_FONT_TIME_LIGHT); + sThinFont = Typeface.createFromFile(SYSTEM_FONT_TIME_THIN); + } + + private static class TimeChangedReceiver extends BroadcastReceiver { + private WeakReference mClock; + private Context mContext; + + public TimeChangedReceiver(DigitalClockAlt clock) { + mClock = new WeakReference(clock); + mContext = clock.getContext(); + } + + @Override + public void onReceive(Context context, Intent intent) { + // Post a runnable to avoid blocking the broadcast. + final boolean timezoneChanged = + intent.getAction().equals(Intent.ACTION_TIMEZONE_CHANGED); + final DigitalClockAlt clock = mClock.get(); + if (clock != null) { + clock.mHandler.post(new Runnable() { + public void run() { + if (timezoneChanged) { + clock.mCalendar = Calendar.getInstance(); + } + clock.updateTime(); + } + }); + } else { + try { + mContext.unregisterReceiver(this); + } catch (RuntimeException e) { + // Shouldn't happen + } + } + } + }; + + static class AmPm { + private TextView mAmPmTextView; + private String mAmString, mPmString; + + AmPm(View parent, Typeface tf) { + mAmPmTextView = (TextView) parent.findViewById(R.id.ampm); + if (mAmPmTextView != null && tf != null) { + mAmPmTextView.setTypeface(sLightFont); + } + + String[] ampm = new DateFormatSymbols().getAmPmStrings(); + mAmString = ampm[0]; + mPmString = ampm[1]; + } + + void setAmPmColor(int color) { + mAmPmTextView.setTextColor(color); + } + + void setShowAmPm(boolean show) { + if (mAmPmTextView != null) { + mAmPmTextView.setVisibility(show ? View.VISIBLE : View.GONE); + } + } + + void setIsMorning(boolean isMorning) { + if (mAmPmTextView != null) { + mAmPmTextView.setText(isMorning ? mAmString : mPmString); + } + } + } + + private static class FormatChangeObserver extends ContentObserver { + private WeakReference mClock; + private Context mContext; + public FormatChangeObserver(DigitalClockAlt clock) { + super(new Handler()); + mClock = new WeakReference(clock); + mContext = clock.getContext(); + } + @Override + public void onChange(boolean selfChange) { + DigitalClockAlt digitalClock = mClock.get(); + if (digitalClock != null) { + digitalClock.setDateFormat(); + digitalClock.updateTime(); + } else { + try { + mContext.getContentResolver().unregisterContentObserver(this); + } catch (RuntimeException e) { + // Shouldn't happen + } + } + } + } + + public DigitalClockAlt(Context context) { + this(context, null); + } + + public DigitalClockAlt(Context context, AttributeSet attrs) { + super(context, attrs); + } + + @Override + protected void onFinishInflate() { + super.onFinishInflate(); + + /* The time display consists of two tones. That's why we have two overlapping text views. */ + mTimeDisplayHours = (TextView) findViewById(R.id.timeDisplayHours); + mTimeDisplayHours.setTypeface(sBoldFont); + + mSep = (TextView) findViewById(R.id.sep); + mSep.setText(":"); + mSep.setTypeface(sThinFont); + + mTimeDisplayMinutes = (TextView) findViewById(R.id.timeDisplayMinutes); + mTimeDisplayMinutes.setTypeface(sThinFont); + mAmPm = new AmPm(this, null); + mCalendar = Calendar.getInstance(); + + setDateFormat(); + } + + @Override + protected void onAttachedToWindow() { + super.onAttachedToWindow(); + + mAttached++; + + /* monitor time ticks, time changed, timezone */ + if (mIntentReceiver == null) { + mIntentReceiver = new TimeChangedReceiver(this); + IntentFilter filter = new IntentFilter(); + filter.addAction(Intent.ACTION_TIME_TICK); + filter.addAction(Intent.ACTION_TIME_CHANGED); + filter.addAction(Intent.ACTION_TIMEZONE_CHANGED); + mContext.registerReceiver(mIntentReceiver, filter); + } + + /* monitor 12/24-hour display preference */ + if (mFormatChangeObserver == null) { + mFormatChangeObserver = new FormatChangeObserver(this); + mContext.getContentResolver().registerContentObserver( + Settings.System.CONTENT_URI, true, mFormatChangeObserver); + } + + updateTime(); + } + + @Override + protected void onDetachedFromWindow() { + super.onDetachedFromWindow(); + + mAttached--; + + if (mIntentReceiver != null) { + mContext.unregisterReceiver(mIntentReceiver); + } + if (mFormatChangeObserver != null) { + mContext.getContentResolver().unregisterContentObserver( + mFormatChangeObserver); + } + + mFormatChangeObserver = null; + mIntentReceiver = null; + } + + void updateTime(Calendar c) { + mCalendar = c; + updateTime(); + } + + public void updateTime() { + mCalendar.setTimeInMillis(System.currentTimeMillis()); + + CharSequence newHour = DateFormat.format(mFormat.equals(M12) + ? "h" : "kk", mCalendar); + if (newHour.equals("0")) newHour = "12"; + mTimeDisplayHours.setText(newHour); + + CharSequence newMin = DateFormat.format("mm", mCalendar); + mTimeDisplayMinutes.setText(newMin); + + mAmPm.setIsMorning(mCalendar.get(Calendar.AM_PM) == 0); + + ContentResolver resolver = mContext.getContentResolver(); + // our custom lockscreen colors need to be applied here + int mLockscreenColor = Settings.System.getInt(resolver, + Settings.System.LOCKSCREEN_CUSTOM_TEXT_COLOR, COLOR_WHITE); + mTimeDisplayHours.setTextColor(mLockscreenColor); + mTimeDisplayMinutes.setTextColor(mLockscreenColor); + mSep.setTextColor(mLockscreenColor); + mAmPm.setAmPmColor(mLockscreenColor); + } + + private void setDateFormat() { + mFormat = android.text.format.DateFormat.is24HourFormat(getContext()) + ? M24 : M12; + mAmPm.setShowAmPm(mFormat.equals(M12)); + } +} diff --git a/core/java/com/android/internal/widget/DrawableHolder.java b/core/java/com/android/internal/widget/DrawableHolder.java index 947e0f3c01e..27d3e1a5583 100644 --- a/core/java/com/android/internal/widget/DrawableHolder.java +++ b/core/java/com/android/internal/widget/DrawableHolder.java @@ -23,6 +23,8 @@ import android.animation.ValueAnimator; import android.animation.Animator.AnimatorListener; import android.graphics.Canvas; +import android.graphics.PorterDuff; +import android.graphics.PorterDuff.Mode; import android.graphics.drawable.BitmapDrawable; import android.util.Log; import android.view.animation.DecelerateInterpolator; @@ -41,6 +43,7 @@ public class DrawableHolder implements AnimatorListener { private float mScaleY = 1.0f; private BitmapDrawable mDrawable; private float mAlpha = 1f; + private int mColor = 0x00000000; private ArrayList mAnimators = new ArrayList(); private ArrayList mNeedToStart = new ArrayList(); @@ -132,6 +135,8 @@ public void draw(Canvas canvas) { canvas.translate(mX, mY); canvas.scale(mScaleX, mScaleY); canvas.translate(-0.5f*getWidth(), -0.5f*getHeight()); + mDrawable.setColorFilter(null); + mDrawable.setColorFilter(mColor, PorterDuff.Mode.SRC_ATOP); mDrawable.setAlpha((int) Math.round(mAlpha * 255f)); mDrawable.draw(canvas); canvas.restore(); @@ -175,6 +180,10 @@ public void setAlpha(float alpha) { mAlpha = alpha; } + public void setColor(int color) { + mColor = color; + } + public float getX() { return mX; } diff --git a/core/java/com/android/internal/widget/LockPatternUtils.java b/core/java/com/android/internal/widget/LockPatternUtils.java index f77e8f3c6b9..12b793fa874 100644 --- a/core/java/com/android/internal/widget/LockPatternUtils.java +++ b/core/java/com/android/internal/widget/LockPatternUtils.java @@ -899,7 +899,7 @@ public void setVisiblePatternEnabled(boolean enabled) { * @return Whether tactile feedback for the pattern is enabled. */ public boolean isTactileFeedbackEnabled() { - return getBoolean(Settings.Secure.LOCK_PATTERN_TACTILE_FEEDBACK_ENABLED, false); + return getBoolean(Settings.Secure.LOCK_PATTERN_TACTILE_FEEDBACK_ENABLED, true); } /** diff --git a/core/java/com/android/internal/widget/LockPatternView.java b/core/java/com/android/internal/widget/LockPatternView.java index 0d9cf9ac4d2..5f756db833e 100644 --- a/core/java/com/android/internal/widget/LockPatternView.java +++ b/core/java/com/android/internal/widget/LockPatternView.java @@ -64,6 +64,7 @@ public class LockPatternView extends View { private Paint mPaint = new Paint(); private Paint mPathPaint = new Paint(); + private Paint mMsgPaint = new Paint(); // TODO: make this common with PhoneWindow static final int STATUS_BAR_HEIGHT = 25; @@ -115,6 +116,8 @@ public class LockPatternView extends View { private Bitmap mBitmapCircleGreen; private Bitmap mBitmapCircleRed; + private String mIncorrectPatternMsg; + private Bitmap mBitmapArrowGreenUp; private Bitmap mBitmapArrowRedUp; @@ -267,6 +270,12 @@ public LockPatternView(Context context, AttributeSet attrs) { mPathPaint.setStrokeJoin(Paint.Join.ROUND); mPathPaint.setStrokeCap(Paint.Cap.ROUND); + mMsgPaint.setAntiAlias(true); + mMsgPaint.setDither(true); + mMsgPaint.setColor(Color.RED); // TODO this should be from the style + mMsgPaint.setTextAlign(Paint.Align.CENTER); + + // lot's of bitmaps! mBitmapBtnDefault = getBitmapFor(R.drawable.btn_code_lock_default_holo); mBitmapBtnTouched = getBitmapFor(R.drawable.btn_code_lock_touched_holo); @@ -286,6 +295,8 @@ public LockPatternView(Context context, AttributeSet attrs) { mBitmapHeight = Math.max(mBitmapHeight, bitmap.getHeight()); } + // incorrect pattern message + mIncorrectPatternMsg = context.getResources().getString(R.string.lockscreen_pattern_wrong); } private Bitmap getBitmapFor(int resId) { @@ -452,6 +463,9 @@ protected void onSizeChanged(int w, int h, int oldw, int oldh) { final int height = h - mPaddingTop - mPaddingBottom; mSquareHeight = height / 3.0f; + + // Try to set a message size relative to square size + mMsgPaint.setTextSize(mSquareHeight / 6); } private int resolveMeasured(int measureSpec, int desired) @@ -930,11 +944,17 @@ protected void onDraw(Canvas canvas) { } } + // If lock pattern is in stealth mode and the pattern was wrong + // show a text advising of the pattern failure + float msgLeftX = paddingLeft + squareWidth + (squareWidth / 2); + float msgTopY = paddingTop + (squareHeight * 2); + drawMsg(canvas, (int) msgLeftX, (int) msgTopY); + // TODO: the path should be created and cached every time we hit-detect a cell // only the last segment of the path should be computed here // draw the path of the pattern (unless the user is in progress, and // we are in stealth mode) - final boolean drawPath = (!mInStealthMode || mPatternDisplayMode == DisplayMode.Wrong); + final boolean drawPath = !mInStealthMode; // draw the arrows associated with the path (unless the user is in progress, and // we are in stealth mode) @@ -1038,7 +1058,7 @@ private void drawCircle(Canvas canvas, int leftX, int topY, boolean partOfPatter Bitmap outerCircle; Bitmap innerCircle; - if (!partOfPattern || (mInStealthMode && mPatternDisplayMode != DisplayMode.Wrong)) { + if (!partOfPattern || (mInStealthMode)) { // unselected circle outerCircle = mBitmapCircleDefault; innerCircle = mBitmapBtnDefault; @@ -1081,6 +1101,17 @@ private void drawCircle(Canvas canvas, int leftX, int topY, boolean partOfPatter canvas.drawBitmap(innerCircle, mCircleMatrix, mPaint); } + /** + * @param canvas + * @param leftX + * @param topY + */ + private void drawMsg(Canvas canvas, int leftX, int topY) { + if (mInStealthMode && mPatternDisplayMode == DisplayMode.Wrong) { + canvas.drawText(mIncorrectPatternMsg, leftX, topY, mMsgPaint); + } + } + @Override protected Parcelable onSaveInstanceState() { Parcelable superState = super.onSaveInstanceState(); diff --git a/core/java/com/android/internal/widget/TransportControlView.java b/core/java/com/android/internal/widget/TransportControlView.java index 2f525858c6f..da35b2b4f5e 100644 --- a/core/java/com/android/internal/widget/TransportControlView.java +++ b/core/java/com/android/internal/widget/TransportControlView.java @@ -38,6 +38,7 @@ import android.os.Parcelable; import android.os.RemoteException; import android.os.SystemClock; +import android.provider.Settings; import android.text.Spannable; import android.text.TextUtils; import android.text.style.ForegroundColorSpan; @@ -66,8 +67,11 @@ public class TransportControlView extends FrameLayout implements OnClickListener protected static final boolean DEBUG = false; protected static final String TAG = "TransportControlView"; + private View mLayout; private ImageView mAlbumArt; private TextView mTrackTitle; + private TextView mTrackAlbum; + private TextView mTrackArtist; private ImageView mBtnPrev; private ImageView mBtnPlay; private ImageView mBtnNext; @@ -80,6 +84,7 @@ public class TransportControlView extends FrameLayout implements OnClickListener private AudioManager mAudioManager; private LockScreenWidgetCallback mWidgetCallbacks; private IRemoteControlDisplayWeak mIRCD; + private boolean mCirclesLock; /** * The metadata which should be populated into the view once we've been attached @@ -111,6 +116,9 @@ public void handleMessage(Message msg) { } mMetadata.bitmap = (Bitmap) msg.obj; mAlbumArt.setImageBitmap(mMetadata.bitmap); + if (mCirclesLock) { + mAlbumArt.setAlpha(0.5f); + } } break; @@ -197,6 +205,9 @@ public TransportControlView(Context context, AttributeSet attrs) { mAudioManager = new AudioManager(mContext); mCurrentPlayState = RemoteControlClient.PLAYSTATE_NONE; // until we get a callback mIRCD = new IRemoteControlDisplayWeak(mHandler); + mCirclesLock = Settings.System.getBoolean( + context.getContentResolver(), + Settings.System.USE_CIRCLES_LOCKSCREEN, false); } private void updateTransportControls(int transportControlFlags) { @@ -206,12 +217,34 @@ private void updateTransportControls(int transportControlFlags) { @Override public void onFinishInflate() { super.onFinishInflate(); - mTrackTitle = (TextView) findViewById(R.id.title); - mTrackTitle.setSelected(true); // enable marquee - mAlbumArt = (ImageView) findViewById(R.id.albumart); - mBtnPrev = (ImageView) findViewById(R.id.btn_prev); - mBtnPlay = (ImageView) findViewById(R.id.btn_play); - mBtnNext = (ImageView) findViewById(R.id.btn_next); + if (Settings.System.getInt(mContext.getContentResolver(), + Settings.System.LOCKSCREEN_STOCK_MUSIC_LAYOUT, 0) == 0) { + mLayout = (View) findViewById(R.id.layout_stock); + mLayout.setVisibility(View.GONE); + + mTrackTitle = (TextView) findViewById(R.id.title_aokp); + mTrackTitle.setSelected(true); // enable marquee + mTrackAlbum = (TextView) findViewById(R.id.album_aokp); + mTrackAlbum.setSelected(true); // enable marquee + mTrackArtist = (TextView) findViewById(R.id.artist_aokp); + mTrackArtist.setSelected(true); // enable marquee + mAlbumArt = (ImageView) findViewById(R.id.albumart_aokp); + mBtnPrev = (ImageView) findViewById(R.id.btn_prev_aokp); + mBtnPlay = (ImageView) findViewById(R.id.btn_play_aokp); + mBtnNext = (ImageView) findViewById(R.id.btn_next_aokp); + } + else { + mLayout = (View) findViewById(R.id.layout_aokp); + mLayout.setVisibility(View.GONE); + + mTrackTitle = (TextView) findViewById(R.id.title_stock); + mTrackTitle.setSelected(true); // enable marquee + mAlbumArt = (ImageView) findViewById(R.id.albumart_stock); + mBtnPrev = (ImageView) findViewById(R.id.btn_prev_stock); + mBtnPlay = (ImageView) findViewById(R.id.btn_play_stock); + mBtnNext = (ImageView) findViewById(R.id.btn_next_stock); + } + final View buttons[] = { mBtnPrev, mBtnPlay, mBtnNext }; for (View view : buttons) { view.setOnClickListener(this); @@ -280,36 +313,42 @@ private void updateMetadata(Bundle data) { * Populates the given metadata into the view */ private void populateMetadata() { - StringBuilder sb = new StringBuilder(); - int trackTitleLength = 0; - if (!TextUtils.isEmpty(mMetadata.trackTitle)) { - sb.append(mMetadata.trackTitle); - trackTitleLength = mMetadata.trackTitle.length(); - } - if (!TextUtils.isEmpty(mMetadata.artist)) { - if (sb.length() != 0) { - sb.append(" - "); + if (Settings.System.getInt(mContext.getContentResolver(), Settings.System.LOCKSCREEN_STOCK_MUSIC_LAYOUT, 0) == 0) { + mTrackTitle.setText(mMetadata.trackTitle); + mTrackAlbum.setText(mMetadata.albumTitle); + mTrackArtist.setText(mMetadata.artist); + } + else { + StringBuilder sb = new StringBuilder(); + int trackTitleLength = 0; + if (!TextUtils.isEmpty(mMetadata.trackTitle)) { + sb.append(mMetadata.trackTitle); + trackTitleLength = mMetadata.trackTitle.length(); } - sb.append(mMetadata.artist); - } - if (!TextUtils.isEmpty(mMetadata.albumTitle)) { - if (sb.length() != 0) { - sb.append(" - "); + if (!TextUtils.isEmpty(mMetadata.artist)) { + if (sb.length() != 0) { + sb.append(" - "); + } + sb.append(mMetadata.artist); + } + if (!TextUtils.isEmpty(mMetadata.albumTitle)) { + if (sb.length() != 0) { + sb.append(" - "); + } + sb.append(mMetadata.albumTitle); + } + mTrackTitle.setText(sb.toString(), TextView.BufferType.SPANNABLE); + Spannable str = (Spannable) mTrackTitle.getText(); + if (trackTitleLength != 0) { + str.setSpan(new ForegroundColorSpan(0xffffffff), 0, trackTitleLength, + Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + trackTitleLength++; + } + if (sb.length() > trackTitleLength) { + str.setSpan(new ForegroundColorSpan(0x7fffffff), trackTitleLength, sb.length(), + Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } - sb.append(mMetadata.albumTitle); - } - mTrackTitle.setText(sb.toString(), TextView.BufferType.SPANNABLE); - Spannable str = (Spannable) mTrackTitle.getText(); - if (trackTitleLength != 0) { - str.setSpan(new ForegroundColorSpan(0xffffffff), 0, trackTitleLength, - Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); - trackTitleLength++; - } - if (sb.length() > trackTitleLength) { - str.setSpan(new ForegroundColorSpan(0x7fffffff), trackTitleLength, sb.length(), - Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } - mAlbumArt.setImageBitmap(mMetadata.bitmap); final int flags = mTransportControlFlags; setVisibilityBasedOnFlag(mBtnPrev, flags, RemoteControlClient.FLAG_KEY_MEDIA_PREVIOUS); diff --git a/core/java/com/android/internal/widget/multiwaveview/CirclesView.java b/core/java/com/android/internal/widget/multiwaveview/CirclesView.java new file mode 100644 index 00000000000..3659b2bcb59 --- /dev/null +++ b/core/java/com/android/internal/widget/multiwaveview/CirclesView.java @@ -0,0 +1,603 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.internal.widget.multiwaveview; + +import java.io.File; +import java.util.ArrayList; + +import android.animation.ValueAnimator; +import android.content.Context; +import android.content.res.Resources; +import android.content.res.TypedArray; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.ColorFilter; +import android.graphics.PixelFormat; +import android.graphics.Paint; +import android.graphics.PorterDuff; +import android.graphics.PorterDuff.Mode; +import android.graphics.PorterDuffXfermode; +import android.graphics.drawable.Drawable; +import android.graphics.drawable.BitmapDrawable; +import android.os.Vibrator; +import android.provider.Settings; +import android.text.TextUtils; +import android.util.AttributeSet; +import android.util.Log; +import android.view.MotionEvent; +import android.view.View; +import android.view.accessibility.AccessibilityEvent; +import android.view.accessibility.AccessibilityManager; + +import com.android.internal.widget.DrawableHolder; +import com.android.internal.widget.LockPatternUtils; + +import com.android.internal.R; + +/** + * A special widget containing a center and outer ring. Moving the center ring to the outer ring + * causes an event that can be caught by implementing OnTriggerListener. + */ +public class CirclesView extends View implements ValueAnimator.AnimatorUpdateListener { + private static final String TAG = "CirclesView"; + private static final boolean DBG = false; + private static final int VIBRATE_DURATION = 20; // msec + + // Lock state machine states + private static final int STATE_RESET_LOCK = 0; + private static final int STATE_READY = 1; + private static final int STATE_START_ATTEMPT = 2; + private static final int STATE_ATTEMPTING = 3; + private static final int STATE_UNLOCK_ATTEMPT = 4; + private static final int STATE_UNLOCK_SUCCESS = 5; + + // Animation properties. + private static final long DURATION = 300; // duration of transitional animations + private static final long FINAL_DURATION = 500; // duration of final animations when unlocking + private static final long RING_DELAY = 1300; // when to start fading animated rings + private static final long FINAL_DELAY = 200; // delay for unlock success animation + private static final long SHORT_DELAY = 100; // for starting one animation after another. + private static final long RESET_TIMEOUT = 500; // elapsed time of inactivity before we reset + + /** + * The scale by which to multiply the unlock handle width to compute the radius + * in which it can be grabbed when accessibility is disabled. + */ + private static final float GRAB_HANDLE_RADIUS_SCALE_ACCESSIBILITY_DISABLED = 0.1f; + + /** + * The scale by which to multiply the unlock handle width to compute the radius + * in which it can be grabbed when accessibility is enabled (more generous). + */ + private static final float GRAB_HANDLE_RADIUS_SCALE_ACCESSIBILITY_ENABLED = 1.0f; + + private Vibrator mVibrator; + private int mVibrationDuration = VIBRATE_DURATION; + private LockPatternUtils mLockPatternUtils; + private OnTriggerListener mOnTriggerListener; + private ArrayList mDrawables = new ArrayList(4); + private boolean mFingerDown = false; + private float mRingRadius = 570.0f; // Radius of bitmap ring. Used to snap halo to it + private int mSnapRadius = 280; // minimum threshold for drag unlock + private float mLockCenterX; // center of widget as dictated by widget size + private float mLockCenterY; + private float mMouseX; // current mouse position as of last touch event + private float mMouseY; + private float mStartX; + private float mStartY; + private float mCircleSize; + private int mBgColor; + private int mRingColor; + private int mHaloColor; + private int mWaveColor; + private float mRingAlpha; + private float mHaloAlpha; + private float mWaveAlpha; + private DrawableHolder mUnlockRing; + private DrawableHolder mUnlockDefault; + private DrawableHolder mUnlockHalo; + private DrawableHolder mUnlockWave; + private Paint mPaint; + private int mLockState = STATE_RESET_LOCK; + private int mGrabbedState = OnTriggerListener.NO_HANDLE; + + public CirclesView(Context context) { + this(context, null); + } + + public CirclesView(Context context, AttributeSet attrs) { + super(context, attrs); + + mBgColor = Settings.System.getInt(context.getContentResolver(), + Settings.System.CIRCLES_LOCK_BG_COLOR, 0xD2000000); + mRingColor = Settings.System.getInt(context.getContentResolver(), + Settings.System.CIRCLES_LOCK_RING_COLOR, 0xFFFFFFFF); + mHaloColor = Settings.System.getInt(context.getContentResolver(), + Settings.System.CIRCLES_LOCK_HALO_COLOR, 0xFFFFFFFF); + mWaveColor = Settings.System.getInt(context.getContentResolver(), + Settings.System.CIRCLES_LOCK_WAVE_COLOR, 0xFFFFFFFF); + + mRingAlpha = Settings.System.getFloat(context.getContentResolver(), + Settings.System.CIRCLES_LOCK_RING_ALPHA, 1.0f); + mHaloAlpha = Settings.System.getFloat(context.getContentResolver(), + Settings.System.CIRCLES_LOCK_HALO_ALPHA, 1.0f); + mWaveAlpha = Settings.System.getFloat(context.getContentResolver(), + Settings.System.CIRCLES_LOCK_WAVE_ALPHA, 0.15f); + + mLockPatternUtils = new LockPatternUtils(context); + setVibrateEnabled(mVibrationDuration > 0 && mLockPatternUtils.isTactileFeedbackEnabled()); + + initDrawables(); + } + + @Override + protected void onSizeChanged(int w, int h, int oldw, int oldh) { + mLockCenterX = 0.5f * w; + mLockCenterY = 0.5f * h; + super.onSizeChanged(w, h, oldw, oldh); + } + + @Override + protected int getSuggestedMinimumWidth() { + // View should be large enough to contain the unlock ring + halo + return mUnlockRing.getWidth() + mUnlockHalo.getWidth(); + } + + @Override + protected int getSuggestedMinimumHeight() { + // View should be large enough to contain the unlock ring + halo + return mUnlockRing.getHeight() + mUnlockHalo.getHeight(); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + int widthSpecMode = MeasureSpec.getMode(widthMeasureSpec); + int heightSpecMode = MeasureSpec.getMode(heightMeasureSpec); + int widthSpecSize = MeasureSpec.getSize(widthMeasureSpec); + int heightSpecSize = MeasureSpec.getSize(heightMeasureSpec); + int width; + int height; + + if (widthSpecMode == MeasureSpec.AT_MOST) { + width = Math.min(widthSpecSize, getSuggestedMinimumWidth()); + } else if (widthSpecMode == MeasureSpec.EXACTLY) { + width = widthSpecSize; + } else { + width = getSuggestedMinimumWidth(); + } + + if (heightSpecMode == MeasureSpec.AT_MOST) { + height = Math.min(heightSpecSize, getSuggestedMinimumWidth()); + } else if (heightSpecMode == MeasureSpec.EXACTLY) { + height = heightSpecSize; + } else { + height = getSuggestedMinimumHeight(); + } + + setMeasuredDimension(width, height); + } + + private void initDrawables() { + mUnlockRing = new DrawableHolder(createDrawable(R.drawable.unlock_ring_circles)); + mUnlockRing.setColor(mRingColor); + mUnlockRing.setX(mLockCenterX); + mUnlockRing.setY(mLockCenterY); + mUnlockRing.setScaleX(0.1f); + mUnlockRing.setScaleY(0.1f); + mUnlockRing.setAlpha(0.0f); + mDrawables.add(mUnlockRing); + + mUnlockHalo = new DrawableHolder(createDrawable(R.drawable.unlock_halo_circles)); + mUnlockHalo.setColor(mHaloColor); + mUnlockHalo.setX(mLockCenterX); + mUnlockHalo.setY(mLockCenterY); + mUnlockHalo.setScaleX(0.1f); + mUnlockHalo.setScaleY(0.1f); + mUnlockHalo.setAlpha(0.0f); + mDrawables.add(mUnlockHalo); + + mUnlockWave = new DrawableHolder(createDrawable(R.drawable.unlock_wave_circles)); + mUnlockWave.setColor(mWaveColor); + mUnlockWave.setX(mLockCenterX); + mUnlockWave.setY(mLockCenterY); + mUnlockWave.setScaleX(0.1f); + mUnlockWave.setScaleY(0.1f); + mUnlockWave.setAlpha(0.0f); + mDrawables.add(mUnlockWave); + } + + private void waveUpdateFrame(float mouseX, float mouseY, boolean fingerDown) { + double distX = mouseX - mStartX; + double distY = mouseY - mStartY; + int dragDistance = (int) Math.ceil(Math.hypot(distX, distY)); + double touchA = Math.atan2(distX, distY); + float ringX = (float) (mStartX + mRingRadius * Math.sin(touchA)); + float ringY = (float) (mStartY + mRingRadius * Math.cos(touchA)); + float handlescale = dragDistance * 3.0f / mRingRadius; + float wavescale = dragDistance * 1.5f / mRingRadius; + mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + mPaint.setXfermode(new PorterDuffXfermode(Mode.CLEAR)); + Drawable mBackgroundDrawable = new Drawable() { + @Override + public void draw(Canvas canvas) { + canvas.drawColor(mBgColor, PorterDuff.Mode.SRC); + canvas.drawCircle(mStartX, mStartY, mCircleSize, mPaint); + } + + @Override + public void setAlpha(int alpha) { + } + + @Override + public void setColorFilter(ColorFilter cf) { + } + + @Override + public int getOpacity() { + return PixelFormat.TRANSLUCENT; + } + }; + setBackgroundDrawable(mBackgroundDrawable); + if (handlescale <= 0.7f) { + handlescale = 0.7f; + } + if (wavescale <= 0.5f) { + wavescale = 0.5f; + } + if (wavescale >= 1.0f) { + wavescale = 1.0f; + } + + switch (mLockState) { + case STATE_RESET_LOCK: + if (DBG) Log.v(TAG, "State RESET_LOCK"); + + mUnlockRing.addAnimTo(DURATION, 0, "x", mStartX, true); + mUnlockRing.addAnimTo(DURATION, 0, "y", mStartY, true); + mUnlockRing.addAnimTo(DURATION, 0, "scaleX", 0.1f, true); + mUnlockRing.addAnimTo(DURATION, 0, "scaleY", 0.1f, true); + mUnlockRing.addAnimTo(DURATION, 0, "alpha", 0.0f, true); + + mUnlockHalo.removeAnimationFor("x"); + mUnlockHalo.removeAnimationFor("y"); + mUnlockHalo.removeAnimationFor("scaleX"); + mUnlockHalo.removeAnimationFor("scaleY"); + mUnlockHalo.removeAnimationFor("alpha"); + mUnlockHalo.setX(mStartX); + mUnlockHalo.setY(mStartY); + mUnlockHalo.setScaleX(0.7f); + mUnlockHalo.setScaleY(0.7f); + mUnlockHalo.setAlpha(0.0f); + + mUnlockWave.removeAnimationFor("x"); + mUnlockWave.removeAnimationFor("y"); + mUnlockWave.removeAnimationFor("scaleX"); + mUnlockWave.removeAnimationFor("scaleY"); + mUnlockWave.removeAnimationFor("alpha"); + mUnlockWave.setX(mStartX); + mUnlockWave.setY(mStartY); + mUnlockWave.setScaleX(0.5f); + mUnlockWave.setScaleY(0.5f); + mUnlockWave.setAlpha(0.0f); + mCircleSize = 0; + + removeCallbacks(mLockTimerActions); + + mLockState = STATE_READY; + break; + + case STATE_READY: + if (DBG) Log.v(TAG, "State READY"); + break; + + case STATE_START_ATTEMPT: + if (DBG) Log.v(TAG, "State START_ATTEMPT"); + + mUnlockHalo.setX(mStartX); + mUnlockHalo.setY(mStartY); + mUnlockHalo.setAlpha(mHaloAlpha); + + mUnlockWave.setX(mStartX); + mUnlockWave.setY(mStartY); + mUnlockWave.setAlpha(mWaveAlpha); + + mUnlockRing.setX(mStartX); + mUnlockRing.setY(mStartY); + mUnlockRing.addAnimTo(DURATION, 0, "scaleX", 1.0f, true); + mUnlockRing.addAnimTo(DURATION, 0, "scaleY", 1.0f, true); + mUnlockRing.addAnimTo(DURATION, 0, "alpha", mRingAlpha, true); + + mLockState = STATE_ATTEMPTING; + break; + + case STATE_ATTEMPTING: + if (DBG) Log.v(TAG, "State ATTEMPTING (fingerDown = " + fingerDown + ")"); + if (dragDistance > mSnapRadius) { + if (fingerDown) { + mUnlockHalo.setScaleX(1.5f); + mUnlockHalo.setScaleY(1.5f); + mUnlockHalo.setAlpha(mHaloAlpha); + mUnlockWave.setScaleX(wavescale); + mUnlockWave.setScaleY(wavescale); + mUnlockWave.setAlpha(mWaveAlpha); + } else { + if (DBG) Log.v(TAG, "up detected, moving to STATE_UNLOCK_ATTEMPT"); + mLockState = STATE_UNLOCK_ATTEMPT; + } + } else { + mUnlockHalo.setScaleX(handlescale); + mUnlockHalo.setScaleY(handlescale); + mCircleSize = dragDistance <= 130 + ? 130 : dragDistance; + mUnlockHalo.setAlpha(mHaloAlpha); + mUnlockWave.setScaleX(wavescale); + mUnlockWave.setScaleY(wavescale); + mUnlockWave.setAlpha(mWaveAlpha); + } + break; + + case STATE_UNLOCK_ATTEMPT: + if (DBG) Log.v(TAG, "State UNLOCK_ATTEMPT"); + if (dragDistance > mSnapRadius) { + mUnlockRing.setAlpha(0.0f); + + mUnlockHalo.addAnimTo(FINAL_DURATION, 0, "scaleX", 4.1f, false); + mUnlockHalo.addAnimTo(FINAL_DURATION, 0, "scaleY", 4.1f, false); + + mUnlockWave.addAnimTo(FINAL_DURATION, 0, "scaleX", 2.0f, false); + mUnlockWave.addAnimTo(FINAL_DURATION, 0, "scaleY", 2.0f, false); + + removeCallbacks(mLockTimerActions); + + postDelayed(mLockTimerActions, RESET_TIMEOUT); + + dispatchTriggerEvent(OnTriggerListener.CENTER_HANDLE); + mLockState = STATE_UNLOCK_SUCCESS; + } else { + mLockState = STATE_RESET_LOCK; + } + break; + + case STATE_UNLOCK_SUCCESS: + if (DBG) Log.v(TAG, "State UNLOCK_SUCCESS"); + break; + + default: + if (DBG) Log.v(TAG, "Unknown state " + mLockState); + break; + } + mUnlockHalo.startAnimations(this); + mUnlockRing.startAnimations(this); + mUnlockWave.startAnimations(this); + } + + BitmapDrawable createDrawable(int resId) { + Resources res = getResources(); + Bitmap bitmap = BitmapFactory.decodeResource(res, resId); + return new BitmapDrawable(res, bitmap); + } + + @Override + protected void onDraw(Canvas canvas) { + waveUpdateFrame(mMouseX, mMouseY, mFingerDown); + for (int i = 0; i < mDrawables.size(); ++i) { + mDrawables.get(i).draw(canvas); + } + } + + private final Runnable mLockTimerActions = new Runnable() { + public void run() { + if (DBG) Log.v(TAG, "LockTimerActions"); + // reset lock after inactivity + if (mLockState == STATE_ATTEMPTING) { + if (DBG) Log.v(TAG, "Timer resets to STATE_RESET_LOCK"); + mLockState = STATE_RESET_LOCK; + } + invalidate(); + } + }; + + @Override + public boolean onHoverEvent(MotionEvent event) { + if (AccessibilityManager.getInstance(mContext).isTouchExplorationEnabled()) { + final int action = event.getAction(); + switch (action) { + case MotionEvent.ACTION_HOVER_ENTER: + event.setAction(MotionEvent.ACTION_DOWN); + break; + case MotionEvent.ACTION_HOVER_MOVE: + event.setAction(MotionEvent.ACTION_MOVE); + break; + case MotionEvent.ACTION_HOVER_EXIT: + event.setAction(MotionEvent.ACTION_UP); + break; + } + onTouchEvent(event); + event.setAction(action); + } + return super.onHoverEvent(event); + } + + @Override + public boolean onTouchEvent(MotionEvent event) { + final int action = event.getAction(); + mMouseX = event.getX(); + mMouseY = event.getY(); + boolean handled = false; + switch (action) { + case MotionEvent.ACTION_DOWN: + removeCallbacks(mLockTimerActions); + mFingerDown = true; + mStartX = event.getX(); + mStartY = event.getY(); + tryTransitionToStartAttemptState(event); + handled = true; + break; + + case MotionEvent.ACTION_MOVE: + tryTransitionToStartAttemptState(event); + waveUpdateFrame(mMouseX, mMouseY, mFingerDown); + handled = true; + break; + + case MotionEvent.ACTION_UP: + if (DBG) Log.v(TAG, "ACTION_UP"); + mFingerDown = false; + postDelayed(mLockTimerActions, RESET_TIMEOUT); + setGrabbedState(OnTriggerListener.NO_HANDLE); + // Normally the state machine is driven by user interaction causing redraws. + // However, when there's no more user interaction and no running animations, + // the state machine stops advancing because onDraw() never gets called. + // The following ensures we advance to the next state in this case, + // either STATE_UNLOCK_ATTEMPT or STATE_RESET_LOCK. + waveUpdateFrame(mMouseX, mMouseY, mFingerDown); + handled = true; + break; + + case MotionEvent.ACTION_CANCEL: + mFingerDown = false; + handled = true; + break; + } + invalidate(); + return handled ? true : super.onTouchEvent(event); + } + + /** + * Tries to transition to start attempt state. + * + * @param event A motion event. + */ + private void tryTransitionToStartAttemptState(MotionEvent event) { + setGrabbedState(OnTriggerListener.CENTER_HANDLE); + mLockState = STATE_START_ATTEMPT; + if (AccessibilityManager.getInstance(mContext).isEnabled()) { + announceUnlockHandle(); + } + } + + /** + * @return The radius in which the handle is grabbed scaled based on + * whether accessibility is enabled. + */ + private float getScaledGrabHandleRadius() { + if (AccessibilityManager.getInstance(mContext).isEnabled()) { + return GRAB_HANDLE_RADIUS_SCALE_ACCESSIBILITY_ENABLED * mUnlockHalo.getWidth(); + } else { + return GRAB_HANDLE_RADIUS_SCALE_ACCESSIBILITY_DISABLED * mUnlockHalo.getWidth(); + } + } + + /** + * Announces the unlock handle if accessibility is enabled. + */ + private void announceUnlockHandle() { + setContentDescription(mContext.getString(R.string.description_target_unlock_tablet)); + sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED); + setContentDescription(null); + } + + /** + * Enable or disable vibrate on touch. + * + * @param enabled + */ + public void setVibrateEnabled(boolean enabled) { + if (enabled && mVibrator == null) { + mVibrator = (Vibrator) getContext().getSystemService(Context.VIBRATOR_SERVICE); + } else { + mVibrator = null; + } + } + + private void vibrate() { + if (mVibrator != null) { + mVibrator.vibrate(mVibrationDuration); + } + } + + /** + * Registers a callback to be invoked when the user triggers an event. + * + * @param listener the OnDialTriggerListener to attach to this view + */ + public void setOnTriggerListener(OnTriggerListener listener) { + mOnTriggerListener = listener; + } + + /** + * Dispatches a trigger event to listener. Ignored if a listener is not set. + * @param whichHandle the handle that triggered the event. + */ + private void dispatchTriggerEvent(int whichHandle) { + vibrate(); + if (mOnTriggerListener != null) { + mOnTriggerListener.onTrigger(this, whichHandle); + } + } + + /** + * Sets the current grabbed state, and dispatches a grabbed state change + * event to our listener. + */ + private void setGrabbedState(int newState) { + if (newState != mGrabbedState) { + mGrabbedState = newState; + if (mOnTriggerListener != null) { + mOnTriggerListener.onGrabbedStateChange(this, mGrabbedState); + } + } + } + + public interface OnTriggerListener { + /** + * Sent when the user releases the handle. + */ + public static final int NO_HANDLE = 0; + + /** + * Sent when the user grabs the center handle + */ + public static final int CENTER_HANDLE = 10; + + /** + * Called when the user drags the center ring beyond a threshold. + */ + void onTrigger(View v, int whichHandle); + + /** + * Called when the "grabbed state" changes (i.e. when the user either grabs or releases + * one of the handles.) + * + * @param v the view that was triggered + * @param grabbedState the new state: {@link #NO_HANDLE}, {@link #CENTER_HANDLE}, + */ + void onGrabbedStateChange(View v, int grabbedState); + } + + public void onAnimationUpdate(ValueAnimator animation) { + invalidate(); + } + + public void reset() { + if (DBG) Log.v(TAG, "reset() : resets state to STATE_RESET_LOCK"); + mLockState = STATE_RESET_LOCK; + invalidate(); + } +} diff --git a/core/java/com/android/internal/widget/multiwaveview/GlowPadView.java b/core/java/com/android/internal/widget/multiwaveview/GlowPadView.java index 4e60b7537e7..5dca0450e1b 100644 --- a/core/java/com/android/internal/widget/multiwaveview/GlowPadView.java +++ b/core/java/com/android/internal/widget/multiwaveview/GlowPadView.java @@ -32,6 +32,7 @@ import android.graphics.drawable.Drawable; import android.os.Bundle; import android.os.Vibrator; +import android.provider.Settings; import android.text.TextUtils; import android.util.AttributeSet; import android.util.Log; @@ -42,6 +43,7 @@ import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityManager; +import com.android.internal.widget.LockPatternUtils; import com.android.internal.R; import java.util.ArrayList; @@ -61,6 +63,28 @@ public class GlowPadView extends View { private static final int STATE_SNAP = 4; private static final int STATE_FINISH = 5; + //Lockscreen targets + /** + * @hide + */ + public final static String ICON_RESOURCE = "icon_resource"; + + /** + * @hide + */ + public final static String ICON_PACKAGE = "icon_package"; + + /** + * @hide + */ + public final static String ICON_FILE = "icon_file"; + + /** + * Empty target used to reference unused lockscreen targets + * @hide + */ + public final static String EMPTY_TARGET = "empty"; + // Animation properties. private static final float SNAP_MARGIN_DEFAULT = 20.0f; // distance to ring before we snap to it @@ -70,6 +94,7 @@ public interface OnTriggerListener { public void onGrabbed(View v, int handle); public void onReleased(View v, int handle); public void onTrigger(View v, int target); + public void onTargetChange(View v, int target); public void onGrabbedStateChange(View v, int handle); public void onFinishFinalAnimation(); } @@ -112,11 +137,13 @@ public interface OnTriggerListener { private float mWaveCenterY; private int mMaxTargetHeight; private int mMaxTargetWidth; + private LockPatternUtils mLockPatternUtils; private float mOuterRadius = 0.0f; private float mSnapMargin = 0.0f; private boolean mDragging; private int mNewTargetResources; + private ArrayList mNewTargetDrawables; private class AnimationBundle extends ArrayList { private static final long serialVersionUID = 0xA84D78726F127468L; @@ -182,6 +209,10 @@ public void onAnimationEnd(Animator animator) { internalSetTargetResources(mNewTargetResources); mNewTargetResources = 0; hideTargets(false, false); + } else if (mNewTargetDrawables != null) { + internalSetTargetResources(mNewTargetDrawables); + mNewTargetDrawables = null; + hideTargets(false, false); } mAnimatingTargets = false; } @@ -261,7 +292,8 @@ public GlowPadView(Context context, AttributeSet attrs) { mGravity = a.getInt(android.R.styleable.LinearLayout_gravity, Gravity.TOP); a.recycle(); - setVibrateEnabled(mVibrationDuration > 0); + mLockPatternUtils = new LockPatternUtils(context); + setVibrateEnabled(mVibrationDuration > 0 && mLockPatternUtils.isTactileFeedbackEnabled()); assignDefaultsIfNeeded(); @@ -417,6 +449,9 @@ private void deactivateTargets() { target.setState(TargetDrawable.STATE_INACTIVE); } mActiveTarget = -1; + if (mOnTriggerListener != null) { + mOnTriggerListener.onTargetChange(this, mActiveTarget); + } } /** @@ -452,6 +487,7 @@ private void doFinish() { // Force ring and targets to finish animation to final expanded state mTargetAnimations.stop(); } + hideTargets(false, false); } else { // Animate handle back to the center based on current state. hideGlow(HIDE_ANIMATION_DURATION, 0, 0.0f, mResetListenerWithPing); @@ -585,6 +621,14 @@ private void internalSetTargetResources(int resourceId) { } } + private void internalSetTargetResources(ArrayList drawList) { + mTargetResourceId = 0; + mTargetDrawables = drawList; + updateTargetPositions(mWaveCenterX, mWaveCenterY); + updatePointCloudPosition(mWaveCenterX, mWaveCenterY); + hideTargets(false, false); + } + /** * Loads an array of drawables from the given resourceId. * @@ -599,10 +643,23 @@ public void setTargetResources(int resourceId) { } } + public void setTargetResources(ArrayList drawList) { + if (mAnimatingTargets) { + // postpone this change until we return to the initial state + mNewTargetDrawables = drawList; + } else { + internalSetTargetResources(drawList); + } + } + public int getTargetResourceId() { return mTargetResourceId; } + public ArrayList getTargetDrawables() { + return mTargetDrawables; + } + /** * Sets the resource id specifying the target descriptions for accessibility. * @@ -878,6 +935,7 @@ private void handleMove(MotionEvent event) { TargetDrawable target = targets.get(activeTarget); if (target.hasState(TargetDrawable.STATE_FOCUSED)) { target.setState(TargetDrawable.STATE_FOCUSED); + vibrate(); } if (AccessibilityManager.getInstance(mContext).isEnabled()) { String targetContentDescription = getTargetDescription(activeTarget); @@ -886,6 +944,9 @@ private void handleMove(MotionEvent event) { } } mActiveTarget = activeTarget; + if (mOnTriggerListener !=null) { + mOnTriggerListener.onTargetChange(this, mActiveTarget); + } } @Override @@ -1096,7 +1157,7 @@ private void announceTargets() { } private String getTargetDescription(int index) { - if (mTargetDescriptions == null || mTargetDescriptions.isEmpty()) { + if (mTargetDescriptions == null || mTargetDescriptions.isEmpty() || index >= mTargetDescriptions.size()) { mTargetDescriptions = loadDescriptions(mTargetDescriptionsResourceId); if (mTargetDrawables.size() != mTargetDescriptions.size()) { Log.w(TAG, "The number of target drawables must be" @@ -1108,7 +1169,7 @@ private String getTargetDescription(int index) { } private String getDirectionDescription(int index) { - if (mDirectionDescriptions == null || mDirectionDescriptions.isEmpty()) { + if (mDirectionDescriptions == null || mDirectionDescriptions.isEmpty() || index >= mDirectionDescriptions.size()) { mDirectionDescriptions = loadDescriptions(mDirectionDescriptionsResourceId); if (mTargetDrawables.size() != mDirectionDescriptions.size()) { Log.w(TAG, "The number of target drawables must be" diff --git a/core/java/com/android/internal/widget/multiwaveview/TargetDrawable.java b/core/java/com/android/internal/widget/multiwaveview/TargetDrawable.java index 30f5f2f2dde..249c94892ea 100644 --- a/core/java/com/android/internal/widget/multiwaveview/TargetDrawable.java +++ b/core/java/com/android/internal/widget/multiwaveview/TargetDrawable.java @@ -28,9 +28,9 @@ public class TargetDrawable { private static final boolean DEBUG = false; public static final int[] STATE_ACTIVE = - { android.R.attr.state_enabled, android.R.attr.state_active }; + { android.R.attr.state_enabled, android.R.attr.state_active, -android.R.attr.state_focused }; public static final int[] STATE_INACTIVE = - { android.R.attr.state_enabled, -android.R.attr.state_active }; + { android.R.attr.state_enabled, -android.R.attr.state_active , -android.R.attr.state_focused }; public static final int[] STATE_FOCUSED = { android.R.attr.state_enabled, -android.R.attr.state_active, android.R.attr.state_focused }; @@ -91,6 +91,14 @@ public void setDrawable(Resources res, int resId) { setState(STATE_INACTIVE); } + public TargetDrawable(Resources res, Drawable drawable) { + mResourceId = 0; + // Mutate the drawable so we can animate shared drawable properties. + mDrawable = drawable != null ? drawable.mutate() : null; + resizeDrawables(); + setState(STATE_INACTIVE); + } + public TargetDrawable(TargetDrawable other) { mResourceId = other.mResourceId; // Mutate the drawable so we can animate shared drawable properties. diff --git a/core/java/com/google/android/mms/pdu/PduPersister.java b/core/java/com/google/android/mms/pdu/PduPersister.java index ee285aaba1c..08e125ebc00 100644 --- a/core/java/com/google/android/mms/pdu/PduPersister.java +++ b/core/java/com/google/android/mms/pdu/PduPersister.java @@ -30,12 +30,14 @@ import android.content.ContentUris; import android.content.ContentValues; import android.content.Context; +import android.content.SharedPreferences; import android.database.Cursor; import android.database.DatabaseUtils; import android.database.sqlite.SQLiteException; import android.drm.DrmManagerClient; import android.net.Uri; import android.os.FileUtils; +import android.preference.PreferenceManager; import android.provider.MediaStore; import android.provider.Telephony; import android.provider.Telephony.Mms; @@ -44,6 +46,7 @@ import android.provider.Telephony.Mms.Addr; import android.provider.Telephony.Mms.Part; import android.provider.Telephony.MmsSms.PendingMessages; +import android.telephony.TelephonyManager; import android.text.TextUtils; import android.util.Log; @@ -1299,6 +1302,10 @@ public Uri persist(GenericPdu pdu, Uri uri) throws MmsException { addressMap.put(addrType, array); } + // Check to see if Group MMS is enabled in Share Preferences + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(mContext); + boolean groupMMSEnabled = prefs.getBoolean("pref_key_mms_group_mms", true); + HashSet recipients = new HashSet(); int msgType = pdu.getMessageType(); // Here we only allocate thread ID for M-Notification.ind, @@ -1326,6 +1333,23 @@ public Uri persist(GenericPdu pdu, Uri uri) throws MmsException { } } } + + // This block checks if Group MMS is enabled and the PDU is incoming + // then adds every address in the TO field to recipients minus the owner's own address + if (groupMMSEnabled && msgType == PduHeaders.MESSAGE_TYPE_RETRIEVE_CONF) { + TelephonyManager mTelephonyMgr = (TelephonyManager)mContext.getSystemService(Context.TELEPHONY_SERVICE); + String phoneNo = mTelephonyMgr.getLine1Number(); + array = addressMap.get(PduHeaders.TO); + + if (array != null) { + for (EncodedStringValue v : array) { + if (v != null && !v.getString().replaceAll("\\D", "").equals(phoneNo.replaceAll("\\D", ""))) { + recipients.add(v.getString()); + } + } + } + } + if (!recipients.isEmpty()) { long threadId = Threads.getOrCreateThreadId(mContext, recipients); values.put(Mms.THREAD_ID, threadId); diff --git a/core/java/fm/last/api/Station.java b/core/java/fm/last/api/Station.java new file mode 100644 index 00000000000..3721edfd0ec --- /dev/null +++ b/core/java/fm/last/api/Station.java @@ -0,0 +1,58 @@ +/*************************************************************************** + * Copyright 2005-2009 Last.fm Ltd. * + * Portions contributed by Casey Link, Lukasz Wisniewski, * + * Mike Jennings, and Michael Novak Jr. * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ +package fm.last.api; + +import java.io.Serializable; + +/** + * @author jennings Date: Oct 23, 2008 + */ +public class Station implements Serializable { + + private static final long serialVersionUID = 1499806102972292532L; + private String name; + private String type; + private String url; + private String supportsDiscovery; + + public Station(String name, String type, String url, String supportsDiscovery) { + this.name = name; + this.type = type; + this.url = url; + this.supportsDiscovery = supportsDiscovery; + } + + public String getName() { + return name; + } + + public String getType() { + return type; + } + + public String getUrl() { + return url; + } + + public String getSupportsDiscovery() { + return supportsDiscovery; + } +} diff --git a/core/jni/Android.mk b/core/jni/Android.mk index c24f6c6608a..b2ae0b33f91 100644 --- a/core/jni/Android.mk +++ b/core/jni/Android.mk @@ -85,6 +85,7 @@ LOCAL_SRC_FILES:= \ android_util_Process.cpp \ android_util_StringBlock.cpp \ android_util_XmlBlock.cpp \ + android_util_PackageRedirectionMap.cpp \ android/graphics/AutoDecodeCancel.cpp \ android/graphics/Bitmap.cpp \ android/graphics/BitmapFactory.cpp \ @@ -157,6 +158,14 @@ LOCAL_SRC_FILES:= \ android_content_res_Configuration.cpp \ android_animation_PropertyValuesHolder.cpp +ifeq ($(BOARD_USES_QCOM_HARDWARE),true) + LOCAL_CFLAGS += -DQCOM_HARDWARE + LOCAL_SRC_FILES += \ + com_android_internal_app_ActivityTrigger.cpp + LOCAL_C_INCLUDES += \ + hardware/qcom/display/libtilerenderer +endif + LOCAL_C_INCLUDES += \ $(JNI_H_INCLUDE) \ $(LOCAL_PATH)/android/graphics \ @@ -218,6 +227,10 @@ LOCAL_SHARED_LIBRARIES := \ libharfbuzz \ libz +ifeq ($(BOARD_USES_QCOM_HARDWARE),true) + LOCAL_SHARED_LIBRARIES += libtilerenderer +endif + ifeq ($(USE_OPENGL_RENDERER),true) LOCAL_SHARED_LIBRARIES += libhwui endif diff --git a/core/jni/AndroidRuntime.cpp b/core/jni/AndroidRuntime.cpp index 241a905f1c1..f751bfc75ff 100644 --- a/core/jni/AndroidRuntime.cpp +++ b/core/jni/AndroidRuntime.cpp @@ -177,6 +177,10 @@ extern int register_android_content_res_ObbScanner(JNIEnv* env); extern int register_android_content_res_Configuration(JNIEnv* env); extern int register_android_animation_PropertyValuesHolder(JNIEnv *env); extern int register_com_android_internal_content_NativeLibraryHelper(JNIEnv *env); +extern int register_android_content_res_PackageRedirectionMap(JNIEnv* env); +#ifdef QCOM_HARDWARE +extern int register_com_android_internal_app_ActivityTrigger(JNIEnv *env); +#endif static AndroidRuntime* gCurRuntime = NULL; @@ -1196,6 +1200,12 @@ static const RegJNIRec gRegJNI[] = { REG_JNI(register_android_animation_PropertyValuesHolder), REG_JNI(register_com_android_internal_content_NativeLibraryHelper), + REG_JNI(register_android_content_res_PackageRedirectionMap), + +#ifdef QCOM_HARDWARE + REG_JNI(register_com_android_internal_app_ActivityTrigger), +#endif + }; /* diff --git a/core/jni/android/graphics/Bitmap.cpp b/core/jni/android/graphics/Bitmap.cpp index 3c27caf65c7..1bba5b43447 100644 --- a/core/jni/android/graphics/Bitmap.cpp +++ b/core/jni/android/graphics/Bitmap.cpp @@ -298,8 +298,18 @@ static bool Bitmap_compress(JNIEnv* env, jobject clazz, SkBitmap* bitmap, } bool success = false; - SkWStream* strm = CreateJavaOutputStreamAdaptor(env, jstream, jstorage); - if (NULL != strm) { + if (NULL != bitmap) { + SkAutoLockPixels alp(*bitmap); + + if (NULL == bitmap->getPixels()) { + return false; + } + + SkWStream* strm = CreateJavaOutputStreamAdaptor(env, jstream, jstorage); + if (NULL == strm) { + return false; + } + SkImageEncoder* encoder = SkImageEncoder::Create(fm); if (NULL != encoder) { success = encoder->encodeStream(strm, *bitmap, quality); diff --git a/core/jni/android/graphics/BitmapFactory.cpp b/core/jni/android/graphics/BitmapFactory.cpp index 416370e9bc1..69ef08099a5 100644 --- a/core/jni/android/graphics/BitmapFactory.cpp +++ b/core/jni/android/graphics/BitmapFactory.cpp @@ -327,7 +327,18 @@ static jobject doDecode(JNIEnv* env, SkStream* stream, jobject padding, const float sx = scaledWidth / float(decoded->width()); const float sy = scaledHeight / float(decoded->height()); - bitmap->setConfig(decoded->getConfig(), scaledWidth, scaledHeight); + SkBitmap::Config config = decoded->config(); + switch (config) { + case SkBitmap::kNo_Config: + case SkBitmap::kIndex8_Config: + case SkBitmap::kRLE_Index8_Config: + config = SkBitmap::kARGB_8888_Config; + break; + default: + break; + } + + bitmap->setConfig(config, scaledWidth, scaledHeight); bitmap->setIsOpaque(decoded->isOpaque()); bitmap->allocPixels(&javaAllocator, NULL); bitmap->eraseColor(0); diff --git a/core/jni/android/graphics/CreateJavaOutputStreamAdaptor.cpp b/core/jni/android/graphics/CreateJavaOutputStreamAdaptor.cpp index 6ce3f51925a..aa4cbde2f7c 100644 --- a/core/jni/android/graphics/CreateJavaOutputStreamAdaptor.cpp +++ b/core/jni/android/graphics/CreateJavaOutputStreamAdaptor.cpp @@ -164,7 +164,7 @@ SkStream* CreateJavaInputStreamAdaptor(JNIEnv* env, jobject stream, RETURN_NULL_IF_NULL(gInputStream_resetMethodID); RETURN_NULL_IF_NULL(gInputStream_markMethodID); RETURN_NULL_IF_NULL(gInputStream_availableMethodID); - RETURN_NULL_IF_NULL(gInputStream_availableMethodID); + RETURN_NULL_IF_NULL(gInputStream_readMethodID); RETURN_NULL_IF_NULL(gInputStream_skipMethodID); gInited = true; diff --git a/core/jni/android/graphics/Paint.cpp b/core/jni/android/graphics/Paint.cpp index a65262c0cb7..a4d5477bcc5 100644 --- a/core/jni/android/graphics/Paint.cpp +++ b/core/jni/android/graphics/Paint.cpp @@ -750,7 +750,7 @@ class SkPaintGlue { static void doTextBounds(JNIEnv* env, const jchar* text, int count, jobject bounds, const SkPaint& paint) { - SkRect r; + SkRect r{0,0,0,0}; SkIRect ir; sp value = TextLayoutEngine::getInstance().getValue(&paint, diff --git a/core/jni/android_bluetooth_HeadsetBase.cpp b/core/jni/android_bluetooth_HeadsetBase.cpp index 34447efc7e4..a773008fd8d 100644 --- a/core/jni/android_bluetooth_HeadsetBase.cpp +++ b/core/jni/android_bluetooth_HeadsetBase.cpp @@ -96,6 +96,22 @@ static int send_line(int fd, const char* line) { return 0; } +static int send_chars(int fd, const char* line) { + int nw; + int len = strlen(line); + int llen = len + 1; + char *buffer = (char *)calloc(llen, sizeof(char)); + + snprintf(buffer, llen, "%s", line); + + if (write_error_check(fd, buffer, llen - 1)) { + free(buffer); + return -1; + } + free(buffer); + return 0; +} + static void mask_eighth_bit(char *line) { for (;;line++) { @@ -177,6 +193,85 @@ static const char* get_line(int fd, char *buf, int len, int timeout_ms, return buf; } + +// specialized version of get_line that terminates on ESC(abort) or Ctrl-Z + +static const char* get_PDUline(int fd, char *buf, int len, int timeout_ms, + int *err) { + char *bufit=buf; + int fd_flags = fcntl(fd, F_GETFL, 0); + struct pollfd pfd; + +again: + *bufit = 0; + pfd.fd = fd; + pfd.events = POLLIN; + *err = errno = 0; + int ret = TEMP_FAILURE_RETRY(poll(&pfd, 1, timeout_ms)); + if (ret < 0) { + ALOGE("poll() error\n"); + *err = errno; + return NULL; + } + if (ret == 0) { + return NULL; + } + + if (pfd.revents & (POLLHUP | POLLERR | POLLNVAL)) { + ALOGW("RFCOMM poll() returned success (%d), " + "but with an unexpected revents bitmask: %#x\n", ret, pfd.revents); + errno = EIO; + *err = errno; + return NULL; + } + + while ((int)(bufit - buf) < (len - 1)) + { + errno = 0; + int rc = TEMP_FAILURE_RETRY(read(fd, bufit, 1)); + + if (!rc) + break; + + if (rc < 0) { + if (errno == EBUSY) { + ALOGI("read() error %s (%d): repeating read()...", + strerror(errno), errno); + goto again; + } + *err = errno; + ALOGE("read() error %s (%d)", strerror(errno), errno); + return NULL; + } + + if (*bufit == '\x1b') { // ESC - cause a string containing only ESC to be returned + *buf = '\x1b'; + bufit = buf+1; + break; + } + + if (*bufit=='\x1a') { // ctrl-z + break; + } + + bufit++; + } + + *bufit = 0; + + // According to ITU V.250 section 5.1, IA5 7 bit chars are used, + // the eighth bit or higher bits are ignored if they exists + // We mask out only eighth bit, no higher bit, since we do char + // string here, not wide char. + // We added this processing due to 2 real world problems. + // 1 BMW 2005 E46 which sends binary junk + // 2 Audi 2010 A3, dial command use 0xAD (soft-hyphen) as number + // formater, which was rejected by the AT handler + mask_eighth_bit(buf); + + return buf; +} + #endif static void classInitNative(JNIEnv* env, jclass clazz) { @@ -513,6 +608,20 @@ static jboolean sendURCNative(JNIEnv *env, jobject obj, jstring urc) { return JNI_FALSE; } +static jboolean sendURCNativeChars(JNIEnv *env, jobject obj, jstring urc) { +#ifdef HAVE_BLUETOOTH + native_data_t *nat = get_native_data(env, obj); + if (nat->rfcomm_connected) { + const char *c_urc = env->GetStringUTFChars(urc, NULL); + jboolean ret = send_chars(nat->rfcomm_sock, c_urc) == 0 ? JNI_TRUE : JNI_FALSE; + if (ret == JNI_TRUE) pretty_log_urc(c_urc); + env->ReleaseStringUTFChars(urc, c_urc); + return ret; + } +#endif + return JNI_FALSE; +} + static jstring readNative(JNIEnv *env, jobject obj, jint timeout_ms) { #ifdef HAVE_BLUETOOTH { @@ -532,6 +641,25 @@ static jstring readNative(JNIEnv *env, jobject obj, jint timeout_ms) { #endif } +static jstring readNativePDUStream(JNIEnv *env, jobject obj, jint timeout_ms) { +#ifdef HAVE_BLUETOOTH + { + native_data_t *nat = get_native_data(env, obj); + if (nat->rfcomm_connected) { + char buf[256]; + const char *ret = get_PDUline(nat->rfcomm_sock, + buf, sizeof(buf), + timeout_ms, + &nat->last_read_err); + return ret ? env->NewStringUTF(ret) : NULL; + } + return NULL; + } +#else + return NULL; +#endif +} + static jint getLastReadStatusNative(JNIEnv *env, jobject obj) { #ifdef HAVE_BLUETOOTH { @@ -555,7 +683,9 @@ static JNINativeMethod sMethods[] = { {"waitForAsyncConnectNative", "(I)I", (void *)waitForAsyncConnectNative}, {"disconnectNative", "()V", (void *)disconnectNative}, {"sendURCNative", "(Ljava/lang/String;)Z", (void *)sendURCNative}, + {"sendURCNativeChars", "(Ljava/lang/String;)Z", (void *)sendURCNativeChars}, {"readNative", "(I)Ljava/lang/String;", (void *)readNative}, + {"readNativePDUStream", "(I)Ljava/lang/String;", (void *)readNativePDUStream}, {"getLastReadStatusNative", "()I", (void *)getLastReadStatusNative}, }; diff --git a/core/jni/android_media_AudioRecord.cpp b/core/jni/android_media_AudioRecord.cpp index 0f04e6fd45e..a191e094ddc 100644 --- a/core/jni/android_media_AudioRecord.cpp +++ b/core/jni/android_media_AudioRecord.cpp @@ -1,5 +1,6 @@ /* * Copyright (C) 2008 The Android Open Source Project + * Copyright (c) 2012, Code Aurora Forum. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -49,6 +50,11 @@ struct fields_t { jmethodID postNativeEventInJava; //... event post callback method int PCM16; //... format constants int PCM8; //... format constants + int AMRNB; //... format constants + int AMRWB; //... format constants + int EVRC; //... format constants + int EVRCB; //... format constants + int EVRCWB; //... format constants jfieldID nativeRecorderInJavaObj; // provides access to the C++ AudioRecord object jfieldID nativeCallbackCookie; // provides access to the AudioRecord callback data }; @@ -162,6 +168,24 @@ static sp setAudioRecord(JNIEnv* env, jobject thiz, const spSetIntField(thiz, javaAudioRecordFields.nativeRecorderInJavaObj, (int)ar.get()); return old; } +int getformatrec(int audioformat) +{ + if(audioformat==javaAudioRecordFields.PCM16) + return AUDIO_FORMAT_PCM_16_BIT; +#ifdef QCOM_HARDWARE + else if(audioformat==javaAudioRecordFields.AMRNB) + return AUDIO_FORMAT_AMR_NB; + else if(audioformat==javaAudioRecordFields.AMRWB) + return AUDIO_FORMAT_AMR_WB; + else if(audioformat==javaAudioRecordFields.EVRC) + return AUDIO_FORMAT_EVRC; + else if(audioformat==javaAudioRecordFields.EVRCB) + return AUDIO_FORMAT_EVRCB; + else if(audioformat==javaAudioRecordFields.EVRCWB) + return AUDIO_FORMAT_EVRCWB; +#endif + return AUDIO_FORMAT_PCM_8_BIT; +} // ---------------------------------------------------------------------------- static int @@ -181,14 +205,23 @@ android_media_AudioRecord_setup(JNIEnv *env, jobject thiz, jobject weak_this, // compare the format against the Java constants if ((audioFormat != javaAudioRecordFields.PCM16) +#ifdef QCOM_HARDWARE + && (audioFormat != javaAudioRecordFields.AMRNB) + && (audioFormat != javaAudioRecordFields.AMRWB) + && (audioFormat != javaAudioRecordFields.EVRC) + && (audioFormat != javaAudioRecordFields.EVRCB) + && (audioFormat != javaAudioRecordFields.EVRCWB) +#endif && (audioFormat != javaAudioRecordFields.PCM8)) { ALOGE("Error creating AudioRecord: unsupported audio format."); return AUDIORECORD_ERROR_SETUP_INVALIDFORMAT; } - - int bytesPerSample = audioFormat==javaAudioRecordFields.PCM16 ? 2 : 1; - audio_format_t format = audioFormat==javaAudioRecordFields.PCM16 ? - AUDIO_FORMAT_PCM_16_BIT : AUDIO_FORMAT_PCM_8_BIT; + int bytesPerSample; + if(audioFormat == javaAudioRecordFields.PCM8) + bytesPerSample = 1; + else + bytesPerSample = 2; + audio_format_t format = (audio_format_t)getformatrec(audioFormat); if (buffSizeInBytes == 0) { ALOGE("Error creating AudioRecord: frameCount is 0."); @@ -515,8 +548,7 @@ static jint android_media_AudioRecord_get_min_buff_size(JNIEnv *env, jobject th int frameCount = 0; status_t result = AudioRecord::getMinFrameCount(&frameCount, sampleRateInHertz, - (audioFormat == javaAudioRecordFields.PCM16 ? - AUDIO_FORMAT_PCM_16_BIT : AUDIO_FORMAT_PCM_8_BIT), + (audio_format_t)getformatrec(audioFormat), nbChannels); if (result == BAD_VALUE) { @@ -525,7 +557,7 @@ static jint android_media_AudioRecord_get_min_buff_size(JNIEnv *env, jobject th if (result != NO_ERROR) { return -1; } - return frameCount * nbChannels * (audioFormat == javaAudioRecordFields.PCM16 ? 2 : 1); + return frameCount * nbChannels * (audioFormat == javaAudioRecordFields.PCM8 ? 1 : 2); } @@ -559,6 +591,11 @@ static JNINativeMethod gMethods[] = { #define JAVA_POSTEVENT_CALLBACK_NAME "postEventFromNative" #define JAVA_CONST_PCM16_NAME "ENCODING_PCM_16BIT" #define JAVA_CONST_PCM8_NAME "ENCODING_PCM_8BIT" +#define JAVA_CONST_AMRNB_NAME "ENCODING_AMRNB" +#define JAVA_CONST_AMRWB_NAME "ENCODING_AMRWB" +#define JAVA_CONST_EVRC_NAME "ENCODING_EVRC" +#define JAVA_CONST_EVRCB_NAME "ENCODING_EVRCB" +#define JAVA_CONST_EVRCWB_NAME "ENCODING_EVRCWB" #define JAVA_NATIVERECORDERINJAVAOBJ_FIELD_NAME "mNativeRecorderInJavaObj" #define JAVA_NATIVECALLBACKINFO_FIELD_NAME "mNativeCallbackCookie" @@ -622,7 +659,22 @@ int register_android_media_AudioRecord(JNIEnv *env) JAVA_CONST_PCM16_NAME, &(javaAudioRecordFields.PCM16)) || !android_media_getIntConstantFromClass(env, audioFormatClass, JAVA_AUDIOFORMAT_CLASS_NAME, - JAVA_CONST_PCM8_NAME, &(javaAudioRecordFields.PCM8)) ) { + JAVA_CONST_PCM8_NAME, &(javaAudioRecordFields.PCM8)) + || !android_media_getIntConstantFromClass(env, audioFormatClass, + JAVA_AUDIOFORMAT_CLASS_NAME, + JAVA_CONST_AMRNB_NAME, &(javaAudioRecordFields.AMRNB)) + || !android_media_getIntConstantFromClass(env, audioFormatClass, + JAVA_AUDIOFORMAT_CLASS_NAME, + JAVA_CONST_AMRWB_NAME, &(javaAudioRecordFields.AMRWB)) + || !android_media_getIntConstantFromClass(env, audioFormatClass, + JAVA_AUDIOFORMAT_CLASS_NAME, + JAVA_CONST_EVRC_NAME, &(javaAudioRecordFields.EVRC)) + || !android_media_getIntConstantFromClass(env, audioFormatClass, + JAVA_AUDIOFORMAT_CLASS_NAME, + JAVA_CONST_EVRCB_NAME, &(javaAudioRecordFields.EVRCB)) + || !android_media_getIntConstantFromClass(env, audioFormatClass, + JAVA_AUDIOFORMAT_CLASS_NAME, + JAVA_CONST_EVRCWB_NAME, &(javaAudioRecordFields.EVRCWB))) { // error log performed in getIntConstantFromClass() return -1; } diff --git a/core/jni/android_media_AudioTrack.cpp b/core/jni/android_media_AudioTrack.cpp index 7e5263d036b..a42b8644665 100644 --- a/core/jni/android_media_AudioTrack.cpp +++ b/core/jni/android_media_AudioTrack.cpp @@ -1,5 +1,6 @@ /* * Copyright (C) 2008 The Android Open Source Project + * Copyright (c) 2012, Code Aurora Forum. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -49,6 +50,19 @@ struct fields_t { jmethodID postNativeEventInJava; //... event post callback method int PCM16; //... format constants int PCM8; //... format constants + int AMRNB; //... format constants + int AMRWB; //... format constants + int EVRC; //... format constants + int EVRCB; //... format constants + int EVRCWB; //... format constants + int STREAM_VOICE_CALL; //... stream type constants + int STREAM_SYSTEM; //... stream type constants + int STREAM_RING; //... stream type constants + int STREAM_MUSIC; //... stream type constants + int STREAM_ALARM; //... stream type constants + int STREAM_NOTIFICATION; //... stream type constants + int STREAM_BLUETOOTH_SCO; //... stream type constants + int STREAM_DTMF; //... stream type constants int MODE_STREAM; //... memory mode int MODE_STATIC; //... memory mode jfieldID nativeTrackInJavaObj; // stores in Java the native AudioTrack object @@ -199,6 +213,25 @@ static sp setAudioTrack(JNIEnv* env, jobject thiz, const spGetObjectClass(thiz); @@ -516,7 +560,12 @@ jint writeToTrack(const sp& track, jint audioFormat, jbyte* data, if (track->sharedBuffer() == 0) { written = track->write(data + offsetInBytes, sizeInBytes); } else { - if (audioFormat == javaAudioTrackFields.PCM16) { + if ((audioFormat == javaAudioTrackFields.PCM16) + || (audioFormat == javaAudioTrackFields.AMRNB) + || (audioFormat == javaAudioTrackFields.AMRWB) + || (audioFormat == javaAudioTrackFields.EVRC) + || (audioFormat == javaAudioTrackFields.EVRCB) + || (audioFormat == javaAudioTrackFields.EVRCWB)) { // writing to shared memory, check for capacity if ((size_t)sizeInBytes > track->sharedBuffer()->size()) { sizeInBytes = track->sharedBuffer()->size(); @@ -791,7 +840,7 @@ static jint android_media_AudioTrack_get_min_buff_size(JNIEnv *env, jobject thi sampleRateInHertz) != NO_ERROR) { return -1; } - return frameCount * nbChannels * (audioFormat == javaAudioTrackFields.PCM16 ? 2 : 1); + return frameCount * nbChannels * (audioFormat == javaAudioTrackFields.PCM8 ? 1 : 2); } // ---------------------------------------------------------------------------- @@ -866,6 +915,11 @@ static JNINativeMethod gMethods[] = { #define JAVA_POSTEVENT_CALLBACK_NAME "postEventFromNative" #define JAVA_CONST_PCM16_NAME "ENCODING_PCM_16BIT" #define JAVA_CONST_PCM8_NAME "ENCODING_PCM_8BIT" +#define JAVA_CONST_AMRNB_NAME "ENCODING_AMRNB" +#define JAVA_CONST_AMRWB_NAME "ENCODING_AMRWB" +#define JAVA_CONST_EVRC_NAME "ENCODING_EVRC" +#define JAVA_CONST_EVRCB_NAME "ENCODING_EVRCB" +#define JAVA_CONST_EVRCWB_NAME "ENCODING_EVRCWB" #define JAVA_CONST_BUFFER_COUNT_NAME "BUFFER_COUNT" #define JAVA_CONST_STREAM_VOICE_CALL_NAME "STREAM_VOICE_CALL" #define JAVA_CONST_STREAM_SYSTEM_NAME "STREAM_SYSTEM" @@ -963,7 +1017,57 @@ int register_android_media_AudioTrack(JNIEnv *env) JAVA_CONST_PCM16_NAME, &(javaAudioTrackFields.PCM16)) || !android_media_getIntConstantFromClass(env, audioFormatClass, JAVA_AUDIOFORMAT_CLASS_NAME, - JAVA_CONST_PCM8_NAME, &(javaAudioTrackFields.PCM8)) ) { + JAVA_CONST_PCM8_NAME, &(javaAudioTrackFields.PCM8)) + || !android_media_getIntConstantFromClass(env, audioFormatClass, + JAVA_AUDIOFORMAT_CLASS_NAME, + JAVA_CONST_AMRNB_NAME, &(javaAudioTrackFields.AMRNB)) + || !android_media_getIntConstantFromClass(env, audioFormatClass, + JAVA_AUDIOFORMAT_CLASS_NAME, + JAVA_CONST_AMRWB_NAME, &(javaAudioTrackFields.AMRWB)) + || !android_media_getIntConstantFromClass(env, audioFormatClass, + JAVA_AUDIOFORMAT_CLASS_NAME, + JAVA_CONST_EVRC_NAME, &(javaAudioTrackFields.EVRC)) + || !android_media_getIntConstantFromClass(env, audioFormatClass, + JAVA_AUDIOFORMAT_CLASS_NAME, + JAVA_CONST_EVRCB_NAME, &(javaAudioTrackFields.EVRCB)) + || !android_media_getIntConstantFromClass(env, audioFormatClass, + JAVA_AUDIOFORMAT_CLASS_NAME, + JAVA_CONST_EVRCWB_NAME, &(javaAudioTrackFields.EVRCWB)) +) { + // error log performed in android_media_getIntConstantFromClass() + return -1; + } + // Get the stream types from the AudioManager class + jclass audioManagerClass = NULL; + audioManagerClass = env->FindClass(JAVA_AUDIOMANAGER_CLASS_NAME); + if (audioManagerClass == NULL) { + ALOGE("Can't find %s", JAVA_AUDIOMANAGER_CLASS_NAME); + return -1; + } + if ( !android_media_getIntConstantFromClass(env, audioManagerClass, + JAVA_AUDIOMANAGER_CLASS_NAME, + JAVA_CONST_STREAM_VOICE_CALL_NAME, &(javaAudioTrackFields.STREAM_VOICE_CALL)) + || !android_media_getIntConstantFromClass(env, audioManagerClass, + JAVA_AUDIOMANAGER_CLASS_NAME, + JAVA_CONST_STREAM_MUSIC_NAME, &(javaAudioTrackFields.STREAM_MUSIC)) + || !android_media_getIntConstantFromClass(env, audioManagerClass, + JAVA_AUDIOMANAGER_CLASS_NAME, + JAVA_CONST_STREAM_SYSTEM_NAME, &(javaAudioTrackFields.STREAM_SYSTEM)) + || !android_media_getIntConstantFromClass(env, audioManagerClass, + JAVA_AUDIOMANAGER_CLASS_NAME, + JAVA_CONST_STREAM_RING_NAME, &(javaAudioTrackFields.STREAM_RING)) + || !android_media_getIntConstantFromClass(env, audioManagerClass, + JAVA_AUDIOMANAGER_CLASS_NAME, + JAVA_CONST_STREAM_ALARM_NAME, &(javaAudioTrackFields.STREAM_ALARM)) + || !android_media_getIntConstantFromClass(env, audioManagerClass, + JAVA_AUDIOMANAGER_CLASS_NAME, + JAVA_CONST_STREAM_NOTIFICATION_NAME, &(javaAudioTrackFields.STREAM_NOTIFICATION)) + || !android_media_getIntConstantFromClass(env, audioManagerClass, + JAVA_AUDIOMANAGER_CLASS_NAME, + JAVA_CONST_STREAM_BLUETOOTH_SCO_NAME, &(javaAudioTrackFields.STREAM_BLUETOOTH_SCO)) + || !android_media_getIntConstantFromClass(env, audioManagerClass, + JAVA_AUDIOMANAGER_CLASS_NAME, + JAVA_CONST_STREAM_DTMF_NAME, &(javaAudioTrackFields.STREAM_DTMF))) { // error log performed in android_media_getIntConstantFromClass() return -1; } diff --git a/core/jni/android_server_BluetoothA2dpService.cpp b/core/jni/android_server_BluetoothA2dpService.cpp index d065a9e1eca..d2b6038ddcb 100644 --- a/core/jni/android_server_BluetoothA2dpService.cpp +++ b/core/jni/android_server_BluetoothA2dpService.cpp @@ -39,6 +39,13 @@ namespace android { #ifdef HAVE_BLUETOOTH static jmethodID method_onSinkPropertyChanged; static jmethodID method_onConnectSinkResult; +static jmethodID method_onGetPlayStatusRequest; +static jfieldID field_mTrackName; +static jfieldID field_mArtistName; +static jfieldID field_mAlbumName; +static jfieldID field_mMediaNumber; +static jfieldID field_mMediaCount; +static jfieldID field_mDuration; typedef struct { JavaVM *vm; @@ -49,6 +56,7 @@ typedef struct { static native_data_t *nat = NULL; // global native data static void onConnectSinkResult(DBusMessage *msg, void *user, void *n); +static void onStatusReply(DBusMessage *msg, void *user, void *n); static Properties sink_properties[] = { {"State", DBUS_TYPE_STRING}, @@ -216,6 +224,92 @@ static jboolean avrcpVolumeUpNative(JNIEnv *env, jobject object, return JNI_FALSE; } +static jboolean sendMetaDataNative(JNIEnv *env, jobject obj, + jstring path) { +#ifdef HAVE_BLUETOOTH + ALOGV(__FUNCTION__); + if (nat) { + jstring title, artist, album, media_number, total_media_count, playing_time; + const char *c_title, *c_artist, *c_album, *c_media_number; + const char *c_total_media_count, *c_playing_time; + const char *c_path = env->GetStringUTFChars(path, NULL); + title = (jstring) env->GetObjectField(obj, field_mTrackName); + artist = (jstring) env->GetObjectField(obj, field_mArtistName); + album = (jstring) env->GetObjectField(obj, field_mAlbumName); + media_number = (jstring) env->GetObjectField(obj, field_mMediaNumber); + total_media_count = (jstring) env->GetObjectField(obj, field_mMediaCount); + playing_time = (jstring) env->GetObjectField(obj, field_mDuration); + + c_title = env->GetStringUTFChars(title, NULL); + c_artist = env->GetStringUTFChars(artist, NULL); + c_album = env->GetStringUTFChars(album, NULL); + c_media_number = env->GetStringUTFChars(media_number, NULL); + c_total_media_count = env->GetStringUTFChars(total_media_count, NULL); + c_playing_time = env->GetStringUTFChars(playing_time, NULL); + + bool ret = dbus_func_args_async(env, nat->conn, -1, onStatusReply, NULL, nat, + c_path, "org.bluez.Control", "UpdateMetaData", + DBUS_TYPE_STRING, &c_title, + DBUS_TYPE_STRING, &c_artist, + DBUS_TYPE_STRING, &c_album, + DBUS_TYPE_STRING, &c_media_number, + DBUS_TYPE_STRING, &c_total_media_count, + DBUS_TYPE_STRING, &c_playing_time, + DBUS_TYPE_INVALID); + + env->ReleaseStringUTFChars(path, c_path); + env->ReleaseStringUTFChars(title, c_title); + env->ReleaseStringUTFChars(artist, c_artist); + env->ReleaseStringUTFChars(album, c_album); + env->ReleaseStringUTFChars(media_number, c_media_number); + env->ReleaseStringUTFChars(total_media_count, c_total_media_count); + env->ReleaseStringUTFChars(playing_time, c_playing_time); + + return ret ? JNI_TRUE : JNI_FALSE; + } +#endif + return JNI_FALSE; +} + + +static jboolean sendPlayStatusNative(JNIEnv *env, jobject object, jstring path, + jint duration, jint position, jint play_status) { +#ifdef HAVE_BLUETOOTH + ALOGV(__FUNCTION__); + if (nat) { + const char *c_path = env->GetStringUTFChars(path, NULL); + bool ret = dbus_func_args_async(env, nat->conn, -1, onStatusReply, NULL, nat, + c_path, "org.bluez.Control", "UpdatePlayStatus", + DBUS_TYPE_UINT32, &duration, + DBUS_TYPE_UINT32, &position, + DBUS_TYPE_UINT32, &play_status, + DBUS_TYPE_INVALID); + env->ReleaseStringUTFChars(path, c_path); + return ret ? JNI_TRUE : JNI_FALSE; + } +#endif + return JNI_FALSE; +} + +static jboolean sendEventNative(JNIEnv *env, jobject object, + jstring path, jint event_id, jlong data) { +#ifdef HAVE_BLUETOOTH + ALOGV(__FUNCTION__); + if (nat) { + const char *c_path = env->GetStringUTFChars(path, NULL); + + bool ret = dbus_func_args_async(env, nat->conn, -1, onStatusReply, NULL, nat, + c_path, "org.bluez.Control", "UpdateNotification", + DBUS_TYPE_UINT16, &event_id, + DBUS_TYPE_UINT64, &data, + DBUS_TYPE_INVALID); + env->ReleaseStringUTFChars(path, c_path); + return ret ? JNI_TRUE : JNI_FALSE; + } +#endif + return JNI_FALSE; +} + static jboolean avrcpVolumeDownNative(JNIEnv *env, jobject object, jstring path) { #ifdef HAVE_BLUETOOTH @@ -264,7 +358,12 @@ DBusHandlerResult a2dp_event_filter(DBusMessage *msg, JNIEnv *env) { env->DeleteLocalRef(path); result = DBUS_HANDLER_RESULT_HANDLED; return result; - } else { + } else if (dbus_message_is_signal(msg, "org.bluez.Control", + "GetPlayStatus")) { + env->CallVoidMethod(nat->me, method_onGetPlayStatusRequest); + result = DBUS_HANDLER_RESULT_HANDLED; + return result; + }else { ALOGV("... ignored"); } if (env->ExceptionCheck()) { @@ -304,6 +403,17 @@ void onConnectSinkResult(DBusMessage *msg, void *user, void *n) { free(user); } +void onStatusReply(DBusMessage *msg, void *user, void *n) { + ALOGV(__FUNCTION__); + + native_data_t *nat = (native_data_t *)n; + DBusError err; + dbus_error_init(&err); + if (dbus_set_error_from_message(&err, msg)) { + LOG_AND_FREE_DBUS_ERROR(&err); + } +} + #endif @@ -321,6 +431,9 @@ static JNINativeMethod sMethods[] = { (void *)getSinkPropertiesNative}, {"avrcpVolumeUpNative", "(Ljava/lang/String;)Z", (void*)avrcpVolumeUpNative}, {"avrcpVolumeDownNative", "(Ljava/lang/String;)Z", (void*)avrcpVolumeDownNative}, + {"sendMetaDataNative", "(Ljava/lang/String;)Z", (void*)sendMetaDataNative}, + {"sendEventNative", "(Ljava/lang/String;IJ)Z", (void*)sendEventNative}, + {"sendPlayStatusNative", "(Ljava/lang/String;III)Z", (void*)sendPlayStatusNative}, }; int register_android_server_BluetoothA2dpService(JNIEnv *env) { @@ -335,6 +448,14 @@ int register_android_server_BluetoothA2dpService(JNIEnv *env) { "(Ljava/lang/String;[Ljava/lang/String;)V"); method_onConnectSinkResult = env->GetMethodID(clazz, "onConnectSinkResult", "(Ljava/lang/String;Z)V"); + method_onGetPlayStatusRequest = env->GetMethodID(clazz, "onGetPlayStatusRequest", + "()V"); + field_mTrackName = env->GetFieldID(clazz, "mTrackName", "Ljava/lang/String;"); + field_mArtistName = env->GetFieldID(clazz, "mArtistName", "Ljava/lang/String;"); + field_mAlbumName = env->GetFieldID(clazz, "mAlbumName", "Ljava/lang/String;"); + field_mMediaNumber = env->GetFieldID(clazz, "mMediaNumber", "Ljava/lang/String;"); + field_mMediaCount = env->GetFieldID(clazz, "mMediaCount", "Ljava/lang/String;"); + field_mDuration = env->GetFieldID(clazz, "mDuration", "Ljava/lang/String;"); #endif return AndroidRuntime::registerNativeMethods(env, diff --git a/core/jni/android_server_BluetoothEventLoop.cpp b/core/jni/android_server_BluetoothEventLoop.cpp index 8a69ba43846..aa981fe2485 100644 --- a/core/jni/android_server_BluetoothEventLoop.cpp +++ b/core/jni/android_server_BluetoothEventLoop.cpp @@ -287,6 +287,13 @@ static jboolean setUpEventLoop(native_data_t *nat) { LOG_AND_FREE_DBUS_ERROR(&err); return JNI_FALSE; } + dbus_bus_add_match(nat->conn, + "type='signal',interface='"BLUEZ_DBUS_BASE_IFC".Control'", + &err); + if (dbus_error_is_set(&err)) { + LOG_AND_FREE_DBUS_ERROR(&err); + return JNI_FALSE; + } dbus_bus_add_match(nat->conn, "type='signal',interface='"BLUEZ_DBUS_BASE_IFC".HealthDevice'", @@ -453,6 +460,12 @@ static void tearDownEventLoop(native_data_t *nat) { if (dbus_error_is_set(&err)) { LOG_AND_FREE_DBUS_ERROR(&err); } + dbus_bus_remove_match(nat->conn, + "type='signal',interface='"BLUEZ_DBUS_BASE_IFC".Control'", + &err); + if (dbus_error_is_set(&err)) { + LOG_AND_FREE_DBUS_ERROR(&err); + } dbus_bus_remove_match(nat->conn, "type='signal',interface='"BLUEZ_DBUS_BASE_IFC".Device'", &err); diff --git a/core/jni/android_util_AssetManager.cpp b/core/jni/android_util_AssetManager.cpp index d422951039e..e29ea707d4d 100644 --- a/core/jni/android_util_AssetManager.cpp +++ b/core/jni/android_util_AssetManager.cpp @@ -1,6 +1,7 @@ /* //device/libs/android_runtime/android_util_AssetManager.cpp ** ** Copyright 2006, The Android Open Source Project +** This code has been modified. Portions copyright (C) 2010, T-Mobile USA, Inc. ** ** Licensed under the Apache License, Version 2.0 (the "License"); ** you may not use this file except in compliance with the License. @@ -34,9 +35,13 @@ #include #include #include +#include +#include #include +#define REDIRECT_NOISY(x) //x + namespace android { // ---------------------------------------------------------------------------- @@ -691,17 +696,23 @@ static jint android_content_AssetManager_loadResourceValue(JNIEnv* env, jobject } const ResTable& res(am->getResources()); + uint32_t ref = res.lookupRedirectionMap(ident); + if (ref == 0) { + ref = ident; + } else { + REDIRECT_NOISY(ALOGW("PERFORMED REDIRECT OF ident=0x%08x FOR ref=0x%08x\n", ident, ref)); + } + Res_value value; ResTable_config config; uint32_t typeSpecFlags; - ssize_t block = res.getResource(ident, &value, false, density, &typeSpecFlags, &config); + ssize_t block = res.getResource(ref, &value, false, density, &typeSpecFlags, &config); #if THROW_ON_BAD_ID if (block == BAD_INDEX) { jniThrowException(env, "java/lang/IllegalStateException", "Bad resource!"); return 0; } #endif - uint32_t ref = ident; if (resolve) { block = res.resolveReference(&value, block, &ref, &typeSpecFlags, &config); #if THROW_ON_BAD_ID @@ -885,7 +896,7 @@ static jboolean android_content_AssetManager_applyStyle(JNIEnv* env, jobject cla return JNI_FALSE; } - DEBUG_STYLES(LOGI("APPLY STYLE: theme=0x%x defStyleAttr=0x%x defStyleRes=0x%x xml=0x%x", + DEBUG_STYLES(ALOGI("APPLY STYLE: theme=0x%x defStyleAttr=0x%x defStyleRes=0x%x xml=0x%x", themeToken, defStyleAttr, defStyleRes, xmlParserToken)); ResTable::Theme* theme = (ResTable::Theme*)themeToken; @@ -952,6 +963,20 @@ static jboolean android_content_AssetManager_applyStyle(JNIEnv* env, jobject cla // Now lock down the resource object and start pulling stuff from it. res.lock(); + // Apply theme redirections to the referenced styles. + if (defStyleRes != 0) { + uint32_t ref = res.lookupRedirectionMap(defStyleRes); + if (ref != 0) { + defStyleRes = ref; + } + } + if (style != 0) { + uint32_t ref = res.lookupRedirectionMap(style); + if (ref != 0) { + style = ref; + } + } + // Retrieve the default style bag, if requested. const ResTable::bag_entry* defStyleEnt = NULL; uint32_t defStyleTypeSetFlags = 0; @@ -983,7 +1008,7 @@ static jboolean android_content_AssetManager_applyStyle(JNIEnv* env, jobject cla for (jsize ii=0; iigetAttributeValue(ix, &value); ix++; curXmlAttr = xmlParser->getAttributeNameResID(ix); - DEBUG_STYLES(LOGI("-> From XML: type=0x%x, data=0x%08x", + DEBUG_STYLES(ALOGI("-> From XML: type=0x%x, data=0x%08x", value.dataType, value.data)); } @@ -1018,7 +1043,7 @@ static jboolean android_content_AssetManager_applyStyle(JNIEnv* env, jobject cla block = styleEnt->stringBlock; typeSetFlags = styleTypeSetFlags; value = styleEnt->map.value; - DEBUG_STYLES(LOGI("-> From style: type=0x%x, data=0x%08x", + DEBUG_STYLES(ALOGI("-> From style: type=0x%x, data=0x%08x", value.dataType, value.data)); } styleEnt++; @@ -1034,7 +1059,7 @@ static jboolean android_content_AssetManager_applyStyle(JNIEnv* env, jobject cla block = defStyleEnt->stringBlock; typeSetFlags = defStyleTypeSetFlags; value = defStyleEnt->map.value; - DEBUG_STYLES(LOGI("-> From def style: type=0x%x, data=0x%08x", + DEBUG_STYLES(ALOGI("-> From def style: type=0x%x, data=0x%08x", value.dataType, value.data)); } defStyleEnt++; @@ -1046,14 +1071,14 @@ static jboolean android_content_AssetManager_applyStyle(JNIEnv* env, jobject cla ssize_t newBlock = theme->resolveAttributeReference(&value, block, &resid, &typeSetFlags, &config); if (newBlock >= 0) block = newBlock; - DEBUG_STYLES(LOGI("-> Resolved attr: type=0x%x, data=0x%08x", + DEBUG_STYLES(ALOGI("-> Resolved attr: type=0x%x, data=0x%08x", value.dataType, value.data)); } else { // If we still don't have a value for this attribute, try to find // it in the theme! ssize_t newBlock = theme->getAttribute(curIdent, &value, &typeSetFlags); if (newBlock >= 0) { - DEBUG_STYLES(LOGI("-> From theme: type=0x%x, data=0x%08x", + DEBUG_STYLES(ALOGI("-> From theme: type=0x%x, data=0x%08x", value.dataType, value.data)); newBlock = res.resolveReference(&value, block, &resid, &typeSetFlags, &config); @@ -1064,19 +1089,44 @@ static jboolean android_content_AssetManager_applyStyle(JNIEnv* env, jobject cla } #endif if (newBlock >= 0) block = newBlock; - DEBUG_STYLES(LOGI("-> Resolved theme: type=0x%x, data=0x%08x", + DEBUG_STYLES(ALOGI("-> Resolved theme: type=0x%x, data=0x%08x", value.dataType, value.data)); } } // Deal with the special @null value -- it turns back to TYPE_NULL. if (value.dataType == Res_value::TYPE_REFERENCE && value.data == 0) { - DEBUG_STYLES(LOGI("-> Setting to @null!")); + DEBUG_STYLES(ALOGI("-> Setting to @null!")); value.dataType = Res_value::TYPE_NULL; block = kXmlBlock; } - DEBUG_STYLES(LOGI("Attribute 0x%08x: type=0x%x, data=0x%08x", + // One final test for a resource redirection from the applied theme. + if (resid != 0) { + uint32_t redirect = res.lookupRedirectionMap(resid); + if (redirect != 0) { + REDIRECT_NOISY(ALOGW("deep REDIRECT 0x%08x => 0x%08x\n", resid, redirect)); + ssize_t newBlock = res.getResource(redirect, &value, true, config.density, &typeSetFlags, &config); + if (newBlock >= 0) { + newBlock = res.resolveReference(&value, newBlock, &redirect, &typeSetFlags, &config); +#if THROW_ON_BAD_ID + if (newBlock == BAD_INDEX) { + jniThrowException(env, "java/lang/IllegalStateException", "Bad resource!"); + return JNI_FALSE; + } +#endif + if (newBlock >= 0) { + block = newBlock; + resid = redirect; + } + } + if (resid != redirect) { + ALOGW("deep redirect failure from 0x%08x => 0x%08x, defStyleAttr=0x%08x, defStyleRes=0x%08x, style=0x%08x\n", resid, redirect, defStyleAttr, defStyleRes, style); + } + } + } + + DEBUG_STYLES(ALOGI("Attribute 0x%08x: type=0x%x, data=0x%08x", curIdent, value.dataType, value.data)); // Write the final value back to Java. @@ -1333,6 +1383,31 @@ static jint android_content_AssetManager_retrieveArray(JNIEnv* env, jobject claz value.dataType = Res_value::TYPE_NULL; } + // One final test for a resource redirection from the applied theme. + if (resid != 0) { + uint32_t redirect = res.lookupRedirectionMap(resid); + if (redirect != 0) { + REDIRECT_NOISY(ALOGW("array REDIRECT 0x%08x => 0x%08x\n", resid, redirect)); + ssize_t newBlock = res.getResource(redirect, &value, true, config.density, &typeSetFlags, &config); + if (newBlock >= 0) { + newBlock = res.resolveReference(&value, newBlock, &redirect, &typeSetFlags, &config); +#if THROW_ON_BAD_ID + if (newBlock == BAD_INDEX) { + jniThrowException(env, "java/lang/IllegalStateException", "Bad resource!"); + return JNI_FALSE; + } +#endif + if (newBlock >= 0) { + block = newBlock; + resid = redirect; + } + } + if (resid != redirect) { + ALOGW("array redirect failure from 0x%08x => 0x%08x, array id=0x%08x", resid, redirect, id); + } + } + } + //printf("Attribute 0x%08x: final type=0x%x, data=0x%08x\n", curIdent, value.dataType, value.data); // Write the final value back to Java. @@ -1561,6 +1636,84 @@ static jintArray android_content_AssetManager_getArrayIntResource(JNIEnv* env, j return array; } +static jint android_content_AssetManager_splitThemePackage(JNIEnv* env, jobject clazz, + jstring srcFileName, jstring dstFileName, jobjectArray drmProtectedAssetNames) +{ + AssetManager* am = assetManagerForJavaObject(env, clazz); + if (am == NULL) { + return -1; + } + + ALOGV("splitThemePackage in %p (Java object %p)\n", am, clazz); + + if (srcFileName == NULL || dstFileName == NULL) { + jniThrowException(env, "java/lang/NullPointerException", srcFileName == NULL ? "srcFileName" : "dstFileName"); + return -2; + } + + jsize size = env->GetArrayLength(drmProtectedAssetNames); + if (size == 0) { + jniThrowException(env, "java/lang/IllegalArgumentException", "drmProtectedAssetNames"); + return -3; + } + + const char* srcFileName8 = env->GetStringUTFChars(srcFileName, NULL); + ZipFile* srcZip = new ZipFile; + status_t err = srcZip->open(srcFileName8, ZipFile::kOpenReadWrite); + if (err != NO_ERROR) { + ALOGV("error opening zip file %s\n", srcFileName8); + delete srcZip; + env->ReleaseStringUTFChars(srcFileName, srcFileName8); + return -4; + } + + const char* dstFileName8 = env->GetStringUTFChars(dstFileName, NULL); + ZipFile* dstZip = new ZipFile; + err = dstZip->open(dstFileName8, ZipFile::kOpenReadWrite | ZipFile::kOpenTruncate | ZipFile::kOpenCreate); + + if (err != NO_ERROR) { + ALOGV("error opening zip file %s\n", dstFileName8); + delete srcZip; + delete dstZip; + env->ReleaseStringUTFChars(srcFileName, srcFileName8); + env->ReleaseStringUTFChars(dstFileName, dstFileName8); + return -5; + } + + int result = 0; + for (int i = 0; i < size; i++) { + jstring javaString = (jstring)env->GetObjectArrayElement(drmProtectedAssetNames, i); + const char* drmProtectedAssetFileName8 = env->GetStringUTFChars(javaString, NULL); + ZipEntry *assetEntry = srcZip->getEntryByName(drmProtectedAssetFileName8); + if (assetEntry == NULL) { + result = 1; + ALOGV("Invalid asset entry %s\n", drmProtectedAssetFileName8); + } else { + status_t loc_result = dstZip->add(srcZip, assetEntry, 0, NULL); + if (loc_result != NO_ERROR) { + ALOGV("error copying zip entry %s\n", drmProtectedAssetFileName8); + result = result | 2; + } else { + loc_result = srcZip->remove(assetEntry); + if (loc_result != NO_ERROR) { + ALOGV("error removing zip entry %s\n", drmProtectedAssetFileName8); + result = result | 4; + } + } + } + env->ReleaseStringUTFChars(javaString, drmProtectedAssetFileName8); + } + srcZip->flush(); + dstZip->flush(); + + delete srcZip; + delete dstZip; + env->ReleaseStringUTFChars(srcFileName, srcFileName8); + env->ReleaseStringUTFChars(dstFileName, dstFileName8); + + return (jint)result; +} + static void android_content_AssetManager_init(JNIEnv* env, jobject clazz) { AssetManager* am = new AssetManager(); @@ -1607,6 +1760,173 @@ static jint android_content_AssetManager_getGlobalAssetManagerCount(JNIEnv* env, return AssetManager::getGlobalCount(); } +static jint android_content_AssetManager_getBasePackageCount(JNIEnv* env, jobject clazz) +{ + AssetManager* am = assetManagerForJavaObject(env, clazz); + if (am == NULL) { + return JNI_FALSE; + } + + return am->getResources().getBasePackageCount(); +} + +static jstring android_content_AssetManager_getBasePackageName(JNIEnv* env, jobject clazz, jint index) +{ + AssetManager* am = assetManagerForJavaObject(env, clazz); + if (am == NULL) { + return JNI_FALSE; + } + + String16 packageName(am->getResources().getBasePackageName(index)); + return env->NewString((const jchar*)packageName.string(), packageName.size()); +} + +static jint android_content_AssetManager_getBasePackageId(JNIEnv* env, jobject clazz, jint index) +{ + AssetManager* am = assetManagerForJavaObject(env, clazz); + if (am == NULL) { + return JNI_FALSE; + } + + return am->getResources().getBasePackageId(index); +} + +static void android_content_AssetManager_addRedirectionsNative(JNIEnv* env, jobject clazz, + PackageRedirectionMap* resMap) +{ + AssetManager* am = assetManagerForJavaObject(env, clazz); + if (am == NULL) { + return; + } + + am->addRedirections(resMap); +} + +static void android_content_AssetManager_clearRedirectionsNative(JNIEnv* env, jobject clazz) +{ + AssetManager* am = assetManagerForJavaObject(env, clazz); + if (am == NULL) { + return; + } + + am->clearRedirections(); +} + +static jboolean android_content_AssetManager_generateStyleRedirections(JNIEnv* env, jobject clazz, + PackageRedirectionMap* resMap, jint sourceStyle, jint destStyle) +{ + AssetManager* am = assetManagerForJavaObject(env, clazz); + if (am == NULL) { + return JNI_FALSE; + } + + const ResTable& res(am->getResources()); + + res.lock(); + + // Load up a bag for the user-supplied theme. + const ResTable::bag_entry* themeEnt = NULL; + ssize_t N = res.getBagLocked(destStyle, &themeEnt); + const ResTable::bag_entry* endThemeEnt = themeEnt + (N >= 0 ? N : 0); + + // ...and a bag for the framework default. + const ResTable::bag_entry* frameworkEnt = NULL; + N = res.getBagLocked(sourceStyle, &frameworkEnt); + const ResTable::bag_entry* endFrameworkEnt = frameworkEnt + (N >= 0 ? N : 0); + + // Add the source => dest style redirection first. + jboolean ret = JNI_FALSE; + if (themeEnt < endThemeEnt && frameworkEnt < endFrameworkEnt) { + resMap->addRedirection(sourceStyle, destStyle); + ret = JNI_TRUE; + } + + // Now compare them and infer resource redirections for attributes that + // remap to different styles. This works by essentially lining up all the + // sorted attributes from each theme and detected TYPE_REFERENCE entries + // that point to different resources. When we find such a mismatch, we'll + // create a resource redirection from the original framework resource ID to + // the one in the theme. This lets us do things like automatically find + // redirections for @android:style/Widget.Button by looking at how the + // theme overrides the android:attr/buttonStyle attribute. + REDIRECT_NOISY(ALOGW("delta between 0x%08x and 0x%08x:\n", sourceStyle, destStyle)); + for (; frameworkEnt < endFrameworkEnt; frameworkEnt++) { + if (frameworkEnt->map.value.dataType != Res_value::TYPE_REFERENCE) { + continue; + } + + uint32_t curIdent = frameworkEnt->map.name.ident; + + // Walk along the theme entry looking for a match. + while (themeEnt < endThemeEnt && curIdent > themeEnt->map.name.ident) { + themeEnt++; + } + // Match found, compare the references. + if (themeEnt < endThemeEnt && curIdent == themeEnt->map.name.ident) { + if (themeEnt->map.value.data != frameworkEnt->map.value.data) { + uint32_t fromIdent = frameworkEnt->map.value.data; + uint32_t toIdent = themeEnt->map.value.data; + REDIRECT_NOISY(ALOGW(" generated mapping from 0x%08x => 0x%08x (by attr 0x%08x)\n", + fromIdent, toIdent, curIdent)); + resMap->addRedirection(fromIdent, toIdent); + } + themeEnt++; + } + + // Exhausted the theme, bail early. + if (themeEnt >= endThemeEnt) { + break; + } + } + + res.unlock(); + + return ret; +} + +static jboolean android_content_AssetManager_detachThemePath(JNIEnv* env, jobject clazz, + jstring packageName, jint cookie) +{ + if (packageName == NULL) { + jniThrowException(env, "java/lang/NullPointerException", "packageName"); + return JNI_FALSE; + } + + AssetManager* am = assetManagerForJavaObject(env, clazz); + if (am == NULL) { + return JNI_FALSE; + } + + const char* name8 = env->GetStringUTFChars(packageName, NULL); + bool res = am->detachThemePath(String8(name8), (void *)cookie); + env->ReleaseStringUTFChars(packageName, name8); + + return res; +} + +static jint android_content_AssetManager_attachThemePath( + JNIEnv* env, jobject clazz, jstring path) +{ + if (path == NULL) { + jniThrowException(env, "java/lang/NullPointerException", "path"); + return JNI_FALSE; + } + + AssetManager* am = assetManagerForJavaObject(env, clazz); + if (am == NULL) { + return JNI_FALSE; + } + + const char* path8 = env->GetStringUTFChars(path, NULL); + + void* cookie; + bool res = am->attachThemePath(String8(path8), &cookie); + + env->ReleaseStringUTFChars(path, path8); + + return (res) ? (jint)cookie : 0; +} + // ---------------------------------------------------------------------------- /* @@ -1716,6 +2036,28 @@ static JNINativeMethod gAssetManagerMethods[] = { (void*) android_content_AssetManager_getAssetAllocations }, { "getGlobalAssetManagerCount", "()I", (void*) android_content_AssetManager_getGlobalAssetCount }, + + // Split theme package apk into two. + { "splitThemePackage","(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)I", + (void*) android_content_AssetManager_splitThemePackage }, + + // Dynamic theme package support. + { "detachThemePath", "(Ljava/lang/String;I)Z", + (void*) android_content_AssetManager_detachThemePath }, + { "attachThemePath", "(Ljava/lang/String;)I", + (void*) android_content_AssetManager_attachThemePath }, + { "getBasePackageCount", "()I", + (void*) android_content_AssetManager_getBasePackageCount }, + { "getBasePackageName", "(I)Ljava/lang/String;", + (void*) android_content_AssetManager_getBasePackageName }, + { "getBasePackageId", "(I)I", + (void*) android_content_AssetManager_getBasePackageId }, + { "addRedirectionsNative", "(I)V", + (void*) android_content_AssetManager_addRedirectionsNative }, + { "clearRedirectionsNative", "()V", + (void*) android_content_AssetManager_clearRedirectionsNative }, + { "generateStyleRedirections", "(III)Z", + (void*) android_content_AssetManager_generateStyleRedirections }, }; int register_android_content_AssetManager(JNIEnv* env) diff --git a/core/jni/android_util_PackageRedirectionMap.cpp b/core/jni/android_util_PackageRedirectionMap.cpp new file mode 100644 index 00000000000..97380f31956 --- /dev/null +++ b/core/jni/android_util_PackageRedirectionMap.cpp @@ -0,0 +1,176 @@ +/* + * Copyright (C) 2011, T-Mobile USA, Inc. + * + * 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. + */ + +#include + +#include "jni.h" +#include "JNIHelp.h" +#include +#include + +#include "android_os_Parcel.h" +#include + +#include + +#include + +namespace android { + +// ---------------------------------------------------------------------------- + +static PackageRedirectionMap* PackageRedirectionMap_constructor(JNIEnv* env, jobject clazz) +{ + return new PackageRedirectionMap; +} + +static void PackageRedirectionMap_destructor(JNIEnv* env, jobject clazz, + PackageRedirectionMap* resMap) +{ + delete resMap; +} + +static PackageRedirectionMap* PackageRedirectionMap_createFromParcel(JNIEnv* env, jobject clazz, + jobject parcel) +{ + if (parcel == NULL) { + return NULL; + } + + Parcel* p = parcelForJavaObject(env, parcel); + PackageRedirectionMap* resMap = new PackageRedirectionMap; + + int32_t entryCount = p->readInt32(); + while (entryCount-- > 0) { + uint32_t fromIdent = (uint32_t)p->readInt32(); + uint32_t toIdent = (uint32_t)p->readInt32(); + resMap->addRedirection(fromIdent, toIdent); + } + + return resMap; +} + +static jboolean PackageRedirectionMap_writeToParcel(JNIEnv* env, jobject clazz, + PackageRedirectionMap* resMap, jobject parcel) +{ + if (parcel == NULL) { + return JNI_FALSE; + } + + Parcel* p = parcelForJavaObject(env, parcel); + + int package = resMap->getPackage(); + size_t nTypes = resMap->getNumberOfTypes(); + size_t entryCount = 0; + for (size_t type=0; typegetNumberOfUsedEntries(type); + } + p->writeInt32(entryCount); + for (size_t type=0; typegetNumberOfEntries(type); + for (size_t entry=0; entrygetEntry(type, entry); + if (toIdent != 0) { + uint32_t fromIdent = Res_MAKEID(package-1, type, entry); + p->writeInt32(fromIdent); + p->writeInt32(toIdent); + } + } + } + + return JNI_TRUE; +} + +static void PackageRedirectionMap_addRedirection(JNIEnv* env, jobject clazz, + PackageRedirectionMap* resMap, jint fromIdent, jint toIdent) +{ + resMap->addRedirection(fromIdent, toIdent); +} + +static jint PackageRedirectionMap_getPackageId(JNIEnv* env, jobject clazz, + PackageRedirectionMap* resMap) +{ + return resMap->getPackage(); +} + +static jint PackageRedirectionMap_lookupRedirection(JNIEnv* env, jobject clazz, + PackageRedirectionMap* resMap, jint fromIdent) +{ + return resMap->lookupRedirection(fromIdent); +} + +static jintArray PackageRedirectionMap_getRedirectionKeys(JNIEnv* env, jobject clazz, + PackageRedirectionMap* resMap) +{ + int package = resMap->getPackage(); + size_t nTypes = resMap->getNumberOfTypes(); + size_t entryCount = 0; + for (size_t type=0; typegetNumberOfUsedEntries(type); + entryCount += usedEntries; + } + jintArray array = env->NewIntArray(entryCount); + if (array == NULL) { + jniThrowException(env, "java/lang/OutOfMemoryError", ""); + return NULL; + } + jsize index = 0; + for (size_t type=0; typegetNumberOfEntries(type); + for (size_t entry=0; entrygetEntry(type, entry); + if (toIdent != 0) { + jint fromIdent = (jint)Res_MAKEID(package-1, type, entry); + env->SetIntArrayRegion(array, index++, 1, &fromIdent); + } + } + } + return array; +} + +// ---------------------------------------------------------------------------- + +/* + * JNI registration. + */ +static JNINativeMethod gPackageRedirectionMapMethods[] = { + { "nativeConstructor", "()I", + (void*) PackageRedirectionMap_constructor }, + { "nativeDestructor", "(I)V", + (void*) PackageRedirectionMap_destructor }, + { "nativeCreateFromParcel", "(Landroid/os/Parcel;)I", + (void*) PackageRedirectionMap_createFromParcel }, + { "nativeWriteToParcel", "(ILandroid/os/Parcel;)Z", + (void*) PackageRedirectionMap_writeToParcel }, + { "nativeAddRedirection", "(III)V", + (void*) PackageRedirectionMap_addRedirection }, + { "nativeGetPackageId", "(I)I", + (void*) PackageRedirectionMap_getPackageId }, + { "nativeLookupRedirection", "(II)I", + (void*) PackageRedirectionMap_lookupRedirection }, + { "nativeGetRedirectionKeys", "(I)[I", + (void*) PackageRedirectionMap_getRedirectionKeys }, +}; + +int register_android_content_res_PackageRedirectionMap(JNIEnv* env) +{ + return AndroidRuntime::registerNativeMethods(env, + "android/content/res/PackageRedirectionMap", + gPackageRedirectionMapMethods, + NELEM(gPackageRedirectionMapMethods)); +} + +}; // namespace android diff --git a/core/jni/android_view_GLES20Canvas.cpp b/core/jni/android_view_GLES20Canvas.cpp index a51b77e712e..08dad2d6b79 100644 --- a/core/jni/android_view_GLES20Canvas.cpp +++ b/core/jni/android_view_GLES20Canvas.cpp @@ -47,7 +47,9 @@ #include #include #include - +#ifdef QCOM_HARDWARE +#include +#endif #include #include @@ -138,6 +140,24 @@ static int android_view_GLES20Canvas_prepare(JNIEnv* env, jobject clazz, return renderer->prepare(opaque); } +static void android_view_GLES20Canvas_startTileRendering(JNIEnv* env, jobject clazz, + OpenGLRenderer* renderer, jint left, jint top, jint right, jint bottom) { +#ifdef QCOM_HARDWARE + int width = 0, height = 0; + if (renderer != NULL) { + renderer->getViewport(width, height); + } + TileRenderer::getInstance().startTileRendering(left, top, right, bottom, width, height); +#endif +} + +static void android_view_GLES20Canvas_endTileRendering(JNIEnv* env, jobject clazz, + OpenGLRenderer* renderer) { +#ifdef QCOM_HARDWARE + TileRenderer::getInstance().endTileRendering(); +#endif +} + static int android_view_GLES20Canvas_prepareDirty(JNIEnv* env, jobject clazz, OpenGLRenderer* renderer, jint left, jint top, jint right, jint bottom, jboolean opaque) { @@ -870,6 +890,8 @@ static JNINativeMethod gMethods[] = { { "nSetViewport", "(III)V", (void*) android_view_GLES20Canvas_setViewport }, { "nPrepare", "(IZ)I", (void*) android_view_GLES20Canvas_prepare }, { "nPrepareDirty", "(IIIIIZ)I", (void*) android_view_GLES20Canvas_prepareDirty }, + { "nStartTileRendering","(IIIII)V", (void*) android_view_GLES20Canvas_startTileRendering}, + { "nEndTileRendering", "(I)V", (void*) android_view_GLES20Canvas_endTileRendering}, { "nFinish", "(I)V", (void*) android_view_GLES20Canvas_finish }, { "nGetStencilSize", "()I", (void*) android_view_GLES20Canvas_getStencilSize }, diff --git a/core/jni/com_android_internal_app_ActivityTrigger.cpp b/core/jni/com_android_internal_app_ActivityTrigger.cpp new file mode 100644 index 00000000000..93b19faa37f --- /dev/null +++ b/core/jni/com_android_internal_app_ActivityTrigger.cpp @@ -0,0 +1,167 @@ +/* + * Copyright (c) 2011, Code Aurora Forum. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of Code Aurora nor + * the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written + * permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#define LOG_TAG "ActTriggerJNI" + +#include "jni.h" +#include "JNIHelp.h" +#include + +#include +#include +#include + +#include +#include + +#define LIBRARY_PATH_PREFIX "/system/lib/" + +namespace android +{ + +// ---------------------------------------------------------------------------- + +static void (*startActivity)(const char *) = NULL; +static void (*resumeActivity)(const char *) = NULL; +static void *dlhandle = NULL; + +// ---------------------------------------------------------------------------- + +static void +com_android_internal_app_ActivityTrigger_native_at_init() +{ + const char *rc; + void (*init)(void); + char buf[PROPERTY_VALUE_MAX]; + int len; + + /* Retrieve name of vendor extension library */ + if (property_get("ro.vendor.extension_library", buf, NULL) <= 0) { + return; + } + + /* Sanity check - ensure */ + buf[PROPERTY_VALUE_MAX-1] = '\0'; + if ((strncmp(buf, LIBRARY_PATH_PREFIX, sizeof(LIBRARY_PATH_PREFIX) - 1) != 0) + || + (strstr(buf, "..") != NULL)) { + return; + } + + dlhandle = dlopen(buf, RTLD_NOW | RTLD_LOCAL); + if (dlhandle == NULL) { + return; + } + + dlerror(); + + *(void **) (&startActivity) = dlsym(dlhandle, "activity_trigger_start"); + if ((rc = dlerror()) != NULL) { + goto cleanup; + } + *(void **) (&resumeActivity) = dlsym(dlhandle, "activity_trigger_resume"); + if ((rc = dlerror()) != NULL) { + goto cleanup; + } + *(void **) (&init) = dlsym(dlhandle, "activity_trigger_init"); + if ((rc = dlerror()) != NULL) { + goto cleanup; + } + (*init)(); + return; + +cleanup: + startActivity = NULL; + resumeActivity = NULL; + if (dlhandle) { + dlclose(dlhandle); + dlhandle = NULL; + } +} + +static void +com_android_internal_app_ActivityTrigger_native_at_deinit(JNIEnv *env, jobject clazz) +{ + void (*deinit)(void); + + if (dlhandle) { + startActivity = NULL; + resumeActivity = NULL; + + *(void **) (&deinit) = dlsym(dlhandle, "activity_trigger_deinit"); + if (deinit) { + (*deinit)(); + } + + dlclose(dlhandle); + dlhandle = NULL; + } +} + +static void +com_android_internal_app_ActivityTrigger_native_at_startActivity(JNIEnv *env, jobject clazz, jstring activity) +{ + if (startActivity && activity) { + const char *actStr = env->GetStringUTFChars(activity, NULL); + if (actStr) { + (*startActivity)(actStr); + env->ReleaseStringUTFChars(activity, actStr); + } + } +} + +static void +com_android_internal_app_ActivityTrigger_native_at_resumeActivity(JNIEnv *env, jobject clazz, jstring activity) +{ + if (resumeActivity && activity) { + const char *actStr = env->GetStringUTFChars(activity, NULL); + if (actStr) { + (*resumeActivity)(actStr); + env->ReleaseStringUTFChars(activity, actStr); + } + } +} + +// ---------------------------------------------------------------------------- + +static JNINativeMethod gMethods[] = { + {"native_at_startActivity", "(Ljava/lang/String;)V", (void *)com_android_internal_app_ActivityTrigger_native_at_startActivity}, + {"native_at_resumeActivity", "(Ljava/lang/String;)V", (void *)com_android_internal_app_ActivityTrigger_native_at_resumeActivity}, + {"native_at_deinit", "()V", (void *)com_android_internal_app_ActivityTrigger_native_at_deinit}, +}; + + +int register_com_android_internal_app_ActivityTrigger(JNIEnv *env) +{ + com_android_internal_app_ActivityTrigger_native_at_init(); + + return AndroidRuntime::registerNativeMethods(env, + "com/android/internal/app/ActivityTrigger", gMethods, NELEM(gMethods)); +} + +} // namespace android diff --git a/core/jni/com_android_internal_content_NativeLibraryHelper.cpp b/core/jni/com_android_internal_content_NativeLibraryHelper.cpp index 8d6fab4aaf9..4f99937ca96 100644 --- a/core/jni/com_android_internal_content_NativeLibraryHelper.cpp +++ b/core/jni/com_android_internal_content_NativeLibraryHelper.cpp @@ -15,7 +15,7 @@ */ #define LOG_TAG "NativeLibraryHelper" -//#define LOG_NDEBUG 0 +#define LOG_NDEBUG 0 #include diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml index 6546fedc18e..ab266623da4 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml @@ -18,6 +18,7 @@ */ --> @@ -587,6 +588,14 @@ android:label="@string/permlab_camera" android:description="@string/permdesc_camera" /> + + + + + + + + + + + + + + + + + diff --git a/core/res/res/anim/calendar_fadein.xml b/core/res/res/anim/calendar_fadein.xml new file mode 100644 index 00000000000..b7879794334 --- /dev/null +++ b/core/res/res/anim/calendar_fadein.xml @@ -0,0 +1,17 @@ + + + + + + + + + diff --git a/core/res/res/anim/calendar_fadeout.xml b/core/res/res/anim/calendar_fadeout.xml new file mode 100644 index 00000000000..934dc5898f4 --- /dev/null +++ b/core/res/res/anim/calendar_fadeout.xml @@ -0,0 +1,16 @@ + + + + + + + + + diff --git a/core/res/res/drawable-en-hdpi/sym_keyboard_delete.png b/core/res/res/drawable-en-hdpi/sym_keyboard_delete.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/btn_circle_disable.png b/core/res/res/drawable-hdpi/btn_circle_disable.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/btn_circle_disable_focused.png b/core/res/res/drawable-hdpi/btn_circle_disable_focused.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/btn_circle_normal.png b/core/res/res/drawable-hdpi/btn_circle_normal.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/btn_circle_pressed.png b/core/res/res/drawable-hdpi/btn_circle_pressed.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/btn_circle_selected.png b/core/res/res/drawable-hdpi/btn_circle_selected.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/btn_close_normal.png b/core/res/res/drawable-hdpi/btn_close_normal.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/btn_close_pressed.png b/core/res/res/drawable-hdpi/btn_close_pressed.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/btn_close_selected.png b/core/res/res/drawable-hdpi/btn_close_selected.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/btn_default_normal.9.png b/core/res/res/drawable-hdpi/btn_default_normal.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/btn_default_normal_disable.9.png b/core/res/res/drawable-hdpi/btn_default_normal_disable.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/btn_default_normal_disable_focused.9.png b/core/res/res/drawable-hdpi/btn_default_normal_disable_focused.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/btn_default_pressed.9.png b/core/res/res/drawable-hdpi/btn_default_pressed.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/btn_default_selected.9.png b/core/res/res/drawable-hdpi/btn_default_selected.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/btn_default_small_normal.9.png b/core/res/res/drawable-hdpi/btn_default_small_normal.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/btn_default_small_normal_disable.9.png b/core/res/res/drawable-hdpi/btn_default_small_normal_disable.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/btn_default_small_normal_disable_focused.9.png b/core/res/res/drawable-hdpi/btn_default_small_normal_disable_focused.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/btn_default_small_pressed.9.png b/core/res/res/drawable-hdpi/btn_default_small_pressed.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/btn_default_small_selected.9.png b/core/res/res/drawable-hdpi/btn_default_small_selected.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/btn_dialog_disable.png b/core/res/res/drawable-hdpi/btn_dialog_disable.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/btn_dialog_normal.png b/core/res/res/drawable-hdpi/btn_dialog_normal.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/btn_dialog_pressed.png b/core/res/res/drawable-hdpi/btn_dialog_pressed.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/btn_dialog_selected.png b/core/res/res/drawable-hdpi/btn_dialog_selected.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/btn_dropdown_normal.9.png b/core/res/res/drawable-hdpi/btn_dropdown_normal.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/btn_dropdown_pressed.9.png b/core/res/res/drawable-hdpi/btn_dropdown_pressed.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/btn_dropdown_selected.9.png b/core/res/res/drawable-hdpi/btn_dropdown_selected.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/btn_radio_off.png b/core/res/res/drawable-hdpi/btn_radio_off.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/btn_radio_off_pressed.png b/core/res/res/drawable-hdpi/btn_radio_off_pressed.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/btn_radio_off_selected.png b/core/res/res/drawable-hdpi/btn_radio_off_selected.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/btn_radio_on.png b/core/res/res/drawable-hdpi/btn_radio_on.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/btn_radio_on_pressed.png b/core/res/res/drawable-hdpi/btn_radio_on_pressed.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/btn_radio_on_selected.png b/core/res/res/drawable-hdpi/btn_radio_on_selected.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/contact_header_bg.9.png b/core/res/res/drawable-hdpi/contact_header_bg.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/ic_btn_round_more_disabled.png b/core/res/res/drawable-hdpi/ic_btn_round_more_disabled.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/ic_btn_round_more_normal.png b/core/res/res/drawable-hdpi/ic_btn_round_more_normal.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/ic_contact_picture_2.png b/core/res/res/drawable-hdpi/ic_contact_picture_2.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/ic_contact_picture_3.png b/core/res/res/drawable-hdpi/ic_contact_picture_3.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/ic_jog_dial_sound_off.png b/core/res/res/drawable-hdpi/ic_jog_dial_sound_off.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/ic_jog_dial_sound_on.png b/core/res/res/drawable-hdpi/ic_jog_dial_sound_on.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/ic_jog_dial_unlock.png b/core/res/res/drawable-hdpi/ic_jog_dial_unlock.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/ic_lock_screenshot.png b/core/res/res/drawable-hdpi/ic_lock_screenshot.png new file mode 100755 index 00000000000..2bccf78fc57 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lock_screenshot.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_alarm_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_alarm_activated.png new file mode 100644 index 00000000000..7fc4e3f05a3 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_alarm_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_alarm_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_alarm_normal.png new file mode 100644 index 00000000000..af87580b3ea Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_alarm_normal.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_answer_active.png b/core/res/res/drawable-hdpi/ic_lockscreen_answer_active.png new file mode 100644 index 00000000000..d201bfb7542 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_answer_active.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_answer_focused.png b/core/res/res/drawable-hdpi/ic_lockscreen_answer_focused.png new file mode 100644 index 00000000000..efb29f1e1b0 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_answer_focused.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_answer_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_answer_normal.png new file mode 100644 index 00000000000..176d4489685 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_answer_normal.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_browser2_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_browser2_activated.png new file mode 100644 index 00000000000..99cc744b6a3 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_browser2_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_browser2_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_browser2_normal.png new file mode 100644 index 00000000000..e66601365cc Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_browser2_normal.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_browser_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_browser_activated.png new file mode 100644 index 00000000000..99cc744b6a3 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_browser_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_browser_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_browser_normal.png new file mode 100644 index 00000000000..e66601365cc Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_browser_normal.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_calendar_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_calendar_activated.png new file mode 100644 index 00000000000..f4972e75a21 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_calendar_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_calendar_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_calendar_normal.png new file mode 100644 index 00000000000..9a5c37ea749 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_calendar_normal.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_camera2_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_camera2_activated.png new file mode 100644 index 00000000000..1e779308d8d Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_camera2_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_camera2_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_camera2_normal.png new file mode 100644 index 00000000000..c1a60470a05 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_camera2_normal.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_camera_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_camera_activated.png index 19c8eb29e27..1e779308d8d 100644 Binary files a/core/res/res/drawable-hdpi/ic_lockscreen_camera_activated.png and b/core/res/res/drawable-hdpi/ic_lockscreen_camera_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_camera_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_camera_normal.png index c79a245580c..c1a60470a05 100644 Binary files a/core/res/res/drawable-hdpi/ic_lockscreen_camera_normal.png and b/core/res/res/drawable-hdpi/ic_lockscreen_camera_normal.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_decline_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_decline_activated.png new file mode 100644 index 00000000000..98667697085 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_decline_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_decline_focused.png b/core/res/res/drawable-hdpi/ic_lockscreen_decline_focused.png new file mode 100644 index 00000000000..f37b16a95ce Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_decline_focused.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_decline_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_decline_normal.png new file mode 100644 index 00000000000..d88087b44a3 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_decline_normal.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_email_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_email_activated.png new file mode 100644 index 00000000000..37d13341feb Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_email_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_email_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_email_normal.png new file mode 100644 index 00000000000..480b4dc6334 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_email_normal.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_facebook_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_facebook_activated.png new file mode 100644 index 00000000000..493dbdb78d3 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_facebook_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_facebook_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_facebook_normal.png new file mode 100644 index 00000000000..d9f0c0b2834 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_facebook_normal.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_gallery_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_gallery_activated.png new file mode 100644 index 00000000000..e465737038d Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_gallery_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_gallery_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_gallery_normal.png new file mode 100644 index 00000000000..b0113a40e72 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_gallery_normal.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_gplus_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_gplus_activated.png new file mode 100644 index 00000000000..a526ab7a4b8 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_gplus_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_gplus_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_gplus_normal.png new file mode 100644 index 00000000000..8187db46a28 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_gplus_normal.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_gtalk_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_gtalk_activated.png new file mode 100644 index 00000000000..263195d2454 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_gtalk_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_gtalk_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_gtalk_normal.png new file mode 100644 index 00000000000..375ed819056 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_gtalk_normal.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_home_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_home_activated.png new file mode 100755 index 00000000000..34e0267482c Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_home_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_home_focused.png b/core/res/res/drawable-hdpi/ic_lockscreen_home_focused.png new file mode 100755 index 00000000000..e1fb0ec8088 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_home_focused.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_home_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_home_normal.png new file mode 100755 index 00000000000..2cd378b3c48 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_home_normal.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_lock_pressed.png b/core/res/res/drawable-hdpi/ic_lockscreen_lock_pressed.png index 0bbf62fd123..1e2d3cabb63 100644 Binary files a/core/res/res/drawable-hdpi/ic_lockscreen_lock_pressed.png and b/core/res/res/drawable-hdpi/ic_lockscreen_lock_pressed.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_maps_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_maps_activated.png new file mode 100644 index 00000000000..bba94042f1d Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_maps_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_maps_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_maps_normal.png new file mode 100644 index 00000000000..de61277169c Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_maps_normal.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_movie_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_movie_activated.png new file mode 100644 index 00000000000..68597efa73f Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_movie_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_movie_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_movie_normal.png new file mode 100644 index 00000000000..7165666cec0 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_movie_normal.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_music_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_music_activated.png new file mode 100644 index 00000000000..7ced86bbc72 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_music_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_music_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_music_normal.png new file mode 100644 index 00000000000..c9c3dcb8ecb Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_music_normal.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_nav_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_nav_activated.png new file mode 100644 index 00000000000..0dead7ceb8d Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_nav_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_nav_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_nav_normal.png new file mode 100644 index 00000000000..8284c011284 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_nav_normal.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_phone2_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_phone2_activated.png new file mode 100644 index 00000000000..fecc77479a4 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_phone2_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_phone2_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_phone2_normal.png new file mode 100644 index 00000000000..48fe685dfff Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_phone2_normal.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_phone_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_phone_activated.png new file mode 100644 index 00000000000..fecc77479a4 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_phone_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_phone_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_phone_normal.png new file mode 100644 index 00000000000..48fe685dfff Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_phone_normal.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_podcast_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_podcast_activated.png new file mode 100644 index 00000000000..48849887998 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_podcast_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_podcast_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_podcast_normal.png new file mode 100644 index 00000000000..fa1acab0f3d Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_podcast_normal.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_rss_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_rss_activated.png new file mode 100644 index 00000000000..aba39d5340b Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_rss_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_rss_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_rss_normal.png new file mode 100644 index 00000000000..ff6e0de0b7f Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_rss_normal.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_sms2_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_sms2_activated.png new file mode 100644 index 00000000000..e58b50b1b3c Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_sms2_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_sms2_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_sms2_normal.png new file mode 100644 index 00000000000..0711a525dbd Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_sms2_normal.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_sms_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_sms_activated.png new file mode 100644 index 00000000000..e58b50b1b3c Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_sms_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_sms_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_sms_normal.png new file mode 100644 index 00000000000..0711a525dbd Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_sms_normal.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_target_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_target_activated.png new file mode 100644 index 00000000000..c7d587ce16e Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_target_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_twitter_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_twitter_activated.png new file mode 100644 index 00000000000..376e6786fb4 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_twitter_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_twitter_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_twitter_normal.png new file mode 100644 index 00000000000..341fb775e9f Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_twitter_normal.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_aokp_color_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_aokp_color_activated.png new file mode 100755 index 00000000000..cca7a7c141e Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_aokp_color_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_aokp_color_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_aokp_color_normal.png new file mode 100755 index 00000000000..cca7a7c141e Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_aokp_color_normal.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_browser_bw_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_browser_bw_activated.png new file mode 100755 index 00000000000..1eed67c9e2a Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_browser_bw_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_browser_bw_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_browser_bw_normal.png new file mode 100755 index 00000000000..1eed67c9e2a Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_browser_bw_normal.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_browser_color_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_browser_color_activated.png new file mode 100755 index 00000000000..8a51cddaf26 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_browser_color_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_browser_color_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_browser_color_normal.png new file mode 100755 index 00000000000..8a51cddaf26 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_browser_color_normal.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_calender_bw_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_calender_bw_activated.png new file mode 100755 index 00000000000..37324cb8a06 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_calender_bw_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_calender_bw_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_calender_bw_normal.png new file mode 100755 index 00000000000..37324cb8a06 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_calender_bw_normal.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_calender_color_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_calender_color_activated.png new file mode 100755 index 00000000000..581163659f6 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_calender_color_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_calender_color_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_calender_color_normal.png new file mode 100755 index 00000000000..581163659f6 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_calender_color_normal.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_camera1_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_camera1_activated.png new file mode 100755 index 00000000000..735524b50ba Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_camera1_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_camera1_color_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_camera1_color_activated.png new file mode 100755 index 00000000000..811b85042cc Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_camera1_color_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_camera1_color_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_camera1_color_normal.png new file mode 100755 index 00000000000..811b85042cc Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_camera1_color_normal.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_camera1_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_camera1_normal.png new file mode 100755 index 00000000000..735524b50ba Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_camera1_normal.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_camera_bw_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_camera_bw_activated.png new file mode 100755 index 00000000000..59bcc5d0f2b Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_camera_bw_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_camera_bw_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_camera_bw_normal.png new file mode 100755 index 00000000000..59bcc5d0f2b Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_camera_bw_normal.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_camera_color_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_camera_color_activated.png new file mode 100755 index 00000000000..c9f72ce75b1 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_camera_color_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_camera_color_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_camera_color_normal.png new file mode 100755 index 00000000000..c9f72ce75b1 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_camera_color_normal.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_clock_bw_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_clock_bw_activated.png new file mode 100755 index 00000000000..2e72e495a5a Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_clock_bw_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_clock_bw_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_clock_bw_normal.png new file mode 100755 index 00000000000..2e72e495a5a Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_clock_bw_normal.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_clock_color_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_clock_color_activated.png new file mode 100755 index 00000000000..e1b92b212ff Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_clock_color_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_clock_color_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_clock_color_normal.png new file mode 100755 index 00000000000..e1b92b212ff Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_clock_color_normal.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_email_bw_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_email_bw_activated.png new file mode 100755 index 00000000000..dfead159846 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_email_bw_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_email_bw_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_email_bw_normal.png new file mode 100755 index 00000000000..dfead159846 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_email_bw_normal.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_email_color_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_email_color_activated.png new file mode 100755 index 00000000000..c4a9f0340e1 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_email_color_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_email_color_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_email_color_normal.png new file mode 100755 index 00000000000..c4a9f0340e1 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_email_color_normal.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_facebook_bw_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_facebook_bw_activated.png new file mode 100755 index 00000000000..81bd4ec72f7 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_facebook_bw_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_facebook_bw_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_facebook_bw_normal.png new file mode 100755 index 00000000000..81bd4ec72f7 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_facebook_bw_normal.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_facebook_color_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_facebook_color_activated.png new file mode 100755 index 00000000000..079b8f8662a Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_facebook_color_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_facebook_color_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_facebook_color_normal.png new file mode 100755 index 00000000000..079b8f8662a Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_facebook_color_normal.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_gallery_bw_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_gallery_bw_activated.png new file mode 100755 index 00000000000..2a5f9649d3d Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_gallery_bw_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_gallery_bw_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_gallery_bw_normal.png new file mode 100755 index 00000000000..2a5f9649d3d Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_gallery_bw_normal.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_gallery_color_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_gallery_color_activated.png new file mode 100755 index 00000000000..d7ab82bc408 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_gallery_color_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_gallery_color_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_gallery_color_normal.png new file mode 100755 index 00000000000..d7ab82bc408 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_gallery_color_normal.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_gplus_bw_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_gplus_bw_activated.png new file mode 100755 index 00000000000..480a533c6e8 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_gplus_bw_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_gplus_bw_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_gplus_bw_normal.png new file mode 100755 index 00000000000..480a533c6e8 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_gplus_bw_normal.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_gplus_color_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_gplus_color_activated.png new file mode 100755 index 00000000000..ed38e6cc16e Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_gplus_color_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_gplus_color_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_gplus_color_normal.png new file mode 100755 index 00000000000..ed38e6cc16e Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_gplus_color_normal.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_lock_bw_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_lock_bw_activated.png new file mode 100755 index 00000000000..f265ed87949 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_lock_bw_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_lock_bw_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_lock_bw_normal.png new file mode 100755 index 00000000000..f265ed87949 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_lock_bw_normal.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_lock_color_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_lock_color_activated.png new file mode 100755 index 00000000000..52a96923117 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_lock_color_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_lock_color_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_lock_color_normal.png new file mode 100755 index 00000000000..52a96923117 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_lock_color_normal.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_maps_bw_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_maps_bw_activated.png new file mode 100755 index 00000000000..2ce5b14f7a4 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_maps_bw_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_maps_bw_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_maps_bw_normal.png new file mode 100755 index 00000000000..2ce5b14f7a4 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_maps_bw_normal.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_maps_color_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_maps_color_activated.png new file mode 100755 index 00000000000..73c20ad78f8 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_maps_color_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_maps_color_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_maps_color_normal.png new file mode 100755 index 00000000000..73c20ad78f8 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_maps_color_normal.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_mms_bw_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_mms_bw_activated.png new file mode 100755 index 00000000000..02b8f4681d2 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_mms_bw_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_mms_bw_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_mms_bw_normal.png new file mode 100755 index 00000000000..02b8f4681d2 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_mms_bw_normal.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_mms_color_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_mms_color_activated.png new file mode 100755 index 00000000000..97ff938086b Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_mms_color_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_mms_color_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_mms_color_normal.png new file mode 100755 index 00000000000..97ff938086b Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_mms_color_normal.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_movies_bw_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_movies_bw_activated.png new file mode 100755 index 00000000000..e2bdefa83bc Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_movies_bw_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_movies_bw_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_movies_bw_normal.png new file mode 100755 index 00000000000..e2bdefa83bc Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_movies_bw_normal.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_movies_color_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_movies_color_activated.png new file mode 100755 index 00000000000..7145e3295cf Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_movies_color_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_movies_color_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_movies_color_normal.png new file mode 100755 index 00000000000..7145e3295cf Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_movies_color_normal.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_music_bw_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_music_bw_activated.png new file mode 100755 index 00000000000..9ddea041dde Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_music_bw_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_music_bw_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_music_bw_normal.png new file mode 100755 index 00000000000..9ddea041dde Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_music_bw_normal.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_music_color_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_music_color_activated.png new file mode 100755 index 00000000000..1913a5c550d Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_music_color_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_music_color_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_music_color_normal.png new file mode 100755 index 00000000000..1913a5c550d Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_music_color_normal.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_navigation_bw_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_navigation_bw_activated.png new file mode 100755 index 00000000000..c9c045cb9ae Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_navigation_bw_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_navigation_bw_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_navigation_bw_normal.png new file mode 100755 index 00000000000..c9c045cb9ae Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_navigation_bw_normal.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_navigation_color_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_navigation_color_activated.png new file mode 100755 index 00000000000..12727dffecf Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_navigation_color_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_navigation_color_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_navigation_color_normal.png new file mode 100755 index 00000000000..12727dffecf Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_navigation_color_normal.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_phone_bw_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_phone_bw_activated.png new file mode 100755 index 00000000000..8366a2481a8 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_phone_bw_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_phone_bw_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_phone_bw_normal.png new file mode 100755 index 00000000000..8366a2481a8 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_phone_bw_normal.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_phone_color_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_phone_color_activated.png new file mode 100755 index 00000000000..61bde90b01a Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_phone_color_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_phone_color_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_phone_color_normal.png new file mode 100755 index 00000000000..61bde90b01a Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_phone_color_normal.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_podcast_bw_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_podcast_bw_activated.png new file mode 100755 index 00000000000..ef666cd0751 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_podcast_bw_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_podcast_bw_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_podcast_bw_normal.png new file mode 100755 index 00000000000..ef666cd0751 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_podcast_bw_normal.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_podcast_color_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_podcast_color_activated.png new file mode 100755 index 00000000000..3cffa106540 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_podcast_color_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_podcast_color_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_podcast_color_normal.png new file mode 100755 index 00000000000..3cffa106540 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_podcast_color_normal.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_rss_bw_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_rss_bw_activated.png new file mode 100755 index 00000000000..c8a09e69210 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_rss_bw_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_rss_bw_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_rss_bw_normal.png new file mode 100755 index 00000000000..c8a09e69210 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_rss_bw_normal.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_rss_color_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_rss_color_activated.png new file mode 100755 index 00000000000..736ab08c72e Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_rss_color_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_rss_color_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_rss_color_normal.png new file mode 100755 index 00000000000..736ab08c72e Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_rss_color_normal.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_talk_bw_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_talk_bw_activated.png new file mode 100755 index 00000000000..d60b636a6a9 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_talk_bw_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_talk_bw_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_talk_bw_normal.png new file mode 100755 index 00000000000..d60b636a6a9 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_talk_bw_normal.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_talk_color_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_talk_color_activated.png new file mode 100755 index 00000000000..84320ffe754 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_talk_color_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_talk_color_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_talk_color_normal.png new file mode 100755 index 00000000000..84320ffe754 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_talk_color_normal.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_video_color_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_video_color_activated.png new file mode 100755 index 00000000000..7f8e2da7413 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_video_color_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_video_color_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_video_color_normal.png new file mode 100755 index 00000000000..7f8e2da7413 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_video_color_normal.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_vib_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_vib_activated.png new file mode 100755 index 00000000000..12bed5b5d8d Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_vib_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_vib_focused.png b/core/res/res/drawable-hdpi/ic_lockscreen_vib_focused.png new file mode 100755 index 00000000000..fe90dc52f6b Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_vib_focused.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_vib_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_vib_normal.png new file mode 100755 index 00000000000..7c25ec71b64 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_vib_normal.png differ diff --git a/core/res/res/drawable-hdpi/ic_notification_overlay.9.png b/core/res/res/drawable-hdpi/ic_notification_overlay.9.png index 744178f1abe..b0eabf73367 100644 Binary files a/core/res/res/drawable-hdpi/ic_notification_overlay.9.png and b/core/res/res/drawable-hdpi/ic_notification_overlay.9.png differ diff --git a/core/res/res/drawable-hdpi/ic_settings_language.png b/core/res/res/drawable-hdpi/ic_settings_language.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/jog_dial_arrow_long_left_green.png b/core/res/res/drawable-hdpi/jog_dial_arrow_long_left_green.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/jog_dial_arrow_long_left_yellow.png b/core/res/res/drawable-hdpi/jog_dial_arrow_long_left_yellow.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/jog_dial_arrow_long_middle_yellow.png b/core/res/res/drawable-hdpi/jog_dial_arrow_long_middle_yellow.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/jog_dial_arrow_long_right_red.png b/core/res/res/drawable-hdpi/jog_dial_arrow_long_right_red.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/jog_dial_arrow_long_right_yellow.png b/core/res/res/drawable-hdpi/jog_dial_arrow_long_right_yellow.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/jog_dial_arrow_short_left.png b/core/res/res/drawable-hdpi/jog_dial_arrow_short_left.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/jog_dial_arrow_short_left_and_right.png b/core/res/res/drawable-hdpi/jog_dial_arrow_short_left_and_right.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/jog_dial_arrow_short_right.png b/core/res/res/drawable-hdpi/jog_dial_arrow_short_right.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/jog_dial_bg.png b/core/res/res/drawable-hdpi/jog_dial_bg.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/jog_dial_dimple.png b/core/res/res/drawable-hdpi/jog_dial_dimple.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/jog_tab_left_confirm_gray.png b/core/res/res/drawable-hdpi/jog_tab_left_confirm_gray.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/jog_tab_left_confirm_green.png b/core/res/res/drawable-hdpi/jog_tab_left_confirm_green.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/jog_tab_left_confirm_red.png b/core/res/res/drawable-hdpi/jog_tab_left_confirm_red.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/jog_tab_left_confirm_yellow.png b/core/res/res/drawable-hdpi/jog_tab_left_confirm_yellow.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/jog_tab_left_pressed.png b/core/res/res/drawable-hdpi/jog_tab_left_pressed.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/jog_tab_right_confirm_gray.png b/core/res/res/drawable-hdpi/jog_tab_right_confirm_gray.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/jog_tab_right_confirm_green.png b/core/res/res/drawable-hdpi/jog_tab_right_confirm_green.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/jog_tab_right_confirm_red.png b/core/res/res/drawable-hdpi/jog_tab_right_confirm_red.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/jog_tab_right_confirm_yellow.png b/core/res/res/drawable-hdpi/jog_tab_right_confirm_yellow.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/jog_tab_right_pressed.png b/core/res/res/drawable-hdpi/jog_tab_right_pressed.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/progressbar_indeterminate1.png b/core/res/res/drawable-hdpi/progressbar_indeterminate1.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/progressbar_indeterminate2.png b/core/res/res/drawable-hdpi/progressbar_indeterminate2.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/progressbar_indeterminate3.png b/core/res/res/drawable-hdpi/progressbar_indeterminate3.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/stat_notify_more.png b/core/res/res/drawable-hdpi/stat_notify_more.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/stat_sys_battery_10.png b/core/res/res/drawable-hdpi/stat_sys_battery_10.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/stat_sys_battery_20.png b/core/res/res/drawable-hdpi/stat_sys_battery_20.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/stat_sys_battery_40.png b/core/res/res/drawable-hdpi/stat_sys_battery_40.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/stat_sys_battery_60.png b/core/res/res/drawable-hdpi/stat_sys_battery_60.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/stat_sys_battery_80.png b/core/res/res/drawable-hdpi/stat_sys_battery_80.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/stat_sys_battery_charge_anim1.png b/core/res/res/drawable-hdpi/stat_sys_battery_charge_anim1.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/stat_sys_battery_charge_anim2.png b/core/res/res/drawable-hdpi/stat_sys_battery_charge_anim2.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/stat_sys_battery_charge_anim3.png b/core/res/res/drawable-hdpi/stat_sys_battery_charge_anim3.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/stat_sys_battery_charge_anim4.png b/core/res/res/drawable-hdpi/stat_sys_battery_charge_anim4.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/stat_sys_battery_charge_anim5.png b/core/res/res/drawable-hdpi/stat_sys_battery_charge_anim5.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/stat_sys_phone_call.png b/core/res/res/drawable-hdpi/stat_sys_phone_call.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/stat_sys_phone_call_forward.png b/core/res/res/drawable-hdpi/stat_sys_phone_call_forward.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/stat_sys_phone_call_on_hold.png b/core/res/res/drawable-hdpi/stat_sys_phone_call_on_hold.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/stat_sys_r_signal_3_cdma.png b/core/res/res/drawable-hdpi/stat_sys_r_signal_3_cdma.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/stat_sys_ra_signal_0_cdma.png b/core/res/res/drawable-hdpi/stat_sys_ra_signal_0_cdma.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/stat_sys_ra_signal_1_cdma.png b/core/res/res/drawable-hdpi/stat_sys_ra_signal_1_cdma.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/stat_sys_ra_signal_2_cdma.png b/core/res/res/drawable-hdpi/stat_sys_ra_signal_2_cdma.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/stat_sys_ra_signal_4_cdma.png b/core/res/res/drawable-hdpi/stat_sys_ra_signal_4_cdma.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/stat_sys_signal_0_cdma.png b/core/res/res/drawable-hdpi/stat_sys_signal_0_cdma.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/stat_sys_signal_1_cdma.png b/core/res/res/drawable-hdpi/stat_sys_signal_1_cdma.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/stat_sys_signal_2_cdma.png b/core/res/res/drawable-hdpi/stat_sys_signal_2_cdma.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/stat_sys_signal_3_cdma.png b/core/res/res/drawable-hdpi/stat_sys_signal_3_cdma.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/stat_sys_signal_4_cdma.png b/core/res/res/drawable-hdpi/stat_sys_signal_4_cdma.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/stat_sys_signal_evdo_0.png b/core/res/res/drawable-hdpi/stat_sys_signal_evdo_0.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/stat_sys_signal_evdo_1.png b/core/res/res/drawable-hdpi/stat_sys_signal_evdo_1.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/stat_sys_signal_evdo_2.png b/core/res/res/drawable-hdpi/stat_sys_signal_evdo_2.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/stat_sys_signal_evdo_3.png b/core/res/res/drawable-hdpi/stat_sys_signal_evdo_3.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/stat_sys_signal_evdo_4.png b/core/res/res/drawable-hdpi/stat_sys_signal_evdo_4.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/stat_sys_tether_bluetooth.png b/core/res/res/drawable-hdpi/stat_sys_tether_bluetooth.png index 9451174d65d..ab5208e985b 100644 Binary files a/core/res/res/drawable-hdpi/stat_sys_tether_bluetooth.png and b/core/res/res/drawable-hdpi/stat_sys_tether_bluetooth.png differ diff --git a/core/res/res/drawable-hdpi/stat_sys_tether_usb.png b/core/res/res/drawable-hdpi/stat_sys_tether_usb.png index cae1bd1b257..b40f8d9d248 100644 Binary files a/core/res/res/drawable-hdpi/stat_sys_tether_usb.png and b/core/res/res/drawable-hdpi/stat_sys_tether_usb.png differ diff --git a/core/res/res/drawable-hdpi/stat_sys_tether_wifi.png b/core/res/res/drawable-hdpi/stat_sys_tether_wifi.png index 7d4df504edf..86c3df3b696 100644 Binary files a/core/res/res/drawable-hdpi/stat_sys_tether_wifi.png and b/core/res/res/drawable-hdpi/stat_sys_tether_wifi.png differ diff --git a/core/res/res/drawable-hdpi/stat_sys_vp_phone_call.png b/core/res/res/drawable-hdpi/stat_sys_vp_phone_call.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/stat_sys_vp_phone_call_on_hold.png b/core/res/res/drawable-hdpi/stat_sys_vp_phone_call_on_hold.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/sym_keyboard_delete.png b/core/res/res/drawable-hdpi/sym_keyboard_delete.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/sym_keyboard_feedback_delete.png b/core/res/res/drawable-hdpi/sym_keyboard_feedback_delete.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/sym_keyboard_feedback_return.png b/core/res/res/drawable-hdpi/sym_keyboard_feedback_return.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/sym_keyboard_feedback_shift.png b/core/res/res/drawable-hdpi/sym_keyboard_feedback_shift.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/sym_keyboard_feedback_shift_locked.png b/core/res/res/drawable-hdpi/sym_keyboard_feedback_shift_locked.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/sym_keyboard_feedback_space.png b/core/res/res/drawable-hdpi/sym_keyboard_feedback_space.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/sym_keyboard_num1.png b/core/res/res/drawable-hdpi/sym_keyboard_num1.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/sym_keyboard_num2.png b/core/res/res/drawable-hdpi/sym_keyboard_num2.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/sym_keyboard_num3.png b/core/res/res/drawable-hdpi/sym_keyboard_num3.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/sym_keyboard_num4.png b/core/res/res/drawable-hdpi/sym_keyboard_num4.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/sym_keyboard_num5.png b/core/res/res/drawable-hdpi/sym_keyboard_num5.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/sym_keyboard_num6.png b/core/res/res/drawable-hdpi/sym_keyboard_num6.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/sym_keyboard_num7.png b/core/res/res/drawable-hdpi/sym_keyboard_num7.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/sym_keyboard_num8.png b/core/res/res/drawable-hdpi/sym_keyboard_num8.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/sym_keyboard_num9.png b/core/res/res/drawable-hdpi/sym_keyboard_num9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/sym_keyboard_return.png b/core/res/res/drawable-hdpi/sym_keyboard_return.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/sym_keyboard_shift.png b/core/res/res/drawable-hdpi/sym_keyboard_shift.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/sym_keyboard_shift_locked.png b/core/res/res/drawable-hdpi/sym_keyboard_shift_locked.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/sym_keyboard_space.png b/core/res/res/drawable-hdpi/sym_keyboard_space.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/textfield_default.9.png b/core/res/res/drawable-hdpi/textfield_default.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/textfield_disabled.9.png b/core/res/res/drawable-hdpi/textfield_disabled.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/textfield_disabled_selected.9.png b/core/res/res/drawable-hdpi/textfield_disabled_selected.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/textfield_selected.9.png b/core/res/res/drawable-hdpi/textfield_selected.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-hdpi/weather_0.png b/core/res/res/drawable-hdpi/weather_0.png new file mode 100644 index 00000000000..1b1684990ce Binary files /dev/null and b/core/res/res/drawable-hdpi/weather_0.png differ diff --git a/core/res/res/drawable-hdpi/weather_1.png b/core/res/res/drawable-hdpi/weather_1.png new file mode 100644 index 00000000000..1b1684990ce Binary files /dev/null and b/core/res/res/drawable-hdpi/weather_1.png differ diff --git a/core/res/res/drawable-hdpi/weather_10.png b/core/res/res/drawable-hdpi/weather_10.png new file mode 100644 index 00000000000..14168f8d5f0 Binary files /dev/null and b/core/res/res/drawable-hdpi/weather_10.png differ diff --git a/core/res/res/drawable-hdpi/weather_11.png b/core/res/res/drawable-hdpi/weather_11.png new file mode 100644 index 00000000000..6ffd264633c Binary files /dev/null and b/core/res/res/drawable-hdpi/weather_11.png differ diff --git a/core/res/res/drawable-hdpi/weather_12.png b/core/res/res/drawable-hdpi/weather_12.png new file mode 100644 index 00000000000..de61a9f34c8 Binary files /dev/null and b/core/res/res/drawable-hdpi/weather_12.png differ diff --git a/core/res/res/drawable-hdpi/weather_13.png b/core/res/res/drawable-hdpi/weather_13.png new file mode 100644 index 00000000000..13ac0e62d5b Binary files /dev/null and b/core/res/res/drawable-hdpi/weather_13.png differ diff --git a/core/res/res/drawable-hdpi/weather_14.png b/core/res/res/drawable-hdpi/weather_14.png new file mode 100644 index 00000000000..da33303f3e6 Binary files /dev/null and b/core/res/res/drawable-hdpi/weather_14.png differ diff --git a/core/res/res/drawable-hdpi/weather_15.png b/core/res/res/drawable-hdpi/weather_15.png new file mode 100644 index 00000000000..6bd0f642f36 Binary files /dev/null and b/core/res/res/drawable-hdpi/weather_15.png differ diff --git a/core/res/res/drawable-hdpi/weather_16.png b/core/res/res/drawable-hdpi/weather_16.png new file mode 100644 index 00000000000..5e8e7b3e7e0 Binary files /dev/null and b/core/res/res/drawable-hdpi/weather_16.png differ diff --git a/core/res/res/drawable-hdpi/weather_17.png b/core/res/res/drawable-hdpi/weather_17.png new file mode 100644 index 00000000000..1b1684990ce Binary files /dev/null and b/core/res/res/drawable-hdpi/weather_17.png differ diff --git a/core/res/res/drawable-hdpi/weather_18.png b/core/res/res/drawable-hdpi/weather_18.png new file mode 100644 index 00000000000..9b1c4c312ea Binary files /dev/null and b/core/res/res/drawable-hdpi/weather_18.png differ diff --git a/core/res/res/drawable-hdpi/weather_19.png b/core/res/res/drawable-hdpi/weather_19.png new file mode 100644 index 00000000000..c0c072ae908 Binary files /dev/null and b/core/res/res/drawable-hdpi/weather_19.png differ diff --git a/core/res/res/drawable-hdpi/weather_2.png b/core/res/res/drawable-hdpi/weather_2.png new file mode 100644 index 00000000000..1b1684990ce Binary files /dev/null and b/core/res/res/drawable-hdpi/weather_2.png differ diff --git a/core/res/res/drawable-hdpi/weather_20.png b/core/res/res/drawable-hdpi/weather_20.png new file mode 100644 index 00000000000..849683ec177 Binary files /dev/null and b/core/res/res/drawable-hdpi/weather_20.png differ diff --git a/core/res/res/drawable-hdpi/weather_21.png b/core/res/res/drawable-hdpi/weather_21.png new file mode 100644 index 00000000000..50cf64abcdc Binary files /dev/null and b/core/res/res/drawable-hdpi/weather_21.png differ diff --git a/core/res/res/drawable-hdpi/weather_22.png b/core/res/res/drawable-hdpi/weather_22.png new file mode 100644 index 00000000000..5a32fb79e03 Binary files /dev/null and b/core/res/res/drawable-hdpi/weather_22.png differ diff --git a/core/res/res/drawable-hdpi/weather_23.png b/core/res/res/drawable-hdpi/weather_23.png new file mode 100644 index 00000000000..bcb62d318c1 Binary files /dev/null and b/core/res/res/drawable-hdpi/weather_23.png differ diff --git a/core/res/res/drawable-hdpi/weather_24.png b/core/res/res/drawable-hdpi/weather_24.png new file mode 100644 index 00000000000..bcb62d318c1 Binary files /dev/null and b/core/res/res/drawable-hdpi/weather_24.png differ diff --git a/core/res/res/drawable-hdpi/weather_25.png b/core/res/res/drawable-hdpi/weather_25.png new file mode 100644 index 00000000000..70e49f7ccad Binary files /dev/null and b/core/res/res/drawable-hdpi/weather_25.png differ diff --git a/core/res/res/drawable-hdpi/weather_26.png b/core/res/res/drawable-hdpi/weather_26.png new file mode 100644 index 00000000000..86a4c581b80 Binary files /dev/null and b/core/res/res/drawable-hdpi/weather_26.png differ diff --git a/core/res/res/drawable-hdpi/weather_27.png b/core/res/res/drawable-hdpi/weather_27.png new file mode 100644 index 00000000000..9c78f589af7 Binary files /dev/null and b/core/res/res/drawable-hdpi/weather_27.png differ diff --git a/core/res/res/drawable-hdpi/weather_28.png b/core/res/res/drawable-hdpi/weather_28.png new file mode 100644 index 00000000000..7aee285d259 Binary files /dev/null and b/core/res/res/drawable-hdpi/weather_28.png differ diff --git a/core/res/res/drawable-hdpi/weather_29.png b/core/res/res/drawable-hdpi/weather_29.png new file mode 100644 index 00000000000..2d6ee95f7a1 Binary files /dev/null and b/core/res/res/drawable-hdpi/weather_29.png differ diff --git a/core/res/res/drawable-hdpi/weather_3.png b/core/res/res/drawable-hdpi/weather_3.png new file mode 100644 index 00000000000..1b1684990ce Binary files /dev/null and b/core/res/res/drawable-hdpi/weather_3.png differ diff --git a/core/res/res/drawable-hdpi/weather_30.png b/core/res/res/drawable-hdpi/weather_30.png new file mode 100644 index 00000000000..a42f2cd0a5e Binary files /dev/null and b/core/res/res/drawable-hdpi/weather_30.png differ diff --git a/core/res/res/drawable-hdpi/weather_31.png b/core/res/res/drawable-hdpi/weather_31.png new file mode 100644 index 00000000000..330ae08a769 Binary files /dev/null and b/core/res/res/drawable-hdpi/weather_31.png differ diff --git a/core/res/res/drawable-hdpi/weather_32.png b/core/res/res/drawable-hdpi/weather_32.png new file mode 100644 index 00000000000..b856c36bbe3 Binary files /dev/null and b/core/res/res/drawable-hdpi/weather_32.png differ diff --git a/core/res/res/drawable-hdpi/weather_33.png b/core/res/res/drawable-hdpi/weather_33.png new file mode 100644 index 00000000000..410d324e178 Binary files /dev/null and b/core/res/res/drawable-hdpi/weather_33.png differ diff --git a/core/res/res/drawable-hdpi/weather_34.png b/core/res/res/drawable-hdpi/weather_34.png new file mode 100644 index 00000000000..fa3608c6872 Binary files /dev/null and b/core/res/res/drawable-hdpi/weather_34.png differ diff --git a/core/res/res/drawable-hdpi/weather_35.png b/core/res/res/drawable-hdpi/weather_35.png new file mode 100644 index 00000000000..1b1684990ce Binary files /dev/null and b/core/res/res/drawable-hdpi/weather_35.png differ diff --git a/core/res/res/drawable-hdpi/weather_36.png b/core/res/res/drawable-hdpi/weather_36.png new file mode 100644 index 00000000000..594be35c4fe Binary files /dev/null and b/core/res/res/drawable-hdpi/weather_36.png differ diff --git a/core/res/res/drawable-hdpi/weather_37.png b/core/res/res/drawable-hdpi/weather_37.png new file mode 100644 index 00000000000..295c63ae342 Binary files /dev/null and b/core/res/res/drawable-hdpi/weather_37.png differ diff --git a/core/res/res/drawable-hdpi/weather_38.png b/core/res/res/drawable-hdpi/weather_38.png new file mode 100644 index 00000000000..295c63ae342 Binary files /dev/null and b/core/res/res/drawable-hdpi/weather_38.png differ diff --git a/core/res/res/drawable-hdpi/weather_39.png b/core/res/res/drawable-hdpi/weather_39.png new file mode 100644 index 00000000000..0b7b1003f93 Binary files /dev/null and b/core/res/res/drawable-hdpi/weather_39.png differ diff --git a/core/res/res/drawable-hdpi/weather_4.png b/core/res/res/drawable-hdpi/weather_4.png new file mode 100644 index 00000000000..1b1684990ce Binary files /dev/null and b/core/res/res/drawable-hdpi/weather_4.png differ diff --git a/core/res/res/drawable-hdpi/weather_40.png b/core/res/res/drawable-hdpi/weather_40.png new file mode 100644 index 00000000000..de61a9f34c8 Binary files /dev/null and b/core/res/res/drawable-hdpi/weather_40.png differ diff --git a/core/res/res/drawable-hdpi/weather_41.png b/core/res/res/drawable-hdpi/weather_41.png new file mode 100644 index 00000000000..e2a73905bc3 Binary files /dev/null and b/core/res/res/drawable-hdpi/weather_41.png differ diff --git a/core/res/res/drawable-hdpi/weather_42.png b/core/res/res/drawable-hdpi/weather_42.png new file mode 100644 index 00000000000..5e8e7b3e7e0 Binary files /dev/null and b/core/res/res/drawable-hdpi/weather_42.png differ diff --git a/core/res/res/drawable-hdpi/weather_43.png b/core/res/res/drawable-hdpi/weather_43.png new file mode 100644 index 00000000000..6bd0f642f36 Binary files /dev/null and b/core/res/res/drawable-hdpi/weather_43.png differ diff --git a/core/res/res/drawable-hdpi/weather_44.png b/core/res/res/drawable-hdpi/weather_44.png new file mode 100644 index 00000000000..73d67dc56e9 Binary files /dev/null and b/core/res/res/drawable-hdpi/weather_44.png differ diff --git a/core/res/res/drawable-hdpi/weather_45.png b/core/res/res/drawable-hdpi/weather_45.png new file mode 100644 index 00000000000..b23155e41b4 Binary files /dev/null and b/core/res/res/drawable-hdpi/weather_45.png differ diff --git a/core/res/res/drawable-hdpi/weather_46.png b/core/res/res/drawable-hdpi/weather_46.png new file mode 100644 index 00000000000..603195ee89d Binary files /dev/null and b/core/res/res/drawable-hdpi/weather_46.png differ diff --git a/core/res/res/drawable-hdpi/weather_47.png b/core/res/res/drawable-hdpi/weather_47.png new file mode 100644 index 00000000000..c4389291b8e Binary files /dev/null and b/core/res/res/drawable-hdpi/weather_47.png differ diff --git a/core/res/res/drawable-hdpi/weather_5.png b/core/res/res/drawable-hdpi/weather_5.png new file mode 100644 index 00000000000..2d40e6839de Binary files /dev/null and b/core/res/res/drawable-hdpi/weather_5.png differ diff --git a/core/res/res/drawable-hdpi/weather_6.png b/core/res/res/drawable-hdpi/weather_6.png new file mode 100644 index 00000000000..522214df455 Binary files /dev/null and b/core/res/res/drawable-hdpi/weather_6.png differ diff --git a/core/res/res/drawable-hdpi/weather_7.png b/core/res/res/drawable-hdpi/weather_7.png new file mode 100644 index 00000000000..f328a971e6a Binary files /dev/null and b/core/res/res/drawable-hdpi/weather_7.png differ diff --git a/core/res/res/drawable-hdpi/weather_8.png b/core/res/res/drawable-hdpi/weather_8.png new file mode 100644 index 00000000000..a9e0991578c Binary files /dev/null and b/core/res/res/drawable-hdpi/weather_8.png differ diff --git a/core/res/res/drawable-hdpi/weather_9.png b/core/res/res/drawable-hdpi/weather_9.png new file mode 100644 index 00000000000..da900ad8ff1 Binary files /dev/null and b/core/res/res/drawable-hdpi/weather_9.png differ diff --git a/core/res/res/drawable-hdpi/weather_na.png b/core/res/res/drawable-hdpi/weather_na.png new file mode 100644 index 00000000000..73d67dc56e9 Binary files /dev/null and b/core/res/res/drawable-hdpi/weather_na.png differ diff --git a/core/res/res/drawable-ldpi/ic_notification_overlay.9.png b/core/res/res/drawable-ldpi/ic_notification_overlay.9.png index 771fa738446..8bc1daf3418 100644 Binary files a/core/res/res/drawable-ldpi/ic_notification_overlay.9.png and b/core/res/res/drawable-ldpi/ic_notification_overlay.9.png differ diff --git a/core/res/res/drawable-ldpi/tab_focus_bar_left.9.png b/core/res/res/drawable-ldpi/tab_focus_bar_left.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-ldpi/tab_focus_bar_right.9.png b/core/res/res/drawable-ldpi/tab_focus_bar_right.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-ldpi/tab_press_bar_left.9.png b/core/res/res/drawable-ldpi/tab_press_bar_left.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-ldpi/tab_press_bar_right.9.png b/core/res/res/drawable-ldpi/tab_press_bar_right.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-ldpi/tab_selected_bar_left.9.png b/core/res/res/drawable-ldpi/tab_selected_bar_left.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-ldpi/tab_selected_bar_right.9.png b/core/res/res/drawable-ldpi/tab_selected_bar_right.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/btn_check_buttonless_off.png b/core/res/res/drawable-mdpi/btn_check_buttonless_off.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/btn_check_buttonless_on.png b/core/res/res/drawable-mdpi/btn_check_buttonless_on.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/btn_dialog_disable.png b/core/res/res/drawable-mdpi/btn_dialog_disable.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/btn_dialog_normal.png b/core/res/res/drawable-mdpi/btn_dialog_normal.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/btn_dialog_pressed.png b/core/res/res/drawable-mdpi/btn_dialog_pressed.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/btn_dialog_selected.png b/core/res/res/drawable-mdpi/btn_dialog_selected.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/btn_erase_default.9.png b/core/res/res/drawable-mdpi/btn_erase_default.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/btn_erase_pressed.9.png b/core/res/res/drawable-mdpi/btn_erase_pressed.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/btn_erase_selected.9.png b/core/res/res/drawable-mdpi/btn_erase_selected.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/btn_keyboard_key_pressed.9.png b/core/res/res/drawable-mdpi/btn_keyboard_key_pressed.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/btn_media_player.9.png b/core/res/res/drawable-mdpi/btn_media_player.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/btn_media_player_disabled.9.png b/core/res/res/drawable-mdpi/btn_media_player_disabled.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/btn_media_player_disabled_selected.9.png b/core/res/res/drawable-mdpi/btn_media_player_disabled_selected.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/btn_media_player_pressed.9.png b/core/res/res/drawable-mdpi/btn_media_player_pressed.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/btn_media_player_selected.9.png b/core/res/res/drawable-mdpi/btn_media_player_selected.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/btn_star_big_off.png b/core/res/res/drawable-mdpi/btn_star_big_off.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/btn_star_big_off_disable.png b/core/res/res/drawable-mdpi/btn_star_big_off_disable.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/btn_star_big_off_disable_focused.png b/core/res/res/drawable-mdpi/btn_star_big_off_disable_focused.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/btn_star_big_off_pressed.png b/core/res/res/drawable-mdpi/btn_star_big_off_pressed.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/btn_star_big_off_selected.png b/core/res/res/drawable-mdpi/btn_star_big_off_selected.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/btn_star_big_on.png b/core/res/res/drawable-mdpi/btn_star_big_on.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/btn_star_big_on_disable.png b/core/res/res/drawable-mdpi/btn_star_big_on_disable.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/btn_star_big_on_disable_focused.png b/core/res/res/drawable-mdpi/btn_star_big_on_disable_focused.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/btn_star_big_on_pressed.png b/core/res/res/drawable-mdpi/btn_star_big_on_pressed.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/btn_star_big_on_selected.png b/core/res/res/drawable-mdpi/btn_star_big_on_selected.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/dialog_divider_horizontal_light.9.png b/core/res/res/drawable-mdpi/dialog_divider_horizontal_light.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/frame_gallery_thumb.9.png b/core/res/res/drawable-mdpi/frame_gallery_thumb.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/frame_gallery_thumb_pressed.9.png b/core/res/res/drawable-mdpi/frame_gallery_thumb_pressed.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/frame_gallery_thumb_selected.9.png b/core/res/res/drawable-mdpi/frame_gallery_thumb_selected.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/gallery_selected_default.9.png b/core/res/res/drawable-mdpi/gallery_selected_default.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/gallery_selected_focused.9.png b/core/res/res/drawable-mdpi/gallery_selected_focused.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/gallery_selected_pressed.9.png b/core/res/res/drawable-mdpi/gallery_selected_pressed.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/gallery_unselected_default.9.png b/core/res/res/drawable-mdpi/gallery_unselected_default.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/ic_dialog_info.png b/core/res/res/drawable-mdpi/ic_dialog_info.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/ic_dialog_time.png b/core/res/res/drawable-mdpi/ic_dialog_time.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/ic_jog_dial_unlock.png b/core/res/res/drawable-mdpi/ic_jog_dial_unlock.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/ic_lock_idle_charging.png b/core/res/res/drawable-mdpi/ic_lock_idle_charging.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/ic_lock_idle_lock.png b/core/res/res/drawable-mdpi/ic_lock_idle_lock.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/ic_lock_idle_low_battery.png b/core/res/res/drawable-mdpi/ic_lock_idle_low_battery.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/ic_lock_screenshot.png b/core/res/res/drawable-mdpi/ic_lock_screenshot.png new file mode 100755 index 00000000000..9d91917d507 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lock_screenshot.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_alarm_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_alarm_activated.png new file mode 100644 index 00000000000..3e6bf27f29e Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_alarm_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_alarm_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_alarm_normal.png new file mode 100644 index 00000000000..e7cd0fe5e23 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_alarm_normal.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_answer_active.png b/core/res/res/drawable-mdpi/ic_lockscreen_answer_active.png new file mode 100644 index 00000000000..0ad03c0f211 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_answer_active.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_answer_focused.png b/core/res/res/drawable-mdpi/ic_lockscreen_answer_focused.png new file mode 100644 index 00000000000..f46e8bd0b99 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_answer_focused.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_answer_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_answer_normal.png new file mode 100644 index 00000000000..ddeeb18fc0e Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_answer_normal.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_browser2_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_browser2_activated.png new file mode 100644 index 00000000000..12898f53a2e Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_browser2_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_browser2_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_browser2_normal.png new file mode 100644 index 00000000000..e857ecd4564 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_browser2_normal.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_browser_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_browser_activated.png new file mode 100644 index 00000000000..12898f53a2e Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_browser_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_browser_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_browser_normal.png new file mode 100644 index 00000000000..e857ecd4564 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_browser_normal.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_calendar_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_calendar_activated.png new file mode 100644 index 00000000000..19ec569c12d Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_calendar_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_calendar_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_calendar_normal.png new file mode 100644 index 00000000000..d1f274cfde2 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_calendar_normal.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_camera2_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_camera2_activated.png new file mode 100644 index 00000000000..69f254ef913 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_camera2_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_camera2_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_camera2_normal.png new file mode 100644 index 00000000000..bc179d1d325 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_camera2_normal.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_camera_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_camera_activated.png index 862f33bffe6..69f254ef913 100644 Binary files a/core/res/res/drawable-mdpi/ic_lockscreen_camera_activated.png and b/core/res/res/drawable-mdpi/ic_lockscreen_camera_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_camera_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_camera_normal.png index 30df0a328ca..bc179d1d325 100644 Binary files a/core/res/res/drawable-mdpi/ic_lockscreen_camera_normal.png and b/core/res/res/drawable-mdpi/ic_lockscreen_camera_normal.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_decline_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_decline_activated.png new file mode 100644 index 00000000000..d1aae183448 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_decline_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_decline_focused.png b/core/res/res/drawable-mdpi/ic_lockscreen_decline_focused.png new file mode 100644 index 00000000000..b52c844d247 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_decline_focused.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_decline_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_decline_normal.png new file mode 100644 index 00000000000..722027ec086 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_decline_normal.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_email_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_email_activated.png new file mode 100644 index 00000000000..116e8af47c2 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_email_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_email_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_email_normal.png new file mode 100644 index 00000000000..1f466e6a619 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_email_normal.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_facebook_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_facebook_activated.png new file mode 100644 index 00000000000..9437476dacb Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_facebook_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_facebook_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_facebook_normal.png new file mode 100644 index 00000000000..c8100f40934 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_facebook_normal.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_gallery_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_gallery_activated.png new file mode 100644 index 00000000000..f4439234810 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_gallery_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_gallery_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_gallery_normal.png new file mode 100644 index 00000000000..151db418b1f Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_gallery_normal.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_gplus_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_gplus_activated.png new file mode 100644 index 00000000000..9b0c0cc90e5 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_gplus_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_gplus_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_gplus_normal.png new file mode 100644 index 00000000000..acc280e787e Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_gplus_normal.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_gtalk_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_gtalk_activated.png new file mode 100644 index 00000000000..62b71d66f6e Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_gtalk_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_gtalk_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_gtalk_normal.png new file mode 100644 index 00000000000..86df9fb9475 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_gtalk_normal.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_home_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_home_activated.png new file mode 100755 index 00000000000..c81997c62a8 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_home_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_home_focused.png b/core/res/res/drawable-mdpi/ic_lockscreen_home_focused.png new file mode 100755 index 00000000000..76d323d298d Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_home_focused.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_home_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_home_normal.png new file mode 100755 index 00000000000..e1ee1c26c97 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_home_normal.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_lock_pressed.png b/core/res/res/drawable-mdpi/ic_lockscreen_lock_pressed.png index aab2f6b065b..d9f5e040db3 100644 Binary files a/core/res/res/drawable-mdpi/ic_lockscreen_lock_pressed.png and b/core/res/res/drawable-mdpi/ic_lockscreen_lock_pressed.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_maps_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_maps_activated.png new file mode 100644 index 00000000000..1d86e3fa538 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_maps_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_maps_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_maps_normal.png new file mode 100644 index 00000000000..3387fb4c18a Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_maps_normal.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_movie_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_movie_activated.png new file mode 100644 index 00000000000..242fa513b29 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_movie_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_movie_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_movie_normal.png new file mode 100644 index 00000000000..ae4d9b44be0 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_movie_normal.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_music_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_music_activated.png new file mode 100644 index 00000000000..5f3ab913505 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_music_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_music_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_music_normal.png new file mode 100644 index 00000000000..39faf7472cc Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_music_normal.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_nav_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_nav_activated.png new file mode 100644 index 00000000000..300e8854f9f Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_nav_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_nav_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_nav_normal.png new file mode 100644 index 00000000000..04e5bab437a Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_nav_normal.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_phone2_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_phone2_activated.png new file mode 100644 index 00000000000..1cb40ba43be Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_phone2_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_phone2_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_phone2_normal.png new file mode 100644 index 00000000000..4f7a2bbd8f4 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_phone2_normal.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_phone_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_phone_activated.png new file mode 100644 index 00000000000..1cb40ba43be Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_phone_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_phone_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_phone_normal.png new file mode 100644 index 00000000000..4f7a2bbd8f4 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_phone_normal.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_podcast_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_podcast_activated.png new file mode 100644 index 00000000000..714bdc3588f Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_podcast_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_podcast_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_podcast_normal.png new file mode 100644 index 00000000000..ceda3f9f363 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_podcast_normal.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_rss_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_rss_activated.png new file mode 100644 index 00000000000..dc113fad767 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_rss_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_rss_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_rss_normal.png new file mode 100644 index 00000000000..e8023050ae4 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_rss_normal.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_silent_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_silent_normal.png old mode 100644 new mode 100755 index c288ce4284c..225ead0b3dd Binary files a/core/res/res/drawable-mdpi/ic_lockscreen_silent_normal.png and b/core/res/res/drawable-mdpi/ic_lockscreen_silent_normal.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_sms2_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_sms2_activated.png new file mode 100644 index 00000000000..0fda783e73f Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_sms2_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_sms2_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_sms2_normal.png new file mode 100644 index 00000000000..fd4771e2039 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_sms2_normal.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_sms_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_sms_activated.png new file mode 100644 index 00000000000..0fda783e73f Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_sms_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_sms_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_sms_normal.png new file mode 100644 index 00000000000..fd4771e2039 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_sms_normal.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_soundon_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_soundon_activated.png old mode 100644 new mode 100755 index 637eec6fb0c..13e7557c448 Binary files a/core/res/res/drawable-mdpi/ic_lockscreen_soundon_activated.png and b/core/res/res/drawable-mdpi/ic_lockscreen_soundon_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_soundon_focused.png b/core/res/res/drawable-mdpi/ic_lockscreen_soundon_focused.png old mode 100644 new mode 100755 index db59b5f3eee..bf849a11973 Binary files a/core/res/res/drawable-mdpi/ic_lockscreen_soundon_focused.png and b/core/res/res/drawable-mdpi/ic_lockscreen_soundon_focused.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_soundon_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_soundon_normal.png old mode 100644 new mode 100755 index eb6ceedb818..e7d4bf48dcc Binary files a/core/res/res/drawable-mdpi/ic_lockscreen_soundon_normal.png and b/core/res/res/drawable-mdpi/ic_lockscreen_soundon_normal.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_target_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_target_activated.png new file mode 100644 index 00000000000..f2a3109477f Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_target_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_twitter_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_twitter_activated.png new file mode 100644 index 00000000000..5f66e9cd8da Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_twitter_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_twitter_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_twitter_normal.png new file mode 100644 index 00000000000..5c746b2f586 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_twitter_normal.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_aokp_color_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_aokp_color_activated.png new file mode 100755 index 00000000000..002b45fe5e0 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_aokp_color_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_aokp_color_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_aokp_color_normal.png new file mode 100755 index 00000000000..002b45fe5e0 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_aokp_color_normal.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_browser_bw_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_browser_bw_activated.png new file mode 100755 index 00000000000..3079ecc5458 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_browser_bw_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_browser_bw_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_browser_bw_normal.png new file mode 100755 index 00000000000..3079ecc5458 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_browser_bw_normal.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_browser_color_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_browser_color_activated.png new file mode 100755 index 00000000000..15072c7988a Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_browser_color_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_browser_color_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_browser_color_normal.png new file mode 100755 index 00000000000..15072c7988a Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_browser_color_normal.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_calender_bw_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_calender_bw_activated.png new file mode 100755 index 00000000000..0f72990036f Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_calender_bw_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_calender_bw_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_calender_bw_normal.png new file mode 100755 index 00000000000..0f72990036f Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_calender_bw_normal.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_calender_color_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_calender_color_activated.png new file mode 100755 index 00000000000..60c2655b7ad Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_calender_color_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_calender_color_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_calender_color_normal.png new file mode 100755 index 00000000000..60c2655b7ad Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_calender_color_normal.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_camera1_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_camera1_activated.png new file mode 100755 index 00000000000..c3dacd0e0b5 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_camera1_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_camera1_color_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_camera1_color_activated.png new file mode 100755 index 00000000000..b6cdeeb5280 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_camera1_color_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_camera1_color_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_camera1_color_normal.png new file mode 100755 index 00000000000..b6cdeeb5280 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_camera1_color_normal.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_camera1_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_camera1_normal.png new file mode 100755 index 00000000000..c3dacd0e0b5 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_camera1_normal.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_camera_bw_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_camera_bw_activated.png new file mode 100755 index 00000000000..efc70171f30 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_camera_bw_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_camera_bw_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_camera_bw_normal.png new file mode 100755 index 00000000000..efc70171f30 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_camera_bw_normal.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_camera_color_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_camera_color_activated.png new file mode 100755 index 00000000000..8101126262d Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_camera_color_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_camera_color_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_camera_color_normal.png new file mode 100755 index 00000000000..8101126262d Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_camera_color_normal.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_clock_bw_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_clock_bw_activated.png new file mode 100755 index 00000000000..93f07d36422 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_clock_bw_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_clock_bw_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_clock_bw_normal.png new file mode 100755 index 00000000000..93f07d36422 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_clock_bw_normal.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_clock_color_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_clock_color_activated.png new file mode 100755 index 00000000000..743ec6a0b92 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_clock_color_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_clock_color_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_clock_color_normal.png new file mode 100755 index 00000000000..743ec6a0b92 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_clock_color_normal.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_email_bw_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_email_bw_activated.png new file mode 100755 index 00000000000..6c19d665852 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_email_bw_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_email_bw_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_email_bw_normal.png new file mode 100755 index 00000000000..6c19d665852 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_email_bw_normal.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_email_color_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_email_color_activated.png new file mode 100755 index 00000000000..abec43669af Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_email_color_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_email_color_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_email_color_normal.png new file mode 100755 index 00000000000..abec43669af Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_email_color_normal.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_facebook_bw_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_facebook_bw_activated.png new file mode 100755 index 00000000000..cbdd0ea7be5 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_facebook_bw_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_facebook_bw_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_facebook_bw_normal.png new file mode 100755 index 00000000000..cbdd0ea7be5 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_facebook_bw_normal.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_facebook_color_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_facebook_color_activated.png new file mode 100755 index 00000000000..c1ae95506c7 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_facebook_color_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_facebook_color_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_facebook_color_normal.png new file mode 100755 index 00000000000..c1ae95506c7 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_facebook_color_normal.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_gallery_bw_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_gallery_bw_activated.png new file mode 100755 index 00000000000..4ab94a1fb76 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_gallery_bw_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_gallery_bw_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_gallery_bw_normal.png new file mode 100755 index 00000000000..4ab94a1fb76 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_gallery_bw_normal.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_gallery_color_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_gallery_color_activated.png new file mode 100755 index 00000000000..a7ff02d96c3 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_gallery_color_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_gallery_color_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_gallery_color_normal.png new file mode 100755 index 00000000000..a7ff02d96c3 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_gallery_color_normal.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_gplus_bw_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_gplus_bw_activated.png new file mode 100755 index 00000000000..c49f340ff79 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_gplus_bw_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_gplus_bw_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_gplus_bw_normal.png new file mode 100755 index 00000000000..c49f340ff79 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_gplus_bw_normal.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_gplus_color_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_gplus_color_activated.png new file mode 100755 index 00000000000..e67e3650c55 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_gplus_color_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_gplus_color_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_gplus_color_normal.png new file mode 100755 index 00000000000..e67e3650c55 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_gplus_color_normal.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_lock_bw_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_lock_bw_activated.png new file mode 100755 index 00000000000..3e58de550e3 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_lock_bw_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_lock_bw_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_lock_bw_normal.png new file mode 100755 index 00000000000..3e58de550e3 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_lock_bw_normal.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_lock_color_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_lock_color_activated.png new file mode 100755 index 00000000000..31f2e834e13 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_lock_color_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_lock_color_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_lock_color_normal.png new file mode 100755 index 00000000000..31f2e834e13 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_lock_color_normal.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_maps_bw_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_maps_bw_activated.png new file mode 100755 index 00000000000..9e0edb43387 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_maps_bw_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_maps_bw_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_maps_bw_normal.png new file mode 100755 index 00000000000..9e0edb43387 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_maps_bw_normal.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_maps_color_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_maps_color_activated.png new file mode 100755 index 00000000000..046fef27cf9 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_maps_color_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_maps_color_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_maps_color_normal.png new file mode 100755 index 00000000000..046fef27cf9 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_maps_color_normal.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_mms_bw_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_mms_bw_activated.png new file mode 100755 index 00000000000..2b41110b17f Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_mms_bw_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_mms_bw_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_mms_bw_normal.png new file mode 100755 index 00000000000..2b41110b17f Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_mms_bw_normal.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_mms_color_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_mms_color_activated.png new file mode 100755 index 00000000000..a54705112f9 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_mms_color_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_mms_color_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_mms_color_normal.png new file mode 100755 index 00000000000..a54705112f9 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_mms_color_normal.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_movies_bw_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_movies_bw_activated.png new file mode 100755 index 00000000000..2cc1464db5a Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_movies_bw_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_movies_bw_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_movies_bw_normal.png new file mode 100755 index 00000000000..2cc1464db5a Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_movies_bw_normal.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_movies_color_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_movies_color_activated.png new file mode 100755 index 00000000000..0849dd4cc07 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_movies_color_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_movies_color_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_movies_color_normal.png new file mode 100755 index 00000000000..0849dd4cc07 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_movies_color_normal.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_music_bw_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_music_bw_activated.png new file mode 100755 index 00000000000..1ecb51094d6 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_music_bw_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_music_bw_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_music_bw_normal.png new file mode 100755 index 00000000000..1ecb51094d6 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_music_bw_normal.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_music_color_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_music_color_activated.png new file mode 100755 index 00000000000..183554a3a56 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_music_color_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_music_color_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_music_color_normal.png new file mode 100755 index 00000000000..183554a3a56 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_music_color_normal.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_navigation_bw_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_navigation_bw_activated.png new file mode 100755 index 00000000000..7247d445462 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_navigation_bw_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_navigation_bw_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_navigation_bw_normal.png new file mode 100755 index 00000000000..7247d445462 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_navigation_bw_normal.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_navigation_color_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_navigation_color_activated.png new file mode 100755 index 00000000000..5ec3b0178bf Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_navigation_color_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_navigation_color_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_navigation_color_normal.png new file mode 100755 index 00000000000..5ec3b0178bf Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_navigation_color_normal.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_phone_bw_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_phone_bw_activated.png new file mode 100755 index 00000000000..c966e4da4ef Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_phone_bw_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_phone_bw_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_phone_bw_normal.png new file mode 100755 index 00000000000..c966e4da4ef Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_phone_bw_normal.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_phone_color_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_phone_color_activated.png new file mode 100755 index 00000000000..2970a5d37fa Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_phone_color_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_phone_color_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_phone_color_normal.png new file mode 100755 index 00000000000..2970a5d37fa Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_phone_color_normal.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_podcast_bw_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_podcast_bw_activated.png new file mode 100755 index 00000000000..a829d23e7ff Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_podcast_bw_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_podcast_bw_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_podcast_bw_normal.png new file mode 100755 index 00000000000..a829d23e7ff Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_podcast_bw_normal.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_podcast_color_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_podcast_color_activated.png new file mode 100755 index 00000000000..e285f4bf8e0 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_podcast_color_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_podcast_color_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_podcast_color_normal.png new file mode 100755 index 00000000000..e285f4bf8e0 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_podcast_color_normal.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_rss_bw_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_rss_bw_activated.png new file mode 100755 index 00000000000..aaf3c604f84 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_rss_bw_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_rss_bw_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_rss_bw_normal.png new file mode 100755 index 00000000000..aaf3c604f84 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_rss_bw_normal.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_rss_color_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_rss_color_activated.png new file mode 100755 index 00000000000..f834a799456 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_rss_color_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_rss_color_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_rss_color_normal.png new file mode 100755 index 00000000000..f834a799456 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_rss_color_normal.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_talk_bw_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_talk_bw_activated.png new file mode 100755 index 00000000000..c91d4ba276b Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_talk_bw_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_talk_bw_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_talk_bw_normal.png new file mode 100755 index 00000000000..c91d4ba276b Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_talk_bw_normal.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_talk_color_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_talk_color_activated.png new file mode 100755 index 00000000000..33c1551d576 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_talk_color_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_talk_color_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_talk_color_normal.png new file mode 100755 index 00000000000..33c1551d576 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_talk_color_normal.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_video_color_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_video_color_activated.png new file mode 100755 index 00000000000..d22c8c8d89e Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_video_color_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_video_color_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_video_color_normal.png new file mode 100755 index 00000000000..d22c8c8d89e Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_video_color_normal.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_vib_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_vib_activated.png new file mode 100755 index 00000000000..635a55a1367 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_vib_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_vib_focused.png b/core/res/res/drawable-mdpi/ic_lockscreen_vib_focused.png new file mode 100755 index 00000000000..5f23189507d Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_vib_focused.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_vib_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_vib_normal.png new file mode 100755 index 00000000000..7fe82a0c130 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_vib_normal.png differ diff --git a/core/res/res/drawable-mdpi/ic_media_video_poster.png b/core/res/res/drawable-mdpi/ic_media_video_poster.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/ic_menu_add.png b/core/res/res/drawable-mdpi/ic_menu_add.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/ic_menu_agenda.png b/core/res/res/drawable-mdpi/ic_menu_agenda.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/ic_menu_allfriends.png b/core/res/res/drawable-mdpi/ic_menu_allfriends.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/ic_menu_camera.png b/core/res/res/drawable-mdpi/ic_menu_camera.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/ic_menu_crop.png b/core/res/res/drawable-mdpi/ic_menu_crop.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/ic_menu_day.png b/core/res/res/drawable-mdpi/ic_menu_day.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/ic_menu_delete.png b/core/res/res/drawable-mdpi/ic_menu_delete.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/ic_menu_directions.png b/core/res/res/drawable-mdpi/ic_menu_directions.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/ic_menu_edit.png b/core/res/res/drawable-mdpi/ic_menu_edit.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/ic_menu_gallery.png b/core/res/res/drawable-mdpi/ic_menu_gallery.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/ic_menu_info_details.png b/core/res/res/drawable-mdpi/ic_menu_info_details.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/ic_menu_manage.png b/core/res/res/drawable-mdpi/ic_menu_manage.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/ic_menu_month.png b/core/res/res/drawable-mdpi/ic_menu_month.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/ic_menu_my_calendar.png b/core/res/res/drawable-mdpi/ic_menu_my_calendar.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/ic_menu_mylocation.png b/core/res/res/drawable-mdpi/ic_menu_mylocation.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/ic_menu_rotate.png b/core/res/res/drawable-mdpi/ic_menu_rotate.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/ic_menu_search.png b/core/res/res/drawable-mdpi/ic_menu_search.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/ic_menu_search_holo_dark.png b/core/res/res/drawable-mdpi/ic_menu_search_holo_dark.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/ic_menu_send.png b/core/res/res/drawable-mdpi/ic_menu_send.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/ic_menu_set_as.png b/core/res/res/drawable-mdpi/ic_menu_set_as.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/ic_menu_share.png b/core/res/res/drawable-mdpi/ic_menu_share.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/ic_menu_sort_by_size.png b/core/res/res/drawable-mdpi/ic_menu_sort_by_size.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/ic_menu_star.png b/core/res/res/drawable-mdpi/ic_menu_star.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/ic_menu_today.png b/core/res/res/drawable-mdpi/ic_menu_today.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/ic_menu_upload.png b/core/res/res/drawable-mdpi/ic_menu_upload.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/ic_menu_upload_you_tube.png b/core/res/res/drawable-mdpi/ic_menu_upload_you_tube.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/ic_menu_view.png b/core/res/res/drawable-mdpi/ic_menu_view.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/ic_menu_week.png b/core/res/res/drawable-mdpi/ic_menu_week.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/ic_notification_overlay.9.png b/core/res/res/drawable-mdpi/ic_notification_overlay.9.png index 1a3063c4b3f..0962e058f76 100644 Binary files a/core/res/res/drawable-mdpi/ic_notification_overlay.9.png and b/core/res/res/drawable-mdpi/ic_notification_overlay.9.png differ diff --git a/core/res/res/drawable-mdpi/ic_popup_reminder.png b/core/res/res/drawable-mdpi/ic_popup_reminder.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/ic_search_category_default.png b/core/res/res/drawable-mdpi/ic_search_category_default.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/indicator_input_error.png b/core/res/res/drawable-mdpi/indicator_input_error.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/jog_dial_arrow_long_left_green.png b/core/res/res/drawable-mdpi/jog_dial_arrow_long_left_green.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/jog_dial_arrow_long_left_yellow.png b/core/res/res/drawable-mdpi/jog_dial_arrow_long_left_yellow.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/jog_dial_arrow_long_middle_yellow.png b/core/res/res/drawable-mdpi/jog_dial_arrow_long_middle_yellow.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/jog_dial_arrow_long_right_red.png b/core/res/res/drawable-mdpi/jog_dial_arrow_long_right_red.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/jog_dial_arrow_long_right_yellow.png b/core/res/res/drawable-mdpi/jog_dial_arrow_long_right_yellow.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/jog_dial_arrow_short_left.png b/core/res/res/drawable-mdpi/jog_dial_arrow_short_left.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/jog_dial_arrow_short_left_and_right.png b/core/res/res/drawable-mdpi/jog_dial_arrow_short_left_and_right.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/jog_dial_arrow_short_right.png b/core/res/res/drawable-mdpi/jog_dial_arrow_short_right.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/jog_dial_bg.png b/core/res/res/drawable-mdpi/jog_dial_bg.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/jog_dial_dimple.png b/core/res/res/drawable-mdpi/jog_dial_dimple.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/jog_tab_left_confirm_gray.png b/core/res/res/drawable-mdpi/jog_tab_left_confirm_gray.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/jog_tab_left_confirm_green.png b/core/res/res/drawable-mdpi/jog_tab_left_confirm_green.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/jog_tab_left_confirm_yellow.png b/core/res/res/drawable-mdpi/jog_tab_left_confirm_yellow.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/jog_tab_left_normal.png b/core/res/res/drawable-mdpi/jog_tab_left_normal.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/jog_tab_left_pressed.png b/core/res/res/drawable-mdpi/jog_tab_left_pressed.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/jog_tab_right_confirm_gray.png b/core/res/res/drawable-mdpi/jog_tab_right_confirm_gray.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/jog_tab_right_confirm_green.png b/core/res/res/drawable-mdpi/jog_tab_right_confirm_green.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/jog_tab_right_confirm_yellow.png b/core/res/res/drawable-mdpi/jog_tab_right_confirm_yellow.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/jog_tab_right_normal.png b/core/res/res/drawable-mdpi/jog_tab_right_normal.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/jog_tab_right_pressed.png b/core/res/res/drawable-mdpi/jog_tab_right_pressed.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/keyboard_key_feedback_more_background.9.png b/core/res/res/drawable-mdpi/keyboard_key_feedback_more_background.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/numberpicker_down_disabled.9.png b/core/res/res/drawable-mdpi/numberpicker_down_disabled.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/numberpicker_down_disabled_focused.9.png b/core/res/res/drawable-mdpi/numberpicker_down_disabled_focused.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/numberpicker_down_normal.9.png b/core/res/res/drawable-mdpi/numberpicker_down_normal.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/numberpicker_down_pressed.9.png b/core/res/res/drawable-mdpi/numberpicker_down_pressed.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/numberpicker_down_selected.9.png b/core/res/res/drawable-mdpi/numberpicker_down_selected.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/numberpicker_input_disabled.9.png b/core/res/res/drawable-mdpi/numberpicker_input_disabled.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/numberpicker_input_normal.9.png b/core/res/res/drawable-mdpi/numberpicker_input_normal.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/numberpicker_input_pressed.9.png b/core/res/res/drawable-mdpi/numberpicker_input_pressed.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/numberpicker_input_selected.9.png b/core/res/res/drawable-mdpi/numberpicker_input_selected.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/numberpicker_up_disabled.9.png b/core/res/res/drawable-mdpi/numberpicker_up_disabled.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/numberpicker_up_disabled_focused.9.png b/core/res/res/drawable-mdpi/numberpicker_up_disabled_focused.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/numberpicker_up_normal.9.png b/core/res/res/drawable-mdpi/numberpicker_up_normal.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/numberpicker_up_pressed.9.png b/core/res/res/drawable-mdpi/numberpicker_up_pressed.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/numberpicker_up_selected.9.png b/core/res/res/drawable-mdpi/numberpicker_up_selected.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/scrollbar_handle_horizontal.9.png b/core/res/res/drawable-mdpi/scrollbar_handle_horizontal.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/scrollbar_handle_vertical.9.png b/core/res/res/drawable-mdpi/scrollbar_handle_vertical.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/search_plate.9.png b/core/res/res/drawable-mdpi/search_plate.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/spinner_black_20.png b/core/res/res/drawable-mdpi/spinner_black_20.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/stat_sys_tether_bluetooth.png b/core/res/res/drawable-mdpi/stat_sys_tether_bluetooth.png index f42dae0fdcb..fc620b8a4dc 100644 Binary files a/core/res/res/drawable-mdpi/stat_sys_tether_bluetooth.png and b/core/res/res/drawable-mdpi/stat_sys_tether_bluetooth.png differ diff --git a/core/res/res/drawable-mdpi/stat_sys_tether_usb.png b/core/res/res/drawable-mdpi/stat_sys_tether_usb.png index 2e2b8ca2e9c..09158094e83 100644 Binary files a/core/res/res/drawable-mdpi/stat_sys_tether_usb.png and b/core/res/res/drawable-mdpi/stat_sys_tether_usb.png differ diff --git a/core/res/res/drawable-mdpi/stat_sys_tether_wifi.png b/core/res/res/drawable-mdpi/stat_sys_tether_wifi.png index 869ad35f16c..584dc1f4cb7 100644 Binary files a/core/res/res/drawable-mdpi/stat_sys_tether_wifi.png and b/core/res/res/drawable-mdpi/stat_sys_tether_wifi.png differ diff --git a/core/res/res/drawable-mdpi/sym_keyboard_feedback_shift_locked.png b/core/res/res/drawable-mdpi/sym_keyboard_feedback_shift_locked.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/tab_focus.9.png b/core/res/res/drawable-mdpi/tab_focus.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/tab_focus_bar_left.9.png b/core/res/res/drawable-mdpi/tab_focus_bar_left.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/tab_focus_bar_right.9.png b/core/res/res/drawable-mdpi/tab_focus_bar_right.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/tab_press.9.png b/core/res/res/drawable-mdpi/tab_press.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/tab_press_bar_left.9.png b/core/res/res/drawable-mdpi/tab_press_bar_left.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/tab_press_bar_right.9.png b/core/res/res/drawable-mdpi/tab_press_bar_right.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/tab_selected_bar_left.9.png b/core/res/res/drawable-mdpi/tab_selected_bar_left.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/tab_selected_bar_right.9.png b/core/res/res/drawable-mdpi/tab_selected_bar_right.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/textfield_search_default.9.png b/core/res/res/drawable-mdpi/textfield_search_default.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/textfield_search_selected.9.png b/core/res/res/drawable-mdpi/textfield_search_selected.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/toast_frame.9.png b/core/res/res/drawable-mdpi/toast_frame.9.png old mode 100755 new mode 100644 diff --git a/core/res/res/drawable-mdpi/weather_0.png b/core/res/res/drawable-mdpi/weather_0.png new file mode 100644 index 00000000000..bf3cb0244cd Binary files /dev/null and b/core/res/res/drawable-mdpi/weather_0.png differ diff --git a/core/res/res/drawable-mdpi/weather_1.png b/core/res/res/drawable-mdpi/weather_1.png new file mode 100644 index 00000000000..bf3cb0244cd Binary files /dev/null and b/core/res/res/drawable-mdpi/weather_1.png differ diff --git a/core/res/res/drawable-mdpi/weather_10.png b/core/res/res/drawable-mdpi/weather_10.png new file mode 100644 index 00000000000..9bc5ec113fa Binary files /dev/null and b/core/res/res/drawable-mdpi/weather_10.png differ diff --git a/core/res/res/drawable-mdpi/weather_11.png b/core/res/res/drawable-mdpi/weather_11.png new file mode 100644 index 00000000000..7d464c9f596 Binary files /dev/null and b/core/res/res/drawable-mdpi/weather_11.png differ diff --git a/core/res/res/drawable-mdpi/weather_12.png b/core/res/res/drawable-mdpi/weather_12.png new file mode 100644 index 00000000000..ee87a820015 Binary files /dev/null and b/core/res/res/drawable-mdpi/weather_12.png differ diff --git a/core/res/res/drawable-mdpi/weather_13.png b/core/res/res/drawable-mdpi/weather_13.png new file mode 100644 index 00000000000..f3dca12a992 Binary files /dev/null and b/core/res/res/drawable-mdpi/weather_13.png differ diff --git a/core/res/res/drawable-mdpi/weather_14.png b/core/res/res/drawable-mdpi/weather_14.png new file mode 100644 index 00000000000..f5018d1ae5c Binary files /dev/null and b/core/res/res/drawable-mdpi/weather_14.png differ diff --git a/core/res/res/drawable-mdpi/weather_15.png b/core/res/res/drawable-mdpi/weather_15.png new file mode 100644 index 00000000000..1262fac5e4f Binary files /dev/null and b/core/res/res/drawable-mdpi/weather_15.png differ diff --git a/core/res/res/drawable-mdpi/weather_16.png b/core/res/res/drawable-mdpi/weather_16.png new file mode 100644 index 00000000000..0bf3ca031cb Binary files /dev/null and b/core/res/res/drawable-mdpi/weather_16.png differ diff --git a/core/res/res/drawable-mdpi/weather_17.png b/core/res/res/drawable-mdpi/weather_17.png new file mode 100644 index 00000000000..bf3cb0244cd Binary files /dev/null and b/core/res/res/drawable-mdpi/weather_17.png differ diff --git a/core/res/res/drawable-mdpi/weather_18.png b/core/res/res/drawable-mdpi/weather_18.png new file mode 100644 index 00000000000..22be6a6ebf9 Binary files /dev/null and b/core/res/res/drawable-mdpi/weather_18.png differ diff --git a/core/res/res/drawable-mdpi/weather_19.png b/core/res/res/drawable-mdpi/weather_19.png new file mode 100644 index 00000000000..1dc097b7331 Binary files /dev/null and b/core/res/res/drawable-mdpi/weather_19.png differ diff --git a/core/res/res/drawable-mdpi/weather_2.png b/core/res/res/drawable-mdpi/weather_2.png new file mode 100644 index 00000000000..bf3cb0244cd Binary files /dev/null and b/core/res/res/drawable-mdpi/weather_2.png differ diff --git a/core/res/res/drawable-mdpi/weather_20.png b/core/res/res/drawable-mdpi/weather_20.png new file mode 100644 index 00000000000..c16b9bc7149 Binary files /dev/null and b/core/res/res/drawable-mdpi/weather_20.png differ diff --git a/core/res/res/drawable-mdpi/weather_21.png b/core/res/res/drawable-mdpi/weather_21.png new file mode 100644 index 00000000000..a90a202c052 Binary files /dev/null and b/core/res/res/drawable-mdpi/weather_21.png differ diff --git a/core/res/res/drawable-mdpi/weather_22.png b/core/res/res/drawable-mdpi/weather_22.png new file mode 100644 index 00000000000..7043d2a9261 Binary files /dev/null and b/core/res/res/drawable-mdpi/weather_22.png differ diff --git a/core/res/res/drawable-mdpi/weather_23.png b/core/res/res/drawable-mdpi/weather_23.png new file mode 100644 index 00000000000..32e41b3c1d4 Binary files /dev/null and b/core/res/res/drawable-mdpi/weather_23.png differ diff --git a/core/res/res/drawable-mdpi/weather_24.png b/core/res/res/drawable-mdpi/weather_24.png new file mode 100644 index 00000000000..32e41b3c1d4 Binary files /dev/null and b/core/res/res/drawable-mdpi/weather_24.png differ diff --git a/core/res/res/drawable-mdpi/weather_25.png b/core/res/res/drawable-mdpi/weather_25.png new file mode 100644 index 00000000000..e4da5490aa6 Binary files /dev/null and b/core/res/res/drawable-mdpi/weather_25.png differ diff --git a/core/res/res/drawable-mdpi/weather_26.png b/core/res/res/drawable-mdpi/weather_26.png new file mode 100644 index 00000000000..f673ee68046 Binary files /dev/null and b/core/res/res/drawable-mdpi/weather_26.png differ diff --git a/core/res/res/drawable-mdpi/weather_27.png b/core/res/res/drawable-mdpi/weather_27.png new file mode 100644 index 00000000000..5d05846003b Binary files /dev/null and b/core/res/res/drawable-mdpi/weather_27.png differ diff --git a/core/res/res/drawable-mdpi/weather_28.png b/core/res/res/drawable-mdpi/weather_28.png new file mode 100644 index 00000000000..03d097f77cd Binary files /dev/null and b/core/res/res/drawable-mdpi/weather_28.png differ diff --git a/core/res/res/drawable-mdpi/weather_29.png b/core/res/res/drawable-mdpi/weather_29.png new file mode 100644 index 00000000000..816bfc48af3 Binary files /dev/null and b/core/res/res/drawable-mdpi/weather_29.png differ diff --git a/core/res/res/drawable-mdpi/weather_3.png b/core/res/res/drawable-mdpi/weather_3.png new file mode 100644 index 00000000000..bf3cb0244cd Binary files /dev/null and b/core/res/res/drawable-mdpi/weather_3.png differ diff --git a/core/res/res/drawable-mdpi/weather_30.png b/core/res/res/drawable-mdpi/weather_30.png new file mode 100644 index 00000000000..47858e63898 Binary files /dev/null and b/core/res/res/drawable-mdpi/weather_30.png differ diff --git a/core/res/res/drawable-mdpi/weather_31.png b/core/res/res/drawable-mdpi/weather_31.png new file mode 100644 index 00000000000..1b2f8a470dc Binary files /dev/null and b/core/res/res/drawable-mdpi/weather_31.png differ diff --git a/core/res/res/drawable-mdpi/weather_32.png b/core/res/res/drawable-mdpi/weather_32.png new file mode 100644 index 00000000000..9cb40b22525 Binary files /dev/null and b/core/res/res/drawable-mdpi/weather_32.png differ diff --git a/core/res/res/drawable-mdpi/weather_33.png b/core/res/res/drawable-mdpi/weather_33.png new file mode 100644 index 00000000000..e43854bff09 Binary files /dev/null and b/core/res/res/drawable-mdpi/weather_33.png differ diff --git a/core/res/res/drawable-mdpi/weather_34.png b/core/res/res/drawable-mdpi/weather_34.png new file mode 100644 index 00000000000..c84c8736107 Binary files /dev/null and b/core/res/res/drawable-mdpi/weather_34.png differ diff --git a/core/res/res/drawable-mdpi/weather_35.png b/core/res/res/drawable-mdpi/weather_35.png new file mode 100644 index 00000000000..bf3cb0244cd Binary files /dev/null and b/core/res/res/drawable-mdpi/weather_35.png differ diff --git a/core/res/res/drawable-mdpi/weather_36.png b/core/res/res/drawable-mdpi/weather_36.png new file mode 100644 index 00000000000..e6980a1f056 Binary files /dev/null and b/core/res/res/drawable-mdpi/weather_36.png differ diff --git a/core/res/res/drawable-mdpi/weather_37.png b/core/res/res/drawable-mdpi/weather_37.png new file mode 100644 index 00000000000..b319904b804 Binary files /dev/null and b/core/res/res/drawable-mdpi/weather_37.png differ diff --git a/core/res/res/drawable-mdpi/weather_38.png b/core/res/res/drawable-mdpi/weather_38.png new file mode 100644 index 00000000000..b319904b804 Binary files /dev/null and b/core/res/res/drawable-mdpi/weather_38.png differ diff --git a/core/res/res/drawable-mdpi/weather_39.png b/core/res/res/drawable-mdpi/weather_39.png new file mode 100644 index 00000000000..dc827e680f6 Binary files /dev/null and b/core/res/res/drawable-mdpi/weather_39.png differ diff --git a/core/res/res/drawable-mdpi/weather_4.png b/core/res/res/drawable-mdpi/weather_4.png new file mode 100644 index 00000000000..bf3cb0244cd Binary files /dev/null and b/core/res/res/drawable-mdpi/weather_4.png differ diff --git a/core/res/res/drawable-mdpi/weather_40.png b/core/res/res/drawable-mdpi/weather_40.png new file mode 100644 index 00000000000..ee87a820015 Binary files /dev/null and b/core/res/res/drawable-mdpi/weather_40.png differ diff --git a/core/res/res/drawable-mdpi/weather_41.png b/core/res/res/drawable-mdpi/weather_41.png new file mode 100644 index 00000000000..8eca661ef7c Binary files /dev/null and b/core/res/res/drawable-mdpi/weather_41.png differ diff --git a/core/res/res/drawable-mdpi/weather_42.png b/core/res/res/drawable-mdpi/weather_42.png new file mode 100644 index 00000000000..0bf3ca031cb Binary files /dev/null and b/core/res/res/drawable-mdpi/weather_42.png differ diff --git a/core/res/res/drawable-mdpi/weather_43.png b/core/res/res/drawable-mdpi/weather_43.png new file mode 100644 index 00000000000..1262fac5e4f Binary files /dev/null and b/core/res/res/drawable-mdpi/weather_43.png differ diff --git a/core/res/res/drawable-mdpi/weather_44.png b/core/res/res/drawable-mdpi/weather_44.png new file mode 100644 index 00000000000..773a3cef3d9 Binary files /dev/null and b/core/res/res/drawable-mdpi/weather_44.png differ diff --git a/core/res/res/drawable-mdpi/weather_45.png b/core/res/res/drawable-mdpi/weather_45.png new file mode 100644 index 00000000000..d8951505c0e Binary files /dev/null and b/core/res/res/drawable-mdpi/weather_45.png differ diff --git a/core/res/res/drawable-mdpi/weather_46.png b/core/res/res/drawable-mdpi/weather_46.png new file mode 100644 index 00000000000..bdadf5a9e3a Binary files /dev/null and b/core/res/res/drawable-mdpi/weather_46.png differ diff --git a/core/res/res/drawable-mdpi/weather_47.png b/core/res/res/drawable-mdpi/weather_47.png new file mode 100644 index 00000000000..32bc9f3a11f Binary files /dev/null and b/core/res/res/drawable-mdpi/weather_47.png differ diff --git a/core/res/res/drawable-mdpi/weather_5.png b/core/res/res/drawable-mdpi/weather_5.png new file mode 100644 index 00000000000..97451aeb2e4 Binary files /dev/null and b/core/res/res/drawable-mdpi/weather_5.png differ diff --git a/core/res/res/drawable-mdpi/weather_6.png b/core/res/res/drawable-mdpi/weather_6.png new file mode 100644 index 00000000000..9594502290b Binary files /dev/null and b/core/res/res/drawable-mdpi/weather_6.png differ diff --git a/core/res/res/drawable-mdpi/weather_7.png b/core/res/res/drawable-mdpi/weather_7.png new file mode 100644 index 00000000000..663c886962b Binary files /dev/null and b/core/res/res/drawable-mdpi/weather_7.png differ diff --git a/core/res/res/drawable-mdpi/weather_8.png b/core/res/res/drawable-mdpi/weather_8.png new file mode 100644 index 00000000000..97756545c38 Binary files /dev/null and b/core/res/res/drawable-mdpi/weather_8.png differ diff --git a/core/res/res/drawable-mdpi/weather_9.png b/core/res/res/drawable-mdpi/weather_9.png new file mode 100644 index 00000000000..4815c323498 Binary files /dev/null and b/core/res/res/drawable-mdpi/weather_9.png differ diff --git a/core/res/res/drawable-mdpi/weather_na.png b/core/res/res/drawable-mdpi/weather_na.png new file mode 100644 index 00000000000..773a3cef3d9 Binary files /dev/null and b/core/res/res/drawable-mdpi/weather_na.png differ diff --git a/core/res/res/drawable-nodpi/aokplogo.png b/core/res/res/drawable-nodpi/aokplogo.png new file mode 100644 index 00000000000..f73b60a5452 Binary files /dev/null and b/core/res/res/drawable-nodpi/aokplogo.png differ diff --git a/core/res/res/drawable-nodpi/aokplogo_alt.png b/core/res/res/drawable-nodpi/aokplogo_alt.png new file mode 100644 index 00000000000..f73b60a5452 Binary files /dev/null and b/core/res/res/drawable-nodpi/aokplogo_alt.png differ diff --git a/core/res/res/drawable-nodpi/background_holo_dark.png b/core/res/res/drawable-nodpi/background_holo_dark.png index 85bd6f7e404..5508daec02a 100644 Binary files a/core/res/res/drawable-nodpi/background_holo_dark.png and b/core/res/res/drawable-nodpi/background_holo_dark.png differ diff --git a/core/res/res/drawable-nodpi/unlock_halo_circles.png b/core/res/res/drawable-nodpi/unlock_halo_circles.png new file mode 100644 index 00000000000..29ed2c738c2 Binary files /dev/null and b/core/res/res/drawable-nodpi/unlock_halo_circles.png differ diff --git a/core/res/res/drawable-nodpi/unlock_ring_circles.png b/core/res/res/drawable-nodpi/unlock_ring_circles.png new file mode 100644 index 00000000000..088866a6226 Binary files /dev/null and b/core/res/res/drawable-nodpi/unlock_ring_circles.png differ diff --git a/core/res/res/drawable-nodpi/unlock_wave_circles.png b/core/res/res/drawable-nodpi/unlock_wave_circles.png new file mode 100644 index 00000000000..5cdcca25f5c Binary files /dev/null and b/core/res/res/drawable-nodpi/unlock_wave_circles.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lock_screenshot.png b/core/res/res/drawable-xhdpi/ic_lock_screenshot.png new file mode 100755 index 00000000000..62ef7f2fa33 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lock_screenshot.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_alarm_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_alarm_activated.png new file mode 100644 index 00000000000..9ce624ebd44 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_alarm_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_alarm_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_alarm_normal.png new file mode 100644 index 00000000000..07442277999 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_alarm_normal.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_answer_active.png b/core/res/res/drawable-xhdpi/ic_lockscreen_answer_active.png new file mode 100644 index 00000000000..8edf62dd2e8 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_answer_active.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_answer_focused.png b/core/res/res/drawable-xhdpi/ic_lockscreen_answer_focused.png new file mode 100644 index 00000000000..2a47e9b6939 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_answer_focused.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_answer_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_answer_normal.png new file mode 100644 index 00000000000..f049dc9966b Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_answer_normal.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_browser2_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_browser2_activated.png new file mode 100644 index 00000000000..c7cdd3ca7ba Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_browser2_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_browser2_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_browser2_normal.png new file mode 100644 index 00000000000..9f3989bcbac Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_browser2_normal.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_browser_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_browser_activated.png new file mode 100644 index 00000000000..c7cdd3ca7ba Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_browser_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_browser_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_browser_normal.png new file mode 100644 index 00000000000..9f3989bcbac Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_browser_normal.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_calendar_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_calendar_activated.png new file mode 100644 index 00000000000..31cc06fb0aa Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_calendar_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_calendar_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_calendar_normal.png new file mode 100644 index 00000000000..d536058c81e Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_calendar_normal.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_camera2_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_camera2_activated.png new file mode 100644 index 00000000000..1cb37f92437 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_camera2_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_camera2_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_camera2_normal.png new file mode 100644 index 00000000000..b468d5a017f Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_camera2_normal.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_camera_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_camera_activated.png index 760ef2d9ed4..1cb37f92437 100644 Binary files a/core/res/res/drawable-xhdpi/ic_lockscreen_camera_activated.png and b/core/res/res/drawable-xhdpi/ic_lockscreen_camera_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_camera_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_camera_normal.png index 093bc055081..b468d5a017f 100644 Binary files a/core/res/res/drawable-xhdpi/ic_lockscreen_camera_normal.png and b/core/res/res/drawable-xhdpi/ic_lockscreen_camera_normal.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_decline_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_decline_activated.png new file mode 100644 index 00000000000..4244ca08865 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_decline_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_decline_focused.png b/core/res/res/drawable-xhdpi/ic_lockscreen_decline_focused.png new file mode 100644 index 00000000000..a98a379ba8b Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_decline_focused.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_decline_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_decline_normal.png new file mode 100644 index 00000000000..fa2a0f466ec Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_decline_normal.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_email_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_email_activated.png new file mode 100644 index 00000000000..cb8f1e8f3c4 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_email_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_email_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_email_normal.png new file mode 100644 index 00000000000..250fe68fea6 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_email_normal.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_facebook_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_facebook_activated.png new file mode 100644 index 00000000000..d2d3c9f7790 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_facebook_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_facebook_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_facebook_normal.png new file mode 100644 index 00000000000..0f87fd5052d Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_facebook_normal.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_gallery_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_gallery_activated.png new file mode 100644 index 00000000000..3c94a90b359 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_gallery_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_gallery_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_gallery_normal.png new file mode 100644 index 00000000000..54ef51bab34 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_gallery_normal.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_gplus_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_gplus_activated.png new file mode 100644 index 00000000000..3c04e0d31f2 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_gplus_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_gplus_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_gplus_normal.png new file mode 100644 index 00000000000..9ec36bfc5ab Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_gplus_normal.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_gtalk_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_gtalk_activated.png new file mode 100644 index 00000000000..055f3d128d7 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_gtalk_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_gtalk_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_gtalk_normal.png new file mode 100644 index 00000000000..7e0c0b8190e Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_gtalk_normal.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_home_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_home_activated.png new file mode 100755 index 00000000000..1fba94c349f Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_home_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_home_focused.png b/core/res/res/drawable-xhdpi/ic_lockscreen_home_focused.png new file mode 100755 index 00000000000..dfd3d94ce0d Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_home_focused.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_home_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_home_normal.png new file mode 100755 index 00000000000..69ae05f54eb Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_home_normal.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_lock_pressed.png b/core/res/res/drawable-xhdpi/ic_lockscreen_lock_pressed.png index 2264dc3fc9d..fb1af78f7ea 100644 Binary files a/core/res/res/drawable-xhdpi/ic_lockscreen_lock_pressed.png and b/core/res/res/drawable-xhdpi/ic_lockscreen_lock_pressed.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_maps_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_maps_activated.png new file mode 100644 index 00000000000..91267cedae8 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_maps_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_maps_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_maps_normal.png new file mode 100644 index 00000000000..34a3dda3c70 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_maps_normal.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_movie_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_movie_activated.png new file mode 100644 index 00000000000..2830a5d2942 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_movie_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_movie_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_movie_normal.png new file mode 100644 index 00000000000..c2933381198 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_movie_normal.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_music_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_music_activated.png new file mode 100644 index 00000000000..06416b303d3 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_music_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_music_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_music_normal.png new file mode 100644 index 00000000000..67d23df18ff Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_music_normal.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_nav_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_nav_activated.png new file mode 100644 index 00000000000..aa2ff3da6e6 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_nav_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_nav_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_nav_normal.png new file mode 100644 index 00000000000..f0802c8c108 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_nav_normal.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_phone2_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_phone2_activated.png new file mode 100644 index 00000000000..f8181662050 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_phone2_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_phone2_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_phone2_normal.png new file mode 100644 index 00000000000..5d65d817dc5 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_phone2_normal.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_phone_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_phone_activated.png new file mode 100644 index 00000000000..f8181662050 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_phone_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_phone_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_phone_normal.png new file mode 100644 index 00000000000..5d65d817dc5 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_phone_normal.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_podcast_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_podcast_activated.png new file mode 100644 index 00000000000..004ca7851bd Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_podcast_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_podcast_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_podcast_normal.png new file mode 100644 index 00000000000..cd2e712860d Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_podcast_normal.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_rss_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_rss_activated.png new file mode 100644 index 00000000000..9f965481926 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_rss_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_rss_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_rss_normal.png new file mode 100644 index 00000000000..4c958cf6acd Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_rss_normal.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_silent_focused.png b/core/res/res/drawable-xhdpi/ic_lockscreen_silent_focused.png old mode 100644 new mode 100755 index 5a93472045b..14150ac85f2 Binary files a/core/res/res/drawable-xhdpi/ic_lockscreen_silent_focused.png and b/core/res/res/drawable-xhdpi/ic_lockscreen_silent_focused.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_silent_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_silent_normal.png old mode 100644 new mode 100755 index 73f6a2e7eda..9be3645a109 Binary files a/core/res/res/drawable-xhdpi/ic_lockscreen_silent_normal.png and b/core/res/res/drawable-xhdpi/ic_lockscreen_silent_normal.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_sms2_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_sms2_activated.png new file mode 100644 index 00000000000..aca6804d767 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_sms2_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_sms2_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_sms2_normal.png new file mode 100644 index 00000000000..6431084285f Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_sms2_normal.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_sms_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_sms_activated.png new file mode 100644 index 00000000000..aca6804d767 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_sms_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_sms_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_sms_normal.png new file mode 100644 index 00000000000..6431084285f Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_sms_normal.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_soundon_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_soundon_activated.png old mode 100644 new mode 100755 index da2adc2e50f..3e0c0d5b8d0 Binary files a/core/res/res/drawable-xhdpi/ic_lockscreen_soundon_activated.png and b/core/res/res/drawable-xhdpi/ic_lockscreen_soundon_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_soundon_focused.png b/core/res/res/drawable-xhdpi/ic_lockscreen_soundon_focused.png old mode 100644 new mode 100755 index 0485af0baa0..a56e24389f1 Binary files a/core/res/res/drawable-xhdpi/ic_lockscreen_soundon_focused.png and b/core/res/res/drawable-xhdpi/ic_lockscreen_soundon_focused.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_soundon_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_soundon_normal.png old mode 100644 new mode 100755 index 6af5375b919..492d6edcd96 Binary files a/core/res/res/drawable-xhdpi/ic_lockscreen_soundon_normal.png and b/core/res/res/drawable-xhdpi/ic_lockscreen_soundon_normal.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_target_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_target_activated.png new file mode 100644 index 00000000000..6f84ff2396a Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_target_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_twitter_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_twitter_activated.png new file mode 100644 index 00000000000..65e04a1a3a7 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_twitter_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_twitter_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_twitter_normal.png new file mode 100644 index 00000000000..81b5f398482 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_twitter_normal.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_aokp_color_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_aokp_color_activated.png new file mode 100755 index 00000000000..381b341fcc4 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_aokp_color_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_aokp_color_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_aokp_color_normal.png new file mode 100755 index 00000000000..381b341fcc4 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_aokp_color_normal.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_browser_bw_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_browser_bw_activated.png new file mode 100755 index 00000000000..230e7332814 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_browser_bw_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_browser_bw_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_browser_bw_normal.png new file mode 100755 index 00000000000..230e7332814 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_browser_bw_normal.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_browser_color_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_browser_color_activated.png new file mode 100755 index 00000000000..02c888d97ed Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_browser_color_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_browser_color_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_browser_color_normal.png new file mode 100755 index 00000000000..02c888d97ed Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_browser_color_normal.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_calender_bw_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_calender_bw_activated.png new file mode 100755 index 00000000000..3dc42a8e689 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_calender_bw_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_calender_bw_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_calender_bw_normal.png new file mode 100755 index 00000000000..3dc42a8e689 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_calender_bw_normal.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_calender_color_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_calender_color_activated.png new file mode 100755 index 00000000000..702dc2ade66 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_calender_color_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_calender_color_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_calender_color_normal.png new file mode 100755 index 00000000000..702dc2ade66 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_calender_color_normal.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_camera1__normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_camera1__normal.png new file mode 100755 index 00000000000..47d76a57926 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_camera1__normal.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_camera1_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_camera1_activated.png new file mode 100755 index 00000000000..47d76a57926 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_camera1_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_camera1_color_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_camera1_color_activated.png new file mode 100755 index 00000000000..8e6958b2cfc Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_camera1_color_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_camera1_color_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_camera1_color_normal.png new file mode 100755 index 00000000000..8e6958b2cfc Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_camera1_color_normal.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_camera_bw_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_camera_bw_activated.png new file mode 100755 index 00000000000..fb4039a87d3 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_camera_bw_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_camera_bw_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_camera_bw_normal.png new file mode 100755 index 00000000000..fb4039a87d3 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_camera_bw_normal.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_camera_color_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_camera_color_activated.png new file mode 100755 index 00000000000..5faa7d8e1a5 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_camera_color_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_camera_color_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_camera_color_normal.png new file mode 100755 index 00000000000..5faa7d8e1a5 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_camera_color_normal.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_clock_bw_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_clock_bw_activated.png new file mode 100755 index 00000000000..eca6739b7fe Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_clock_bw_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_clock_bw_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_clock_bw_normal.png new file mode 100755 index 00000000000..eca6739b7fe Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_clock_bw_normal.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_clock_color_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_clock_color_activated.png new file mode 100755 index 00000000000..88075bec137 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_clock_color_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_clock_color_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_clock_color_normal.png new file mode 100755 index 00000000000..88075bec137 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_clock_color_normal.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_email_bw_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_email_bw_activated.png new file mode 100755 index 00000000000..4e982c89cfd Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_email_bw_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_email_bw_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_email_bw_normal.png new file mode 100755 index 00000000000..4e982c89cfd Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_email_bw_normal.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_email_color_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_email_color_activated.png new file mode 100755 index 00000000000..b1ad2feade6 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_email_color_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_email_color_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_email_color_normal.png new file mode 100755 index 00000000000..b1ad2feade6 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_email_color_normal.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_facebook_bw_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_facebook_bw_activated.png new file mode 100755 index 00000000000..2f90fde4dee Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_facebook_bw_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_facebook_bw_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_facebook_bw_normal.png new file mode 100755 index 00000000000..2f90fde4dee Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_facebook_bw_normal.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_facebook_color_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_facebook_color_activated.png new file mode 100755 index 00000000000..04afe5983df Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_facebook_color_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_facebook_color_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_facebook_color_normal.png new file mode 100755 index 00000000000..04afe5983df Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_facebook_color_normal.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_gallery_bw_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_gallery_bw_activated.png new file mode 100755 index 00000000000..6dffde9352a Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_gallery_bw_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_gallery_bw_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_gallery_bw_normal.png new file mode 100755 index 00000000000..6dffde9352a Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_gallery_bw_normal.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_gallery_color_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_gallery_color_activated.png new file mode 100755 index 00000000000..d9f34c044fa Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_gallery_color_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_gallery_color_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_gallery_color_normal.png new file mode 100755 index 00000000000..d9f34c044fa Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_gallery_color_normal.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_gplus_bw_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_gplus_bw_activated.png new file mode 100755 index 00000000000..0ab83e3e154 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_gplus_bw_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_gplus_bw_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_gplus_bw_normal.png new file mode 100755 index 00000000000..0ab83e3e154 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_gplus_bw_normal.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_gplus_color_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_gplus_color_activated.png new file mode 100755 index 00000000000..03cf86d91f7 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_gplus_color_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_gplus_color_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_gplus_color_normal.png new file mode 100755 index 00000000000..03cf86d91f7 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_gplus_color_normal.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_lock_bw_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_lock_bw_activated.png new file mode 100755 index 00000000000..cd279d150a1 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_lock_bw_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_lock_bw_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_lock_bw_normal.png new file mode 100755 index 00000000000..cd279d150a1 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_lock_bw_normal.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_lock_color_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_lock_color_activated.png new file mode 100755 index 00000000000..b98ef721d32 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_lock_color_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_lock_color_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_lock_color_normal.png new file mode 100755 index 00000000000..b98ef721d32 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_lock_color_normal.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_maps_bw_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_maps_bw_activated.png new file mode 100755 index 00000000000..7d701440c1e Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_maps_bw_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_maps_bw_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_maps_bw_normal.png new file mode 100755 index 00000000000..7d701440c1e Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_maps_bw_normal.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_maps_color_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_maps_color_activated.png new file mode 100755 index 00000000000..12569632b28 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_maps_color_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_maps_color_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_maps_color_normal.png new file mode 100755 index 00000000000..12569632b28 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_maps_color_normal.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_mms_bw_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_mms_bw_activated.png new file mode 100755 index 00000000000..acff2fca14e Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_mms_bw_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_mms_bw_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_mms_bw_normal.png new file mode 100755 index 00000000000..acff2fca14e Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_mms_bw_normal.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_mms_color_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_mms_color_activated.png new file mode 100755 index 00000000000..cc262eb382a Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_mms_color_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_mms_color_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_mms_color_normal.png new file mode 100755 index 00000000000..cc262eb382a Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_mms_color_normal.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_movies_bw_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_movies_bw_activated.png new file mode 100755 index 00000000000..a66f3a27665 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_movies_bw_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_movies_bw_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_movies_bw_normal.png new file mode 100755 index 00000000000..a66f3a27665 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_movies_bw_normal.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_movies_color_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_movies_color_activated.png new file mode 100755 index 00000000000..7c78bf3a921 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_movies_color_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_movies_color_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_movies_color_normal.png new file mode 100755 index 00000000000..7c78bf3a921 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_movies_color_normal.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_music_bw_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_music_bw_activated.png new file mode 100755 index 00000000000..4d2e1f1216e Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_music_bw_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_music_bw_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_music_bw_normal.png new file mode 100755 index 00000000000..4d2e1f1216e Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_music_bw_normal.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_music_color_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_music_color_activated.png new file mode 100755 index 00000000000..5bf33826ad5 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_music_color_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_music_color_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_music_color_normal.png new file mode 100755 index 00000000000..5bf33826ad5 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_music_color_normal.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_navigation_bw_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_navigation_bw_activated.png new file mode 100755 index 00000000000..74b3d112ea9 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_navigation_bw_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_navigation_bw_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_navigation_bw_normal.png new file mode 100755 index 00000000000..74b3d112ea9 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_navigation_bw_normal.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_navigation_color_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_navigation_color_activated.png new file mode 100755 index 00000000000..1b7ccbedecb Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_navigation_color_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_navigation_color_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_navigation_color_normal.png new file mode 100755 index 00000000000..1b7ccbedecb Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_navigation_color_normal.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_phone_bw_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_phone_bw_activated.png new file mode 100755 index 00000000000..f9352b72d78 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_phone_bw_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_phone_bw_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_phone_bw_normal.png new file mode 100755 index 00000000000..f9352b72d78 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_phone_bw_normal.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_phone_color_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_phone_color_activated.png new file mode 100755 index 00000000000..c4bd2d65339 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_phone_color_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_phone_color_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_phone_color_normal.png new file mode 100755 index 00000000000..c4bd2d65339 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_phone_color_normal.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_podcast_bw_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_podcast_bw_activated.png new file mode 100755 index 00000000000..44c53b93bba Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_podcast_bw_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_podcast_bw_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_podcast_bw_normal.png new file mode 100755 index 00000000000..44c53b93bba Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_podcast_bw_normal.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_podcast_color_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_podcast_color_activated.png new file mode 100755 index 00000000000..24f5d47848f Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_podcast_color_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_podcast_color_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_podcast_color_normal.png new file mode 100755 index 00000000000..24f5d47848f Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_podcast_color_normal.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_rss_bw_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_rss_bw_activated.png new file mode 100755 index 00000000000..04104ffe53f Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_rss_bw_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_rss_bw_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_rss_bw_normal.png new file mode 100755 index 00000000000..04104ffe53f Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_rss_bw_normal.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_rss_color_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_rss_color_activated.png new file mode 100755 index 00000000000..a2181d0b9a9 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_rss_color_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_rss_color_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_rss_color_normal.png new file mode 100755 index 00000000000..a2181d0b9a9 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_rss_color_normal.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_talk_bw_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_talk_bw_activated.png new file mode 100755 index 00000000000..8faac9df14f Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_talk_bw_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_talk_bw_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_talk_bw_normal.png new file mode 100755 index 00000000000..8faac9df14f Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_talk_bw_normal.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_talk_color_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_talk_color_activated.png new file mode 100755 index 00000000000..31327343270 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_talk_color_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_talk_color_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_talk_color_normal.png new file mode 100755 index 00000000000..31327343270 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_talk_color_normal.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_video_color_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_video_color_activated.png new file mode 100755 index 00000000000..297403e6b25 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_video_color_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_video_color_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_video_color_normal.png new file mode 100755 index 00000000000..297403e6b25 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_video_color_normal.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_vib_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_vib_activated.png new file mode 100755 index 00000000000..7ed89c989b5 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_vib_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_vib_focused.png b/core/res/res/drawable-xhdpi/ic_lockscreen_vib_focused.png new file mode 100755 index 00000000000..48936b3acaa Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_vib_focused.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_vib_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_vib_normal.png new file mode 100755 index 00000000000..0cf24c01115 Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_vib_normal.png differ diff --git a/core/res/res/drawable-xhdpi/ic_notification_overlay.9.png b/core/res/res/drawable-xhdpi/ic_notification_overlay.9.png index a7a8bb3e1df..467ff30ae89 100644 Binary files a/core/res/res/drawable-xhdpi/ic_notification_overlay.9.png and b/core/res/res/drawable-xhdpi/ic_notification_overlay.9.png differ diff --git a/core/res/res/drawable-xhdpi/stat_sys_tether_bluetooth.png b/core/res/res/drawable-xhdpi/stat_sys_tether_bluetooth.png index 3f57d1c76cc..16c0d2dafc4 100644 Binary files a/core/res/res/drawable-xhdpi/stat_sys_tether_bluetooth.png and b/core/res/res/drawable-xhdpi/stat_sys_tether_bluetooth.png differ diff --git a/core/res/res/drawable-xhdpi/stat_sys_tether_usb.png b/core/res/res/drawable-xhdpi/stat_sys_tether_usb.png index 36afe485b5b..633b1818ab9 100644 Binary files a/core/res/res/drawable-xhdpi/stat_sys_tether_usb.png and b/core/res/res/drawable-xhdpi/stat_sys_tether_usb.png differ diff --git a/core/res/res/drawable-xhdpi/stat_sys_tether_wifi.png b/core/res/res/drawable-xhdpi/stat_sys_tether_wifi.png index dc48646b64f..d381c202a3e 100644 Binary files a/core/res/res/drawable-xhdpi/stat_sys_tether_wifi.png and b/core/res/res/drawable-xhdpi/stat_sys_tether_wifi.png differ diff --git a/core/res/res/drawable-xhdpi/weather_0.png b/core/res/res/drawable-xhdpi/weather_0.png new file mode 100644 index 00000000000..9c1cfc7badf Binary files /dev/null and b/core/res/res/drawable-xhdpi/weather_0.png differ diff --git a/core/res/res/drawable-xhdpi/weather_1.png b/core/res/res/drawable-xhdpi/weather_1.png new file mode 100644 index 00000000000..02bffe42965 Binary files /dev/null and b/core/res/res/drawable-xhdpi/weather_1.png differ diff --git a/core/res/res/drawable-xhdpi/weather_10.png b/core/res/res/drawable-xhdpi/weather_10.png new file mode 100644 index 00000000000..33fdee5ce1d Binary files /dev/null and b/core/res/res/drawable-xhdpi/weather_10.png differ diff --git a/core/res/res/drawable-xhdpi/weather_11.png b/core/res/res/drawable-xhdpi/weather_11.png new file mode 100644 index 00000000000..de63ca5d298 Binary files /dev/null and b/core/res/res/drawable-xhdpi/weather_11.png differ diff --git a/core/res/res/drawable-xhdpi/weather_12.png b/core/res/res/drawable-xhdpi/weather_12.png new file mode 100644 index 00000000000..8968c78233e Binary files /dev/null and b/core/res/res/drawable-xhdpi/weather_12.png differ diff --git a/core/res/res/drawable-xhdpi/weather_13.png b/core/res/res/drawable-xhdpi/weather_13.png new file mode 100644 index 00000000000..828ea71f968 Binary files /dev/null and b/core/res/res/drawable-xhdpi/weather_13.png differ diff --git a/core/res/res/drawable-xhdpi/weather_14.png b/core/res/res/drawable-xhdpi/weather_14.png new file mode 100644 index 00000000000..7461ccb9c53 Binary files /dev/null and b/core/res/res/drawable-xhdpi/weather_14.png differ diff --git a/core/res/res/drawable-xhdpi/weather_15.png b/core/res/res/drawable-xhdpi/weather_15.png new file mode 100644 index 00000000000..3bc44018788 Binary files /dev/null and b/core/res/res/drawable-xhdpi/weather_15.png differ diff --git a/core/res/res/drawable-xhdpi/weather_16.png b/core/res/res/drawable-xhdpi/weather_16.png new file mode 100644 index 00000000000..41b463e4f93 Binary files /dev/null and b/core/res/res/drawable-xhdpi/weather_16.png differ diff --git a/core/res/res/drawable-xhdpi/weather_17.png b/core/res/res/drawable-xhdpi/weather_17.png new file mode 100644 index 00000000000..d14f5fa3d41 Binary files /dev/null and b/core/res/res/drawable-xhdpi/weather_17.png differ diff --git a/core/res/res/drawable-xhdpi/weather_18.png b/core/res/res/drawable-xhdpi/weather_18.png new file mode 100644 index 00000000000..e5cc4f2b684 Binary files /dev/null and b/core/res/res/drawable-xhdpi/weather_18.png differ diff --git a/core/res/res/drawable-xhdpi/weather_19.png b/core/res/res/drawable-xhdpi/weather_19.png new file mode 100644 index 00000000000..ab0b3326ca0 Binary files /dev/null and b/core/res/res/drawable-xhdpi/weather_19.png differ diff --git a/core/res/res/drawable-xhdpi/weather_2.png b/core/res/res/drawable-xhdpi/weather_2.png new file mode 100644 index 00000000000..ca9e0c91f3b Binary files /dev/null and b/core/res/res/drawable-xhdpi/weather_2.png differ diff --git a/core/res/res/drawable-xhdpi/weather_20.png b/core/res/res/drawable-xhdpi/weather_20.png new file mode 100644 index 00000000000..292cc82559d Binary files /dev/null and b/core/res/res/drawable-xhdpi/weather_20.png differ diff --git a/core/res/res/drawable-xhdpi/weather_21.png b/core/res/res/drawable-xhdpi/weather_21.png new file mode 100644 index 00000000000..256176b6db6 Binary files /dev/null and b/core/res/res/drawable-xhdpi/weather_21.png differ diff --git a/core/res/res/drawable-xhdpi/weather_22.png b/core/res/res/drawable-xhdpi/weather_22.png new file mode 100644 index 00000000000..7b2b192ff04 Binary files /dev/null and b/core/res/res/drawable-xhdpi/weather_22.png differ diff --git a/core/res/res/drawable-xhdpi/weather_23.png b/core/res/res/drawable-xhdpi/weather_23.png new file mode 100644 index 00000000000..4bcf643a455 Binary files /dev/null and b/core/res/res/drawable-xhdpi/weather_23.png differ diff --git a/core/res/res/drawable-xhdpi/weather_24.png b/core/res/res/drawable-xhdpi/weather_24.png new file mode 100644 index 00000000000..f26fad3b5d2 Binary files /dev/null and b/core/res/res/drawable-xhdpi/weather_24.png differ diff --git a/core/res/res/drawable-xhdpi/weather_25.png b/core/res/res/drawable-xhdpi/weather_25.png new file mode 100644 index 00000000000..bea29ede8d4 Binary files /dev/null and b/core/res/res/drawable-xhdpi/weather_25.png differ diff --git a/core/res/res/drawable-xhdpi/weather_26.png b/core/res/res/drawable-xhdpi/weather_26.png new file mode 100644 index 00000000000..d8573d71ad5 Binary files /dev/null and b/core/res/res/drawable-xhdpi/weather_26.png differ diff --git a/core/res/res/drawable-xhdpi/weather_27.png b/core/res/res/drawable-xhdpi/weather_27.png new file mode 100644 index 00000000000..284e8c60329 Binary files /dev/null and b/core/res/res/drawable-xhdpi/weather_27.png differ diff --git a/core/res/res/drawable-xhdpi/weather_28.png b/core/res/res/drawable-xhdpi/weather_28.png new file mode 100644 index 00000000000..80b337a04db Binary files /dev/null and b/core/res/res/drawable-xhdpi/weather_28.png differ diff --git a/core/res/res/drawable-xhdpi/weather_29.png b/core/res/res/drawable-xhdpi/weather_29.png new file mode 100644 index 00000000000..e8025946be5 Binary files /dev/null and b/core/res/res/drawable-xhdpi/weather_29.png differ diff --git a/core/res/res/drawable-xhdpi/weather_3.png b/core/res/res/drawable-xhdpi/weather_3.png new file mode 100644 index 00000000000..978eaadcb8b Binary files /dev/null and b/core/res/res/drawable-xhdpi/weather_3.png differ diff --git a/core/res/res/drawable-xhdpi/weather_30.png b/core/res/res/drawable-xhdpi/weather_30.png new file mode 100644 index 00000000000..dab499b49ba Binary files /dev/null and b/core/res/res/drawable-xhdpi/weather_30.png differ diff --git a/core/res/res/drawable-xhdpi/weather_31.png b/core/res/res/drawable-xhdpi/weather_31.png new file mode 100644 index 00000000000..6869aa5520d Binary files /dev/null and b/core/res/res/drawable-xhdpi/weather_31.png differ diff --git a/core/res/res/drawable-xhdpi/weather_32.png b/core/res/res/drawable-xhdpi/weather_32.png new file mode 100644 index 00000000000..6386853fc64 Binary files /dev/null and b/core/res/res/drawable-xhdpi/weather_32.png differ diff --git a/core/res/res/drawable-xhdpi/weather_33.png b/core/res/res/drawable-xhdpi/weather_33.png new file mode 100644 index 00000000000..e4916eb5093 Binary files /dev/null and b/core/res/res/drawable-xhdpi/weather_33.png differ diff --git a/core/res/res/drawable-xhdpi/weather_34.png b/core/res/res/drawable-xhdpi/weather_34.png new file mode 100644 index 00000000000..172c8982ac6 Binary files /dev/null and b/core/res/res/drawable-xhdpi/weather_34.png differ diff --git a/core/res/res/drawable-xhdpi/weather_35.png b/core/res/res/drawable-xhdpi/weather_35.png new file mode 100644 index 00000000000..228e0048a01 Binary files /dev/null and b/core/res/res/drawable-xhdpi/weather_35.png differ diff --git a/core/res/res/drawable-xhdpi/weather_36.png b/core/res/res/drawable-xhdpi/weather_36.png new file mode 100644 index 00000000000..c47e4d29f95 Binary files /dev/null and b/core/res/res/drawable-xhdpi/weather_36.png differ diff --git a/core/res/res/drawable-xhdpi/weather_37.png b/core/res/res/drawable-xhdpi/weather_37.png new file mode 100644 index 00000000000..826892ec2a0 Binary files /dev/null and b/core/res/res/drawable-xhdpi/weather_37.png differ diff --git a/core/res/res/drawable-xhdpi/weather_38.png b/core/res/res/drawable-xhdpi/weather_38.png new file mode 100644 index 00000000000..177aa16745c Binary files /dev/null and b/core/res/res/drawable-xhdpi/weather_38.png differ diff --git a/core/res/res/drawable-xhdpi/weather_39.png b/core/res/res/drawable-xhdpi/weather_39.png new file mode 100644 index 00000000000..e7f17b06d0c Binary files /dev/null and b/core/res/res/drawable-xhdpi/weather_39.png differ diff --git a/core/res/res/drawable-xhdpi/weather_4.png b/core/res/res/drawable-xhdpi/weather_4.png new file mode 100644 index 00000000000..99312bbdd4f Binary files /dev/null and b/core/res/res/drawable-xhdpi/weather_4.png differ diff --git a/core/res/res/drawable-xhdpi/weather_40.png b/core/res/res/drawable-xhdpi/weather_40.png new file mode 100644 index 00000000000..c77c9175c18 Binary files /dev/null and b/core/res/res/drawable-xhdpi/weather_40.png differ diff --git a/core/res/res/drawable-xhdpi/weather_41.png b/core/res/res/drawable-xhdpi/weather_41.png new file mode 100644 index 00000000000..780507ffffe Binary files /dev/null and b/core/res/res/drawable-xhdpi/weather_41.png differ diff --git a/core/res/res/drawable-xhdpi/weather_42.png b/core/res/res/drawable-xhdpi/weather_42.png new file mode 100644 index 00000000000..ac4670bc0a8 Binary files /dev/null and b/core/res/res/drawable-xhdpi/weather_42.png differ diff --git a/core/res/res/drawable-xhdpi/weather_43.png b/core/res/res/drawable-xhdpi/weather_43.png new file mode 100644 index 00000000000..f00fff33e8c Binary files /dev/null and b/core/res/res/drawable-xhdpi/weather_43.png differ diff --git a/core/res/res/drawable-xhdpi/weather_44.png b/core/res/res/drawable-xhdpi/weather_44.png new file mode 100644 index 00000000000..9f149bb2a0b Binary files /dev/null and b/core/res/res/drawable-xhdpi/weather_44.png differ diff --git a/core/res/res/drawable-xhdpi/weather_45.png b/core/res/res/drawable-xhdpi/weather_45.png new file mode 100644 index 00000000000..53c9dfced04 Binary files /dev/null and b/core/res/res/drawable-xhdpi/weather_45.png differ diff --git a/core/res/res/drawable-xhdpi/weather_46.png b/core/res/res/drawable-xhdpi/weather_46.png new file mode 100644 index 00000000000..8325a62b8ec Binary files /dev/null and b/core/res/res/drawable-xhdpi/weather_46.png differ diff --git a/core/res/res/drawable-xhdpi/weather_47.png b/core/res/res/drawable-xhdpi/weather_47.png new file mode 100644 index 00000000000..fd3b5bfe6f2 Binary files /dev/null and b/core/res/res/drawable-xhdpi/weather_47.png differ diff --git a/core/res/res/drawable-xhdpi/weather_5.png b/core/res/res/drawable-xhdpi/weather_5.png new file mode 100644 index 00000000000..f5415ac1dad Binary files /dev/null and b/core/res/res/drawable-xhdpi/weather_5.png differ diff --git a/core/res/res/drawable-xhdpi/weather_6.png b/core/res/res/drawable-xhdpi/weather_6.png new file mode 100644 index 00000000000..af9e2dcde51 Binary files /dev/null and b/core/res/res/drawable-xhdpi/weather_6.png differ diff --git a/core/res/res/drawable-xhdpi/weather_7.png b/core/res/res/drawable-xhdpi/weather_7.png new file mode 100644 index 00000000000..70a6840e7a9 Binary files /dev/null and b/core/res/res/drawable-xhdpi/weather_7.png differ diff --git a/core/res/res/drawable-xhdpi/weather_8.png b/core/res/res/drawable-xhdpi/weather_8.png new file mode 100644 index 00000000000..ec62cebd0a8 Binary files /dev/null and b/core/res/res/drawable-xhdpi/weather_8.png differ diff --git a/core/res/res/drawable-xhdpi/weather_9.png b/core/res/res/drawable-xhdpi/weather_9.png new file mode 100644 index 00000000000..0a9884c3bf7 Binary files /dev/null and b/core/res/res/drawable-xhdpi/weather_9.png differ diff --git a/core/res/res/drawable-xhdpi/weather_na.png b/core/res/res/drawable-xhdpi/weather_na.png new file mode 100644 index 00000000000..8ebe3066b33 Binary files /dev/null and b/core/res/res/drawable-xhdpi/weather_na.png differ diff --git a/core/res/res/drawable/ic_lockscreen_home.xml b/core/res/res/drawable/ic_lockscreen_home.xml new file mode 100644 index 00000000000..ffed9936f52 --- /dev/null +++ b/core/res/res/drawable/ic_lockscreen_home.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + diff --git a/core/res/res/drawable/ic_lockscreen_vib.xml b/core/res/res/drawable/ic_lockscreen_vib.xml new file mode 100644 index 00000000000..5bfde6f2dd6 --- /dev/null +++ b/core/res/res/drawable/ic_lockscreen_vib.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + diff --git a/core/res/res/drawable/weather_condition.xml b/core/res/res/drawable/weather_condition.xml new file mode 100644 index 00000000000..85c12bedd9f --- /dev/null +++ b/core/res/res/drawable/weather_condition.xml @@ -0,0 +1,152 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/core/res/res/layout-sw600dp/keyguard_screen_password_landscape.xml b/core/res/res/layout-sw600dp/keyguard_screen_password_landscape.xml index 8d5d404f51b..6666d3d1476 100644 --- a/core/res/res/layout-sw600dp/keyguard_screen_password_landscape.xml +++ b/core/res/res/layout-sw600dp/keyguard_screen_password_landscape.xml @@ -16,170 +16,178 @@ ** limitations under the License. */ --> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -