From 57a2292bffedaa3fb8f5cd6b0867fdd5772ad3b5 Mon Sep 17 00:00:00 2001 From: Nick Pelly Date: Fri, 25 Sep 2009 14:13:49 -0700 Subject: [PATCH 01/27] Bounds check read and write path in native code. Already checked in Java, but requested by security review. Change-Id: I5314dbc32546278b977236a154fba03f38610b1a --- .../jni/android_bluetooth_BluetoothSocket.cpp | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/core/jni/android_bluetooth_BluetoothSocket.cpp b/core/jni/android_bluetooth_BluetoothSocket.cpp index 70d74d52e7dfe..2532effe98bdc 100644 --- a/core/jni/android_bluetooth_BluetoothSocket.cpp +++ b/core/jni/android_bluetooth_BluetoothSocket.cpp @@ -402,7 +402,6 @@ static jint availableNative(JNIEnv *env, jobject obj) { return -1; } -/** jb must not be null. offset and offset+length must be within array */ static jint readNative(JNIEnv *env, jobject obj, jbyteArray jb, jint offset, jint length) { #ifdef HAVE_BLUETOOTH @@ -410,10 +409,20 @@ static jint readNative(JNIEnv *env, jobject obj, jbyteArray jb, jint offset, int ret; jbyte *b; + int sz; struct asocket *s = get_socketData(env, obj); if (!s) return -1; + if (jb == NULL) { + jniThrowIOException(env, EINVAL); + return -1; + } + sz = env->GetArrayLength(jb); + if (offset < 0 || length < 0 || offset + length > sz) { + jniThrowIOException(env, EINVAL); + return -1; + } b = env->GetByteArrayElements(jb, NULL); if (b == NULL) { @@ -436,7 +445,6 @@ static jint readNative(JNIEnv *env, jobject obj, jbyteArray jb, jint offset, return -1; } -/** jb must not be null. offset and offset+length must be within array */ static jint writeNative(JNIEnv *env, jobject obj, jbyteArray jb, jint offset, jint length) { #ifdef HAVE_BLUETOOTH @@ -444,10 +452,20 @@ static jint writeNative(JNIEnv *env, jobject obj, jbyteArray jb, jint offset, int ret; jbyte *b; + int sz; struct asocket *s = get_socketData(env, obj); if (!s) return -1; + if (jb == NULL) { + jniThrowIOException(env, EINVAL); + return -1; + } + sz = env->GetArrayLength(jb); + if (offset < 0 || length < 0 || offset + length > sz) { + jniThrowIOException(env, EINVAL); + return -1; + } b = env->GetByteArrayElements(jb, NULL); if (b == NULL) { From 12835478ee687a493d1b5882e67b6725bd539c26 Mon Sep 17 00:00:00 2001 From: Nick Pelly Date: Fri, 25 Sep 2009 15:00:29 -0700 Subject: [PATCH 02/27] Handle expiration of discovery mode in system server. Change-Id: I58fd199b40ffdf8168a5489be8eedb5d25d56722 --- .../android/bluetooth/BluetoothAdapter.java | 19 +++++++++++++------ core/java/android/bluetooth/IBluetooth.aidl | 2 +- .../java/android/server/BluetoothService.java | 19 ++++++++++++++++++- 3 files changed, 32 insertions(+), 8 deletions(-) diff --git a/core/java/android/bluetooth/BluetoothAdapter.java b/core/java/android/bluetooth/BluetoothAdapter.java index 776c923c0b2e5..3aaed385dfa76 100644 --- a/core/java/android/bluetooth/BluetoothAdapter.java +++ b/core/java/android/bluetooth/BluetoothAdapter.java @@ -412,10 +412,10 @@ public final class BluetoothAdapter { * Set the Bluetooth scan mode of the local Bluetooth adapter. *

The Bluetooth scan mode determines if the local adapter is * connectable and/or discoverable from remote Bluetooth devices. - *

For privacy reasons, it is recommended to limit the duration of time - * that the local adapter remains in a discoverable scan mode. For example, - * 2 minutes is a generous time to allow a remote Bluetooth device to - * initiate and complete its discovery process. + *

For privacy reasons, discoverable mode is automatically turned off + * after duration seconds. For example, 120 seconds should be + * enough for a remote device to initiate and complete its discovery + * process. *

Valid scan mode values are: * {@link #SCAN_MODE_NONE}, * {@link #SCAN_MODE_CONNECTABLE}, @@ -427,16 +427,23 @@ public final class BluetoothAdapter { * instead. * * @param mode valid scan mode + * @param duration time in seconds to apply scan mode, only used for + * {@link #SCAN_MODE_CONNECTABLE_DISCOVERABLE} * @return true if the scan mode was set, false otherwise * @hide */ - public boolean setScanMode(int mode) { + public boolean setScanMode(int mode, int duration) { try { - return mService.setScanMode(mode); + return mService.setScanMode(mode, duration); } catch (RemoteException e) {Log.e(TAG, "", e);} return false; } + /** @hide */ + public boolean setScanMode(int mode) { + return setScanMode(mode, 120); + } + /** @hide */ public int getDiscoverableTimeout() { try { diff --git a/core/java/android/bluetooth/IBluetooth.aidl b/core/java/android/bluetooth/IBluetooth.aidl index 203a61d8a1f68..1bc2f968b3838 100644 --- a/core/java/android/bluetooth/IBluetooth.aidl +++ b/core/java/android/bluetooth/IBluetooth.aidl @@ -35,7 +35,7 @@ interface IBluetooth boolean setName(in String name); int getScanMode(); - boolean setScanMode(int mode); + boolean setScanMode(int mode, int duration); int getDiscoverableTimeout(); boolean setDiscoverableTimeout(int timeout); diff --git a/core/java/android/server/BluetoothService.java b/core/java/android/server/BluetoothService.java index de14b5b4e0bb5..8b9ba84cac5bd 100644 --- a/core/java/android/server/BluetoothService.java +++ b/core/java/android/server/BluetoothService.java @@ -78,6 +78,7 @@ public class BluetoothService extends IBluetooth.Stub { private static final int MESSAGE_REGISTER_SDP_RECORDS = 1; private static final int MESSAGE_FINISH_DISABLE = 2; private static final int MESSAGE_UUID_INTENT = 3; + private static final int MESSAGE_DISCOVERABLE_TIMEOUT = 4; // The timeout used to sent the UUIDs Intent // This timeout should be greater than the page timeout @@ -308,6 +309,15 @@ public class BluetoothService extends IBluetooth.Stub { if (address != null) sendUuidIntent(address); break; + case MESSAGE_DISCOVERABLE_TIMEOUT: + int mode = msg.arg1; + if (isEnabled()) { + // TODO: Switch back to the previous scan mode + // This is ok for now, because we only use + // CONNECTABLE and CONNECTABLE_DISCOVERABLE + setScanMode(BluetoothAdapter.SCAN_MODE_CONNECTABLE, -1); + } + break; } } }; @@ -679,23 +689,30 @@ public class BluetoothService extends IBluetooth.Stub { return setPropertyInteger("DiscoverableTimeout", timeout); } - public synchronized boolean setScanMode(int mode) { + public synchronized boolean setScanMode(int mode, int duration) { mContext.enforceCallingOrSelfPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS, "Need WRITE_SECURE_SETTINGS permission"); boolean pairable = false; boolean discoverable = false; + switch (mode) { case BluetoothAdapter.SCAN_MODE_NONE: + mHandler.removeMessages(MESSAGE_DISCOVERABLE_TIMEOUT); pairable = false; discoverable = false; break; case BluetoothAdapter.SCAN_MODE_CONNECTABLE: + mHandler.removeMessages(MESSAGE_DISCOVERABLE_TIMEOUT); pairable = true; discoverable = false; break; case BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE: + mHandler.removeMessages(MESSAGE_DISCOVERABLE_TIMEOUT); pairable = true; discoverable = true; + Message msg = mHandler.obtainMessage(MESSAGE_DISCOVERABLE_TIMEOUT); + mHandler.sendMessageDelayed(msg, duration * 1000); + if (DBG) Log.d(TAG, "BT Discoverable for " + duration + " seconds"); break; default: Log.w(TAG, "Requested invalid scan mode " + mode); From ba6728023d9c9a5f13b9fc6e2015527b99b30c41 Mon Sep 17 00:00:00 2001 From: Grace Kloba Date: Fri, 25 Sep 2009 15:54:08 -0700 Subject: [PATCH 03/27] When change from narrow screen to wide screen, we will leave the mMinZoomScale to 1.0 --- core/java/android/webkit/WebView.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java index 3ce1815a37d05..90985e062cacb 100644 --- a/core/java/android/webkit/WebView.java +++ b/core/java/android/webkit/WebView.java @@ -3587,9 +3587,13 @@ public class WebView extends AbsoluteLayout // update mMinZoomScale if the minimum zoom scale is not fixed if (!mMinZoomScaleFixed) { - mMinZoomScale = (float) getViewWidth() + // when change from narrow screen to wide screen, the new viewWidth + // can be wider than the old content width. We limit the minimum + // scale to 1.0f. The proper minimum scale will be calculated when + // the new picture shows up. + mMinZoomScale = Math.min(1.0f, (float) getViewWidth() / (mDrawHistory ? mHistoryPicture.getWidth() - : mZoomOverviewWidth); + : mZoomOverviewWidth)); } // we always force, in case our height changed, in which case we still From 362aca60453ec7f27abb4d83fc29dd82095dc882 Mon Sep 17 00:00:00 2001 From: Christopher Tate Date: Fri, 25 Sep 2009 15:58:03 -0700 Subject: [PATCH 04/27] Add auto-brightness mode to the list of backed-up settings Change-Id: I4302b79691ed717d810748b239311cba198f6381 --- core/java/android/provider/Settings.java | 1 + .../providers/settings/SettingsHelper.java | 29 +++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index e3fc72d8ee602..2b6313db6ec27 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -1416,6 +1416,7 @@ public final class Settings { DIM_SCREEN, SCREEN_OFF_TIMEOUT, SCREEN_BRIGHTNESS, + SCREEN_BRIGHTNESS_MODE, VIBRATE_ON, NOTIFICATIONS_USE_RING_VOLUME, MODE_RINGER, diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java index 77da8f1ee2bc9..3b91a383adb9c 100644 --- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java +++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java @@ -40,16 +40,23 @@ public class SettingsHelper { private Context mContext; private AudioManager mAudioManager; private IContentService mContentService; + private IPowerManager mPowerManager; private static final String[] PROVIDERS = { "gmail-ls", "calendar", "contacts" }; private boolean mSilent; private boolean mVibrate; + private boolean mHasAutoBrightness; public SettingsHelper(Context context) { mContext = context; mAudioManager = (AudioManager) context .getSystemService(Context.AUDIO_SERVICE); mContentService = ContentResolver.getContentService(); + mPowerManager = IPowerManager.Stub.asInterface( + ServiceManager.getService("power")); + + mHasAutoBrightness = context.getResources().getBoolean( + com.android.internal.R.bool.config_automatic_brightness_available); } /** @@ -64,6 +71,18 @@ public class SettingsHelper { public boolean restoreValue(String name, String value) { if (Settings.System.SCREEN_BRIGHTNESS.equals(name)) { setBrightness(Integer.parseInt(value)); + } else if (Settings.System.SCREEN_BRIGHTNESS_MODE.equals(name)) { + if (mHasAutoBrightness) { + // When setting auto-brightness, must reset the brightness afterwards + try { + int curBrightness = Settings.System.getInt(mContext.getContentResolver(), + Settings.System.SCREEN_BRIGHTNESS); + setAutoBrightness(Integer.parseInt(value) != 0); + setBrightness(curBrightness); + } catch (Settings.SettingNotFoundException e) { + // no brightness setting at all? weird. skip this then. + } + } } else if (Settings.System.SOUND_EFFECTS_ENABLED.equals(name)) { setSoundEffects(Integer.parseInt(value) == 1); } else if (Settings.Secure.LOCATION_PROVIDERS_ALLOWED.equals(name)) { @@ -73,6 +92,16 @@ public class SettingsHelper { return true; } + private void setAutoBrightness(boolean value) { + if (mPowerManager != null) { + try { + mPowerManager.setAutoBrightness(value); + } catch (RemoteException e) { + // unable to reach the power manager; skip + } + } + } + private void setGpsLocation(String value) { final String GPS = LocationManager.GPS_PROVIDER; boolean enabled = From 68d9254d59910bf6eacb3d2703972e5451b7f345 Mon Sep 17 00:00:00 2001 From: Mike Cleron Date: Sun, 27 Sep 2009 11:00:14 -0700 Subject: [PATCH 05/27] Add official assets for tabs in compatibility mode --- .../tab_selected_bar_left_v4.9.png | Bin 2820 -> 151 bytes .../tab_selected_bar_right_v4.9.png | Bin 2820 -> 151 bytes .../res/drawable-hdpi/tab_selected_v4.9.png | Bin 2981 -> 343 bytes .../res/drawable-hdpi/tab_unselected_v4.9.png | Bin 2979 -> 321 bytes .../tab_selected_bar_left_v4.9.png | Bin 0 -> 143 bytes .../tab_selected_bar_right_v4.9.png | Bin 0 -> 143 bytes .../res/drawable-mdpi/tab_selected_v4.9.png | Bin 0 -> 310 bytes .../res/drawable-mdpi/tab_unselected_v4.9.png | Bin 0 -> 313 bytes 8 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 core/res/res/drawable-mdpi/tab_selected_bar_left_v4.9.png create mode 100644 core/res/res/drawable-mdpi/tab_selected_bar_right_v4.9.png create mode 100644 core/res/res/drawable-mdpi/tab_selected_v4.9.png create mode 100644 core/res/res/drawable-mdpi/tab_unselected_v4.9.png diff --git a/core/res/res/drawable-hdpi/tab_selected_bar_left_v4.9.png b/core/res/res/drawable-hdpi/tab_selected_bar_left_v4.9.png index 109bbcd3437973a4a1e5a6c4fedb641f20d40821..e7a07255d79c382ddea1036386372602d32ea2a9 100644 GIT binary patch delta 122 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 diff --git a/core/res/res/drawable-hdpi/tab_unselected_v4.9.png b/core/res/res/drawable-hdpi/tab_unselected_v4.9.png index 7a13b8ab05025889b80804512f0cbe663e7aa5d0..43b1ee5a297a9e866a9357f3b007a76868d1ac04 100644 GIT binary patch delta 294 zcmV+>0onee7r_FMB!3xnMObuGZ)S9NVRB^vL1b@YWgtmyVP|DhWnpA_ami&o0002v zNklgYf s+Q%fm^@2`&gdZv`lwR}luD=T~0P4ClHgy`tDF6Tf07*qoM6N<$f_jyJ%K!iX delta 2973 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 Tg&;kG00000NkvXXu0mjfr&pF% diff --git a/core/res/res/drawable-mdpi/tab_selected_bar_left_v4.9.png b/core/res/res/drawable-mdpi/tab_selected_bar_left_v4.9.png new file mode 100644 index 0000000000000000000000000000000000000000..d14c02b8e069277bc0b6bf8d0592a6bdd1e26812 GIT binary patch literal 143 zcmeAS@N?(olHy`uVBq!ia0vp^%s|Y_!3HE73d0rwDajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_d9MTVX(jv*Ddl79UEZ_h07hy9|D!nL{9mdKI;Vst0Jga*%>V!Z literal 0 HcmV?d00001 diff --git a/core/res/res/drawable-mdpi/tab_selected_bar_right_v4.9.png b/core/res/res/drawable-mdpi/tab_selected_bar_right_v4.9.png new file mode 100644 index 0000000000000000000000000000000000000000..d14c02b8e069277bc0b6bf8d0592a6bdd1e26812 GIT binary patch literal 143 zcmeAS@N?(olHy`uVBq!ia0vp^%s|Y_!3HE73d0rwDajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_d9MTVX(jv*Ddl79UEZ_h07hy9|D!nL{9mdKI;Vst0Jga*%>V!Z literal 0 HcmV?d00001 diff --git a/core/res/res/drawable-mdpi/tab_selected_v4.9.png b/core/res/res/drawable-mdpi/tab_selected_v4.9.png new file mode 100644 index 0000000000000000000000000000000000000000..52cc34e9ac21c0b576487c6372b00face15668c8 GIT binary patch literal 310 zcmV-60m=S}P)l2ZDOM~u&& zHx*tc*cT~jSe+s!~!(RN-MP0CFZY*y}s>|AOe*%Mb($&}KB>Q${o_MV6;GsaM5e^DmOvb>E< zDHWca^Ar<8KuAMty-~;FLD^M)ul3mRZjk>puO~rn^iKf>01)i0FTg(=RR91007*qo IM6N<$f7z5jZi0@^C&iWRvs>*a-2TjvJUDsa*d}}SG z1f>)(#+(x!xGc-%+qP{S7DB)<43Ou!12Z376a{2i7KcfZK+bs_4h;&Y15+sNJgodX ze0w)Ss<*pfO3GIKiSxP2RB3i6zpuhS$)9pXy8eevt;pQ|QLb@gp66w1t>f@Gjvs?4 zOl=w&Ow+Va*{Ywb-1og#nQCIt4WBZGlIFkt2KV)x>r1WoUIGjNK+zk9?Ce}L00000 LNkvXXu0mjfONN4? literal 0 HcmV?d00001 From 0ddbc35dc4974fbe18a4191e579b1eda5a7ef2b1 Mon Sep 17 00:00:00 2001 From: Marco Nelissen Date: Sun, 27 Sep 2009 11:24:41 -0700 Subject: [PATCH 06/27] Only scan windows media files when those codecs are enabled. --- media/java/android/media/MediaFile.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/media/java/android/media/MediaFile.java b/media/java/android/media/MediaFile.java index 03ffc6764dfb9..8180a7cfbc30e 100644 --- a/media/java/android/media/MediaFile.java +++ b/media/java/android/media/MediaFile.java @@ -17,6 +17,7 @@ package android.media; import android.content.ContentValues; +import android.os.SystemProperties; import android.provider.MediaStore.Audio; import android.provider.MediaStore.Images; import android.provider.MediaStore.Video; @@ -103,7 +104,9 @@ public class MediaFile { addFileType("WAV", FILE_TYPE_WAV, "audio/x-wav"); addFileType("AMR", FILE_TYPE_AMR, "audio/amr"); addFileType("AWB", FILE_TYPE_AWB, "audio/amr-wb"); - addFileType("WMA", FILE_TYPE_WMA, "audio/x-ms-wma"); + if (SystemProperties.getInt("ro.media.dec.aud.wma.enabled", 0) != 0) { + addFileType("WMA", FILE_TYPE_WMA, "audio/x-ms-wma"); + } addFileType("OGG", FILE_TYPE_OGG, "application/ogg"); addFileType("OGA", FILE_TYPE_OGG, "application/ogg"); addFileType("AAC", FILE_TYPE_AAC, "audio/aac"); @@ -123,8 +126,10 @@ public class MediaFile { addFileType("3GPP", FILE_TYPE_3GPP, "video/3gpp"); addFileType("3G2", FILE_TYPE_3GPP2, "video/3gpp2"); addFileType("3GPP2", FILE_TYPE_3GPP2, "video/3gpp2"); - addFileType("WMV", FILE_TYPE_WMV, "video/x-ms-wmv"); - addFileType("ASF", FILE_TYPE_ASF, "video/x-ms-asf"); + if (SystemProperties.getInt("ro.media.dec.vid.wmv.enabled", 0) != 0) { + addFileType("WMV", FILE_TYPE_WMV, "video/x-ms-wmv"); + addFileType("ASF", FILE_TYPE_ASF, "video/x-ms-asf"); + } addFileType("JPG", FILE_TYPE_JPEG, "image/jpeg"); addFileType("JPEG", FILE_TYPE_JPEG, "image/jpeg"); From d81b1f41e5e7bf0ccd3e4c08838d65eacdc8dda0 Mon Sep 17 00:00:00 2001 From: Mike Lockwood Date: Fri, 25 Sep 2009 09:32:19 -0400 Subject: [PATCH 07/27] BatteryService: Specify low battery levels in resources. Also trigger low battery when battery reaches the specified level rather than when it drops below the level. Fixes bug b/1788656 Change-Id: I81f5cbb9892fc6574320d92e153211f83c69f415 Signed-off-by: Mike Lockwood --- core/res/res/values/config.xml | 5 ++++ core/res/res/values/strings.xml | 4 +-- .../com/android/server/BatteryService.java | 25 ++++++++++++------- .../server/status/StatusBarPolicy.java | 6 ++--- 4 files changed, 25 insertions(+), 15 deletions(-) diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index cf0dfd7696e53..907fd8f77cc0d 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -126,4 +126,9 @@ false + + 15 + + 20 + diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml index eb151835a5d0e..2a55d85382d55 100644 --- a/core/res/res/values/strings.xml +++ b/core/res/res/values/strings.xml @@ -1460,8 +1460,8 @@ The battery is getting low: - less than %d%% - remaining. + %d%% + or less remaining. diff --git a/services/java/com/android/server/BatteryService.java b/services/java/com/android/server/BatteryService.java index 53edf31a20395..bb369366837db 100644 --- a/services/java/com/android/server/BatteryService.java +++ b/services/java/com/android/server/BatteryService.java @@ -90,9 +90,6 @@ class BatteryService extends Binder { // This should probably be exposed in the API, though it's not critical private static final int BATTERY_PLUGGED_NONE = 0; - private static final int BATTERY_LEVEL_CLOSE_WARNING = 20; - private static final int BATTERY_LEVEL_WARNING = 15; - private final Context mContext; private final IBatteryStats mBatteryStats; @@ -114,7 +111,10 @@ class BatteryService extends Binder { private int mLastBatteryVoltage; private int mLastBatteryTemperature; private boolean mLastBatteryLevelCritical; - + + private int mLowBatteryWarningLevel; + private int mLowBatteryCloseWarningLevel; + private int mPlugType; private int mLastPlugType = -1; // Extra state so we can detect first run @@ -127,6 +127,11 @@ class BatteryService extends Binder { mContext = context; mBatteryStats = BatteryStatsService.getService(); + mLowBatteryWarningLevel = mContext.getResources().getInteger( + com.android.internal.R.integer.config_lowBatteryWarningLevel); + mLowBatteryCloseWarningLevel = mContext.getResources().getInteger( + com.android.internal.R.integer.config_lowBatteryCloseWarningLevel); + mUEventObserver.startObserving("SUBSYSTEM=power_supply"); // set initial status @@ -271,13 +276,15 @@ class BatteryService extends Binder { final boolean oldPlugged = mLastPlugType != BATTERY_PLUGGED_NONE; /* The ACTION_BATTERY_LOW broadcast is sent in these situations: - * - is just un-plugged (previously was plugged) and battery level is under WARNING, or - * - is not plugged and battery level crosses the WARNING boundary (becomes < 15). + * - is just un-plugged (previously was plugged) and battery level is + * less than or equal to WARNING, or + * - is not plugged and battery level falls to WARNING boundary + * (becomes <= mLowBatteryWarningLevel). */ final boolean sendBatteryLow = !plugged && mBatteryStatus != BatteryManager.BATTERY_STATUS_UNKNOWN - && mBatteryLevel < BATTERY_LEVEL_WARNING - && (oldPlugged || mLastBatteryLevel >= BATTERY_LEVEL_WARNING); + && mBatteryLevel <= mLowBatteryWarningLevel + && (oldPlugged || mLastBatteryLevel > mLowBatteryWarningLevel); sendIntent(); @@ -299,7 +306,7 @@ class BatteryService extends Binder { mSentLowBatteryBroadcast = true; statusIntent.setAction(Intent.ACTION_BATTERY_LOW); mContext.sendBroadcast(statusIntent); - } else if (mSentLowBatteryBroadcast && mLastBatteryLevel >= BATTERY_LEVEL_CLOSE_WARNING) { + } else if (mSentLowBatteryBroadcast && mLastBatteryLevel >= mLowBatteryCloseWarningLevel) { mSentLowBatteryBroadcast = false; statusIntent.setAction(Intent.ACTION_BATTERY_OKAY); mContext.sendBroadcast(statusIntent); diff --git a/services/java/com/android/server/status/StatusBarPolicy.java b/services/java/com/android/server/status/StatusBarPolicy.java index da64e54393cd3..6570bcdd495b3 100644 --- a/services/java/com/android/server/status/StatusBarPolicy.java +++ b/services/java/com/android/server/status/StatusBarPolicy.java @@ -670,11 +670,9 @@ public class StatusBarPolicy { private void showLowBatteryWarning() { closeLastBatteryView(); - /* Show exact battery level. - * Add 1 because the text says "less than X%". - */ + // Show exact battery level. CharSequence levelText = mContext.getString( - com.android.internal.R.string.battery_low_percent_format, mBatteryLevel + 1); + com.android.internal.R.string.battery_low_percent_format, mBatteryLevel); if (mBatteryLevelTextView != null) { mBatteryLevelTextView.setText(levelText); From 7433e8aebd86e5916839508da478f9b9d63b969e Mon Sep 17 00:00:00 2001 From: Dianne Hackborn Date: Sun, 27 Sep 2009 13:21:20 -0700 Subject: [PATCH 08/27] Fix issue #2148939: Sholes slow to wake up in landscape mode This was introduced when I did the fading of the lock screen, which relies on setting the policy visibility of the windows behind it to be hidden. As a result, when the orientation changed or the activity was restarted, they wouldn't be resized or reported as drawn, and the activity manager would wait until its timeout before unfreezing the screen. We now have a new method on WindowState to find out if a window has drawn itself, which is used in the appropriate places. Change-Id: If05f8b1947d3029917f62ad0f89b43544bd0a4dc --- .../android/server/WindowManagerService.java | 31 ++++++++++++------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/services/java/com/android/server/WindowManagerService.java b/services/java/com/android/server/WindowManagerService.java index 8ebbc93d23170..228d25e15281b 100644 --- a/services/java/com/android/server/WindowManagerService.java +++ b/services/java/com/android/server/WindowManagerService.java @@ -4174,7 +4174,7 @@ public class WindowManagerService extends IWindowManager.Stub final int N = mWindows.size(); for (int i=0; i Date: Sun, 27 Sep 2009 13:32:24 -0700 Subject: [PATCH 09/27] bug 2148061: if PduBody is zero length, treat it as an empty message. Change-Id: I2f352dd481f6b8d02b67cd3a44d692e3a5d03999 --- core/java/com/google/android/mms/pdu/PduComposer.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/core/java/com/google/android/mms/pdu/PduComposer.java b/core/java/com/google/android/mms/pdu/PduComposer.java index 2aa5e48f507ee..8940945a605a0 100644 --- a/core/java/com/google/android/mms/pdu/PduComposer.java +++ b/core/java/com/google/android/mms/pdu/PduComposer.java @@ -850,8 +850,7 @@ public class PduComposer { PositionMarker ctStart = mStack.mark(); // This contentTypeIdentifier should be used for type of attachment... - String contentType = new String( - mPduHeader.getTextString(PduHeaders.CONTENT_TYPE)); + String contentType = new String(mPduHeader.getTextString(PduHeaders.CONTENT_TYPE)); Integer contentTypeIdentifier = mContentTypeMap.get(contentType); if (contentTypeIdentifier == null) { // content type is mandatory @@ -862,7 +861,7 @@ public class PduComposer { // content-type parameter: start PduBody body = ((SendReq) mPdu).getBody(); - if (null == body) { + if (null == body || body.getPartsNum() == 0) { // empty message appendUintvarInteger(0); mStack.pop(); From cc96652c7049569c1bc7b1f93ba454a7cb891fd8 Mon Sep 17 00:00:00 2001 From: Ray Chen Date: Fri, 25 Sep 2009 11:46:59 -0700 Subject: [PATCH 10/27] Remove fflush when storing thumbanil to sdcard. --- media/java/android/media/MiniThumbFile.java | 1 - 1 file changed, 1 deletion(-) diff --git a/media/java/android/media/MiniThumbFile.java b/media/java/android/media/MiniThumbFile.java index c607218a2dc56..def0288c75094 100644 --- a/media/java/android/media/MiniThumbFile.java +++ b/media/java/android/media/MiniThumbFile.java @@ -215,7 +215,6 @@ public class MiniThumbFile { r.write(data); r.seek(pos); r.writeByte(1); // we have data in this slot - mChannel.force(true); } } catch (IOException ex) { Log.e(TAG, "couldn't save mini thumbnail data for " From 30412d1ce0d65acda8c65a7fbe09a55900647f6a Mon Sep 17 00:00:00 2001 From: Yu Shan Emily Lau Date: Sun, 27 Sep 2009 14:14:10 -0700 Subject: [PATCH 11/27] Modified the test case name for the browser page load test. --- .../src/com/android/browserpowertest/PowerMeasurement.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/BrowserPowerTest/src/com/android/browserpowertest/PowerMeasurement.java b/tests/BrowserPowerTest/src/com/android/browserpowertest/PowerMeasurement.java index 861e37be3e2b2..32763b3a6ba7e 100644 --- a/tests/BrowserPowerTest/src/com/android/browserpowertest/PowerMeasurement.java +++ b/tests/BrowserPowerTest/src/com/android/browserpowertest/PowerMeasurement.java @@ -21,7 +21,7 @@ public class PowerMeasurement extends ActivityInstrumentationTestCase2 Date: Sun, 27 Sep 2009 10:18:31 -0700 Subject: [PATCH 12/27] add new column "real_date" for IM messages table. Change-Id: I5c4b3da0843ff0205c2aff5f89639aba47a84e3b --- core/java/android/provider/Im.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/core/java/android/provider/Im.java b/core/java/android/provider/Im.java index d5cc22070bc80..d3e2820d59264 100644 --- a/core/java/android/provider/Im.java +++ b/core/java/android/provider/Im.java @@ -896,11 +896,20 @@ public class Im { String BODY = "body"; /** - * The date this message is sent or received + * The date this message is sent or received. This represents the display date for + * the message. *

Type: INTEGER

*/ String DATE = "date"; + /** + * The real date for this message. While 'date' can be modified by the client + * to account for server time skew, the real_date is the original timestamp set + * by the server for incoming messages. + *

Type: INTEGER

+ */ + String REAL_DATE = "real_date"; + /** * Message Type, see {@link MessageType} *

Type: INTEGER

From d66d84ffa2d96120ecd607af3f3c597fb673b178 Mon Sep 17 00:00:00 2001 From: Grace Kloba Date: Sun, 27 Sep 2009 14:48:07 -0700 Subject: [PATCH 13/27] Reset mPreventDrag at touch_down. Check the delta for short press case as we may switch to PREVENT_DRAG_NO at SWITCH_TO_SHORTPRESS. This should fix another two corner cases where flick doesn't do anything. --- core/java/android/webkit/WebView.java | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java index 90985e062cacb..07034afb775c4 100644 --- a/core/java/android/webkit/WebView.java +++ b/core/java/android/webkit/WebView.java @@ -3689,6 +3689,7 @@ public class WebView extends AbsoluteLayout switch (action) { case MotionEvent.ACTION_DOWN: { + mPreventDrag = PREVENT_DRAG_NO; if (!mScroller.isFinished()) { // stop the current scroll animation, but if this is // the start of a fling, allow it to add to the current @@ -3896,19 +3897,15 @@ public class WebView extends AbsoluteLayout mTouchMode = TOUCH_DONE_MODE; doDoubleTap(); break; - case TOUCH_SHORTPRESS_START_MODE: - case TOUCH_SHORTPRESS_MODE: - mPrivateHandler.removeMessages(SWITCH_TO_SHORTPRESS); - mPrivateHandler.removeMessages(SWITCH_TO_LONGPRESS); - mTouchMode = TOUCH_DONE_MODE; - doShortPress(); - break; case TOUCH_SELECT_MODE: commitCopy(); mTouchSelection = false; break; case TOUCH_INIT_MODE: // tap + case TOUCH_SHORTPRESS_START_MODE: + case TOUCH_SHORTPRESS_MODE: mPrivateHandler.removeMessages(SWITCH_TO_SHORTPRESS); + mPrivateHandler.removeMessages(SWITCH_TO_LONGPRESS); if ((deltaX * deltaX + deltaY * deltaY) > mTouchSlopSquare) { Log.w(LOGTAG, "Miss a drag as we are waiting for" + " WebCore's response for touch down."); @@ -3928,10 +3925,15 @@ public class WebView extends AbsoluteLayout mPreventDrag = PREVENT_DRAG_NO; } if (mPreventDrag == PREVENT_DRAG_NO) { - mPrivateHandler.sendMessageDelayed( - mPrivateHandler.obtainMessage( - RELEASE_SINGLE_TAP), - ViewConfiguration.getDoubleTapTimeout()); + if (mTouchMode == TOUCH_INIT_MODE) { + mPrivateHandler.sendMessageDelayed( + mPrivateHandler.obtainMessage( + RELEASE_SINGLE_TAP), + ViewConfiguration.getDoubleTapTimeout()); + } else { + mTouchMode = TOUCH_DONE_MODE; + doShortPress(); + } } break; } From e436d46e575c7ded49d4f79dac115894daa13f99 Mon Sep 17 00:00:00 2001 From: Robert Greenwalt Date: Sun, 27 Sep 2009 14:01:33 -0700 Subject: [PATCH 14/27] Fix Cdma re-start of default connection. We dropped an onTrySetupData call because onEnableNewApn calls that automatically on GSM, but CDMA was not doing anything. Made CDMA simply call onTrySetupData. Also, isApnTypeActive for CDMA was returning true even when no data was working. Changed to report true when initing or connected, like GSM. --- .../telephony/cdma/CdmaDataConnectionTracker.java | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/telephony/java/com/android/internal/telephony/cdma/CdmaDataConnectionTracker.java b/telephony/java/com/android/internal/telephony/cdma/CdmaDataConnectionTracker.java index ffaa1cdc9fa7c..93b48a9465ad8 100644 --- a/telephony/java/com/android/internal/telephony/cdma/CdmaDataConnectionTracker.java +++ b/telephony/java/com/android/internal/telephony/cdma/CdmaDataConnectionTracker.java @@ -246,8 +246,7 @@ public final class CdmaDataConnectionTracker extends DataConnectionTracker { @Override protected boolean isApnTypeActive(String type) { return (isApnTypeAvailable(type) && - mCdmaPhone.mSST.getCurrentCdmaDataConnectionState() == - ServiceState.STATE_IN_SERVICE); + (state == State.CONNECTED || state == State.INITING)); } @Override @@ -261,8 +260,7 @@ public final class CdmaDataConnectionTracker extends DataConnectionTracker { } protected String[] getActiveApnTypes() { - if (mCdmaPhone.mSST.getCurrentCdmaDataConnectionState() == - ServiceState.STATE_IN_SERVICE) { + if (state == State.CONNECTED || state == State.INITING) { return mSupportedApnTypes.clone(); } return new String[0]; @@ -625,6 +623,15 @@ public final class CdmaDataConnectionTracker extends DataConnectionTracker { sendMessage(obtainMessage(EVENT_TRY_SETUP_DATA)); } + /** + * @override com.android.intenral.telephony.DataConnectionTracker + */ + @Override + protected void onEnableNewApn() { + // for cdma we only use this when default data is enabled.. + onTrySetupData(Phone.REASON_DATA_ENABLED); + } + /** * @override com.android.internal.telephony.DataConnectionTracker */ From d4f3586c93cd9c29056e95cd79f3cb19ac456f3b Mon Sep 17 00:00:00 2001 From: Marco Nelissen Date: Sun, 27 Sep 2009 15:00:26 -0700 Subject: [PATCH 15/27] Check that playlist entries refer to a row in the audio table. --- media/java/android/media/MediaScanner.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/media/java/android/media/MediaScanner.java b/media/java/android/media/MediaScanner.java index 21ad82badb692..3a3ae5f208bbf 100644 --- a/media/java/android/media/MediaScanner.java +++ b/media/java/android/media/MediaScanner.java @@ -1273,7 +1273,8 @@ public class MediaScanner } } - if (bestMatch == null) { + // if the match is not for an audio file, bail out + if (bestMatch == null || ! mAudioUri.equals(bestMatch.mTableUri)) { return false; } From a253f16cf8e70e0dcb0bcd6338441c83c3e44c3a Mon Sep 17 00:00:00 2001 From: Christopher Tate Date: Sun, 27 Sep 2009 15:16:44 -0700 Subject: [PATCH 16/27] Don't forget to clear "backup in progress" state when finishing a pass If a backup pass had been skipped (either because the transport was unavailable or -- in a common case! -- because there was simply no work pending when the periodic backup check fired), we were forgetting to reset the "backup currently in progress" flag. Once we'd done that, the device would *NEVER* perform a backup until it was rebooted, since it would forever think that there was one currently in operation that must not be interfered with. Change-Id: I0d6d7375dc6de99b599222a449934e70fe13ebb9 --- .../java/com/android/server/BackupManagerService.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/services/java/com/android/server/BackupManagerService.java b/services/java/com/android/server/BackupManagerService.java index cb917db9e88d3..15290c182a9e7 100644 --- a/services/java/com/android/server/BackupManagerService.java +++ b/services/java/com/android/server/BackupManagerService.java @@ -637,6 +637,9 @@ class BackupManagerService extends IBackupManager.Stub { IBackupTransport transport = getTransport(mCurrentTransport); if (transport == null) { Log.v(TAG, "Backup requested but no transport available"); + synchronized (mQueueLock) { + mBackupOrRestoreInProgress = false; + } mWakelock.release(); break; } @@ -671,6 +674,9 @@ class BackupManagerService extends IBackupManager.Stub { (new PerformBackupThread(transport, queue, oldJournal)).start(); } else { Log.v(TAG, "Backup requested but nothing pending"); + synchronized (mQueueLock) { + mBackupOrRestoreInProgress = false; + } mWakelock.release(); } } @@ -1686,6 +1692,9 @@ class BackupManagerService extends IBackupManager.Stub { } // Last but not least, release the cpu + synchronized (mQueueLock) { + mBackupOrRestoreInProgress = false; + } mWakelock.release(); } } From f582a69dd2ed556d48a4c158b6560c08e44386fd Mon Sep 17 00:00:00 2001 From: Christopher Tate Date: Sun, 27 Sep 2009 16:36:14 -0700 Subject: [PATCH 17/27] Don't back up / restore "allow apps from unknown sources" We no longer back up the state of the "Allow the installation of applications from unknown sources" setting, nor do we set that based on restore data even if it is present. Change-Id: Ida276874616f1ff82807d642b0b733fcab339529 --- core/java/android/provider/Settings.java | 1 - 1 file changed, 1 deletion(-) diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index 2b6313db6ec27..1cd4506d8092e 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -2405,7 +2405,6 @@ public final class Settings { public static final String[] SETTINGS_TO_BACKUP = { ADB_ENABLED, ALLOW_MOCK_LOCATION, - INSTALL_NON_MARKET_APPS, PARENTAL_CONTROL_ENABLED, PARENTAL_CONTROL_REDIRECT_URL, USB_MASS_STORAGE_ENABLED, From 119376ed49ff118a59b955b66b09ad57ce54587d Mon Sep 17 00:00:00 2001 From: Doug Zongker Date: Sun, 27 Sep 2009 17:00:13 -0700 Subject: [PATCH 18/27] fix "pacakge" typo in error log message --- libs/utils/ResourceTypes.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libs/utils/ResourceTypes.cpp b/libs/utils/ResourceTypes.cpp index a5a8cc953e61c..872b2bc70f556 100644 --- a/libs/utils/ResourceTypes.cpp +++ b/libs/utils/ResourceTypes.cpp @@ -1743,7 +1743,7 @@ bool ResTable::getResourceName(uint32_t resID, resource_name* outName) const if (Res_GETPACKAGE(resID)+1 == 0) { LOGW("No package identifier when getting name for resource number 0x%08x", resID); } else { - LOGW("Resources don't contain pacakge for resource number 0x%08x", resID); + LOGW("Resources don't contain package for resource number 0x%08x", resID); } return false; } @@ -1793,7 +1793,7 @@ ssize_t ResTable::getResource(uint32_t resID, Res_value* outValue, bool mayBeBag if (Res_GETPACKAGE(resID)+1 == 0) { LOGW("No package identifier when getting name for resource number 0x%08x", resID); } else { - LOGW("Resources don't contain pacakge for resource number 0x%08x", resID); + LOGW("Resources don't contain package for resource number 0x%08x", resID); } return BAD_INDEX; } From aef405d82931a08a7683cf0f58b5e74dbe268d45 Mon Sep 17 00:00:00 2001 From: Dianne Hackborn Date: Sun, 27 Sep 2009 17:05:46 -0700 Subject: [PATCH 19/27] Allow wallpaper picker to work. Change-Id: I379f25e0e8e372d72c0a89e71ccd584a5dbb3648 --- core/res/AndroidManifest.xml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml index 9cf532477e041..60a2ecb17d254 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml @@ -1123,10 +1123,11 @@ android:protectionLevel="signature" /> + @hide XXX Change to signature once the picker is moved to its + own apk as Ghod Intended. --> + android:protectionLevel="signatureOrSystem" /> Date: Sun, 27 Sep 2009 13:19:36 -0700 Subject: [PATCH 20/27] Add documentation about flash and change video-light to torch. --- api/current.xml | 4 ++-- core/java/android/hardware/Camera.java | 15 ++++++++++----- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/api/current.xml b/api/current.xml index b430e2cc41581..931b0d8b7c613 100644 --- a/api/current.xml +++ b/api/current.xml @@ -68541,11 +68541,11 @@ visibility="public" > -<uses-feature> * manifest element.

+ *

If the current flash mode is not + * {@link android.hardware.Camera.Parameters#FLASH_MODE_OFF}, flash may be + * fired during auto-focus depending on the driver.

* * @param cb the callback to run */ @@ -637,12 +640,13 @@ public class Camera { */ public static final String FLASH_MODE_OFF = "off"; /** - * Flash will be fired automatically when required. The timing is - * decided by camera driver. + * Flash will be fired automatically when required. The flash may be fired + * during preview, auto-focus, or snapshot depending on the driver. */ public static final String FLASH_MODE_AUTO = "auto"; /** - * Flash will always be fired. The timing is decided by camera driver. + * Flash will always be fired during snapshot. The flash may also be + * fired during preview or auto-focus depending on the driver. */ public static final String FLASH_MODE_ON = "on"; /** @@ -650,9 +654,10 @@ public class Camera { */ public static final String FLASH_MODE_RED_EYE = "red-eye"; /** - * Constant emission of light. This can be used for video recording. + * Constant emission of light during preview, auto-focus and snapshot. + * This can also be used for video recording. */ - public static final String FLASH_MODE_VIDEO_LIGHT = "video-light"; + public static final String FLASH_MODE_TORCH = "torch"; // Values for scene mode settings. public static final String SCENE_MODE_AUTO = "auto"; From 3c0dfbab807a459622aeade4940daddf482dec66 Mon Sep 17 00:00:00 2001 From: Jason Sams Date: Sun, 27 Sep 2009 17:50:38 -0700 Subject: [PATCH 21/27] Improve logging code to dump more detaild rs object info. Fix bug with predefined elements not being recreated for contexts after one was destroyed. Add stricter type enforcement. --- .../java/android/renderscript/Element.java | 315 ++++++++++-------- .../android/renderscript/ProgramVertex.java | 2 +- .../android/renderscript/RenderScript.java | 27 +- .../java/android/renderscript/SimpleMesh.java | 2 +- graphics/java/android/renderscript/Type.java | 7 + .../Film/src/com/android/film/FilmRS.java | 10 +- .../Rollo/src/com/android/rollo/RolloRS.java | 12 +- libs/rs/rsAllocation.cpp | 1 + libs/rs/rsComponent.cpp | 5 + libs/rs/rsComponent.h | 1 + libs/rs/rsElement.cpp | 18 + libs/rs/rsElement.h | 3 + libs/rs/rsObjectBase.cpp | 6 +- libs/rs/rsObjectBase.h | 2 +- libs/rs/rsType.cpp | 10 + libs/rs/rsType.h | 1 + 16 files changed, 250 insertions(+), 172 deletions(-) diff --git a/graphics/java/android/renderscript/Element.java b/graphics/java/android/renderscript/Element.java index 0a586c4d5f7b2..73d82661edb3e 100644 --- a/graphics/java/android/renderscript/Element.java +++ b/graphics/java/android/renderscript/Element.java @@ -70,148 +70,169 @@ public class Element extends BaseObj { } } - public static final Element USER_U8 = new Element(); - public static final Element USER_I8 = new Element(); - public static final Element USER_U16 = new Element(); - public static final Element USER_I16 = new Element(); - public static final Element USER_U32 = new Element(); - public static final Element USER_I32 = new Element(); - public static final Element USER_FLOAT = new Element(); - - public static final Element A_8 = new Element(); - public static final Element RGB_565 = new Element(); - public static final Element RGB_888 = new Element(); - public static final Element RGBA_5551 = new Element(); - public static final Element RGBA_4444 = new Element(); - public static final Element RGBA_8888 = new Element(); - - public static final Element INDEX_16 = new Element(); - public static final Element XY_F32 = new Element(); - public static final Element XYZ_F32 = new Element(); - public static final Element ST_XY_F32 = new Element(); - public static final Element ST_XYZ_F32 = new Element(); - public static final Element NORM_XYZ_F32 = new Element(); - public static final Element NORM_ST_XYZ_F32 = new Element(); - - static void initPredefined(RenderScript rs) { - USER_U8.mEntries = new Entry[1]; - USER_U8.mEntries[0] = new Entry(DataType.UNSIGNED, DataKind.USER, false, 8, null); - USER_U8.init(rs); - - USER_I8.mEntries = new Entry[1]; - USER_I8.mEntries[0] = new Entry(DataType.SIGNED, DataKind.USER, false, 8, null); - USER_I8.init(rs); - - USER_U16.mEntries = new Entry[1]; - USER_U16.mEntries[0] = new Entry(DataType.UNSIGNED, DataKind.USER, false, 16, null); - USER_U16.init(rs); - - USER_I16.mEntries = new Entry[1]; - USER_I16.mEntries[0] = new Entry(DataType.SIGNED, DataKind.USER, false, 16, null); - USER_I16.init(rs); - - USER_U32.mEntries = new Entry[1]; - USER_U32.mEntries[0] = new Entry(DataType.UNSIGNED, DataKind.USER, false, 32, null); - USER_U32.init(rs); - - USER_I32.mEntries = new Entry[1]; - USER_I32.mEntries[0] = new Entry(DataType.SIGNED, DataKind.USER, false, 32, null); - USER_I32.init(rs); - - USER_FLOAT.mEntries = new Entry[1]; - USER_FLOAT.mEntries[0] = new Entry(DataType.FLOAT, DataKind.USER, false, 32, null); - USER_FLOAT.init(rs); - - A_8.mEntries = new Entry[1]; - A_8.mEntries[0] = new Entry(DataType.UNSIGNED, DataKind.ALPHA, true, 8, "a"); - A_8.init(rs); - - RGB_565.mEntries = new Entry[3]; - RGB_565.mEntries[0] = new Entry(DataType.UNSIGNED, DataKind.RED, true, 5, "r"); - RGB_565.mEntries[1] = new Entry(DataType.UNSIGNED, DataKind.GREEN, true, 6, "g"); - RGB_565.mEntries[2] = new Entry(DataType.UNSIGNED, DataKind.BLUE, true, 5, "b"); - RGB_565.init(rs); - - RGB_888.mEntries = new Entry[3]; - RGB_888.mEntries[0] = new Entry(DataType.UNSIGNED, DataKind.RED, true, 8, "r"); - RGB_888.mEntries[1] = new Entry(DataType.UNSIGNED, DataKind.GREEN, true, 8, "g"); - RGB_888.mEntries[2] = new Entry(DataType.UNSIGNED, DataKind.BLUE, true, 8, "b"); - RGB_888.init(rs); - - RGBA_5551.mEntries = new Entry[4]; - RGBA_5551.mEntries[0] = new Entry(DataType.UNSIGNED, DataKind.RED, true, 5, "r"); - RGBA_5551.mEntries[1] = new Entry(DataType.UNSIGNED, DataKind.GREEN, true, 5, "g"); - RGBA_5551.mEntries[2] = new Entry(DataType.UNSIGNED, DataKind.BLUE, true, 5, "b"); - RGBA_5551.mEntries[3] = new Entry(DataType.UNSIGNED, DataKind.ALPHA, true, 1, "a"); - RGBA_5551.init(rs); - - RGBA_4444.mEntries = new Entry[4]; - RGBA_4444.mEntries[0] = new Entry(DataType.UNSIGNED, DataKind.RED, true, 4, "r"); - RGBA_4444.mEntries[1] = new Entry(DataType.UNSIGNED, DataKind.GREEN, true, 4, "g"); - RGBA_4444.mEntries[2] = new Entry(DataType.UNSIGNED, DataKind.BLUE, true, 4, "b"); - RGBA_4444.mEntries[3] = new Entry(DataType.UNSIGNED, DataKind.ALPHA, true, 4, "a"); - RGBA_4444.init(rs); - - RGBA_8888.mEntries = new Entry[4]; - RGBA_8888.mEntries[0] = new Entry(DataType.UNSIGNED, DataKind.RED, true, 8, "r"); - RGBA_8888.mEntries[1] = new Entry(DataType.UNSIGNED, DataKind.GREEN, true, 8, "g"); - RGBA_8888.mEntries[2] = new Entry(DataType.UNSIGNED, DataKind.BLUE, true, 8, "b"); - RGBA_8888.mEntries[3] = new Entry(DataType.UNSIGNED, DataKind.ALPHA, true, 8, "a"); - RGBA_8888.init(rs); - - INDEX_16.mEntries = new Entry[1]; - INDEX_16.mEntries[0] = new Entry(DataType.UNSIGNED, DataKind.INDEX, false, 16, "index"); - INDEX_16.init(rs); - - XY_F32.mEntries = new Entry[2]; - XY_F32.mEntries[0] = new Entry(DataType.FLOAT, DataKind.X, false, 32, "x"); - XY_F32.mEntries[1] = new Entry(DataType.FLOAT, DataKind.Y, false, 32, "y"); - XY_F32.init(rs); - - XYZ_F32.mEntries = new Entry[3]; - XYZ_F32.mEntries[0] = new Entry(DataType.FLOAT, DataKind.X, false, 32, "x"); - XYZ_F32.mEntries[1] = new Entry(DataType.FLOAT, DataKind.Y, false, 32, "y"); - XYZ_F32.mEntries[2] = new Entry(DataType.FLOAT, DataKind.Z, false, 32, "z"); - XYZ_F32.init(rs); - - ST_XY_F32.mEntries = new Entry[4]; - ST_XY_F32.mEntries[0] = new Entry(DataType.FLOAT, DataKind.S, false, 32, "s"); - ST_XY_F32.mEntries[1] = new Entry(DataType.FLOAT, DataKind.T, false, 32, "t"); - ST_XY_F32.mEntries[2] = new Entry(DataType.FLOAT, DataKind.X, false, 32, "x"); - ST_XY_F32.mEntries[3] = new Entry(DataType.FLOAT, DataKind.Y, false, 32, "y"); - ST_XY_F32.init(rs); - - ST_XYZ_F32.mEntries = new Entry[5]; - ST_XYZ_F32.mEntries[0] = new Entry(DataType.FLOAT, DataKind.S, false, 32, "s"); - ST_XYZ_F32.mEntries[1] = new Entry(DataType.FLOAT, DataKind.T, false, 32, "t"); - ST_XYZ_F32.mEntries[2] = new Entry(DataType.FLOAT, DataKind.X, false, 32, "x"); - ST_XYZ_F32.mEntries[3] = new Entry(DataType.FLOAT, DataKind.Y, false, 32, "y"); - ST_XYZ_F32.mEntries[4] = new Entry(DataType.FLOAT, DataKind.Z, false, 32, "z"); - ST_XYZ_F32.init(rs); - - NORM_XYZ_F32.mEntries = new Entry[6]; - NORM_XYZ_F32.mEntries[0] = new Entry(DataType.FLOAT, DataKind.NX, false, 32, "nx"); - NORM_XYZ_F32.mEntries[1] = new Entry(DataType.FLOAT, DataKind.NY, false, 32, "ny"); - NORM_XYZ_F32.mEntries[2] = new Entry(DataType.FLOAT, DataKind.NZ, false, 32, "nz"); - NORM_XYZ_F32.mEntries[3] = new Entry(DataType.FLOAT, DataKind.X, false, 32, "x"); - NORM_XYZ_F32.mEntries[4] = new Entry(DataType.FLOAT, DataKind.Y, false, 32, "y"); - NORM_XYZ_F32.mEntries[5] = new Entry(DataType.FLOAT, DataKind.Z, false, 32, "z"); - NORM_XYZ_F32.init(rs); - - NORM_ST_XYZ_F32.mEntries = new Entry[8]; - NORM_ST_XYZ_F32.mEntries[0] = new Entry(DataType.FLOAT, DataKind.NX, false, 32, "nx"); - NORM_ST_XYZ_F32.mEntries[1] = new Entry(DataType.FLOAT, DataKind.NY, false, 32, "ny"); - NORM_ST_XYZ_F32.mEntries[2] = new Entry(DataType.FLOAT, DataKind.NZ, false, 32, "nz"); - NORM_ST_XYZ_F32.mEntries[3] = new Entry(DataType.FLOAT, DataKind.S, false, 32, "s"); - NORM_ST_XYZ_F32.mEntries[4] = new Entry(DataType.FLOAT, DataKind.T, false, 32, "t"); - NORM_ST_XYZ_F32.mEntries[5] = new Entry(DataType.FLOAT, DataKind.X, false, 32, "x"); - NORM_ST_XYZ_F32.mEntries[6] = new Entry(DataType.FLOAT, DataKind.Y, false, 32, "y"); - NORM_ST_XYZ_F32.mEntries[7] = new Entry(DataType.FLOAT, DataKind.Z, false, 32, "z"); - NORM_ST_XYZ_F32.init(rs); - - rs.nInitElements(A_8.mID, RGBA_4444.mID, RGBA_8888.mID, RGB_565.mID); + public static Element USER_U8(RenderScript rs) { + if(rs.mElement_USER_U8 == null) { + rs.mElement_USER_U8 = new Element(rs, 1); + rs.mElement_USER_U8.mEntries[0] = new Entry(DataType.UNSIGNED, DataKind.USER, false, 8, null); + rs.mElement_USER_U8.init(); + } + return rs.mElement_USER_U8; } + public static Element USER_I8(RenderScript rs) { + if(rs.mElement_USER_I8 == null) { + rs.mElement_USER_I8 = new Element(rs, 1); + rs.mElement_USER_I8.mEntries[0] = new Entry(DataType.SIGNED, DataKind.USER, false, 8, null); + rs.mElement_USER_I8.init(); + } + return rs.mElement_USER_I8; + } + + public static Element USER_U16(RenderScript rs) { + if(rs.mElement_USER_U16 == null) { + rs.mElement_USER_U16 = new Element(rs, 1); + rs.mElement_USER_U16.mEntries[0] = new Entry(DataType.UNSIGNED, DataKind.USER, false, 16, null); + rs.mElement_USER_U16.init(); + } + return rs.mElement_USER_U16; + } + + public static Element USER_I16(RenderScript rs) { + if(rs.mElement_USER_I16 == null) { + rs.mElement_USER_I16 = new Element(rs, 1); + rs.mElement_USER_I16.mEntries[0] = new Entry(DataType.SIGNED, DataKind.USER, false, 16, null); + rs.mElement_USER_I16.init(); + } + return rs.mElement_USER_I16; + } + + public static Element USER_U32(RenderScript rs) { + if(rs.mElement_USER_U32 == null) { + rs.mElement_USER_U32 = new Element(rs, 1); + rs.mElement_USER_U32.mEntries[0] = new Entry(DataType.UNSIGNED, DataKind.USER, false, 32, null); + rs.mElement_USER_U32.init(); + } + return rs.mElement_USER_U32; + } + + public static Element USER_I32(RenderScript rs) { + if(rs.mElement_USER_I32 == null) { + rs.mElement_USER_I32 = new Element(rs, 1); + rs.mElement_USER_I32.mEntries[0] = new Entry(DataType.SIGNED, DataKind.USER, false, 32, null); + rs.mElement_USER_I32.init(); + } + return rs.mElement_USER_I32; + } + + public static Element USER_F32(RenderScript rs) { + if(rs.mElement_USER_FLOAT == null) { + rs.mElement_USER_FLOAT = new Element(rs, 1); + rs.mElement_USER_FLOAT.mEntries[0] = new Entry(DataType.FLOAT, DataKind.USER, false, 32, null); + rs.mElement_USER_FLOAT.init(); + } + return rs.mElement_USER_FLOAT; + } + + public static Element A_8(RenderScript rs) { + if(rs.mElement_A_8 == null) { + rs.mElement_A_8 = new Element(rs, 1); + rs.mElement_A_8.mEntries[0] = new Entry(DataType.UNSIGNED, DataKind.ALPHA, true, 8, "a"); + rs.mElement_A_8.init(); + } + return rs.mElement_A_8; + } + + public static Element RGB_565(RenderScript rs) { + if(rs.mElement_RGB_565 == null) { + rs.mElement_RGB_565 = new Element(rs, 3); + rs.mElement_RGB_565.mEntries[0] = new Entry(DataType.UNSIGNED, DataKind.RED, true, 5, "r"); + rs.mElement_RGB_565.mEntries[1] = new Entry(DataType.UNSIGNED, DataKind.GREEN, true, 6, "g"); + rs.mElement_RGB_565.mEntries[2] = new Entry(DataType.UNSIGNED, DataKind.BLUE, true, 5, "b"); + rs.mElement_RGB_565.init(); + } + return rs.mElement_RGB_565; + } + + public static Element RGB_888(RenderScript rs) { + if(rs.mElement_RGB_888 == null) { + rs.mElement_RGB_888 = new Element(rs, 3); + rs.mElement_RGB_888.mEntries[0] = new Entry(DataType.UNSIGNED, DataKind.RED, true, 8, "r"); + rs.mElement_RGB_888.mEntries[1] = new Entry(DataType.UNSIGNED, DataKind.GREEN, true, 8, "g"); + rs.mElement_RGB_888.mEntries[2] = new Entry(DataType.UNSIGNED, DataKind.BLUE, true, 8, "b"); + rs.mElement_RGB_888.init(); + } + return rs.mElement_RGB_888; + } + + public static Element RGBA_5551(RenderScript rs) { + if(rs.mElement_RGBA_5551 == null) { + rs.mElement_RGBA_5551 = new Element(rs, 4); + rs.mElement_RGBA_5551.mEntries[0] = new Entry(DataType.UNSIGNED, DataKind.RED, true, 5, "r"); + rs.mElement_RGBA_5551.mEntries[1] = new Entry(DataType.UNSIGNED, DataKind.GREEN, true, 5, "g"); + rs.mElement_RGBA_5551.mEntries[2] = new Entry(DataType.UNSIGNED, DataKind.BLUE, true, 5, "b"); + rs.mElement_RGBA_5551.mEntries[3] = new Entry(DataType.UNSIGNED, DataKind.ALPHA, true, 1, "a"); + rs.mElement_RGBA_5551.init(); + } + return rs.mElement_RGBA_5551; + } + + public static Element RGBA_4444(RenderScript rs) { + if(rs.mElement_RGBA_4444 == null) { + rs.mElement_RGBA_4444 = new Element(rs, 4); + rs.mElement_RGBA_4444.mEntries[0] = new Entry(DataType.UNSIGNED, DataKind.RED, true, 4, "r"); + rs.mElement_RGBA_4444.mEntries[1] = new Entry(DataType.UNSIGNED, DataKind.GREEN, true, 4, "g"); + rs.mElement_RGBA_4444.mEntries[2] = new Entry(DataType.UNSIGNED, DataKind.BLUE, true, 4, "b"); + rs.mElement_RGBA_4444.mEntries[3] = new Entry(DataType.UNSIGNED, DataKind.ALPHA, true, 4, "a"); + rs.mElement_RGBA_4444.init(); + } + return rs.mElement_RGBA_4444; + } + + public static Element RGBA_8888(RenderScript rs) { + if(rs.mElement_RGBA_8888 == null) { + rs.mElement_RGBA_8888 = new Element(rs, 4); + rs.mElement_RGBA_8888.mEntries[0] = new Entry(DataType.UNSIGNED, DataKind.RED, true, 8, "r"); + rs.mElement_RGBA_8888.mEntries[1] = new Entry(DataType.UNSIGNED, DataKind.GREEN, true, 8, "g"); + rs.mElement_RGBA_8888.mEntries[2] = new Entry(DataType.UNSIGNED, DataKind.BLUE, true, 8, "b"); + rs.mElement_RGBA_8888.mEntries[3] = new Entry(DataType.UNSIGNED, DataKind.ALPHA, true, 8, "a"); + rs.mElement_RGBA_8888.init(); + } + return rs.mElement_RGBA_8888; + } + + public static Element INDEX_16(RenderScript rs) { + if(rs.mElement_INDEX_16 == null) { + rs.mElement_INDEX_16 = new Element(rs, 1); + rs.mElement_INDEX_16.mEntries[0] = new Entry(DataType.UNSIGNED, DataKind.INDEX, false, 16, "index"); + rs.mElement_INDEX_16.init(); + } + return rs.mElement_INDEX_16; + } + + public static Element XY_F32(RenderScript rs) { + if(rs.mElement_XY_F32 == null) { + rs.mElement_XY_F32 = new Element(rs, 2); + rs.mElement_XY_F32.mEntries[0] = new Entry(DataType.UNSIGNED, DataKind.X, false, 32, "x"); + rs.mElement_XY_F32.mEntries[1] = new Entry(DataType.UNSIGNED, DataKind.Y, false, 32, "y"); + rs.mElement_XY_F32.init(); + } + return rs.mElement_XY_F32; + } + + public static Element XYZ_F32(RenderScript rs) { + if(rs.mElement_XYZ_F32 == null) { + rs.mElement_XYZ_F32 = new Element(rs, 3); + rs.mElement_XYZ_F32.mEntries[0] = new Entry(DataType.UNSIGNED, DataKind.X, false, 32, "x"); + rs.mElement_XYZ_F32.mEntries[1] = new Entry(DataType.UNSIGNED, DataKind.Y, false, 32, "y"); + rs.mElement_XYZ_F32.mEntries[2] = new Entry(DataType.UNSIGNED, DataKind.Z, false, 32, "z"); + rs.mElement_XYZ_F32.init(); + } + return rs.mElement_XYZ_F32; + } + + static void initPredefined(RenderScript rs) { + rs.nInitElements(A_8(rs).mID, RGBA_4444(rs).mID, RGBA_8888(rs).mID, RGB_565(rs).mID); + } public enum DataType { FLOAT (0), @@ -252,10 +273,10 @@ public class Element extends BaseObj { } } - Element() { - super(null); - mID = 0; + Element(RenderScript rs, int count) { + super(rs); mSize = 0; + mEntries = new Entry[count]; } public void destroy() throws IllegalStateException { @@ -300,8 +321,7 @@ public class Element extends BaseObj { e.mSize = (bits + 7) >> 3; } - void init(RenderScript rs) { - mRS = rs; + void init() { internalCreate(mRS, this); } @@ -463,10 +483,9 @@ public class Element extends BaseObj { } public Element create() { - Element e = new Element(); - e.mEntries = new Entry[mEntryCount]; + Element e = new Element(mRS, mEntryCount); java.lang.System.arraycopy(mEntries, 0, e.mEntries, 0, mEntryCount); - e.init(mRS); + e.init(); return e; } } diff --git a/graphics/java/android/renderscript/ProgramVertex.java b/graphics/java/android/renderscript/ProgramVertex.java index 2a11bfb312684..ddb23ac967dcb 100644 --- a/graphics/java/android/renderscript/ProgramVertex.java +++ b/graphics/java/android/renderscript/ProgramVertex.java @@ -110,7 +110,7 @@ public class ProgramVertex extends BaseObj { mProjection = new Matrix(); mTexture = new Matrix(); - mAlloc = Allocation.createSized(rs, Element.USER_FLOAT, 48); + mAlloc = Allocation.createSized(rs, Element.USER_F32(rs), 48); mAlloc.subData1D(MODELVIEW_OFFSET, 16, mModel.mMat); mAlloc.subData1D(PROJECTION_OFFSET, 16, mProjection.mMat); mAlloc.subData1D(TEXTURE_OFFSET, 16, mTexture.mMat); diff --git a/graphics/java/android/renderscript/RenderScript.java b/graphics/java/android/renderscript/RenderScript.java index ed616914af3b1..6b0b69610d9b7 100644 --- a/graphics/java/android/renderscript/RenderScript.java +++ b/graphics/java/android/renderscript/RenderScript.java @@ -191,7 +191,25 @@ public class RenderScript { @SuppressWarnings({"FieldCanBeLocal"}) private Surface mSurface; - private static boolean mElementsInitialized = false; + + Element mElement_USER_U8; + Element mElement_USER_I8; + Element mElement_USER_U16; + Element mElement_USER_I16; + Element mElement_USER_U32; + Element mElement_USER_I32; + Element mElement_USER_FLOAT; + + Element mElement_A_8; + Element mElement_RGB_565; + Element mElement_RGB_888; + Element mElement_RGBA_5551; + Element mElement_RGBA_4444; + Element mElement_RGBA_8888; + + Element mElement_INDEX_16; + Element mElement_XY_F32; + Element mElement_XYZ_F32; /////////////////////////////////////////////////////////////////////////////////// // @@ -203,12 +221,7 @@ public class RenderScript { nDeviceSetConfig(mDev, 0, 1); } mContext = nContextCreate(mDev, mSurface, 0, useDepth); - - // TODO: This should be protected by a lock - if(!mElementsInitialized) { - Element.initPredefined(this); - mElementsInitialized = true; - } + Element.initPredefined(this); } public void destroy() { diff --git a/graphics/java/android/renderscript/SimpleMesh.java b/graphics/java/android/renderscript/SimpleMesh.java index dc74c61fa14c8..987ec44432127 100644 --- a/graphics/java/android/renderscript/SimpleMesh.java +++ b/graphics/java/android/renderscript/SimpleMesh.java @@ -296,7 +296,7 @@ public class SimpleMesh extends BaseObj { Builder smb = new Builder(mRS); smb.addVertexType(mElement, mVtxCount / floatCount); - smb.setIndexType(Element.INDEX_16, mIndexCount); + smb.setIndexType(Element.INDEX_16(mRS), mIndexCount); smb.setPrimitive(Primitive.TRIANGLE); SimpleMesh sm = smb.create(); diff --git a/graphics/java/android/renderscript/Type.java b/graphics/java/android/renderscript/Type.java index df60990c59456..ad4cf6be5381f 100644 --- a/graphics/java/android/renderscript/Type.java +++ b/graphics/java/android/renderscript/Type.java @@ -162,12 +162,19 @@ public class Type extends BaseObj { } public Builder(RenderScript rs, Element e) { + if(e.mID == 0) { + throw new IllegalArgumentException("Invalid element."); + } + mRS = rs; mEntries = new Entry[4]; mElement = e; } public void add(Dimension d, int value) { + if(value < 1) { + throw new IllegalArgumentException("Values of less than 1 for Dimensions are not valid."); + } if(mEntries.length >= mEntryCount) { Entry[] en = new Entry[mEntryCount + 8]; System.arraycopy(mEntries, 0, en, 0, mEntries.length); diff --git a/libs/rs/java/Film/src/com/android/film/FilmRS.java b/libs/rs/java/Film/src/com/android/film/FilmRS.java index cee827b32c819..b5b6723be1799 100644 --- a/libs/rs/java/Film/src/com/android/film/FilmRS.java +++ b/libs/rs/java/Film/src/com/android/film/FilmRS.java @@ -152,9 +152,9 @@ public class FilmRS { mBufferIDs = new int[13]; mImages = new Allocation[13]; mAllocIDs = Allocation.createSized(mRS, - Element.USER_FLOAT, mBufferIDs.length); + Element.USER_F32(mRS), mBufferIDs.length); - Element ie = Element.RGB_565; + Element ie = Element.RGB_565(mRS); mImages[0] = Allocation.createFromBitmapResourceBoxed(mRS, mRes, R.drawable.p01, ie, true); mImages[1] = Allocation.createFromBitmapResourceBoxed(mRS, mRes, R.drawable.p02, ie, true); mImages[2] = Allocation.createFromBitmapResourceBoxed(mRS, mRes, R.drawable.p03, ie, true); @@ -195,7 +195,7 @@ public class FilmRS { { mBufferState = new int[10]; mAllocState = Allocation.createSized(mRS, - Element.USER_FLOAT, mBufferState.length); + Element.USER_F32(mRS), mBufferState.length); mBufferState[STATE_LAST_FOCUS] = -1; mAllocState.data(mBufferState); } @@ -238,12 +238,12 @@ public class FilmRS { mAllocOffsets = Allocation.createSized(mRS, - Element.USER_I32, mFSM.mTriangleOffsets.length); + Element.USER_I32(mRS), mFSM.mTriangleOffsets.length); mAllocOffsets.data(mFSM.mTriangleOffsets); mScriptStrip.bindAllocation(mAllocOffsets, 4); mAllocOffsetsTex = Allocation.createSized(mRS, - Element.USER_FLOAT, mFSM.mTriangleOffsetsTex.length); + Element.USER_F32(mRS), mFSM.mTriangleOffsetsTex.length); mAllocOffsetsTex.data(mFSM.mTriangleOffsetsTex); mScriptStrip.bindAllocation(mAllocOffsetsTex, 5); diff --git a/libs/rs/java/Rollo/src/com/android/rollo/RolloRS.java b/libs/rs/java/Rollo/src/com/android/rollo/RolloRS.java index ba74b587f5410..ff89bc3e5ecbe 100644 --- a/libs/rs/java/Rollo/src/com/android/rollo/RolloRS.java +++ b/libs/rs/java/Rollo/src/com/android/rollo/RolloRS.java @@ -182,7 +182,7 @@ public class RolloRS { mAllocScratchBuf = new int[32]; mAllocScratch = Allocation.createSized(mRS, - Element.USER_I32, mAllocScratchBuf.length); + Element.USER_I32(mRS), mAllocScratchBuf.length); mAllocScratch.data(mAllocScratchBuf); Log.e("rs", "Done loading named"); @@ -193,14 +193,14 @@ public class RolloRS { mIcons = new Allocation[29]; mAllocIconIDBuf = new int[mIcons.length]; mAllocIconID = Allocation.createSized(mRS, - Element.USER_I32, mAllocIconIDBuf.length); + Element.USER_I32(mRS), mAllocIconIDBuf.length); mLabels = new Allocation[29]; mAllocLabelIDBuf = new int[mLabels.length]; mAllocLabelID = Allocation.createSized(mRS, - Element.USER_I32, mLabels.length); + Element.USER_I32(mRS), mLabels.length); - Element ie8888 = Element.RGBA_8888; + Element ie8888 = Element.RGBA_8888(mRS); mIcons[0] = Allocation.createFromBitmapResource(mRS, mRes, R.raw.browser, ie8888, true); mIcons[1] = Allocation.createFromBitmapResource(mRS, mRes, R.raw.market, ie8888, true); @@ -284,7 +284,7 @@ public class RolloRS { p.setTextSize(20); p.setColor(0xffffffff); c.drawText(t, 2, 26, p); - return Allocation.createFromBitmap(mRS, b, Element.RGBA_8888, true); + return Allocation.createFromBitmap(mRS, b, Element.RGBA_8888(mRS), true); } @@ -298,7 +298,7 @@ public class RolloRS { mAllocStateBuf = new int[] {0, 0, 0, 8, 0, 0, -1, 0, mAllocIconIDBuf.length, 0, 0}; mAllocState = Allocation.createSized(mRS, - Element.USER_I32, mAllocStateBuf.length); + Element.USER_I32(mRS), mAllocStateBuf.length); mScript.bindAllocation(mAllocState, 0); mScript.bindAllocation(mAllocIconID, 1); mScript.bindAllocation(mAllocScratch, 2); diff --git a/libs/rs/rsAllocation.cpp b/libs/rs/rsAllocation.cpp index 8ee6e5a453247..8ac9c26a2f37f 100644 --- a/libs/rs/rsAllocation.cpp +++ b/libs/rs/rsAllocation.cpp @@ -141,6 +141,7 @@ void Allocation::subData(uint32_t xoff, uint32_t count, const void *data, uint32 if (size != sizeBytes) { LOGE("Allocation::subData called with mismatched size expected %i, got %i", size, sizeBytes); + mType->dumpLOGV("type info"); return; } memcpy(ptr, data, size); diff --git a/libs/rs/rsComponent.cpp b/libs/rs/rsComponent.cpp index 42e2e4fbf2299..de074c8ce664e 100644 --- a/libs/rs/rsComponent.cpp +++ b/libs/rs/rsComponent.cpp @@ -102,4 +102,9 @@ uint32_t Component::getGLType() const return 0; } +void Component::dumpLOGV(const char *prefix) const +{ + ObjectBase::dumpLOGV(prefix); + LOGV("%s component: %i %i %i %i", prefix, mType, mKind, mIsNormalized, mBits); +} diff --git a/libs/rs/rsComponent.h b/libs/rs/rsComponent.h index 290cd57e3ab33..5366cc429e96b 100644 --- a/libs/rs/rsComponent.h +++ b/libs/rs/rsComponent.h @@ -56,6 +56,7 @@ public: const char * getCType() const; const char * getComponentName() const {return mName.string();} + virtual void dumpLOGV(const char *prefix) const; protected: diff --git a/libs/rs/rsElement.cpp b/libs/rs/rsElement.cpp index a00fb52171285..67e4f1401066b 100644 --- a/libs/rs/rsElement.cpp +++ b/libs/rs/rsElement.cpp @@ -55,6 +55,8 @@ void Element::setComponent(uint32_t idx, Component *c) rsAssert(!mComponents[idx].get()); rsAssert(idx < mComponentCount); mComponents[idx].set(c); + +// Fixme: This should probably not be here c->incUserRef(); } @@ -179,6 +181,17 @@ uint32_t Element::getGLFormat() const } +void Element::dumpLOGV(const char *prefix) const +{ + ObjectBase::dumpLOGV(prefix); + LOGV("%s Element: components %i, size %i", prefix, mComponentCount, getSizeBytes()); + for (uint32_t ct = 0; ct < mComponentCount; ct++) { + char buf[1024]; + sprintf(buf, "%s component %i: ", prefix, ct); + mComponents[ct]->dumpLOGV(buf); + } +} + ElementState::ElementState() { } @@ -201,6 +214,9 @@ void rsi_ElementBegin(Context *rsc) void rsi_ElementAdd(Context *rsc, RsDataKind dk, RsDataType dt, bool isNormalized, size_t bits, const char *name) { ElementState * sec = &rsc->mStateElement; + + rsAssert(bits > 0); + Component *c = new Component(rsc, static_cast(dk), static_cast(dt), @@ -215,6 +231,8 @@ RsElement rsi_ElementCreate(Context *rsc) ElementState * sec = &rsc->mStateElement; Element *se = new Element(rsc, sec->mComponentBuildList.size()); + rsAssert(se->getComponentCount() > 0); + for (size_t ct = 0; ct < se->getComponentCount(); ct++) { se->setComponent(ct, sec->mComponentBuildList[ct]); } diff --git a/libs/rs/rsElement.h b/libs/rs/rsElement.h index 82da4417c9b10..b41c552d17c08 100644 --- a/libs/rs/rsElement.h +++ b/libs/rs/rsElement.h @@ -51,6 +51,9 @@ public: uint32_t getComponentCount() const {return mComponentCount;} Component * getComponent(uint32_t idx) const {return mComponents[idx].get();} + + void dumpLOGV(const char *prefix) const; + protected: // deallocate any components that are part of this element. void clear(); diff --git a/libs/rs/rsObjectBase.cpp b/libs/rs/rsObjectBase.cpp index 720e8fccc4972..0008ea47c222b 100644 --- a/libs/rs/rsObjectBase.cpp +++ b/libs/rs/rsObjectBase.cpp @@ -41,7 +41,7 @@ ObjectBase::~ObjectBase() remove(); } -void ObjectBase::dumpObj(const char *op) const +void ObjectBase::dumpLOGV(const char *op) const { if (mName) { LOGV("%s RSobj %p, name %s, refs %i,%i from %s,%i links %p,%p,%p", @@ -79,7 +79,7 @@ bool ObjectBase::checkDelete() const { if (!(mSysRefCount | mUserRefCount)) { if (mRSC && mRSC->props.mLogObjects) { - dumpObj("checkDelete"); + dumpLOGV("checkDelete"); } delete this; return true; @@ -188,7 +188,7 @@ void ObjectBase::zeroAllUserRef(Context *rsc) LOGV("Objects remaining."); o = rsc->mObjHead; while (o) { - o->dumpObj(" "); + o->dumpLOGV(" "); o = o->mNext; } } diff --git a/libs/rs/rsObjectBase.h b/libs/rs/rsObjectBase.h index ea5e37cc0eaaa..dc85ac7b21e39 100644 --- a/libs/rs/rsObjectBase.h +++ b/libs/rs/rsObjectBase.h @@ -50,7 +50,7 @@ public: static void zeroAllUserRef(Context *rsc); - void dumpObj(const char *op) const; + virtual void dumpLOGV(const char *prefix) const; protected: const char *mAllocFile; diff --git a/libs/rs/rsType.cpp b/libs/rs/rsType.cpp index 5ce9ca2341ef7..ddaa2f0e14262 100644 --- a/libs/rs/rsType.cpp +++ b/libs/rs/rsType.cpp @@ -302,6 +302,16 @@ void Type::enableGLVertexBuffer() const } +void Type::dumpLOGV(const char *prefix) const +{ + char buf[1024]; + ObjectBase::dumpLOGV(prefix); + LOGV("%s Type: x=%i y=%i z=%i mip=%i face=%i", prefix, mDimX, mDimY, mDimZ, mDimLOD, mFaces); + sprintf(buf, "%s element: ", prefix); + mElement->dumpLOGV(buf); +} + + ////////////////////////////////////////////////// // namespace android { diff --git a/libs/rs/rsType.h b/libs/rs/rsType.h index 116f1c74d6012..2c43405122ba0 100644 --- a/libs/rs/rsType.h +++ b/libs/rs/rsType.h @@ -69,6 +69,7 @@ public: void enableGLVertexBuffer() const; + void dumpLOGV(const char *prefix) const; protected: struct LOD { From c4646e654a18543be4e2f7d98f63bc4e603128e1 Mon Sep 17 00:00:00 2001 From: Mathias Agopian Date: Sun, 27 Sep 2009 18:44:09 -0700 Subject: [PATCH 22/27] Allways dump the list of allocated buffers when an allocation fails. Hopefully this will help us understand cases of failures such as [2148405] --- libs/surfaceflinger/BufferAllocator.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/libs/surfaceflinger/BufferAllocator.cpp b/libs/surfaceflinger/BufferAllocator.cpp index 19867a519a791..caf9bec767fd1 100644 --- a/libs/surfaceflinger/BufferAllocator.cpp +++ b/libs/surfaceflinger/BufferAllocator.cpp @@ -102,6 +102,10 @@ status_t BufferAllocator::alloc(uint32_t w, uint32_t h, PixelFormat format, rec.vaddr = 0; rec.size = h * stride[0] * bytesPerPixel(format); list.add(*handle, rec); + } else { + String8 s; + dump(s); + LOGD("%s", s.string()); } return err; From 879664e3e2e0169aba53d88f6c30c8b15858315d Mon Sep 17 00:00:00 2001 From: Dmitri Plotnikov Date: Sun, 27 Sep 2009 08:52:56 -0700 Subject: [PATCH 23/27] Adding columns to support attribution of status updates. Also renaming some columns to better describe their purpose. Change-Id: If6d7812f38a3cfd662a5ae2387c72c4761fdf9fa --- api/current.xml | 146 +++++++------- .../android/provider/ContactsContract.java | 182 ++++++++++-------- .../internal/widget/ContactHeaderWidget.java | 22 +-- 3 files changed, 193 insertions(+), 157 deletions(-) diff --git a/api/current.xml b/api/current.xml index 931b0d8b7c613..d8ab697f31a43 100644 --- a/api/current.xml +++ b/api/current.xml @@ -115648,82 +115648,21 @@ + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + Type: NUMBER

- */ - public static final String PRESENCE_STATUS = Presence.PRESENCE_STATUS; - - /** - * Contact presence custom status. This column is only returned if explicitly - * requested in the query projection. - *

Type: TEXT

- */ - public static final String PRESENCE_CUSTOM_STATUS = Presence.PRESENCE_CUSTOM_STATUS; - - /** - * The time when the latest presence custom status was inserted/updated. - * This column is only returned if explicitly requested in the query - * projection. - *

Type: TEXT

- * @hide TODO unhide - */ - public static final String PRESENCE_CUSTOM_STATUS_TIMESTAMP = - Presence.PRESENCE_CUSTOM_STATUS_TIMESTAMP; - - /** - * Protocol that supplied the latest status update (see {@link CommonDataKinds.Im#PROTOCOL}. - * This column is only returned if explicitly requested in the query - * projection. - *

Type: NUMBER

- * @hide TODO unhide - */ - public static final String PRESENCE_PROTOCOL = "presence_protocol"; - - /** - * Custom protocol that supplied the latest status update (see - * {@link CommonDataKinds.Im#CUSTOM_PROTOCOL}. This column is only - * returned if explicitly requested in the query projection. - *

Type: TEXT

- * @hide TODO unhide - */ - public static final String PRESENCE_CUSTOM_PROTOCOL = "presence_custom_protocol"; - /** * An indicator of whether this contact has at least one phone number. "1" if there is * at least one phone number, "0" otherwise. @@ -281,12 +239,55 @@ public final class ContactsContract { public static final String LOOKUP_KEY = "lookup"; } + private interface ContactStatusColumns { + /** + * Contact presence status. See {@link StatusUpdates} for individual status + * definitions. + *

Type: NUMBER

+ */ + public static final String CONTACT_PRESENCE = "contact_presence"; + + /** + * Contact's latest status update. + *

Type: TEXT

+ */ + public static final String CONTACT_STATUS = "contact_status"; + + /** + * The absolute time in milliseconds when the latest status was + * inserted/updated. + *

Type: NUMBER

+ */ + public static final String CONTACT_STATUS_TIMESTAMP = "contact_status_ts"; + + /** + * The package containing resources for this status: label and icon. + *

Type: NUMBER

+ */ + public static final String CONTACT_STATUS_RES_PACKAGE = "contact_status_res_package"; + + /** + * The resource ID of the label describing the source of contact + * status, e.g. "Google Talk". This resource is scoped by the + * {@link #CONTACT_STATUS_RES_PACKAGE}. + *

Type: NUMBER

+ */ + public static final String CONTACT_STATUS_LABEL = "contact_status_label"; + + /** + * The resource ID of the icon for the source of contact status. This + * resource is scoped by the {@link #CONTACT_STATUS_RES_PACKAGE}. + *

Type: NUMBER

+ */ + public static final String CONTACT_STATUS_ICON = "contact_status_icon"; + } + /** * Constants for the contacts table, which contains a record per group * of raw contacts representing the same person. */ public static class Contacts implements BaseColumns, ContactsColumns, - ContactOptionsColumns { + ContactOptionsColumns, ContactStatusColumns { /** * This utility class cannot be instantiated */ @@ -649,6 +650,47 @@ public final class ContactsContract { } } + private interface StatusColumns extends Im.CommonPresenceColumns { + /** + * Contact's latest presence level, see {@link Im.CommonPresenceColumns} for + * specific definitions. + *

Type: INTEGER (one of the values below)

+ */ + public static final String PRESENCE = PRESENCE_STATUS; + + /** + * Contact latest status update. + *

Type: TEXT

+ */ + public static final String STATUS = PRESENCE_CUSTOM_STATUS; + + /** + * The absolute time in milliseconds when the latest status was inserted/updated. + *

Type: NUMBER

+ */ + public static final String STATUS_TIMESTAMP = "status_ts"; + + /** + * The package containing resources for this status: label and icon. + *

Type: NUMBER

+ */ + public static final String STATUS_RES_PACKAGE = "status_res_package"; + + /** + * The resource ID of the label describing the source of the status update, e.g. "Google + * Talk". This resource should be scoped by the {@link #STATUS_RES_PACKAGE}. + *

Type: NUMBER

+ */ + public static final String STATUS_LABEL = "status_label"; + + /** + * The resource ID of the icon for the source of the status update. + * This resource should be scoped by the {@link #STATUS_RES_PACKAGE}. + *

Type: NUMBER

+ */ + public static final String STATUS_ICON = "status_icon"; + } + private interface DataColumns { /** * The package name to use when creating {@link Resources} objects for @@ -736,8 +778,8 @@ public final class ContactsContract { /** * Combines all columns returned by {@link Data} table queries. */ - private interface DataColumnsWithJoins extends BaseColumns, DataColumns, RawContactsColumns, - ContactsColumns, ContactOptionsColumns { + private interface DataColumnsWithJoins extends BaseColumns, DataColumns, StatusColumns, + RawContactsColumns, ContactsColumns, ContactOptionsColumns, ContactStatusColumns { } @@ -758,15 +800,6 @@ public final class ContactsContract { */ public static final Uri CONTENT_URI = Uri.withAppendedPath(AUTHORITY_URI, "data"); - /** - * The content:// style URI for this table joined with {@link Presence} - * data where applicable. - * - * @hide - */ - public static final Uri CONTENT_WITH_PRESENCE_URI = Uri.withAppendedPath(AUTHORITY_URI, - "data_with_presence"); - /** * The MIME type of {@link #CONTENT_URI} providing a directory of data. */ @@ -841,8 +874,8 @@ public final class ContactsContract { } /** - * Additional data mixed in with {@link Im.CommonPresenceColumns} to link - * back to specific {@link ContactsContract.Contacts#_ID} entries. + * Additional data mixed in with {@link StatusColumns} to link + * back to specific {@link ContactsContract.Data#_ID} entries. */ private interface PresenceColumns { @@ -881,23 +914,22 @@ public final class ContactsContract { public static final String IM_ACCOUNT = "im_account"; } - public static final class Presence implements PresenceColumns, Im.CommonPresenceColumns { + /** + * A status update is linked to a {@link Data} row and captures the user's latest status + * update via the corresponding source, e.g. "Having lunch" via "Google Talk". + */ + // TODO make final as soon as Presence is removed + public static /*final*/ class StatusUpdates implements StatusColumns, PresenceColumns { /** * This utility class cannot be instantiated */ - private Presence() {} + private StatusUpdates() {} /** * The content:// style URI for this table */ - public static final Uri CONTENT_URI = Uri.withAppendedPath(AUTHORITY_URI, "presence"); - - /** - * The unique ID for a presence row. - *

Type: INTEGER (long)

- */ - public static final String _ID = "presence_id"; + public static final Uri CONTENT_URI = Uri.withAppendedPath(AUTHORITY_URI, "status_updates"); /** * Gets the resource ID for the proper presence icon. @@ -936,22 +968,20 @@ public final class ContactsContract { /** * The MIME type of {@link #CONTENT_URI} providing a directory of - * presence details. + * status update details. */ - public static final String CONTENT_TYPE = "vnd.android.cursor.dir/im-presence"; + public static final String CONTENT_TYPE = "vnd.android.cursor.dir/status-update"; /** * The MIME type of a {@link #CONTENT_URI} subdirectory of a single - * presence detail. + * status update detail. */ - public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/im-presence"; + public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/status-update"; + } + + @Deprecated + public static final class Presence extends StatusUpdates { - /** - * The time when the presence custom status was inserted/updated. - *

Type: TEXT

- * @hide TODO unhide - */ - public static final String PRESENCE_CUSTOM_STATUS_TIMESTAMP = "status_timestamp"; } /** diff --git a/core/java/com/android/internal/widget/ContactHeaderWidget.java b/core/java/com/android/internal/widget/ContactHeaderWidget.java index 86ee3dbc737bd..d7311c26dbb70 100644 --- a/core/java/com/android/internal/widget/ContactHeaderWidget.java +++ b/core/java/com/android/internal/widget/ContactHeaderWidget.java @@ -96,9 +96,9 @@ public class ContactHeaderWidget extends FrameLayout implements View.OnClickList Contacts.PHOTO_ID, Contacts.DISPLAY_NAME, Contacts.STARRED, - Contacts.PRESENCE_STATUS, - Contacts.PRESENCE_CUSTOM_STATUS, - Contacts.PRESENCE_CUSTOM_STATUS_TIMESTAMP, + Contacts.CONTACT_PRESENCE, + Contacts.CONTACT_STATUS, + Contacts.CONTACT_STATUS_TIMESTAMP, }; int _ID = 0; int LOOKUP_KEY = 1; @@ -107,9 +107,9 @@ public class ContactHeaderWidget extends FrameLayout implements View.OnClickList //TODO: We need to figure out how we're going to get the phonetic name. //static final int HEADER_PHONETIC_NAME_COLUMN_INDEX int STARRED = 4; - int PRESENCE_STATUS = 5; - int PRESENCE_CUSTOM_STATUS = 6; - int PRESENCE_CUSTOM_STATUS_TIMESTAMP = 7; + int CONTACT_PRESENCE_STATUS = 5; + int CONTACT_STATUS = 6; + int CONTACT_STATUS_TIMESTAMP = 7; } //Projection used for looking up contact id from phone number @@ -429,8 +429,8 @@ public class ContactHeaderWidget extends FrameLayout implements View.OnClickList mPhotoView.assignContactUri(Contacts.getLookupUri(contactId, lookupKey)); //Set the presence status - if (!c.isNull(ContactQuery.PRESENCE_STATUS)) { - int presence = c.getInt(ContactQuery.PRESENCE_STATUS); + if (!c.isNull(ContactQuery.CONTACT_PRESENCE_STATUS)) { + int presence = c.getInt(ContactQuery.CONTACT_PRESENCE_STATUS); mPresenceView.setImageResource(Presence.getPresenceIconResourceId(presence)); mPresenceView.setVisibility(View.VISIBLE); } else { @@ -438,13 +438,13 @@ public class ContactHeaderWidget extends FrameLayout implements View.OnClickList } //Set the status update - String status = c.getString(ContactQuery.PRESENCE_CUSTOM_STATUS); + String status = c.getString(ContactQuery.CONTACT_STATUS); if (!TextUtils.isEmpty(status)) { mStatusView.setText(status); mStatusView.setVisibility(View.VISIBLE); - if (!c.isNull(ContactQuery.PRESENCE_CUSTOM_STATUS_TIMESTAMP)) { - long date = c.getLong(ContactQuery.PRESENCE_CUSTOM_STATUS_TIMESTAMP); + if (!c.isNull(ContactQuery.CONTACT_STATUS_TIMESTAMP)) { + long date = c.getLong(ContactQuery.CONTACT_STATUS_TIMESTAMP); // Set the date/time field by mixing relative and absolute // times. From a60479d2ea7857455ebad6c56e357d00b0492364 Mon Sep 17 00:00:00 2001 From: Dmitri Plotnikov Date: Sun, 27 Sep 2009 20:16:31 -0700 Subject: [PATCH 24/27] Fixing broken javadoc. Was linking to a hidden interface. Change-Id: Iff48cb97ed4078b2b91bade9a47d7afc5d7891bf --- core/java/android/provider/ContactsContract.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/core/java/android/provider/ContactsContract.java b/core/java/android/provider/ContactsContract.java index 9c9bc8880615c..c7bce0f56e216 100644 --- a/core/java/android/provider/ContactsContract.java +++ b/core/java/android/provider/ContactsContract.java @@ -652,8 +652,7 @@ public final class ContactsContract { private interface StatusColumns extends Im.CommonPresenceColumns { /** - * Contact's latest presence level, see {@link Im.CommonPresenceColumns} for - * specific definitions. + * Contact's latest presence level. *

Type: INTEGER (one of the values below)

*/ public static final String PRESENCE = PRESENCE_STATUS; From 594d02e54a34fdbf1992391dbbc5f9a1be21b046 Mon Sep 17 00:00:00 2001 From: Mathias Agopian Date: Sun, 27 Sep 2009 20:18:16 -0700 Subject: [PATCH 25/27] fix [2147737] Pixel Flinger needs to set EGL_RENDERABLE_TYPE to EGL_OPENGL_ES_BIT Also set max swap interval to 1, which is the only supported value currently. --- opengl/libagl/egl.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/opengl/libagl/egl.cpp b/opengl/libagl/egl.cpp index 9c0f7fd41f1ed..37628b7ea0d7d 100644 --- a/opengl/libagl/egl.cpp +++ b/opengl/libagl/egl.cpp @@ -952,7 +952,8 @@ static config_pair_t const config_base_attribute_list[] = { { EGL_BIND_TO_TEXTURE_RGBA, EGL_FALSE }, { EGL_BIND_TO_TEXTURE_RGB, EGL_FALSE }, { EGL_MIN_SWAP_INTERVAL, 1 }, - { EGL_MAX_SWAP_INTERVAL, 4 }, + { EGL_MAX_SWAP_INTERVAL, 1 }, + { EGL_RENDERABLE_TYPE, EGL_OPENGL_ES_BIT }, }; // These configs can override the base attribute list From 81384bf927c47a4efa653b14273084a13e67e3ac Mon Sep 17 00:00:00 2001 From: Mathias Agopian Date: Sun, 27 Sep 2009 22:47:27 -0700 Subject: [PATCH 26/27] don't emit GL commands when sf is in freeze mode We were emitting GL commands, calling composition complete and releasing clients without ever calling eglSwapBuffers(), which is completely wrong on non-direct renders. This could cause transient drawing artifacts when unfreezing the screen (upon orientaion change for instance) and could also block the clients for ever as they are waiting for their previous buffer to be rendered. --- libs/surfaceflinger/SurfaceFlinger.cpp | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/libs/surfaceflinger/SurfaceFlinger.cpp b/libs/surfaceflinger/SurfaceFlinger.cpp index 065425d9f8577..4ee176c92a563 100644 --- a/libs/surfaceflinger/SurfaceFlinger.cpp +++ b/libs/surfaceflinger/SurfaceFlinger.cpp @@ -491,7 +491,7 @@ bool SurfaceFlinger::threadLoop() handlePageFlip(); const DisplayHardware& hw(graphicPlane(0).displayHardware()); - if (LIKELY(hw.canDraw())) { + if (LIKELY(hw.canDraw() && !isFrozen())) { // repaint the framebuffer (if needed) handleRepaint(); @@ -512,14 +512,6 @@ bool SurfaceFlinger::threadLoop() void SurfaceFlinger::postFramebuffer() { - if (isFrozen()) { - // we are not allowed to draw, but pause a bit to make sure - // apps don't end up using the whole CPU, if they depend on - // surfaceflinger for synchronization. - usleep(8333); // 8.3ms ~ 120fps - return; - } - if (!mInvalidRegion.isEmpty()) { const DisplayHardware& hw(graphicPlane(0).displayHardware()); const nsecs_t now = systemTime(); From b19774d520bde5bb12d80417788d9a773e123c14 Mon Sep 17 00:00:00 2001 From: Daniel Sandler Date: Mon, 28 Sep 2009 10:38:38 -0400 Subject: [PATCH 27/27] Updated status bar graphics (drop date 9/25/09). --- .../res/drawable-hdpi/stat_notify_alarm.png | Bin 1382 -> 1793 bytes .../drawable-hdpi/stat_notify_call_mute.png | Bin 1158 -> 1568 bytes .../res/drawable-hdpi/stat_notify_chat.png | Bin 994 -> 1161 bytes .../drawable-hdpi/stat_notify_disk_full.png | Bin 1084 -> 1236 bytes .../drawable-hdpi/stat_notify_missed_call.png | Bin 1219 -> 1524 bytes .../res/drawable-hdpi/stat_notify_more.png | Bin 864 -> 1102 bytes .../res/drawable-hdpi/stat_notify_sdcard.png | Bin 758 -> 905 bytes .../drawable-hdpi/stat_notify_sdcard_usb.png | Bin 1040 -> 1173 bytes .../drawable-hdpi/stat_notify_sim_toolkit.png | Bin 1322 -> 1481 bytes .../res/drawable-hdpi/stat_notify_sync.png | Bin 1599 -> 1759 bytes .../drawable-hdpi/stat_notify_sync_anim0.png | Bin 1604 -> 1759 bytes .../drawable-hdpi/stat_notify_sync_error.png | Bin 1566 -> 1714 bytes .../drawable-hdpi/stat_notify_voicemail.png | Bin 999 -> 1237 bytes .../stat_notify_wifi_in_range.png | Bin 1457 -> 1727 bytes .../res/drawable-hdpi/stat_sys_data_usb.png | Bin 977 -> 1191 bytes .../drawable-hdpi/stat_sys_download_anim0.png | Bin 734 -> 799 bytes .../drawable-hdpi/stat_sys_download_anim1.png | Bin 738 -> 803 bytes .../drawable-hdpi/stat_sys_download_anim2.png | Bin 754 -> 827 bytes .../drawable-hdpi/stat_sys_download_anim3.png | Bin 752 -> 803 bytes .../drawable-hdpi/stat_sys_download_anim4.png | Bin 724 -> 767 bytes .../drawable-hdpi/stat_sys_download_anim5.png | Bin 744 -> 796 bytes .../drawable-hdpi/stat_sys_upload_anim0.png | Bin 767 -> 815 bytes .../drawable-hdpi/stat_sys_upload_anim1.png | Bin 771 -> 830 bytes .../drawable-hdpi/stat_sys_upload_anim2.png | Bin 774 -> 842 bytes .../drawable-hdpi/stat_sys_upload_anim3.png | Bin 767 -> 820 bytes .../drawable-hdpi/stat_sys_upload_anim4.png | Bin 750 -> 749 bytes .../drawable-hdpi/stat_sys_upload_anim5.png | Bin 762 -> 784 bytes 27 files changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 core/res/res/drawable-hdpi/stat_notify_alarm.png mode change 100644 => 100755 core/res/res/drawable-hdpi/stat_notify_call_mute.png mode change 100644 => 100755 core/res/res/drawable-hdpi/stat_notify_chat.png mode change 100644 => 100755 core/res/res/drawable-hdpi/stat_notify_disk_full.png mode change 100644 => 100755 core/res/res/drawable-hdpi/stat_notify_missed_call.png mode change 100644 => 100755 core/res/res/drawable-hdpi/stat_notify_more.png mode change 100644 => 100755 core/res/res/drawable-hdpi/stat_notify_sdcard.png mode change 100644 => 100755 core/res/res/drawable-hdpi/stat_notify_sdcard_usb.png mode change 100644 => 100755 core/res/res/drawable-hdpi/stat_notify_sim_toolkit.png mode change 100644 => 100755 core/res/res/drawable-hdpi/stat_notify_sync.png mode change 100644 => 100755 core/res/res/drawable-hdpi/stat_notify_sync_anim0.png mode change 100644 => 100755 core/res/res/drawable-hdpi/stat_notify_sync_error.png mode change 100644 => 100755 core/res/res/drawable-hdpi/stat_notify_voicemail.png mode change 100644 => 100755 core/res/res/drawable-hdpi/stat_notify_wifi_in_range.png mode change 100644 => 100755 core/res/res/drawable-hdpi/stat_sys_data_usb.png mode change 100644 => 100755 core/res/res/drawable-hdpi/stat_sys_download_anim0.png mode change 100644 => 100755 core/res/res/drawable-hdpi/stat_sys_download_anim1.png mode change 100644 => 100755 core/res/res/drawable-hdpi/stat_sys_download_anim2.png mode change 100644 => 100755 core/res/res/drawable-hdpi/stat_sys_download_anim3.png mode change 100644 => 100755 core/res/res/drawable-hdpi/stat_sys_download_anim4.png mode change 100644 => 100755 core/res/res/drawable-hdpi/stat_sys_download_anim5.png mode change 100644 => 100755 core/res/res/drawable-hdpi/stat_sys_upload_anim0.png mode change 100644 => 100755 core/res/res/drawable-hdpi/stat_sys_upload_anim1.png mode change 100644 => 100755 core/res/res/drawable-hdpi/stat_sys_upload_anim2.png mode change 100644 => 100755 core/res/res/drawable-hdpi/stat_sys_upload_anim3.png mode change 100644 => 100755 core/res/res/drawable-hdpi/stat_sys_upload_anim4.png mode change 100644 => 100755 core/res/res/drawable-hdpi/stat_sys_upload_anim5.png diff --git a/core/res/res/drawable-hdpi/stat_notify_alarm.png b/core/res/res/drawable-hdpi/stat_notify_alarm.png old mode 100644 new mode 100755 index adac8a9019a2ca520d42398bff6deccc05bac051..89daee190668284e70262dda78d1e3693983e5fc GIT binary patch delta 1776 zcmV3V{wGiBL{Q4GJ0x0000DNk~Le0000c0000c2nGNE0H{6bu8|=pe+HvT zL_t(|+RRv4OjK7GJ}iy`gUcw&qM&3Df;37Q#D=COY7?VIMTui3E+c~|n<%^X`%XDz7-xoiXKd1w+{~SO z&;On8{M-5e8}jDO8xhPnbm&k}fAV#8bzYx`ivQ^d|1ZI5jlRA<@#M)9`5O@tA>!iV zL`+PKSg>G0@WisSv&+ZE#`fSg%V03r0RENLY8{!2)YGR=#iK`$BD%Y~Pmhm}Tk!Zg zo}F5;Vuf|ps#TI;K*aL%^UWh8BlSy`EGdtTjg>oo{`~ppLqkL6ii(O4f7;sGhDS$7 zy~+*@3<#&wX@vamiHV7YOP4McxVN}mE(?fS@qS-?e7s#Zv7DTo9igG2KVfG^?ri@2 z`SLlygvn$oghuM|ch`#-FMMij*|KHzz$m0_NJxmp;O2}*V|hBpFMkalFtSQ2fY#lDUqC_c8l$43M0j|(NJvN!^a+^r65buI zs;aVaZhCrp?8L-GDQ->tI}Oo^t8d=CdF@-bZgo)(eZ`hI%i~LSt=F|5O&EPxrF?{ql%5-#e2;Ibrii#L*_pmDyom>q9 zR#sMuEnBwCe>@`*I(&I~`HbIPxNt!WUU;)FPIRR(1!t8j=(Y_1Uq zu^se3?s7U2if!Ar1zZAAmKX|;*jVEu-NYc6rScFjv)Sy`gjxq>iJ|aF3|F@9>H@n- zmD?jTxWh8oG&rR2YvXl2c{OyQpYsMro>lvBLr( zHjd~qfABEpKw|W}Xj4;@%wwK|^_v>RP{gLAeONa!2-&f#bOm(t=1srEP^HePF=DtA z!{%LqIRAB3CGcV$b@%SwfXzr*Vko?6Q+DYlhFoK%gVHZlBr&@OIw-4f+zxoFZelnO ze+9@O&q%e)_V#ws+}y02R7*>XlvOw^26&QVe~otC#8BLgK;0)<3{vfCw>)0Zx@jiG zx%>C;pQWwEix(5K3D|bs#5f>$45oB2vQ*Y)W5ir_!@K8V-|}g7xh>N8&~v+v)<7pB_$>DV)w+sZiqD&FV^ zf0AeJ+_@tglYoeEtXZ?BhGjLH)u0kAKMz1#XVCstQ(MeyzS=)cg*%G5sp&=~C}Pwm zT|*0wCSvffRCi+Rs8yNGlVNyxb^>Pwt4eLYSH delta 1362 zcmV-Y1+Dsl4(19WiBL{Q4GJ0x0000DNk~Le0000a0000a2nGNE0O0_bn2{kTe+39h zL_t(|+U!?pNMlzNzKLrz8h4|kaRId|qID@KE@ePy8JSvPepVa@DQHIp^~Y#Ino=#e zFs0x?C3H~nM_a{+f`ZVFOZ}muA`T9UEs@b^Tu`HNi}pLWNucAFL@9-O;gP)e?m6!} z-&wEV?CgyFmzLlT&>f(E15jdOe`3u3{(dd?ek2qM)t;W7p9~HTPFy9Eo}Qktv9X~% zJw25Q1cF{?XXj^QV`Hyx1SlgT!+vXPtJcZMsl?aU*T%!cgYE6@vBSf|ZChL04?8+K zrY@4p$;pX3IXU^w(a})?S+=>k$yQfa^^p5^YHI4ss{q+v_98VkRRmUge z)!45D(>4nW3!@eT^6~L$4Gs>LfsLuArlwvnQvybw<2jEf0zwG^;OAsv1PcfVU~rWO z+^d9aDVX}MsHo_3sZ^S3T(pvsl30CxJtIa*hGaALP?!fUFn2tRq0MMzg3e=`*o6+D=)TVRxxmzVPx zBUwWx<{5Na2M8JS0A*i}dFO655~RIiMH3~Y<61_WU>vV&7jYh`7Hw~}{Pb#?WnI!MMSPX@tA zjny#(;WuPCSxDEwz<|XuG%_+`k~bKsvKkO9>La(2Wu&mZy`B1$*~I*K7M z-e)zSiHQjsCti`8h;|HFtg^DwY(TUZ4VKH24zT@te{yni=0=qoMerFFHEO7&7*is{ z7{V}~UMizjt66@2KI`u8<}#S8jFWG##L)Er6-_F&AlX?HGhk z|2t}uf90k6@9I2^j-O`EUR!gOB3)%vBx#Y0r~=chO``>!D#$PzPv~Sq?jrY51vdZ+ zG50%W147Db078PJjF^DH4RQ=J`5+Q3iI z(a~R{w)_dUe#P;oRW6s)>EVZSaUc*#k%_?wDEOxoMzgcCZFgt;J3#+iKz|7^0Q?=J U06B3jq5uE@07*qoM6N<$g2uOjMF0Q* diff --git a/core/res/res/drawable-hdpi/stat_notify_call_mute.png b/core/res/res/drawable-hdpi/stat_notify_call_mute.png old mode 100644 new mode 100755 index a43139bd2bf81e8d2fe2b4b23c8aacc2740003d0..b86d2ca7c04809ba6a8539585adf44a5d4772927 GIT binary patch delta 1549 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 delta 1061 zcmV+=1ls%53A_j)iBL{Q4GJ0x0000DNk~Le0000a0000a2nGNE0O0_bn2{kTe*@l0 zL_t(|+U!?LOItw{K8Z0JDaQClw4$QoBa2uSim59LB7ttZ>7wr3=s)PLkd-^#xY31c z2?$-(jT=!HT0~TQP=n&z;QJ9D>G=k3n1q>l6DcToV9?3jnfsk@zVo=2NF+ip$*lCk z>Ye`8-C_g_xX05-!-yERK%*4;Niv{bHm6a9! z?ez4N&d$y#{)IN1jS3110L+Vh@n@L^#G9Q~t2O2T%xh|DsG_2R05;y3e+Amw+M<<} z6~T;QX=!O;u5n^wg3iy+jU`bME-o&@%%GpgPo9QNGh_g2XlNjp z%axRv0cvAogX-$)gbro9f4sc39~~Y2;F9%$r#{mR8F!CEQ?ZuZ{un@cI|RZIY2N*a>AK(^&%mJ}FdX+uLY zAmp`YF@%8#8X6kXe+pa$#_#uw0*jHXsGnpAR$N?6OG`_%xw)wYf^su6Gb6x&QRB+c zmVjl5dvb5Bo?sAq2>67v(}K zau}{iZbjl92nK@|)3po&Y;JCj0Rt;5D-&UkOr6N!C;$Oie^XNvwYIj>)YKGBPfte$ zo>cpR!)j}5m77XSOSKx10UT1jyKn4PVCjl8_d3ia8HO%q5uANniIy*Z% zg0=&Kgs^=+dmp*oZdzYor?Igyy1BVAl>$&=5NVZ_l{gb$Ahf%?E52mVx^M(qOaZE| zuMcwZd=GY#O^Rl^$?EEAT>Bp`O&(LCZftD)!kyw^XJ_Zf|M7LoCFw6;-FMSh_V#W6 f2Iw^d`X|5uR5;LUXWGe-00000NkvXXu0mjfEA`<@ diff --git a/core/res/res/drawable-hdpi/stat_notify_missed_call.png b/core/res/res/drawable-hdpi/stat_notify_missed_call.png old mode 100644 new mode 100755 index a31336087914183cf8dc2bcf42859fce6274b897..192574d4eecf8594da314887aabdaad89fd54e8e GIT binary patch delta 1505 zcmV<71s?jt3G@pgiBL{Q4GJ0x0000DNk~Le0000c0000c2nGNE0H{6bu8|=pe+8CF zL_t(|+RRu_NLy(T|Ggw8n)qi^O>9}QRPbK~X{}X?OX;Do+l#VbF9r8rTkN`})gm60 zYK!$!3T1DFJ#-K4vLLj3&_fp%deF7vqM~A#s@s;RNmgV2CvRt7nwZ4*UZOU#14HuO z`@WgqH#6VNe4ikSBL0u0JE(y6fA;nR&42v(ab|#xj*jkou12F#{3gV^^5VsddYjF5 z&*Sm5(qri%d2Kl-C+E4 z5Cm5Cy)3YTf`TgsgFynt6b^?o3XH(OWHNz_0iVxzMG=@@ueT6q98fZ`e@+T1i(>FI zAdWdUag?4sd6H7_*47q=hK8`Zx~e*^y1E*zt*tPd%@`RO!K+uV5_GEqiwBhsF{u0Z z?_*_UMRiB|A4Y+pgS_~8u z1-&#ssxMjZzJamOyLazme|dRXbzDcb+1b2{RmWer zZ~<4ZUQGby_xthS!2?W9P3=k@38^djBd;c&)pk->R~PE*>vzpzW>CqNVo)596B84= z#-{|9%<;r=!NOzarkJ^P>lV(RKc6s%Du@Iso_Jn=f4>AuPLHZ9e*=Mll=S3idwUzb zy}gp9SONb=>s@DOC$h4#@Z!Y_G&eU(?u#dmC7wGoGo$DM*1hL+!JvA2dN4aXD?N92 zcVl2+094~*V>lI@J$n|7jg6{vl_)t~B)C#8R#-5*YkGP*_KpLW-|@G2k^{wY7(Z8y z6}yXb=gx`jlH_bXe>XQLyULoH8VnB)OZ84Jo!q>66Z7-)Y3*`$Yt_*P$}#|kY$_3k$g`lq6oLG8aTUM)ZNpX|xC_|A z!h*aj%gV|Ue}G*+X2PA5N0DbFYw&wsmDf$Z4z((db-?wnx_@#D0CN$o&P>JC7?ZK( z_Tb*^M?CwmodE3Z+qZ&Z5sy-{S&P9E66B}JLP&Cr1Zv|WV7Enjv9N%5Auas0w)tR0 zRHZHmJqB=2jsK%Nt5x4p%4n1zt;l?ikO?r)D)U{%ry{WTegS88x*EJ8k2+}a?7`CFKBFoy^+M(7-i^YQV_4PHc*K3t^CG}TN z3kwTxaJyo&*%JEuOkEA|1x|T+IW{&no+`!|A-`Q&S;=R?R*JPR55rpIv48A#`*Uh2 zH*YJ(*nX(5ukS$DP<*gSd2zSjtE2;3EHhV~nYvv5Pk;dcwZnx2I1(lz00000NkvXX Hu0mjfO$XK> delta 1198 zcmV;f1X26+3&RN^iBL{Q4GJ0x0000DNk~Le0000a0000a2nGNE0O0_bn2{kTe*|So zL_t(|+U!?LNF+xX{(9co(V5X*GAgcSm(gL&A)?@BFo+}|3ppj=MZ5%jLx>RY5&}ZN zi{M367*EEVAjY8hmLQ0tOAcbtWQQdI*=WqV^U!(sbpGne^g7x-wu?d_{!nyR*I!j% zef9l+Rda$M;J;+t9iTfvw*jc3f1yEpczF0#EEfBQs`)oPsa~)5*zNYOmzS4MFShCA zI%qVSnWCbirv(KCuvjdteq&%lp%7@XZ9LCAsQQU2K!o0HG#bGQV~{%E7$7!gVPPR6 zk;un#?Me(;wOXwNWO#Tu>m-wtlUP|GL}g{ARNvUx5WzEs(sQWZGCArmn#p8B zcXu}o2E!%)mX;Q{-EPTue{F3ILqkI%J6DY>3n(6sXOxS~q>Tx+r>94Z9OlPX&9EK}4g`tm9s(A-UYcB4loE4jmmGsIRXVzm=DlqpzPmAyU{rxyTK1O3>qgZEorM0y+f5U%qaWQMUxHd!Q z0ga4|U}|bA!-uV$Z9{W&^QHc)tE(6o7?1>f9foAjvfA2Ofh9CG#x&E^)Fjo{*Vob8 z+pEaHd4|ZBQw6A|rbacOw76NmIXF1L&d$!2VA6oLwzfFcTXvP@nGCR-P2zj<=m5J^ zn3cSvLx4_&m%&ihfBx4N^+o31%QfNCk_V_Qu;Jl719CXhM?A_#rYuK=X^x#wI$~C5 zphL`nU0(>>M}GYH$1#2nM&4dSE|*J4AATi94Zbb2!ToM7Wi4$AK$xyEL0_tbf<)23 z;$`h-^2@aWmORRy<`hWEPisd3eCPG!&)Azxy|=fgPD2ide?tQFgVO+4UJhU|0?ao= zU|t=9KMP_%p~r6Gjn;}aJRG_N?DRyAg|2pX;9gFOy;u~#oSfqG-(nIVuh+||-ZB=l zPfR>qQ3CKfOe-bV7}4%O!Ot-rzBsv$V3L!i{h^kJCmw|J^f_R?pIQuU>-(`VKA>@) zMYM`%nWCr}f1r=d1mKKxLTsG30F8ALRTlmW3bMb+$H~a^zshKPqA_73ZdA-sS&xpW zLZ>Ptk9;AHzj%3u9_f?#&?FByeII%&K+n!td|z(2Xarc1z{`X@pnL+PRbX!~B4h<5 zD{7m~Ca|N!MCa>Ik9mYiE5Fjtg~`<$gQU#<{_pPpUJ^!sn$?&ad9JE%)h5Q&u6#65HY{CzrX+G-M{@Ep#KG+e*_o+re$|8TUB!^00000 MNkvXX1g=70f^+6Sb^rhX diff --git a/core/res/res/drawable-hdpi/stat_notify_more.png b/core/res/res/drawable-hdpi/stat_notify_more.png old mode 100644 new mode 100755 index bbbd59b1a6a8eab35ff56bf08862d34f6aeb378d..1c7f9dbf4b736e6f4b0df697eaff17732953818e GIT binary patch delta 1079 zcmV-71jzf~2F?f}iBL{Q4GJ0x0000DNk~Le0000c0000c2nGNE0H{6bu8|=qfAC2} zK~#9!%veiE8&MQ}lf?LoMx()KF_?u`go+@7k)Ra}D1uPw%B|3D3M~Nz$u?3DDs|rN#>JKA3TOP%zbm-{hWL6A>B{q_6(Uj_ySv^mpQcX#)zNF?HJY-}{qsf&w?8OL#=73c zsqyNQVqkW={bfNx!LPcyI)l+@BqfOG5IUWX)z;RsySuv)#lQv!e+ShV-zq99 z3>Z8ZI=$SX)oK~cYE*1WfcOAySpke+W7Gdn7ybSHFJJ;!Sy>rxJ|&t;_BTbqu)$PO zQIQUlJv=<*Ofy1zi2~Nw*Jp#4M#y0^nUAyy8eugxHSGBKm~CuqQ1oToTWCK~z##mY zC_$sqWHjOE=qPJzYm2WNe;OLt?CflQOxe@ZGlEF8kqNW;RaI40$~v2jEMNeo1tqu$ z6md^B-%92(T4$4yAuC6g8^eLau$HL)o&WM(P;jov{dp5vmz?5?^<2JhRc(bcyQdKNe=Sc## zzP=u*uC9I$e_$bUaN1Z2u=4V9I$$6tw>?WsOCC_i>({v@{8c`I!qekN^zQBkL;$onyN})ouHWZ9Xr8_qfMJNOu;IcGGMM z?j+Ds5HulzE|V0V8S%@aYsk6kOLQIM$eh=eD}Pr)XmKe znkNyVIg@)p{~aL7BucBRs}CEEf5uO^d_<_yl}e>wmY0{K*=)8eC?Eh60^{FoHk-<5 zG$M&)vuXZoF042zPnCUf$`Bb+GQlL9Ns28aR6}JI!YEpWeh*unz0cL=2_V=|f2K zAGk$euec1scf0|mQYm7Fs9_!l0s$Hd;jenVF0IvSBaP&8Ii?=5e`2@Whh|?spQk1o z&=QHnS*O$4W*h0k~%bUgx%ZQt985G zC~m53`jdD)ONNkGEZ%On+izhGqKn1iz~97TFywj{sVX%^lE%=}HlUw<$ADlQ zo$NFLafX4GN+oJ)e?VBAPUit^+p|KUFcBbN8gE&*TCFOCni${1#CQM!j>eUNA^Lb- z3U)3#K0ZDKFXI-A1woHv=;yQWJSEr&%L<%0-oR;thEM0|=_vyG(dFe>rx^##W;22~ zObHUyTnPq)a+;<;fbkH-)B{pII9Q%R20q>0-Tf^np!+`?9qs|mJD@)T3;>a(*T^Te Rs5Srq002ovPDHLkV1lxPdyfDB diff --git a/core/res/res/drawable-hdpi/stat_notify_sdcard.png b/core/res/res/drawable-hdpi/stat_notify_sdcard.png old mode 100644 new mode 100755 index 0161419aa38bbe414b64ce379762b1f654bca015..320d63da905eadf50c2f5c8c166b6dca91524c8c GIT binary patch delta 881 zcmV-%1CIRm1&IeCiBL{Q4GJ0x0000DNk~Le0000c0000c2nGNE0H{6bu8|=pe*-H? zL_t(|+U!`*OJY$JKF=&uE6wr;6oHE%S_mQxxD96EA|jY=Ffh20wi67q7@TD=s{t1S zvl*B_V0OcZ|AbIMQKs;eGKJFAN^{P48Kb83J>PqV19RYVJdf*n-#zEM=bm?^cDqf( zC}zD5VzHR6|0fcO!2nApld9*Me@rH_*=*$Tc*yJZ(!|7s{)nxttc;zWo^Cf9jn`~C zv@D|4YEh+9DK?wUFFZc@e7=@$V3H&y*wGuT6suS-!?e4y1Gj6!^3Je zcaMu|V7Irol+Wiy6poILXl7>Sk0?x-3Nx1_R^TEWGewvoyuCRcIV6ptprY0#6qFaHg+RO zixppAU+dCHWiNiIirDh<@+VH=+wt*n;^Ha@T`H9{>s&4;IHwdbsn;RCw6ye@i{vJD zlEq>XD~7-^q6fQQ4L|qapGu|rOJy(^MEW*Sqfl?Kx{;BQy9zJ0%W zkqW~RiX;l8(W2zDE3i(A2LVbKFg}7rdxA27LJ8sz1u!lVKNlAlt%X7XM^5PA;J{E| zN(EL@(^^L&kv7h^0Ypqnr_PxzKK|lpS<&h!RcS4vbcmaKd}=wsE2AT&8yGlcG~o>a*6B6} zB}%@{O0D#NVE;TYaIDjH8ZB!4cHMT|O#hqD0Y( z$K#;YYT5f-foN*TAxX2@WV+F4Fik+zWLvG)lTCtC#WYSAiy~JbiVA%tIX-Gk@E7er zH9g~2W$AR$CCu+l`lWaSVS zAiLe3!Ki#C7%5e9aUg{GfelS5wQOG!DfuU5%0wP8+<*v#T0Rfq0(9Jz@enC3MkS?p z$SL)U0MV4mJ#y0+T&fJGYlmx@axfUk0;2U0_e=}fK;dxs9`{1GrBaD)!p?~lZT7uh zFP&N*WCJ-Ij?Z}PGudS_nOii^Zq>u#@E(srcia}&>z@r*p!WjwTYv!of>_8BZ9RA0 P00000NkvXXu0mjf2dPcs diff --git a/core/res/res/drawable-hdpi/stat_notify_sdcard_usb.png b/core/res/res/drawable-hdpi/stat_notify_sdcard_usb.png old mode 100644 new mode 100755 index 23b2f0a5af24a2fac96a61b904fad28378b67751..1b49692ecdbd20c19eba320a0c9dbd00a2197f84 GIT binary patch delta 1151 zcmV-_1c3XH2$cyTiBL{Q4GJ0x0000DNk~Le0000c0000c2nGNE0H{6bu8|=pe*`y4 zL_t(|+U!_KNE}fRtr^GYxQ)Al3j`FzgP;R}!JCqU2N5BsfDj1cWkB%|@R&m&2tg$| z2E;&e(nGu$a_}U25DE8X95ON@TvaY)xYaky{cc;j!-B> zPm!GTMCr*Y<}wqgtE+pqv$NBEe|2^BhNqqwz7v_4V~%9S+Ca zf`S4{Nl78T4wI4hvDW3~CAr=1NAtV8J32i*rQO|KhGSjR((Uc-PM+dnhb4@8z20uP1ulREg27-^JUKa8M54Meb%5{;G90r%o)+$yES)e}CUHUteEGL?a3xl)${Is!Bxd%*>3ye~lBAA2YZGn-&CShGZ*T9zGi-ifV89X4V%62v-E3Yz za+J&E61$byK!z7Dxm>0k1K`Jyl%JpfaE@CVr(fN7KORB!qJd?*Jus(nKq4t zDJESTi&FAKSWAsWe-$<|omjRQ01A^MO#qzmy&aN~49iDS3^J;`p<G{A6gBltdLUvt>_vEP&7mKNcL)v07psN^$Uj3%0 zjAg|*54{3#RgA={n32Uy!4JyI%X`TReTQOpT?sd8tq_wde_5#)%zmOkgko096g|bX zn^M=(Dz23c^Anr?H!I|Z3-F@dfe&f#4Gj$mj#R|QPuO$Avy$tgkX>A^~&PF~fArKG6q${m<`dY|1^%A4DZn8VHuHsgZCMG6mY;25bYipx(CAVZDqugVa zQ1+lFP|wP#f2k?a%7M_Bpp#N9wzjqw*_GOCZI`6wBe_zWinQI6Q%|wK<;wQ~f zL_t(|+U!?LOB+!XJ~8ou#!OT&L8CCDF$#*9N(-Vwa3xY)h|5BkE%YylEAs=oaMLWs zO=+ROAVN1?6x{iWO3;dLGrlzsd%g=ZP2wcxrdcR>V7T1e%st=z&Uel|W4XV-r>A6P z^u+81(6a+%E96hZ!^7&~;o+A=eE`B!s;a6e9*>ivD0F*!OXcO|bbfwLb#--O9dkYe9UL6IJv%#d@iuQt2B@K-p})Po zoqRqYU0hs{-EJpM(+n`3ot?C_v_u^p9dvhhN8R1sV(#^NDH4g$%F4>?f0Ak_nM_hD zm7;-x0pSoMSipF6bOZ(kK+M4kSOQyqzn>~AE5-XI1%%MRA#8hlTa3|YREz+G;<~@T zZ_HsFDlu}n1dAmVHCVwZ;aDG8;CbgKCnq#DHDw%x!)ja!R;v|4e-{piHEBR2BO|Sx zDGvbU8*zZWy**M@75byHf3kmp09z0`AK({HeNupWdwW}XvoOSad3h-u9v>fPj9>!# zO8*_8kd4Shtl>#xhg>cfH0U<-X~}iD_Vo0$@D=I3)h&g`8 z9Aj5km+?P5)6>)BcDn`mnVA`JI0mH6&(AvxW{5Wm^J&!T>S_T5e{}^0r)FdNIzo){ zfKVX=0R~oIUoV)8#bQEpQle%+Dx83RnY4w$86E)2c8rYGA1OdMCA4#WeJyH^EFgqZ z&rq{9X+VR6gTE2~&CN~!`uci?Fbk<$y2EV8m;+EY&_@By&d$EVI6gie<4qJ9KspQ1 zUM@h=4C%JEwkCvXf3aAk7}5b{Gx1-5JRZ*n&NKzJL&lHb?iF<{I9 zjgF4e(9jV2B3f8jFv2PY2pgtfin1ZY1E;w0gTY`%eG7#`fAWCzrmPs#Z+sl6si`Sr z4c#Qxa_w!)N4rd_n`IdQLCER0v9Xa6PANdxu$WJ6{r-bfXr`v7Mlgdeb8c?VXy&Ba z4=#oY?v1Udr>D|@;CyRqi_j@tU0pp`$43Hp1Kdn%g|{Ev(|qS%XmWXZS@bb7OhF@K zV`HKgftB>jPZ?Fexw)BkcXxkEg^XW%&!0WXKp-%QMz5H#!TS38VjTJ?>(MAY%ua+` nn@>_9d-=A10rXq}{S{yUNT|63T8qOi00000NkvXXu0mjf+*Hac diff --git a/core/res/res/drawable-hdpi/stat_notify_sim_toolkit.png b/core/res/res/drawable-hdpi/stat_notify_sim_toolkit.png old mode 100644 new mode 100755 index 401fbb0f51065310b035207a3e688669f9bfaf32..3b14c2621a5c1a6a408c76456ab7470835818a32 GIT binary patch delta 1462 zcmV;n1xfm<3dsv0iBL{Q4GJ0x0000DNk~Le0000c0000c2nGNE0H{6bu8|=pe+6qv zL_t(|+U!_KNMu(Oz0M=H^E~2!BeoP6S`50-78eEu1F;ochFS=cn1v7mHuN%*g;7v~ ziXgbtD0FBhIeHUCv$uCA_> zn3zabR#w#5*oY8n*DNR~fP~QA-kz3!oE&1W($Z389Fr#u3JQX*NzoJ_)%gf7@k&!_ye=RLq&hG5&(E9qiYHe-pH(q~kdwcu6mzUQx4`l+Io}PYf zX=y1=R9;>V`4IQV$HyrmB0@WFWMqV*qocLg-QC?(TwE-`!6QCCKEyIX4Gj&%k^yk$ zyiXr{^ELL{+S<}E_r7J#`wQMx6iSdaHa1oZ%8(5X4pK=;3E}hze-GAx*JfsBC?O$1 z9AbKU`gaEL8gmdn_OLyJYdJYNdCN<*DGsGEnbg_YNq&BQVnaL+k8uT|uC6ZPkV)D2 z9{1!P2)(_%y&3PNRs>A)#u&-S%E}S|FhFh?=m78Nb4ad#1MH0D>4V~|#EFejerz5Y z8A;8}&593%WZ2l)e<)>d4k`vFPYiD8+I`ntumvc14CGg0`}_NJe0-eEPWTxCQVi_y z@bFgF=^HX@baYgJT3A>BxrL4)1Er>UdU}dvV1m=`?yk@=cuLk%1{T5qReag27?`1u zR903}Q&W@J0GmPAoex8Phe}`#yc2*0He{1pg_h00Y zE;8>*hlYka?#)VBGas_*>T2-`l}DR|jFjG*o0}u_bh){?VsjW|qo=2bmX?;Z^YARU zM{b<0ZtOi3&&B2)_j(Lrf`;jHN~f75b8~aSL(J80ldv(ePlA%g{NUg~8%kZnp>R0f zJLo~Vz$REkf1hKzY7by??p+42>31!-C%tu7|Hjd>xwnIr0&9q4;1mdMXJ;oCMZwk` z%oVDwt<}!2sHhMLqB}==8eYH2=8XrHUxw!)%gf6XpkM<71ETy)OibK5P+3_S)zs98 zwT_OCJ_}!Pa4?00g#7L6>+8drtC^absyA3G^%v5&fBgJ>?f1;gOe!iW5;_KQ>kH{! z1}S0kZ?LCA)oS&z!Iu%)rnI)U3K3M)&@taqQc`GTWkqmE$-vx>j*f!5y1HYz0-{1e)0%#8F>+6Mp0;Cc{MA!jY%+Cfz{TNHZDNBnb*D*yK#K*^r zuoe~;e~KiKUCB+676XPXM>UZ}UcOuK-f>KUL4zKPiHZ4x%ZwUC=8p4LmwK0FXJ=Dy zZ?9-9;Vte^1sEnZ1q1|KdwYA2vEFU++xZ@^`OVna7-=*b!Lb{;d54zHATSPFVOUt$ zF?-@2d*H$UE|6IOgU%MB3sBH1c#S; delta 1301 zcmV+w1?u|A3#tksiBL{Q4GJ0x0000DNk~Le0000a0000a2nGNE0O0_bn2{kTe+0}) zL_t(|+U!_KNL*PIz2#ia^N90=rDA9tOBe19 zD2PV87b1i%Hww}k+gTJfT3SvxTUu7`dE^zQsw{uSS{U%b=hy%B>b~>tIrrSBDwD}X z_i4D$JsS^zemOvHmM`-1@?thOe>XoFjmF;{4d&zH^JZ*ptobg0RF+j%T3Y(Qo12>^ zJUpEEt~k));UTTBuha4I@tfh{;bx~%77!2+7ZMUeDwT>jONuXVZ*Pi-h`_xmCnx8% z(*SYCe37-w%S(qZwOUPKVPUv8<>uzTc8Z4Nj(>J|d3jN2XeeD=Tr}}xf3s5nVYhb~ z00qjOk|BU`b#=XS`65nTUEQtoT3cJ~1L9PZi;H9S6dfH+`T6;@v9UpegM;Qc27`h0 zdOe+=pOc4&htQX&r>El?0w7!^B_$LS6Js|3^fEg;OAQST1gj`0D4?OCArWVPf1kFu zx1VfnZT-bl-!r)WsHi9ke+~}5kp-I>0{_Lu#Z*;QCEiU=PEuxOrdbzLQ&XhTXvF8X zwl?bR?WLroBsw`c5t+buqobp=xVQ*Cy=9<(aJD|}?(Y6`b#?WEb@~+>QJf(x92*<^ zqk~=(DF+pItyU{8P==DnuDiOrC^a<|euh|Drs#2GWTcqS)cwg|fBxpVzhUEw0D*V- zkX+QJd41PddU`sgq@;+f?(FP{?7$qk^@un@K|zlJ6r1t&^`(S_1S7wHhu=bPii{D# zaY;ayt>yYNL<-Fu9UYl}hsELAfq{YIj%U1wu-DesJ~C~+tSj?;MU+WepdC4`f0ob4 z$lTlGC`wFBBvcW% z4PlO`Hc+#$upqwQ+uM6qUtb^D*x0DUMvz5C8M3FL)zww1sHmW&r6nO;1O+Yb?(Tv@ zfJshH7IWcEeSLl8=jVr00Okd-{x)iBYxNBH3x9rzqP;ake-aGJ_WHo$pa-Cl4JmHu z0~ac;va-@VAJsK6F+uD@;u!)*=J+%b#_K%ejXzQh2)mX$#X#C|EJ0B8J6nIPSTNN5_o8udGI-N~( zv^rCBN=>p&!1RiWitPH!!NGym5#px7QZVp(ehkPUf6wd7%ggowaVeW%^O6F4qp+}0 z7-D~azn~Bsf#{_}pPrtIhAXrC-BLdAckd)1_?cbG;^N}8Ov@AK03y9-z?vWdQ8x;`@K_gs-Wo+GG~J1GS00000 LNkvXXu0mjf%>Q#W diff --git a/core/res/res/drawable-hdpi/stat_notify_sync.png b/core/res/res/drawable-hdpi/stat_notify_sync.png old mode 100644 new mode 100755 index dacfc3a64f795555d35a433f050bb2b72ddfbec1..6f9cf844afebb282097f781d7f180e06e5802fdf GIT binary patch delta 1742 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 diff --git a/core/res/res/drawable-hdpi/stat_notify_voicemail.png b/core/res/res/drawable-hdpi/stat_notify_voicemail.png old mode 100644 new mode 100755 index 7f62e9462102c6afaa7858f3ce6ecda00095f23b..70b2411e760d54311d5f1a4cbb4982d0dfa91c12 GIT binary patch delta 1216 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 Ef{6%DXaE2J delta 1437 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 delta 954 zcmV;r14aC&3DE~3iBL{Q4GJ0x0000DNk~Le0000a0000a2nGNE0O0_bn2{kTe*<$# zL_t(|+U!?NNMcbGKBZ+rHswZhgfIqzirNGvM2bV$QS;XO3py)Siwf$_jW-@WhL`*?MMdAWTJ5*h)zz5Pypm;DSXlT| zuh-jjIvtdkm*X>Y6NN%Sf1jV9xnS<@?tnP?mAv$cj-``Jv zyyLqkI}G;;PCGlX973~|oo zazSNfC5(=a(y{sZd5A`%vYYZ4Qt~$B#ro#vhHA2GY;4fq+S*!hI2C@|-q6qhu~>}ee+kQmwIPlP^TKaVA+y`lPvQ3VHf7D60I_1u0(5kA1k20I zbnN8hgtB{nex4g3A?B#t+uN|dzAnxkA0NZ+?k*D$hNPvXg^um)f9#|H;W_wbhEVa; z`2Bu5=kxg>5{XCxQmfT4IXOwgy0*3ki;IhCYvs(4pdOEhCUR?QtK{MX0|T(Mv;-!T ziIxDT(+Lj`5AVYeYA6%}a%}*!*-YySR_kOL9v-HRcxGk>#>U2Icb8fxt7DHwQg@|^ zi3zBvsDPfH9Oyk+vSuh%nU@#cOzBM;D$IX%A;$kj?%wtbVe~29EkJu=&d$RS7#x$=toCKhxx4^f!H$Sgs}7L@bK_U{@Xqe=)VE< cTYv!oj%+>S5HW_y>Hq)$07*qoM6N<$g6`eWbpQYW diff --git a/core/res/res/drawable-hdpi/stat_sys_download_anim0.png b/core/res/res/drawable-hdpi/stat_sys_download_anim0.png old mode 100644 new mode 100755 index a907d79ed048cb0beef8dff9dcc506965693307a..d9c9e4c083d95a7ae9619795472982bc9ccd7628 GIT binary patch delta 773 zcmV+g1N!{l1)l~XiBL{Q4GJ0x0000DNk~Le0000c0000c2nGNE0H{6bu8|=qf5Aya zK~#9!?3hby8c`I-ukkHPf)XY8*yzGV1WUex8#m%2AQlSUrUY6jk(S1VNN8yxS}Mt= z#RzWPxe#24-=NTfE(<~t6kiBdL=!VTN1UL^jE z>-F-QpH8P4+qcM?+S&?}Ja(eTf8)7;;%LT@OW@VYJ$8G0djyaf%nyxz>j=Ofh-_JN6+mp%Uf8BMVP@t>Z zoYxXx6uDqD8czTUNhA^!7fYp56g>xc2ax-)J&&_6#9%Od04OA%&(9Qv{q)%JJi-Lq zvle>osaC6JkUYO&0`>WPq*N*~jw_eTBp#2C5-o5JoQ>-b5bS-dUator=30K z7@OMGTU*F6K#fbX2ut&rNF<`G;_-R7kg+{q$PeD3fcKjAn9Jpof7NQWkG)>+5H2k% z`sn@(yECQN>rZpJ+<@^A9}EVccXoDOTdh{2R4R#BEMBT2%>3X4OS9QL>G%8S@%N0v zAYPusE<=GMR%J4o40q>CR$-k^XICPTkf$&>o|LTbW9@dkuG8su;XGWaD0n7mwOTz^ zVJ4I5N~_i4dXq|}TSBm0reWsa+uI{%vze&X>L0Aa6bi+u#bWvAbUI%^yxCUaEyxOg z8jZ$Px7+>1nl2t=p-_lVT#;}%JU@?Z{_5ml{{IXLLm5~{sXNj{s74ey1vdlG-yndb$2m^_~6Uv?3>xo4sYMQ~=dzCX;LP@W07qA{L9~8V=*+!mxom zwOqN~?lTZYRjXBc+bESvbU6ofzD<7CHMR|KI2`Xl6xHc;)?gZq23=mmdE4ez1cb6$ ztsg)%lgX?BrPFDOe$aa*e|Z%HnayT9h@!IDEQ3L~g|DC#Mlldd5QLW?ipu43bom?f z{6TPA9X4LP6e6 z9f?Gay4~()Xay&7fbfupH3^fCR27|!~ zJm|OKaQH&jnHtVA>;R7-JkM+XnIlOO1A{6Z)@n8J-U{{meP-eHC6mcSb0F+>qA1Gm z_N`V+3Tyf?oOk{*U2sIJ!8~Xf~ia q-~kP{4;ar%uGZSMUh3! z0bI z8<9w~eqrf!`d;1P;oNk4MqK&EVtY3Tz>?~X0w?6F;Vq|uQ(~sWz*1khr@AK?(_Lrf7@gE_4W1L zcP5jev)jDa5+gSsj7H-rKq2vXoZ@4NM1rFG0B-;?3D^dPy#qV{Mnu=SeIU8wOh7GjKl2-$StbSh-yGgU>}V zBt)Z8);8gAnB3glpl@CRf3LAE7Yq9sldY{S6>tGie!qWg3Go}tfp5SzK&Byxk1NFkt|gaMt+zCOSM`(ZMWMv z<8N7ofxkS3U4{aOtjgqaIquHqoWdH7#*S1fCF?Lao>ZLov3k8;*6Z~Ll}hER*=&B`3>OcvU@*9dUy)EKG&_zx{;QLR{S#mSEdVs2boF%s00000NkvXX Hu0mjf^R{!C delta 712 zcmV;(0yq7m2I2)FiBL{Q4GJ0x0000DNk~Le0000a0000a2nGNE0O0_bn2{kUe}qXy zK~#9!?3llc8bK7tXEpu`ktm{qc0oPF=7LsoY8w#5&LRW?m*&z6f@Sa@2m}&@qzqiC zf>@aw@1I1!7MxoJYNVQsBuHVnHhq!r!u_MQfYzBjY#Z)*P ze!SBek^^};pylh^b^i}gAP~T~IRW7w^b_m!di`3UFMv$Y-h(j@`c|vee?(P*d_EsK zURy%*`TS2a^y60lhpkpiR4u5%nFIqpkq5NdY{YK2lT<3T(hjeUMkBFUEH`l2j~9j+ z?$o?;yWQs?imFs9^e!tFi&Sm{y4b`&%Nm<@a5x-qKor$(w^v~5^*WXR!*-kcRs@8y zTCMLuG?U4!0HxDuiuItke@gr+1~Qw?b`V8nvsng%aErRUQW(WRD3i(b3`9}6T#m}W zL8p5GLP6?y38G6%ZR2liAQU9n7a)q|w!Tn;8t-L-AZWqQy(dJk*UOSI?qN=+la={= zo^Pj)Mx!U4PUj<}f-@ca8h?gOe=P{hckPI=jUmur zFgSx7y&MjQPq~2LEQ852h>x<@>#6>lBS{j1oq}*2@vlJrexH@Fe92@oQ5^_#ohXX@ z*}mCqilI>G3KC=xk|G(8$3(3U60m6!m&-*)qtP|Yl*k=J(CN9~?|&bOL}H6GjcNw7 u^QF;fyvCbV^}X!)9IB$9~u*yzHAf|5@lxXDJc2#AG3w<&=ZN~EQ6Are{|Xe^av z(_#YIxN{-65Whjef-Va}5tJB3ut9uI&k-kRoH1i&qAqga$GvkO&fjy-J@=}JqA0@0 zc6WDq%}*wijO}8wqPDWaq>r8GfAjgypxB==e^~u>f0en4 zlX6@(HC=Z)op`YPEPmdkVBTTTpYp!cgrBXSD#Cn3s)$jL{VzJ0Lu2d?K zcsxE#!oXMHcvPQ4u=`lGe_9Pf%*8Mz#9}eVF{h`eB$Y~GY@P$}a4Z|VV{9CaMxzAI z04f*^PAnllV>|EzSO>@~1c|Y6R4SDdppZ}~G!%s;-3Dv}WqtU49cXYZ^(N(VnPB;phMC`BFc7oZ zOw?-iPgY@TYimaqi{+oo<$4M6W?O`}AS?X2xw*Nxy}kX+nl2t=;c%EwT#-m5@^Bt| f{;QLN{TE;W?e;r+e%!7$00000NkvXXu0mjf5DI_W delta 728 zcmV;}0w?{u2J!_ViBL{Q4GJ0x0000DNk~Le0000a0000a2nGNE0O0_bn2{kUf0Ri? zK~#9!>{z|48bJ`>^Tm$~ktm{qc0qlJ%?nz|sck?IJBttqyfiP3g&3WX1Hf8#Q8vMd&hv7mn4HPBM2B&bFRB^r&2j=5ZJWlJWL zqAr)qjOwp!Hk*ms<#KJ=jq`KYPB17 zyHs6zRF&&r}#BT5CkN41;Bpze-i5V z`=W;QC6mcSaY9(@c%GMD?VHUe9|#1#K!Nl_Q6%H>m?-r@0ya(Ja5%_lH2MlN#YTQic0M;6jh8rBMek+jj}2!+r%LFz00RK7IGUV3#k3~?0000< KMNUMnLSTXb-AH}_ diff --git a/core/res/res/drawable-hdpi/stat_sys_download_anim3.png b/core/res/res/drawable-hdpi/stat_sys_download_anim3.png old mode 100644 new mode 100755 index 70e757b5f69ef4bd1c123786b893740c42d370e4..6c1029c1ab9d8a319f2fe2e521da0406867906e7 GIT binary patch delta 777 zcmV+k1NQvz1)~NbiBL{Q4GJ0x0000DNk~Le0000c0000c2nGNE0H{6bu8|=qf5k~e zK~#9!?3hby8c`I-ukQy+Boak@Y;@s9u=o|SaU(7QLb1?oN}z=jX=z-Dgq9Ynp^|J` zOduO~E(90iHz>5=wjdP25FZFu#8;;0h!cFw=;(~bg$I7znfsXg_uO;Ool!(l6yalj zzn|CmbUMvgFD6@RTPsYu>Oh~*e|HJR@tiJKz^jdW?BU_z7$9?4)ILOTj|~QcVVTWl zXWG18@6#pVtJ?(uk-a@^Ak6NyAKZG2x0mJ;T4I^9r6 zrt2378+RuL-fuyLIUEiY^=pM6{&VX78CP*qj?1Q@uU#(JV|_3fB!NI+f2Mybl_Iyd zw~zOQLV>>A&y zFkK`P3C2FLSd3&c8H~*zF6cUfeDf)U;Pq@JLY!Tn%Lnf1*K=Ey?>J4zg zb$qYa6E4OkwzXJ{oB-6QB+IZikByy`lF@m%l(Ee($`aN}j^tcv7*xk2M;Nie9fjfb(#pqF_!^ zuh-kG!Ymfc_5S`oU#>SPm&*jpbsA=VlgUJ^Rx8nHG(T8{DV54Io6Yvm?RLL_cynyR zTaXq0RIAnNR;%@iHC?P?kw}D3T#;xrx;T&R{_5ml{{Jf zlq!f_s%sB~;E(tZB;s$7tl*Eydy9&m=CZEKYQTXnPv6eG`ONOjyxC`=Nmri^Z8@Kv*J?h|n;b&8~cj zL_)BoQi)Ogkxi#l!8)DJE#Fb*(5}vp1{4m5FN7tkQppY^Y1vOE6FrEi)#?quR;$Hp zBoGKZQS=UBr|Wjzf8VD#5XW&Vzh19b4#?~E;=H*8;U4r0eHx8sYYr`de^{uG%MaUp zuU4zPtUzwJ8v}36*!g_^w@3E#Ui-(*W|Nm~QbVvAbo6xDq1kLE7K??%<8e}{R93?O zI-QOfjm8xmwi62@6x^xB%HeQagD9$8F4JA5P$nV6cEFDxFRXFbKEs<)p$$ z212nc`y513nM{T*e}lNA0HGjtyaLfR#Se*hFc1n7>`M?uduS{aBgcCg!!Q>R=fM-A z%jFW1G45eDn@zB}Tu$6h9SVgm+wJxzNCj77fbfup9g4|;olfT#e+KXx?&uHEsRJs1 zflbW^%XjODaY#X+e!qVO1N}M}44#Psg0l=JPai(YZnrD@YtC#oLog16{qX+;>h*ep zh2=}eLk*M;31O8@`>07*qo IM6N<$f@M}#m;e9( diff --git a/core/res/res/drawable-hdpi/stat_sys_download_anim4.png b/core/res/res/drawable-hdpi/stat_sys_download_anim4.png old mode 100644 new mode 100755 index 3b2d7d143d27b9ba8104618037545827b327b676..693f085fd7861884838f4c1ae31d768af8978a56 GIT binary patch delta 741 zcmVE8x|5+6hgER6S7zYmxSFW zfo;>-S@;ze+`=+d5ES2FM0`%pkuglvtD`fzLOk%}+_`t|%-=J2&OIZ;vMdo};c!^g z{A@P6wEu)0s2!{@`L+{7q0lY3e~T5T+ySrm9R1UaudVOvt&z;c(VG<1annQBq+Zj|W8+ z=KFm72W~Y^JAq_Nt`e=tJV4*+=orXaiZeD$7SP{N=3XdG_%>9hB?u7NmM42 z%^u-ra96bRYPFg)^%z_z2BN-VI}(YIR;#rD_M>p%4%X)trVkoa!-#E)Ua!{xw*VW9 z#aO=KG4=!BfK!01f_9Ise}o}gt@atfB8fy|DhmCq4>$wJIwTi{s8p(RfJHKy3_ELc z{X__~YcpcMD-{aGCAcrVuD8IA(D}SwLi`%zgXsXc1X#|KP1sq)xQtG?eRShOjCOx1 zKX}IyUhCh81p)zOwOaku>-Emz(7C6N?qBeB{;*gq@q9i%Sh|T1e+GlJ!C-jfcDsp2 zqxqY?cV(D_AqdV!qY>@*`(tiDT@(iE#hv$Nt(@Ok17mmu6v`=h|imp%VmOomxh_&X0s88!$EX9-FK=m zwOSo_I-S4$e*a5YJ8zzSL<_RQ&w9On-|cp{|GPu Xys3LFN$(*;00000NkvXXu0mjf3m{>- delta 698 zcmV;r0!97*1=Iy0iBL{Q4GJ0x0000DNk~Le0000a0000a2nGNE0O0_bn2{kUe|AYk zK~#9!>{!jKQb81->&=fFNs5G^t3rKKiOzB(zMIvTC(kA4Xqk{XM`e=h^(ckPA8lYSK1GU!y5pi*X#eV8;wSM zMuNfM&83{EHk(c1*BmT6KYPDLLhV&)Rb{XCl}beo1Ogu|7K4DeleH{vgBGWUCFoEctm&@fdoUG7$+2Loy gfzZAZ`X#^sxwGbS5WlxqR{#J207*qoM6N<$f;DhW5C8xG diff --git a/core/res/res/drawable-hdpi/stat_sys_download_anim5.png b/core/res/res/drawable-hdpi/stat_sys_download_anim5.png old mode 100644 new mode 100755 index ced2bb217de5efff59721ef539116fc315c0717f..eabe0ef24bc6b8e05e5ccf491923bb3f50894355 GIT binary patch delta 770 zcmV+d1O5Ey1)K&UiBL{Q4GJ0x0000DNk~Le0000c0000c2nGNE0H{6bu8|=qf4)gX zK~#9!>{v^yQc)D%$M*~J!Bxb^L_8)t2r8G$jN>Ym3Q8uEl%oZ_1Dq}D*T5zOpPb)dFq}g!6J%3 zyWM_iG#atJQMFn{Sh(D$D3wZNwOWzG;Xpc_?t+yVgqTyO)A`%)_dkU5<`zR+;1zy0 zo6SpznXd&6N%44mmve;@iNt{v^S8bJ_l-T0UgjSp1NTTmDAlAtG9^&AB8<{<mG zKS$_}+>WVK>J-%3hF9nLeEx%6f4>?zr!1LFGN69lG|^(Q$f-sMC6P$*9kbc&wJnp$ z@VZngX;j~`*=)vZuh%QG-AW8?8vND>#pCfK{)lR|iW8D`?5ES|Jpj?^bZd5l!GP~b zBoeu=>I&hYt9sQgwEaJXg25oh%`pIT&=0if^?FeZEeJ8t9*-aP`C6$|e^^Bc`Tc%$ zEQ;9qeEz2u`Yz~yx6x>@iUl<|<6xi%%K`0nJ8?K1B%MyLwZmtl(MT*7%QZRdCzT8@ zn5m`0tgVX7J1E7dzv$;m5TCLLMJ8ZYDZ-lH` zX0zGef_f#4p_OEr?RLAbe^o24X0zD=>ZdSUF9^OL4u>yP&D1bp3y%0>Jm!Ty{j+TK`jbIjphja+;~Iu`Fwma#vJBy zxpDCGNiAfxT18ik zT?7gBdc6~v=%;?a|40%cxXWPi4B=LGIvvG7b2yGeVh;g04*OR^kkEL|Fbo-w$BGle zTF0`i^lD$P*V%A5d<6wE1VxdIMkAus4+)dWMBHvS84LzrV5L~eF$A5S1OkC~(P%Wj zxYH;musWY>wc1OZB&?#}Wrv>)2SWQw=(hj^01}#{kM8PRxBvhE07*qoM6N<$f~|K@ A_W%F@ diff --git a/core/res/res/drawable-hdpi/stat_sys_upload_anim0.png b/core/res/res/drawable-hdpi/stat_sys_upload_anim0.png old mode 100644 new mode 100755 index 4b7e9428717d3ff8f8755731870208ce476a15fa..d72afbeb053af8b6917917104ad5b4c5054cce2f GIT binary patch delta 789 zcmV+w1M2+$1+NAniBL{Q4GJ0x0000DNk~Le0000c0000c2nGNE0H{6bu8|=qf6+-q zK~#9!V*LOAKLaHoARvGu{TnuHz$(tfFh~J49mYJU9QN9V;y+NDffS4juu#Ea zIY4SMlsg$3auWwM#5_GcL;n8#I~j->l9G}bKr|3f0OAlRn;@ooh`G7B=>nBoXJ=rlKKA$b2Zt62fM^gO8X6#Ze!7Mj z(7-Mrl?if0c6K(39Ektx*Dr>R8#g8cxxauoiyS*hc9@Ng4aiZT1kVr}8j4j-R8$nh z%a<=1jvP6X3FLkU;$oUcrKP21H88YFK~d1t)59PmBZF0)xVSjDMu0|Fe-RK@lNyyo zJIvJ7wDixPKP^DaP+VNhU}0f_S3O9+y1JSHq#mlT0?J0gxBw$Db)})9p$(8a3}S0) zYQn|C!oslDm7w}>)v8r+{`KqEVN3@gK8URL{Q2|br!k<q0|Af5QN+K0E^=Zrr$mO)ZRRf}ELw_yW3GZ2C#cl|Tbf3{_E4 z!56|XCfNln*(E=|go{sZ)M10pVfYG1d~%~9Ht0fZ)M4a0jFpvjaCP5+osj7SdO*`D z=_N5z+7oAFWTZ$xF8c> z7#PF?)0+xCLJL?b+{v~U8bJ{488xd1iLR)iCl@pr2^jPwtC9Qw@fJut1QG(tNmvj(2LC`Hup(@3 z1_C)KUc3c_;7t%jbVb;Mi8=TU!sw`UszetRLuTFCi2(~9)m_uw^QNY{rg|7kDcL7s z$)3r9kR*f{hLP3}oMqW5e`-+};V#=13WeesfUe->ZPuIb_+2NeRH{b+iipKx zblC(pfFv%<px$n|6i=tqpCt9rs#vYo8>I`KPDhMJ<6I{a31Knh^Z6dMe_E}J>2!K3=7|E+ zM7!Po4u^u*utP5e2Q>`-45fn$3awiwx=lj8Uhfnh^h>|re=LZQ$Kz3fa^b7&bULD+ zyJoW)5_1CZKHOgkb-UfUhGKnQ^N1}SG8_(xSU)7N zelnR%WH1;M!Bd>zI~amVFYI>vx!3D`vZ#MV6Y$QrN~Q7+ANEeR{o!ZBfzZAY`Ypf! XEtn6lN&Pns00000NkvXXu0mjfc+N=V diff --git a/core/res/res/drawable-hdpi/stat_sys_upload_anim1.png b/core/res/res/drawable-hdpi/stat_sys_upload_anim1.png old mode 100644 new mode 100755 index a416350b4e0a2f6ae1cad3597018c744670d5caa..5de28735484d359417c51027af524e540001614c GIT binary patch delta 804 zcmV+<1Ka$A2EGO%iBL{Q4GJ0x0000DNk~Le0000c0000c2nGNE0H{6bu8|=qf8a?( zK~#9!V*LOAKLaHoARvGu{TnuHz$(tfFh~J49mYJU9QN9V;y+NDffS4juu#Ea zIY4SMlsg$3auWwM#5_GcL;n8#I~j->l9G}bKr|3f0OAlRn;@ooh`G7B=>nBoXJ=rlKKA$b2Zt62fM^gO8X6#Ze!7Mj z(7-Mrl?if0c6K(39Ektx*Dr>R8#g8cxxauoiyS*hc9@Ng4aiZT1kVr}8j4j-R8$nh z%a<=1jvP6X3FLkU;$oUcrKP21H88YFK~d1t)59PmBZF0)xVSjDMu0|Fe-RK@lNyyo zJIvJ7wDixPKP^DaP+VNhU}0f_S3O9+y1JSHq#mlT0?J0gxBw$Db)})9p$(8a3}S0) zYQn|C!oslDm7w}>)v8r+{`KqEVN3@gK8URL{Q2|br!k<q0|Af5QN+K0E^=Zrr$mO)ZRRf}ELw_yW3GZ2C#cl|Tbf3{_E4 z!56|XCfNln*(E=|go{sZ)M10pVfYG1d~%~9#>2ydS)DL34ZOp!g$@e~%fLGfTY6$- zWE^;hVRHmE5Bc(lYN}~;z{e!kAjuK)ne=aU;uU@@s|Ni}Z z2#_mBCpSFe;^JB4B60ozgGe}BGGRVrx zg6iD4I332p!BHb8C-=p`z#tZw-c;xjTEJ4_&YL%H7JU8swS%e!Y-3|1CFzQxxw)A( iB|ojepe^|U0t^5T;SA*Gq%=(c0000{z{v8bK7FT{WkLL{C)E$^#8X0tT(*G!lEU3nUhSgg{aWf?yf^2Lgc;A?XYR zQYbc7rV4g~Afjh;g^4Nr24VeV@@8>m6(M_jdwU-E;K!SJJ2U&+nKy6VEQK*fha@yQ zFgX&Eg%Cwiii07fP$*u~G`%ERe-cJymx+Z+rFsFtJiNZicja9ANh}2X0sMuyvmIq=8m(<-fKvb=aapg|=R#*lDYW5w&?+gr z-R_5MXXSSH`Fze18dR&*e=9M8S}CRzH#564MC!Y?drycKNoYb|yjU!@?6cX7B~&h# z$D%U_u_A`2kkofoe<(Ln-qjZEm=4m-Ww?Sfv`|0 z%w_eVNF?$G)cZY;()oP;tL#qAiQR6$R=6-249ILYvpSQ>2=k#pe<1Lv+wFc?E|=$0 z-YAH_^?JQua4C2T$IPW*r-sJgAa(FSqIKgyw@YX^9G=66ejklSPX!V3`Ft8s9cpPdrn~c}%t>|<*52PJvGMON$ zen^n~$zrjf@pxQ?Kbc|#`w(<`<#akP{C@wlb^arn!0h~NG#Ves$KJ}eKmKeu5;`9V;y+NDffS4juu#Ea zIY4SMlsg$3auWwM#5_GcL;n8#I~j->l9G}bKr|3f0OAlRn;@ooh`G7B=>nBoXJ=rlKKA$b2Zt62fM^gO8X6#Ze!7Mj z(7-Mrl?if0c6K(39Ektx*Dr>R8#g8cxxauoiyS*hc9@Ng4aiZT1kVr}8j4j-R8$nh z%a<=1jvP6X3FLkU;$oUcrKP21H88YFK~d1t)59PmBZF0)xVSjDMu0|Fe-RK@lNyyo zJIvJ7wDixPKP^DaP+VNhU}0f_S3O9+y1JSHq#mlT0?J0gxBw$Db)})9p$(8a3}S0) zYQn|C!oslDm7w}>)v8r+{`KqEVN3@gK8URL{Q2|br!k<q0|Af5QN+K0E^=Zrr$mO)ZRRf}ELw_yW3GZ2C#cl|Tbf3{_E4 z!56|XCfNln*(E=|go{s(ZVr={mc~pUjEn>CFl=dbKph4v9I+LW%*@OKA7a=XMrl8S zDk1ji(PQdA~&!0bwvaqlW zNSXpxahy2IFi%u;}a8uj%S2pq&iw-o5*d(_z5w*a9ITAy9lXJb(V20YuXh zu(Pu>NJ>gF$jZtx@bK`=#py5(4vrc*Ik_(e1_rUf^rk|O&;phUciy~tv*7F3uN_n^ vU>h47DM?oh&CSiUDfwvy25rd?5MThSn+-TKz&(Kg0000<2SrXqu0mjftS4rJ delta 748 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 delta 736 zcmV<60w4X52KogdiBL{Q4GJ0x0000DNk~Le0000a0000a2nGNE0O0_bn2{kUf1F7~ zK~#9!>{v^S+E5g}#>c3j^??eyazKlff<;#{TA_P!Q7E)723iVJ=+=GzL01)Fy0g%o z;>O*8P}~Vp5gid`VQUM%L43qVdXDIzj-{DQCRp&m$GJJVx%qPMcTR31Vi<<(lTl>P z>_A8mLL!k!yf=izV)09gqNeD1e_@1K#uZYj^aX%f!|7edLx{Mhy;7-s4DLI&WilC| zX?k_)*C zj7H-J0D~wL3e39I>vd*z4*PM@(5*UKES9$b29Zc4m|d1mrZPyS-l}d%?P1HD;)9E~d<|C|yfS-V0PyqP1)*#<+Y^*f zCX<<=eo(|)uag_P5@gAC3Hom_!3kBXRbB~k+I|Fs!JUP2y%45SDOxZ>XrWN(HMp}K zr=rPZ^0S~bv~D(=?N;SNuh$ck$+YmXSd5*9{C@w#Mx${)olZ~qfBd4rGSO@{zrjbr z8_3X0)}n^aUtsIt)@rqPE_B<3I-Sl5Jm}YMxBG+@A+Oh~0O!V~Y_(dve|ODhGbH8$ z;C+VwB-C!V7ha)IEcQHnn_Mm@!{Ly99V(a0LyyOk(`Ynq*mjV9zfbu3A%XiRv)N2~ zyYRFncaM3G=HpB7B=kq;X?tgeQn4ODKsq_vX_FmHd@U!7SXx|9^5nuqPxc%h` SV7|ft0000