diff options
158 files changed, 1277 insertions, 638 deletions
diff --git a/Android.mk b/Android.mk index 4e77679f2323..29c8cb4a567d 100644 --- a/Android.mk +++ b/Android.mk @@ -360,7 +360,7 @@ framework_docs_LOCAL_DROIDDOC_OPTIONS := \ -since ./frameworks/base/api/6.xml 6 \ -since ./frameworks/base/api/7.xml 7 \ -since ./frameworks/base/api/8.xml 8 \ - -error 1 -error 2 -warning 3 -error 4 -error 6 -error 8 \ + -error 1 -error 2 -warning 3 -error 4 -error 6 -error 8 -error 14 \ -overview $(LOCAL_PATH)/core/java/overview.html framework_docs_LOCAL_ADDITIONAL_JAVA_DIR:=$(call intermediates-dir-for,JAVA_LIBRARIES,framework) diff --git a/api/current.xml b/api/current.xml index a495d047eb0e..fbdf02abdddf 100644 --- a/api/current.xml +++ b/api/current.xml @@ -96234,7 +96234,7 @@ type="java.lang.String" transient="false" volatile="false" - value=""id"" + value=""_id"" static="true" final="true" deprecated="not deprecated" @@ -405238,7 +405238,7 @@ synchronized="false" static="false" final="false" - deprecated="not deprecated" + deprecated="deprecated" visibility="protected" > <parameter name="pattern" type="java.lang.String"> diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index 373142dad008..f8407c22d7ec 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -3107,6 +3107,8 @@ public final class ActivityThread { /** * For system applications on userdebug/eng builds, log stack * traces of disk and network access to dropbox for analysis. + * + * Similar logic exists in SystemServer.java. */ if ((data.appInfo.flags & (ApplicationInfo.FLAG_SYSTEM | diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java index 63ad92a3b41e..856943d5f380 100644 --- a/core/java/android/app/Notification.java +++ b/core/java/android/app/Notification.java @@ -111,9 +111,8 @@ public class Notification implements Parcelable /** * An intent to launch instead of posting the notification to the status bar. * Only for use with extremely high-priority notifications demanding the user's - * <strong>immediate</strong>attention, such as an incoming phone call or + * <strong>immediate</strong> attention, such as an incoming phone call or * alarm clock that the user has explicitly set to a particular time. - * call (handled in the core Android Phone app with a full-screen Activity). * If this facility is used for something else, please give the user an option * to turn it off and use a normal notification, as this can be extremely * disruptive. diff --git a/core/java/android/net/ConnectivityManager.java b/core/java/android/net/ConnectivityManager.java index 280ded6bcc94..331ce10a64a2 100644 --- a/core/java/android/net/ConnectivityManager.java +++ b/core/java/android/net/ConnectivityManager.java @@ -102,6 +102,14 @@ public class ConnectivityManager * it with {@link android.content.Intent#getStringExtra(String)}. */ public static final String EXTRA_EXTRA_INFO = "extraInfo"; + /** + * The lookup key for an int that provides information about + * our connection to the internet at large. 0 indicates no connection, + * 100 indicates a great connection. Retrieve it with + * {@link android.content.Intent@getIntExtra(String)}. + * {@hide} + */ + public static final String EXTRA_INET_CONDITION = "inetCondition"; /** * Broadcast Action: The setting for background data usage has changed @@ -524,5 +532,17 @@ public class ConnectivityManager } catch (RemoteException e) { return TETHER_ERROR_SERVICE_UNAVAIL; } - } + } + + /** + * @param networkType The type of network you want to report on + * @param percentage The quality of the connection 0 is bad, 100 is good + * {@hide} + */ + public void reportInetCondition(int networkType, int percentage) { + try { + mService.reportInetCondition(networkType, percentage); + } catch (RemoteException e) { + } + } } diff --git a/core/java/android/net/DownloadManager.java b/core/java/android/net/DownloadManager.java index cafe0f955245..e04367a9995b 100644 --- a/core/java/android/net/DownloadManager.java +++ b/core/java/android/net/DownloadManager.java @@ -21,6 +21,7 @@ import android.content.ContentValues; import android.database.Cursor; import android.database.CursorWrapper; import android.os.ParcelFileDescriptor; +import android.provider.BaseColumns; import android.provider.Downloads; import java.io.File; @@ -48,7 +49,7 @@ public class DownloadManager { * An identifier for a particular download, unique across the system. Clients use this ID to * make subsequent calls related to the download. */ - public final static String COLUMN_ID = "id"; + public final static String COLUMN_ID = BaseColumns._ID; /** * The client-supplied title for this download. This will be displayed in system notifications. @@ -441,8 +442,22 @@ public class DownloadManager { * This class may be used to filter download manager queries. */ public static class Query { - private Long mId; + /** + * Constant for use with {@link #orderBy} + * @hide + */ + public static final int ORDER_ASCENDING = 1; + + /** + * Constant for use with {@link #orderBy} + * @hide + */ + public static final int ORDER_DESCENDING = 2; + + private Long mId = null; private Integer mStatusFlags = null; + private String mOrderByColumn = Downloads.COLUMN_LAST_MODIFICATION; + private int mOrderDirection = ORDER_DESCENDING; /** * Include only the download with the given ID. @@ -464,6 +479,32 @@ public class DownloadManager { } /** + * Change the sort order of the returned Cursor. + * + * @param column one of the COLUMN_* constants; currently, only + * {@link #COLUMN_LAST_MODIFIED_TIMESTAMP} and {@link #COLUMN_TOTAL_SIZE_BYTES} are + * supported. + * @param direction either {@link #ORDER_ASCENDING} or {@link #ORDER_DESCENDING} + * @return this object + * @hide + */ + public Query orderBy(String column, int direction) { + if (direction != ORDER_ASCENDING && direction != ORDER_DESCENDING) { + throw new IllegalArgumentException("Invalid direction: " + direction); + } + + if (column.equals(COLUMN_LAST_MODIFIED_TIMESTAMP)) { + mOrderByColumn = Downloads.COLUMN_LAST_MODIFICATION; + } else if (column.equals(COLUMN_TOTAL_SIZE_BYTES)) { + mOrderByColumn = Downloads.COLUMN_TOTAL_BYTES; + } else { + throw new IllegalArgumentException("Cannot order by " + column); + } + mOrderDirection = direction; + return this; + } + + /** * Run this query using the given ContentResolver. * @param projection the projection to pass to ContentResolver.query() * @return the Cursor returned by ContentResolver.query() @@ -497,7 +538,10 @@ public class DownloadManager { } selection = joinStrings(" OR ", parts); } - String orderBy = Downloads.COLUMN_LAST_MODIFICATION + " DESC"; + + String orderDirection = (mOrderDirection == ORDER_ASCENDING ? "ASC" : "DESC"); + String orderBy = mOrderByColumn + " " + orderDirection; + return resolver.query(uri, projection, selection, null, orderBy); } @@ -567,6 +611,9 @@ public class DownloadManager { */ public Cursor query(Query query) { Cursor underlyingCursor = query.runQuery(mResolver, UNDERLYING_COLUMNS); + if (underlyingCursor == null) { + return null; + } return new CursorTranslator(underlyingCursor); } @@ -608,7 +655,7 @@ public class DownloadManager { public int getColumnIndexOrThrow(String columnName) throws IllegalArgumentException { int index = getColumnIndex(columnName); if (index == -1) { - throw new IllegalArgumentException(); + throw new IllegalArgumentException("No such column: " + columnName); } return index; } diff --git a/core/java/android/net/IConnectivityManager.aidl b/core/java/android/net/IConnectivityManager.aidl index b05c2edd103b..b734ac7ebb9c 100644 --- a/core/java/android/net/IConnectivityManager.aidl +++ b/core/java/android/net/IConnectivityManager.aidl @@ -72,4 +72,6 @@ interface IConnectivityManager String[] getTetherableUsbRegexs(); String[] getTetherableWifiRegexs(); + + void reportInetCondition(int networkType, int percentage); } diff --git a/core/java/android/net/NetworkStateTracker.java b/core/java/android/net/NetworkStateTracker.java index 0277d2daa482..c5a327744bb8 100644 --- a/core/java/android/net/NetworkStateTracker.java +++ b/core/java/android/net/NetworkStateTracker.java @@ -62,6 +62,15 @@ public abstract class NetworkStateTracker extends Handler { public static final int EVENT_ROAMING_CHANGED = 5; public static final int EVENT_NETWORK_SUBTYPE_CHANGED = 6; public static final int EVENT_RESTORE_DEFAULT_NETWORK = 7; + /** + * arg1: network type + * arg2: condition (0 bad, 100 good) + */ + public static final int EVENT_INET_CONDITION_CHANGE = 8; + /** + * arg1: network type + */ + public static final int EVENT_INET_CONDITION_HOLD_END = 9; public NetworkStateTracker(Context context, Handler target, diff --git a/core/java/android/os/BatteryStats.java b/core/java/android/os/BatteryStats.java index 32fb108c593c..f5b1e57ca693 100644 --- a/core/java/android/os/BatteryStats.java +++ b/core/java/android/os/BatteryStats.java @@ -1585,10 +1585,10 @@ public abstract class BatteryStats implements Parcelable { sb.append(ent.getKey()); sb.append(":\n"); sb.append(prefix); sb.append(" CPU: "); formatTime(sb, userTime); sb.append("usr + "); - formatTime(sb, systemTime); sb.append("krn\n"); + formatTime(sb, systemTime); sb.append("krn"); if (starts != 0) { - sb.append(prefix); sb.append(" "); sb.append(starts); - sb.append(" proc starts"); + sb.append("\n"); sb.append(prefix); sb.append(" "); + sb.append(starts); sb.append(" proc starts"); } pw.println(sb.toString()); for (int e=0; e<numExcessive; e++) { diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index 7c80420e1a83..f37ef99391a8 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -3427,6 +3427,21 @@ public final class Settings { public static final String DOWNLOAD_MAX_BYTES_OVER_MOBILE = "download_manager_max_bytes_over_mobile"; + /** + * ms during which to consume extra events related to Inet connection condition + * after a transtion to fully-connected + * @hide + */ + public static final String INET_CONDITION_DEBOUNCE_UP_DELAY = + "inet_condition_debounce_up_delay"; + + /** + * ms during which to consume extra events related to Inet connection condtion + * after a transtion to partly-connected + * @hide + */ + public static final String INET_CONDITION_DEBOUNCE_DOWN_DELAY = + "inet_condition_debounce_down_delay"; /** * @hide diff --git a/core/java/android/server/BluetoothEventLoop.java b/core/java/android/server/BluetoothEventLoop.java index e1d3f13cacce..094258b5c022 100644 --- a/core/java/android/server/BluetoothEventLoop.java +++ b/core/java/android/server/BluetoothEventLoop.java @@ -404,7 +404,13 @@ class BluetoothEventLoop { mBluetoothService.sendUuidIntent(address); } else if (name.equals("Paired")) { if (propValues[1].equals("true")) { - mBluetoothService.getBondState().setBondState(address, BluetoothDevice.BOND_BONDED); + // If locally initiated pairing, we will + // not go to BOND_BONDED state until we have received a + // successful return value in onCreatePairedDeviceResult + if (null == mBluetoothService.getBondState().getPendingOutgoingBonding()) { + mBluetoothService.getBondState().setBondState(address, + BluetoothDevice.BOND_BONDED); + } } else { mBluetoothService.getBondState().setBondState(address, BluetoothDevice.BOND_NONE); diff --git a/core/java/android/webkit/CacheManager.java b/core/java/android/webkit/CacheManager.java index d5058b0e0f8e..d17199028658 100644 --- a/core/java/android/webkit/CacheManager.java +++ b/core/java/android/webkit/CacheManager.java @@ -284,7 +284,7 @@ public final class CacheManager { // only called from WebCore Thread // make sure to call startCacheTransaction/endCacheTransaction in pair /** - * @deprecated + * @deprecated Always returns false. */ @Deprecated public static boolean startCacheTransaction() { @@ -294,7 +294,7 @@ public final class CacheManager { // only called from WebCore Thread // make sure to call startCacheTransaction/endCacheTransaction in pair /** - * @deprecated + * @deprecated Always returns false. */ @Deprecated public static boolean endCacheTransaction() { diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java index 3428206470b0..e97bbfb89116 100644 --- a/core/java/android/widget/TextView.java +++ b/core/java/android/widget/TextView.java @@ -5761,18 +5761,25 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener } private void convertFromViewportToContentCoordinates(Rect r) { - int paddingTop = getExtendedPaddingTop(); - if ((mGravity & Gravity.VERTICAL_GRAVITY_MASK) != Gravity.TOP) { - paddingTop += getVerticalOffset(false); - } - r.top += paddingTop; - r.bottom += paddingTop; + final int horizontalOffset = viewportToContentHorizontalOffset(); + r.left += horizontalOffset; + r.right += horizontalOffset; - int paddingLeft = getCompoundPaddingLeft(); - r.left += paddingLeft; - r.right += paddingLeft; + final int verticalOffset = viewportToContentVerticalOffset(); + r.top += verticalOffset; + r.bottom += verticalOffset; + } - r.offset(-mScrollX, -mScrollY); + private int viewportToContentHorizontalOffset() { + return getCompoundPaddingLeft() - mScrollX; + } + + private int viewportToContentVerticalOffset() { + int offset = getExtendedPaddingTop() - mScrollY; + if ((mGravity & Gravity.VERTICAL_GRAVITY_MASK) != Gravity.TOP) { + offset += getVerticalOffset(false); + } + return offset; } @Override @@ -6492,6 +6499,8 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener if (!mFrozenWithFocus || (selStart < 0 || selEnd < 0)) { // Has to be done before onTakeFocus, which can be overloaded. if (mLastTouchOffset >= 0) { + // Can happen when a TextView is displayed after its content has been deleted. + mLastTouchOffset = Math.min(mLastTouchOffset, mText.length()); Selection.setSelection((Spannable) mText, mLastTouchOffset); } @@ -6508,7 +6517,8 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener // ExtractEditText clears focus, which gives focus to the ExtractEditText. // This special case ensure that we keep current selection in that case. // It would be better to know why the DecorView does not have focus at that time. - if (((this instanceof ExtractEditText) || mSelectionMoved) && selStart >= 0 && selEnd >= 0) { + if (((this instanceof ExtractEditText) || mSelectionMoved) && + selStart >= 0 && selEnd >= 0) { /* * Someone intentionally set the selection, so let them * do whatever it is that they wanted to do instead of @@ -6621,6 +6631,8 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener if (start == end) { if (start >= prevStart && start < prevEnd) { + // Restore previous selection + Selection.setSelection((Spannable)mText, prevStart, prevEnd); // Tapping inside the selection displays the cut/copy/paste context menu. showContextMenu(); return; @@ -7651,9 +7663,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener bounds.right = bounds.left + drawableWidth; bounds.bottom = bounds.top + drawableHeight; - int boundTopBefore = bounds.top; convertFromViewportToContentCoordinates(bounds); - mHotSpotVerticalPosition += bounds.top - boundTopBefore; mDrawable.setBounds(bounds); postInvalidate(); } @@ -7797,6 +7807,9 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener mOffsetX = (bounds.left + bounds.right) / 2.0f - x; mOffsetY = mHandle.mHotSpotVerticalPosition - y; + mOffsetX += viewportToContentHorizontalOffset(); + mOffsetY += viewportToContentVerticalOffset(); + mOnDownTimerStart = event.getEventTime(); } break; @@ -7986,6 +7999,9 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener mOffsetX = (bounds.left + bounds.right) / 2.0f - x; mOffsetY = draggedHandle.mHotSpotVerticalPosition - y; + mOffsetX += viewportToContentHorizontalOffset(); + mOffsetY += viewportToContentVerticalOffset(); + mOnDownTimerStart = event.getEventTime(); ((ArrowKeyMovementMethod)mMovement).setCursorController(this); } diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java index b73b78ba8960..0ef1ea578eb7 100644 --- a/core/java/com/android/internal/os/BatteryStatsImpl.java +++ b/core/java/com/android/internal/os/BatteryStatsImpl.java @@ -1376,13 +1376,13 @@ public final class BatteryStatsImpl extends BatteryStats { for (int i=0; i<N; i++) { StopwatchTimer st = mPartialTimers.get(i); if (st.mInList) { - int myUTime = utime/num; - int mySTime = stime/num; - utime -= myUTime; - stime -= mySTime; - num--; Uid uid = st.mUid; if (uid != null && uid.mUid != Process.SYSTEM_UID) { + int myUTime = utime/num; + int mySTime = stime/num; + utime -= myUTime; + stime -= mySTime; + num--; Uid.Proc proc = uid.getProcessStatsLocked("*wakelock*"); proc.addCpuTimeLocked(myUTime, mySTime); proc.addSpeedStepTimes(cpuSpeedTimes); @@ -3631,7 +3631,9 @@ public final class BatteryStatsImpl extends BatteryStats { } if (pid >= 0 && type == WAKE_TYPE_PARTIAL) { Pid p = getPidStatsLocked(pid); - p.mWakeStart = SystemClock.elapsedRealtime(); + if (p.mWakeStart == 0) { + p.mWakeStart = SystemClock.elapsedRealtime(); + } } } @@ -3642,7 +3644,7 @@ public final class BatteryStatsImpl extends BatteryStats { } if (pid >= 0 && type == WAKE_TYPE_PARTIAL) { Pid p = mPids.get(pid); - if (p != null) { + if (p != null && p.mWakeStart != 0) { p.mWakeSum += SystemClock.elapsedRealtime() - p.mWakeStart; p.mWakeStart = 0; } diff --git a/core/jni/android/graphics/BitmapFactory.cpp b/core/jni/android/graphics/BitmapFactory.cpp index 254d9a4f8bde..6745b24169c5 100644 --- a/core/jni/android/graphics/BitmapFactory.cpp +++ b/core/jni/android/graphics/BitmapFactory.cpp @@ -16,6 +16,7 @@ #include <utils/ResourceTypes.h> #include <netinet/in.h> #include <sys/mman.h> +#include <sys/stat.h> jclass gOptions_class; jfieldID gOptions_justBoundsFieldID; @@ -559,7 +560,27 @@ static void nativeSetDefaultConfig(JNIEnv* env, jobject, int nativeConfig) { } } -static jobject doBuildTileIndex(JNIEnv* env, SkStream* stream, bool isShareable) { +static SkMemoryStream* buildSkMemoryStream(SkStream *stream) { + size_t bufferSize = 4096; + size_t streamLen = 0; + size_t len; + char* data = (char*)sk_malloc_throw(bufferSize); + + while ((len = stream->read(data + streamLen, + bufferSize - streamLen)) != 0) { + streamLen += len; + if (streamLen == bufferSize) { + bufferSize *= 2; + data = (char*)sk_realloc_throw(data, bufferSize); + } + } + data = (char*)sk_realloc_throw(data, streamLen); + SkMemoryStream* streamMem = new SkMemoryStream(); + streamMem->setMemoryOwned(data, streamLen); + return streamMem; +} + +static jobject doBuildTileIndex(JNIEnv* env, SkStream* stream) { SkImageDecoder* decoder = SkImageDecoder::Factory(stream); int width, height; if (NULL == decoder) { @@ -574,9 +595,10 @@ static jobject doBuildTileIndex(JNIEnv* env, SkStream* stream, bool isShareable) javaAllocator->unref(); javaMemoryReporter->unref(); - if (!decoder->buildTileIndex(stream, &width, &height, isShareable)) { - char msg[1024]; - snprintf(msg, 1023, "Image failed to decode using %s decoder", decoder->getFormatName()); + if (!decoder->buildTileIndex(stream, &width, &height)) { + char msg[100]; + snprintf(msg, sizeof(msg), "Image failed to decode using %s decoder", + decoder->getFormatName()); doThrowIOE(env, msg); return nullObjectReturn("decoder->buildTileIndex returned false"); } @@ -588,13 +610,13 @@ static jobject doBuildTileIndex(JNIEnv* env, SkStream* stream, bool isShareable) static jobject nativeCreateLargeBitmapFromByteArray(JNIEnv* env, jobject, jbyteArray byteArray, int offset, int length, jboolean isShareable) { + /* If isShareable we could decide to just wrap the java array and + share it, but that means adding a globalref to the java array object + For now we just always copy the array's data if isShareable. + */ AutoJavaByteArray ar(env, byteArray); - SkStream* stream = new SkMemoryStream(ar.ptr() + offset, length, false); - SkAutoUnref aur(stream); - if (isShareable) { - aur.detach(); - } - return doBuildTileIndex(env, stream, isShareable); + SkStream* stream = new SkMemoryStream(ar.ptr() + offset, length, true); + return doBuildTileIndex(env, stream); } static jobject nativeCreateLargeBitmapFromFileDescriptor(JNIEnv* env, jobject clazz, @@ -603,24 +625,31 @@ static jobject nativeCreateLargeBitmapFromFileDescriptor(JNIEnv* env, jobject cl jint descriptor = env->GetIntField(fileDescriptor, gFileDescriptor_descriptor); - bool weOwnTheFD = false; - - if (isShareable) { - int newFD = ::dup(descriptor); - if (-1 != newFD) { - weOwnTheFD = true; - descriptor = newFD; + SkStream *stream = NULL; + struct stat fdStat; + int newFD; + if (fstat(descriptor, &fdStat) == -1) { + doThrowIOE(env, "broken file descriptor"); + return nullObjectReturn("fstat return -1"); + } + + if (isShareable && + S_ISREG(fdStat.st_mode) && + (newFD = ::dup(descriptor)) != -1) { + SkFDStream* fdStream = new SkFDStream(newFD, true); + if (!fdStream->isValid()) { + fdStream->unref(); + return NULL; } - } - - SkFDStream* stream = new SkFDStream(descriptor, weOwnTheFD); - SkAutoUnref aur(stream); - if (!stream->isValid()) { - return NULL; - } - - if (isShareable) { - aur.detach(); + stream = fdStream; + } else { + SkFDStream* fdStream = new SkFDStream(descriptor, false); + if (!fdStream->isValid()) { + fdStream->unref(); + return NULL; + } + stream = buildSkMemoryStream(fdStream); + fdStream->unref(); } /* Restore our offset when we leave, so we can be called more than once @@ -629,7 +658,7 @@ static jobject nativeCreateLargeBitmapFromFileDescriptor(JNIEnv* env, jobject cl */ AutoFDSeek as(descriptor); - return doBuildTileIndex(env, stream, isShareable); + return doBuildTileIndex(env, stream); } static jobject nativeCreateLargeBitmapFromStream(JNIEnv* env, jobject clazz, @@ -641,7 +670,8 @@ static jobject nativeCreateLargeBitmapFromStream(JNIEnv* env, jobject clazz, if (stream) { // for now we don't allow shareable with java inputstreams - largeBitmap = doBuildTileIndex(env, stream, false); + SkMemoryStream *mStream = buildSkMemoryStream(stream); + largeBitmap = doBuildTileIndex(env, mStream); stream->unref(); } return largeBitmap; @@ -650,14 +680,12 @@ static jobject nativeCreateLargeBitmapFromStream(JNIEnv* env, jobject clazz, static jobject nativeCreateLargeBitmapFromAsset(JNIEnv* env, jobject clazz, jint native_asset, // Asset jboolean isShareable) { - SkStream* stream; + SkStream* stream, *assStream; Asset* asset = reinterpret_cast<Asset*>(native_asset); - stream = new AssetStreamAdaptor(asset); - SkAutoUnref aur(stream); - if (isShareable) { - aur.detach(); - } - return doBuildTileIndex(env, stream, isShareable); + assStream = new AssetStreamAdaptor(asset); + stream = buildSkMemoryStream(assStream); + assStream->unref(); + return doBuildTileIndex(env, stream); } /////////////////////////////////////////////////////////////////////////////// diff --git a/core/jni/android_server_BluetoothEventLoop.cpp b/core/jni/android_server_BluetoothEventLoop.cpp index 01b671109bcd..db45d6d2577d 100644 --- a/core/jni/android_server_BluetoothEventLoop.cpp +++ b/core/jni/android_server_BluetoothEventLoop.cpp @@ -388,7 +388,7 @@ static void tearDownEventLoop(native_data_t *nat) { LOG_AND_FREE_DBUS_ERROR(&err); } dbus_bus_remove_match(nat->conn, - "type='signal',interface='org.bluez.audio.Device'", + "type='signal',interface='org.bluez.Device'", &err); if (dbus_error_is_set(&err)) { LOG_AND_FREE_DBUS_ERROR(&err); diff --git a/core/res/res/drawable-hdpi/menu_background.9.png b/core/res/res/drawable-hdpi/menu_background.9.png Binary files differindex cbe62af2e61e..60f073192d1f 100644 --- a/core/res/res/drawable-hdpi/menu_background.9.png +++ b/core/res/res/drawable-hdpi/menu_background.9.png diff --git a/core/res/res/drawable-hdpi/menu_background_fill_parent_width.9.png b/core/res/res/drawable-hdpi/menu_background_fill_parent_width.9.png Binary files differindex 0812487b5b24..09eac9b4895f 100644 --- a/core/res/res/drawable-hdpi/menu_background_fill_parent_width.9.png +++ b/core/res/res/drawable-hdpi/menu_background_fill_parent_width.9.png diff --git a/core/res/res/drawable-mdpi/menu_background.9.png b/core/res/res/drawable-mdpi/menu_background.9.png Binary files differindex ee99583594a2..9f16df9aa778 100644 --- a/core/res/res/drawable-mdpi/menu_background.9.png +++ b/core/res/res/drawable-mdpi/menu_background.9.png diff --git a/core/res/res/drawable-mdpi/menu_background_fill_parent_width.9.png b/core/res/res/drawable-mdpi/menu_background_fill_parent_width.9.png Binary files differindex d368983df3e3..da3011b1c3c8 100644 --- a/core/res/res/drawable-mdpi/menu_background_fill_parent_width.9.png +++ b/core/res/res/drawable-mdpi/menu_background_fill_parent_width.9.png diff --git a/core/res/res/layout/launch_warning.xml b/core/res/res/layout/launch_warning.xml new file mode 100644 index 000000000000..1923ff075231 --- /dev/null +++ b/core/res/res/layout/launch_warning.xml @@ -0,0 +1,65 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* Copyright 2010, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ +--> + +<LinearLayout + xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="vertical"> + + <ImageView + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:paddingTop="6dp" + android:paddingBottom="6dp" + android:scaleType="fitXY" + android:gravity="fill_horizontal" + android:src="@android:drawable/divider_horizontal_dark" /> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:paddingTop="10dip" + android:orientation="horizontal"> + <ImageView android:id="@+id/replace_app_icon" + android:layout_width="@android:dimen/app_icon_size" + android:layout_height="@android:dimen/app_icon_size" + android:scaleType="fitCenter" /> + <TextView android:id="@+id/replace_message" + style="?android:attr/textAppearanceMedium" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:padding="5dip" /> + </LinearLayout> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:paddingTop="10dip" + android:orientation="horizontal"> + <ImageView android:id="@+id/original_app_icon" + android:layout_width="@android:dimen/app_icon_size" + android:layout_height="@android:dimen/app_icon_size" + android:scaleType="fitCenter" /> + <TextView android:id="@+id/original_message" + style="?android:attr/textAppearanceMedium" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:padding="5dip" /> + </LinearLayout> +</LinearLayout> diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml index 55d9b6c1636f..dda1fc53b54f 100644 --- a/core/res/res/values-cs/strings.xml +++ b/core/res/res/values-cs/strings.xml @@ -288,10 +288,6 @@ <string name="permdesc_readContacts" msgid="3371591512896545975">"Umožňuje aplikaci načíst všechna data kontaktů (adresy) uložená ve vašem telefonu. Škodlivé aplikace poté mohou dalším lidem odeslat vaše data."</string> <string name="permlab_writeContacts" msgid="644616215860933284">"zápis dat kontaktů"</string> <string name="permdesc_writeContacts" msgid="3924383579108183601">"Umožňuje aplikaci změnit kontaktní údaje (adresu) uložené v telefonu. Škodlivé aplikace mohou pomocí tohoto nastavení vymazat či pozměnit kontaktní údaje."</string> - <string name="permlab_writeOwnerData" msgid="4892555913849295393">"zápis informací o vlastníkovi"</string> - <string name="permdesc_writeOwnerData" msgid="2344055317969787124">"Umožňuje aplikaci změnit informace o vlastníkovi telefonu uložené v telefonu. Škodlivé aplikace mohou pomocí tohoto nastavení vymazat či pozměnit informace o vlastníkovi."</string> - <string name="permlab_readOwnerData" msgid="6668525984731523563">"čtení informací o vlastníkovi"</string> - <string name="permdesc_readOwnerData" msgid="3088486383128434507">"Umožňuje aplikaci číst informace o vlastníkovi telefonu uložená v telefonu. Škodlivé aplikace mohou pomocí tohoto nastavení načíst informace o vlastníkovi."</string> <string name="permlab_readCalendar" msgid="6898987798303840534">"Čtení událostí v kalendáři"</string> <string name="permdesc_readCalendar" msgid="5533029139652095734">"Umožňuje aplikaci načíst všechny události kalendáře uložené ve vašem telefonu. Škodlivé aplikace poté mohou dalším lidem odeslat události z vašeho kalendáře."</string> <string name="permlab_writeCalendar" msgid="3894879352594904361">"Přidávání nebo úprava událostí v kalendáři a odesílání e-mailů hostům"</string> @@ -736,6 +732,12 @@ <string name="force_close" msgid="3653416315450806396">"Ukončit aplikaci"</string> <string name="report" msgid="4060218260984795706">"Nahlásit"</string> <string name="wait" msgid="7147118217226317732">"Počkat"</string> + <!-- no translation found for launch_warning_title (8323761616052121936) --> + <skip /> + <!-- no translation found for launch_warning_replace (6202498949970281412) --> + <skip /> + <!-- no translation found for launch_warning_original (188102023021668683) --> + <skip /> <string name="smv_application" msgid="295583804361236288">"Aplikace <xliff:g id="APPLICATION">%1$s</xliff:g> (proces <xliff:g id="PROCESS">%2$s</xliff:g>) porušila své vlastní vynucené zásady StrictMode."</string> <string name="smv_process" msgid="5120397012047462446">"Proces <xliff:g id="PROCESS">%1$s</xliff:g> porušil své vlastní vynucené zásady StrictMode."</string> <string name="heavy_weight_notification" msgid="9087063985776626166">"Běží aplikace <xliff:g id="APP">%1$s</xliff:g>"</string> diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml index 9e6865ef4f61..7b3e82c270ff 100644 --- a/core/res/res/values-da/strings.xml +++ b/core/res/res/values-da/strings.xml @@ -288,10 +288,6 @@ <string name="permdesc_readContacts" msgid="3371591512896545975">"Tillader, at et program læser alle kontaktdata (adresser), der er gemt på din telefon. Ondsindede programmer kan bruge dette til at sende dine data til andre mennesker."</string> <string name="permlab_writeContacts" msgid="644616215860933284">"skriv kontaktdata"</string> <string name="permdesc_writeContacts" msgid="3924383579108183601">"Tillader, at et program ændrer kontaktdata (adresser), der er gemt på din telefon. Ondsindede programmer kan bruge dette til at slette eller ændre kontaktdata."</string> - <string name="permlab_writeOwnerData" msgid="4892555913849295393">"skriv ejerdata"</string> - <string name="permdesc_writeOwnerData" msgid="2344055317969787124">"Tillader, at et program ændrer rtelefonens ejerdata, der er gemt på din telefon. Ondsindede programmer kan bruge dette til at slette eller ændre ejerdata."</string> - <string name="permlab_readOwnerData" msgid="6668525984731523563">"læs ejerdata"</string> - <string name="permdesc_readOwnerData" msgid="3088486383128434507">"Tillader, at et program læser telefonens ejerdata, der er gemt på din telefon. Ondsindede programmer kan bruge dette til at læse ejerdata."</string> <string name="permlab_readCalendar" msgid="6898987798303840534">"læs kalenderbegivenheder"</string> <string name="permdesc_readCalendar" msgid="5533029139652095734">"Tillader, at et program læser alle kalenderbegivenheder, der er gemt på din telefon. Ondsindede programmer kan bruge dette til at sende dine kalenderbegivenheder til andre mennesker."</string> <string name="permlab_writeCalendar" msgid="3894879352594904361">"tilføj eller rediger kalenderbegivenheder, og send e-mail til gæster"</string> @@ -736,6 +732,12 @@ <string name="force_close" msgid="3653416315450806396">"Tving til at lukke"</string> <string name="report" msgid="4060218260984795706">"Rapporter"</string> <string name="wait" msgid="7147118217226317732">"Vent"</string> + <!-- no translation found for launch_warning_title (8323761616052121936) --> + <skip /> + <!-- no translation found for launch_warning_replace (6202498949970281412) --> + <skip /> + <!-- no translation found for launch_warning_original (188102023021668683) --> + <skip /> <string name="smv_application" msgid="295583804361236288">"Programmet <xliff:g id="APPLICATION">%1$s</xliff:g> (proces <xliff:g id="PROCESS">%2$s</xliff:g>) har overtrådt sin egen StrictMode-politik."</string> <string name="smv_process" msgid="5120397012047462446">"Processen <xliff:g id="PROCESS">%1$s</xliff:g> har overtrådt sin egen StrictMode-politik."</string> <string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> er i gang"</string> diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml index 1e1556ff2a8e..4c5cc8c09ab1 100644 --- a/core/res/res/values-de/strings.xml +++ b/core/res/res/values-de/strings.xml @@ -288,10 +288,6 @@ <string name="permdesc_readContacts" msgid="3371591512896545975">"Ermöglicht einer Anwendung, alle auf Ihrem Telefon gespeicherten Kontaktdaten (Adressen) zu lesen. Schädliche Anwendungen können so Ihre Daten an andere Personen senden."</string> <string name="permlab_writeContacts" msgid="644616215860933284">"Kontaktdaten schreiben"</string> <string name="permdesc_writeContacts" msgid="3924383579108183601">"Ermöglicht einer Anwendung, die auf Ihrem Telefon gespeicherten Kontaktdaten (Adressen) zu ändern. Schädliche Anwendungen können so Ihre Kontaktdaten löschen oder verändern."</string> - <string name="permlab_writeOwnerData" msgid="4892555913849295393">"Eigentümerdaten schreiben"</string> - <string name="permdesc_writeOwnerData" msgid="2344055317969787124">"Ermöglicht einer Anwendung, die auf Ihrem Telefon gespeicherten Eigentümerdaten zu ändern. Schädliche Anwendungen können so Eigentümerdaten löschen oder verändern."</string> - <string name="permlab_readOwnerData" msgid="6668525984731523563">"Eigentümerdaten lesen"</string> - <string name="permdesc_readOwnerData" msgid="3088486383128434507">"Ermöglicht einer Anwendung, die auf Ihrem Telefon gespeicherten Eigentümerdaten zu lesen. Schädliche Anwendungen können so Eigentümerdaten lesen."</string> <string name="permlab_readCalendar" msgid="6898987798303840534">"Kalendereinträge lesen"</string> <string name="permdesc_readCalendar" msgid="5533029139652095734">"Ermöglicht einer Anwendung, alle auf Ihrem Telefon gespeicherten Kalenderereignisse zu lesen. Schädliche Anwendungen können so Ihre Kalenderereignisse an andere Personen senden."</string> <string name="permlab_writeCalendar" msgid="3894879352594904361">"Kalendereinträge hinzufügen oder ändern und E-Mails an Gäste senden"</string> @@ -736,6 +732,12 @@ <string name="force_close" msgid="3653416315450806396">"Schließen erzwingen"</string> <string name="report" msgid="4060218260984795706">"Bericht"</string> <string name="wait" msgid="7147118217226317732">"Warten"</string> + <!-- no translation found for launch_warning_title (8323761616052121936) --> + <skip /> + <!-- no translation found for launch_warning_replace (6202498949970281412) --> + <skip /> + <!-- no translation found for launch_warning_original (188102023021668683) --> + <skip /> <string name="smv_application" msgid="295583804361236288">"Die Anwendung <xliff:g id="APPLICATION">%1$s</xliff:g> (Prozess <xliff:g id="PROCESS">%2$s</xliff:g>) hat gegen ihre selbsterzwungene StrictMode-Richtlinie verstoßen."</string> <string name="smv_process" msgid="5120397012047462446">"Der Prozess <xliff:g id="PROCESS">%1$s</xliff:g> hat gegen seine selbsterzwungene StrictMode-Richtlinie verstoßen."</string> <string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> läuft"</string> diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml index a0bb65b1c01f..45863e72a872 100644 --- a/core/res/res/values-el/strings.xml +++ b/core/res/res/values-el/strings.xml @@ -288,10 +288,6 @@ <string name="permdesc_readContacts" msgid="3371591512896545975">"Επιτρέπει σε μια εφαρμογή την ανάγνωση όλων των δεδομένων επαφής (διεύθυνσης) που είναι αποθηκευμένα στο τηλέφωνό σας. Κακόβουλες εφαρμογές μπορούν να το χρησιμοποιήσουν για να αποστείλουν τα δεδομένα σας σε τρίτους."</string> <string name="permlab_writeContacts" msgid="644616215860933284">"εγγραφή δεδομένων επαφής"</string> <string name="permdesc_writeContacts" msgid="3924383579108183601">"Επιτρέπει σε μια εφαρμογή να τροποποιεί τα δεδομένα επαφής (διεύθυνσης) που είναι αποθηκευμένα στο τηλέφωνό σας. Κακόβουλες εφαρμογές μπορούν να το χρησιμοποιήσουν για να διαγράψουν ή να τροποποιήσουν τα δεδομένα επαφών σας."</string> - <string name="permlab_writeOwnerData" msgid="4892555913849295393">"εγγραφή δεδομένων κατόχου"</string> - <string name="permdesc_writeOwnerData" msgid="2344055317969787124">"Επιτρέπει σε μια εφαρμογή να τροποποιήσει τα δεδομένα κατόχου τηλεφώνου στο τηλέφωνό σας. Κακόβουλες εφαρμογές μπορούν να το χρησιμοποιήσουν για να τροποποιήσουν τα δεδομένα κατόχου."</string> - <string name="permlab_readOwnerData" msgid="6668525984731523563">"ανάγνωση δεδομένων κατόχου"</string> - <string name="permdesc_readOwnerData" msgid="3088486383128434507">"Επιτρέπει σε μια εφαρμογή την ανάγνωση των δεδομένων κατόχου τηλεφώνου που είναι αποθηκευμένα στο τηλέφωνό σας. Κακόβουλες εφαρμογές μπορούν να το χρησιμοποιήσουν για την ανάγνωση δεδομένων κατόχου τηλεφώνου."</string> <string name="permlab_readCalendar" msgid="6898987798303840534">"ανάγνωση συμβάντων ημερολογίου"</string> <string name="permdesc_readCalendar" msgid="5533029139652095734">"Επιτρέπει σε μια εφαρμογή να αναγνώσει όλα τα συμβάντα ημερολογίου που είναι αποθηκευμένα στο τηλέφωνό σας. Κακόβουλες εφαρμογές μπορούν να το χρησιμοποιήσουν για να αποστείλουν συμβάντα ημερολογίου σε άλλους χρήστες."</string> <string name="permlab_writeCalendar" msgid="3894879352594904361">"προσθήκη ή τροποποίηση συμβάντων του ημερολογίου και αποστολή μηνυμάτων ηλεκτρονικού ταχυδρομείου στους προσκεκλημένους"</string> @@ -736,6 +732,12 @@ <string name="force_close" msgid="3653416315450806396">"Αναγκαστικό κλείσιμο"</string> <string name="report" msgid="4060218260984795706">"Αναφορά"</string> <string name="wait" msgid="7147118217226317732">"Αναμονή"</string> + <!-- no translation found for launch_warning_title (8323761616052121936) --> + <skip /> + <!-- no translation found for launch_warning_replace (6202498949970281412) --> + <skip /> + <!-- no translation found for launch_warning_original (188102023021668683) --> + <skip /> <string name="smv_application" msgid="295583804361236288">"Η εφαρμογή <xliff:g id="APPLICATION">%1$s</xliff:g> (διεργασία <xliff:g id="PROCESS">%2$s</xliff:g>) παραβίασε την αυτοεπιβαλόμενη πολιτική StrictMode."</string> <string name="smv_process" msgid="5120397012047462446">"Η διεργασία <xliff:g id="PROCESS">%1$s</xliff:g> παραβίασε την αυτοεπιβαλόμενη πολιτική StrictMode."</string> <string name="heavy_weight_notification" msgid="9087063985776626166">"Η εφαρμογή <xliff:g id="APP">%1$s</xliff:g> εκτελείται"</string> diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml index b07d79a7dc04..2765e9673b7b 100644 --- a/core/res/res/values-es-rUS/strings.xml +++ b/core/res/res/values-es-rUS/strings.xml @@ -288,10 +288,6 @@ <string name="permdesc_readContacts" msgid="3371591512896545975">"Admite una aplicación que lee todos los datos de (direcciones) de contactos almacenados en tu teléfono. Las aplicaciones maliciosas pueden utilizarlo para enviar tus eventos de calendario a otras personas."</string> <string name="permlab_writeContacts" msgid="644616215860933284">"escribir datos de contacto"</string> <string name="permdesc_writeContacts" msgid="3924383579108183601">"Admite una aplicación que modifica los datos de (dirección de) contacto guardados en tu teléfono. Las aplicaciones maliciosas pueden utilizarlo para borrar o modificar los datos de contacto."</string> - <string name="permlab_writeOwnerData" msgid="4892555913849295393">"escribir datos del propietario"</string> - <string name="permdesc_writeOwnerData" msgid="2344055317969787124">"Admite una aplicación que modifica los datos del propietario del teléfono guardados en tu teléfono. Las aplicaciones maliciosas pueden utilizarlo para borrar o modificar los datos del propietario."</string> - <string name="permlab_readOwnerData" msgid="6668525984731523563">"leer datos del propietario"</string> - <string name="permdesc_readOwnerData" msgid="3088486383128434507">"Admite una aplicación que lee los datos del propietario del teléfono guardados en tu teléfono. Las aplicaciones maliciosas pueden utilizarlo para leer los datos del propietario del teléfono."</string> <string name="permlab_readCalendar" msgid="6898987798303840534">"Leer eventos del calendario"</string> <string name="permdesc_readCalendar" msgid="5533029139652095734">"Admite que una aplicación lea todos los eventos de calendario almacenados en tu teléfono. Las aplicaciones maliciosas pueden utilizarlo para enviar tus eventos de calendario a otras personas."</string> <string name="permlab_writeCalendar" msgid="3894879352594904361">"Agregar o cambiar eventos del calendario y enviar un correo electrónico a los invitados"</string> @@ -736,6 +732,12 @@ <string name="force_close" msgid="3653416315450806396">"Provocar acercamiento"</string> <string name="report" msgid="4060218260984795706">"Notificar"</string> <string name="wait" msgid="7147118217226317732">"Espera"</string> + <!-- no translation found for launch_warning_title (8323761616052121936) --> + <skip /> + <!-- no translation found for launch_warning_replace (6202498949970281412) --> + <skip /> + <!-- no translation found for launch_warning_original (188102023021668683) --> + <skip /> <string name="smv_application" msgid="295583804361236288">"La aplicación <xliff:g id="APPLICATION">%1$s</xliff:g> (proceso <xliff:g id="PROCESS">%2$s</xliff:g>) ha violado su política StrictMode autoimpuesta."</string> <string name="smv_process" msgid="5120397012047462446">"El proceso <xliff:g id="PROCESS">%1$s</xliff:g> ha violado su política StrictMode autoimpuesta."</string> <string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> Correr"</string> diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml index 35e19a81ec7f..0d2f932a0f10 100644 --- a/core/res/res/values-es/strings.xml +++ b/core/res/res/values-es/strings.xml @@ -144,7 +144,7 @@ <string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"El sonido está desactivado. Activar."</string> <string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"El sonido está activado. Desactivar."</string> <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Modo avión"</string> - <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Modo avión desactivado. Activar."</string> + <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Modo avión activado. Desactivar."</string> <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Modo avión desactivado. Activar."</string> <string name="safeMode" msgid="2788228061547930246">"Modo seguro"</string> <string name="android_system_label" msgid="6577375335728551336">"Sistema Android"</string> @@ -288,10 +288,6 @@ <string name="permdesc_readContacts" msgid="3371591512896545975">"Permite que una aplicación lea todos los datos de contacto (direcciones) almacenados en el teléfono. Las aplicaciones malintencionadas pueden utilizar este permiso para enviar tus datos a otras personas."</string> <string name="permlab_writeContacts" msgid="644616215860933284">"escribir datos de contacto"</string> <string name="permdesc_writeContacts" msgid="3924383579108183601">"Permite que una aplicación modifique los datos de contacto (direcciones) almacenados en el teléfono. Las aplicaciones malintencionadas pueden utilizar este permiso para borrar o modificar tus datos de contacto."</string> - <string name="permlab_writeOwnerData" msgid="4892555913849295393">"escribir datos de propietario"</string> - <string name="permdesc_writeOwnerData" msgid="2344055317969787124">"Permite que una aplicación modifique los datos del propietario del teléfono almacenados en el teléfono. Las aplicaciones malintencionadas pueden utilizar este permiso para borrar o modificar los datos del propietario."</string> - <string name="permlab_readOwnerData" msgid="6668525984731523563">"leer datos del propietario"</string> - <string name="permdesc_readOwnerData" msgid="3088486383128434507">"Permite que una aplicación lea los datos del propietario del teléfono almacenados en el teléfono. Las aplicaciones malintencionadas pueden utilizar este permiso para leer los datos del propietario del teléfono."</string> <string name="permlab_readCalendar" msgid="6898987798303840534">"leer eventos de calendario"</string> <string name="permdesc_readCalendar" msgid="5533029139652095734">"Permite que una aplicación lea todos los eventos de calendario almacenados en el teléfono. Las aplicaciones malintencionadas pueden utilizar este permiso para enviar tus eventos de calendario a otras personas."</string> <string name="permlab_writeCalendar" msgid="3894879352594904361">"añadir o modificar eventos de calendario y enviar mensajes de correo electrónico a los invitados"</string> @@ -736,6 +732,12 @@ <string name="force_close" msgid="3653416315450806396">"Forzar cierre"</string> <string name="report" msgid="4060218260984795706">"Informe"</string> <string name="wait" msgid="7147118217226317732">"Esperar"</string> + <!-- no translation found for launch_warning_title (8323761616052121936) --> + <skip /> + <!-- no translation found for launch_warning_replace (6202498949970281412) --> + <skip /> + <!-- no translation found for launch_warning_original (188102023021668683) --> + <skip /> <string name="smv_application" msgid="295583804361236288">"La aplicación <xliff:g id="APPLICATION">%1$s</xliff:g> (proceso <xliff:g id="PROCESS">%2$s</xliff:g>) ha infringido su política StrictMode autoaplicable."</string> <string name="smv_process" msgid="5120397012047462446">"El proceso <xliff:g id="PROCESS">%1$s</xliff:g> ha infringido su política StrictMode autoaplicable."</string> <string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> en ejecución"</string> diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml index e826abadc9ae..b4f80467a5bc 100644 --- a/core/res/res/values-fr/strings.xml +++ b/core/res/res/values-fr/strings.xml @@ -288,10 +288,6 @@ <string name="permdesc_readContacts" msgid="3371591512896545975">"Permet à une application de lire toutes les données des contacts (adresses) enregistrées sur votre téléphone. Des applications malveillantes peuvent utiliser cette fonctionnalité pour envoyer vos données à d\'autres personnes."</string> <string name="permlab_writeContacts" msgid="644616215860933284">"Édition des données d\'un contact"</string> <string name="permdesc_writeContacts" msgid="3924383579108183601">"Permet à une application de modifier toutes les données de contact (adresses) enregistrées sur le téléphone. Des applications malveillantes peuvent utiliser cette fonctionnalité pour effacer ou modifier vos données de contact."</string> - <string name="permlab_writeOwnerData" msgid="4892555913849295393">"Édition les données du propriétaire"</string> - <string name="permdesc_writeOwnerData" msgid="2344055317969787124">"Permet à une application de modifier les données du propriétaire du téléphone enregistrées sur votre appareil. Des applications malveillantes peuvent utiliser cette fonctionnalité pour effacer ou modifier ces données."</string> - <string name="permlab_readOwnerData" msgid="6668525984731523563">"Lecture des données du propriétaire"</string> - <string name="permdesc_readOwnerData" msgid="3088486383128434507">"Permet à une application de lire les données du propriétaire du téléphone enregistrées sur votre appareil. Des applications malveillantes peuvent utiliser cette fonctionnalité pour lire ces données."</string> <string name="permlab_readCalendar" msgid="6898987798303840534">"lire des événements de l\'agenda"</string> <string name="permdesc_readCalendar" msgid="5533029139652095734">"Permet à une application de lire tous les événements de l\'agenda enregistrés sur votre téléphone. Des applications malveillantes peuvent utiliser cette fonctionnalité pour envoyer les événements de votre agenda à d\'autres personnes."</string> <string name="permlab_writeCalendar" msgid="3894879352594904361">"ajouter ou modifier des événements d\'agenda et envoyer des e-mails aux invités"</string> @@ -736,6 +732,12 @@ <string name="force_close" msgid="3653416315450806396">"Forcer la fermeture"</string> <string name="report" msgid="4060218260984795706">"Rapport"</string> <string name="wait" msgid="7147118217226317732">"Attendre"</string> + <!-- no translation found for launch_warning_title (8323761616052121936) --> + <skip /> + <!-- no translation found for launch_warning_replace (6202498949970281412) --> + <skip /> + <!-- no translation found for launch_warning_original (188102023021668683) --> + <skip /> <string name="smv_application" msgid="295583804361236288">"L\'application <xliff:g id="APPLICATION">%1$s</xliff:g> (processus <xliff:g id="PROCESS">%2$s</xliff:g>) a enfreint ses propres règles du mode strict."</string> <string name="smv_process" msgid="5120397012047462446">"Le processus <xliff:g id="PROCESS">%1$s</xliff:g> a enfreint ses propres règles du mode strict."</string> <string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> en cours d\'exécution"</string> diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml index 46b735e4c65f..d4019b6b1668 100644 --- a/core/res/res/values-it/strings.xml +++ b/core/res/res/values-it/strings.xml @@ -288,10 +288,6 @@ <string name="permdesc_readContacts" msgid="3371591512896545975">"Consente la lettura da parte di un\'applicazione di tutti i dati (gli indirizzi) di contatto memorizzati sul telefono. Le applicazioni dannose possono sfruttare questa possibilità per inviare i dati ad altre persone."</string> <string name="permlab_writeContacts" msgid="644616215860933284">"scrittura dati di contatto"</string> <string name="permdesc_writeContacts" msgid="3924383579108183601">"Consente a un\'applicazione di modificare i dati (gli indirizzi) di contatto memorizzati sul telefono. Le applicazioni dannose possono sfruttare questa possibilità per cancellare o modificare i dati di contatto."</string> - <string name="permlab_writeOwnerData" msgid="4892555913849295393">"scrittura dati proprietario"</string> - <string name="permdesc_writeOwnerData" msgid="2344055317969787124">"Consente a un\'applicazione di modificare i dati del proprietario del telefono memorizzati sul telefono. Le applicazioni dannose possono sfruttare questa possibilità per cancellare o modificare tali dati."</string> - <string name="permlab_readOwnerData" msgid="6668525984731523563">"lettura dati proprietario"</string> - <string name="permdesc_readOwnerData" msgid="3088486383128434507">"Consente a un\'applicazione di leggere i dati del proprietario del telefono memorizzati sul telefono. Le applicazioni dannose possono sfruttare questa possibilità per leggere tali dati."</string> <string name="permlab_readCalendar" msgid="6898987798303840534">"leggere eventi di calendario"</string> <string name="permdesc_readCalendar" msgid="5533029139652095734">"Consente la lettura da parte di un\'applicazione di tutti gli eventi di calendario memorizzati sul telefono. Le applicazioni dannose possono sfruttare questa possibilità per inviare i tuoi eventi di calendario ad altre persone."</string> <string name="permlab_writeCalendar" msgid="3894879352594904361">"aggiungere o modificare eventi di calendario e inviare email agli invitati"</string> @@ -439,8 +435,8 @@ <string-array name="phoneTypes"> <item msgid="8901098336658710359">"Casa"</item> <item msgid="869923650527136615">"Cellulare"</item> - <item msgid="7897544654242874543">"Ufficio"</item> - <item msgid="1103601433382158155">"Fax ufficio"</item> + <item msgid="7897544654242874543">"Lavoro"</item> + <item msgid="1103601433382158155">"Fax lavoro"</item> <item msgid="1735177144948329370">"Fax casa"</item> <item msgid="603878674477207394">"Cercapersone"</item> <item msgid="1650824275177931637">"Altro"</item> @@ -448,24 +444,24 @@ </string-array> <string-array name="emailAddressTypes"> <item msgid="8073994352956129127">"Casa"</item> - <item msgid="7084237356602625604">"Ufficio"</item> + <item msgid="7084237356602625604">"Lavoro"</item> <item msgid="1112044410659011023">"Altro"</item> <item msgid="2374913952870110618">"Personalizzato"</item> </string-array> <string-array name="postalAddressTypes"> <item msgid="6880257626740047286">"Casa"</item> - <item msgid="5629153956045109251">"Ufficio"</item> + <item msgid="5629153956045109251">"Lavoro"</item> <item msgid="4966604264500343469">"Altro"</item> <item msgid="4932682847595299369">"Personalizzato"</item> </string-array> <string-array name="imAddressTypes"> <item msgid="1738585194601476694">"Casa"</item> - <item msgid="1359644565647383708">"Uffico"</item> + <item msgid="1359644565647383708">"Lavoro"</item> <item msgid="7868549401053615677">"Altro"</item> <item msgid="3145118944639869809">"Personalizzato"</item> </string-array> <string-array name="organizationTypes"> - <item msgid="7546335612189115615">"Ufficio"</item> + <item msgid="7546335612189115615">"Lavoro"</item> <item msgid="4378074129049520373">"Altro"</item> <item msgid="3455047468583965104">"Personalizzato"</item> </string-array> @@ -482,8 +478,8 @@ <string name="phoneTypeCustom" msgid="1644738059053355820">"Personalizzato"</string> <string name="phoneTypeHome" msgid="2570923463033985887">"Casa"</string> <string name="phoneTypeMobile" msgid="6501463557754751037">"Cellulare"</string> - <string name="phoneTypeWork" msgid="8863939667059911633">"Ufficio"</string> - <string name="phoneTypeFaxWork" msgid="3517792160008890912">"Fax ufficio"</string> + <string name="phoneTypeWork" msgid="8863939667059911633">"Lavoro"</string> + <string name="phoneTypeFaxWork" msgid="3517792160008890912">"Fax lavoro"</string> <string name="phoneTypeFaxHome" msgid="2067265972322971467">"Fax casa"</string> <string name="phoneTypePager" msgid="7582359955394921732">"Cercapersone"</string> <string name="phoneTypeOther" msgid="1544425847868765990">"Altro"</string> @@ -497,7 +493,7 @@ <string name="phoneTypeTelex" msgid="3367879952476250512">"Telex"</string> <string name="phoneTypeTtyTdd" msgid="8606514378585000044">"TTY TDD"</string> <string name="phoneTypeWorkMobile" msgid="1311426989184065709">"Cellulare lavoro"</string> - <string name="phoneTypeWorkPager" msgid="649938731231157056">"Cercapersone ufficio"</string> + <string name="phoneTypeWorkPager" msgid="649938731231157056">"Cercapersone lavoro"</string> <string name="phoneTypeAssistant" msgid="5596772636128562884">"Assistente"</string> <string name="phoneTypeMms" msgid="7254492275502768992">"MMS"</string> <string name="eventTypeBirthday" msgid="2813379844211390740">"Compleanno"</string> @@ -505,16 +501,16 @@ <string name="eventTypeOther" msgid="5834288791948564594">"Evento"</string> <string name="emailTypeCustom" msgid="8525960257804213846">"Personalizzato"</string> <string name="emailTypeHome" msgid="449227236140433919">"Casa"</string> - <string name="emailTypeWork" msgid="3548058059601149973">"Ufficio"</string> + <string name="emailTypeWork" msgid="3548058059601149973">"Lavoro"</string> <string name="emailTypeOther" msgid="2923008695272639549">"Altro"</string> <string name="emailTypeMobile" msgid="119919005321166205">"Cellulare"</string> <string name="postalTypeCustom" msgid="8903206903060479902">"Personalizzato"</string> <string name="postalTypeHome" msgid="8165756977184483097">"Casa"</string> - <string name="postalTypeWork" msgid="5268172772387694495">"Ufficio"</string> + <string name="postalTypeWork" msgid="5268172772387694495">"Lavoro"</string> <string name="postalTypeOther" msgid="2726111966623584341">"Altro"</string> <string name="imTypeCustom" msgid="2074028755527826046">"Personalizzato"</string> <string name="imTypeHome" msgid="6241181032954263892">"Casa"</string> - <string name="imTypeWork" msgid="1371489290242433090">"Ufficio"</string> + <string name="imTypeWork" msgid="1371489290242433090">"Lavoro"</string> <string name="imTypeOther" msgid="5377007495735915478">"Altro"</string> <string name="imProtocolCustom" msgid="6919453836618749992">"Personalizzato"</string> <string name="imProtocolAim" msgid="7050360612368383417">"AIM"</string> @@ -526,7 +522,7 @@ <string name="imProtocolIcq" msgid="1574870433606517315">"ICQ"</string> <string name="imProtocolJabber" msgid="2279917630875771722">"Jabber"</string> <string name="imProtocolNetMeeting" msgid="8287625655986827971">"NetMeeting"</string> - <string name="orgTypeWork" msgid="29268870505363872">"Ufficio"</string> + <string name="orgTypeWork" msgid="29268870505363872">"Lavoro"</string> <string name="orgTypeOther" msgid="3951781131570124082">"Altro"</string> <string name="orgTypeCustom" msgid="225523415372088322">"Personalizzato"</string> <string name="contact_status_update_attribution" msgid="5112589886094402795">"tramite <xliff:g id="SOURCE">%1$s</xliff:g>"</string> @@ -736,6 +732,12 @@ <string name="force_close" msgid="3653416315450806396">"Termina"</string> <string name="report" msgid="4060218260984795706">"Segnala"</string> <string name="wait" msgid="7147118217226317732">"Attendi"</string> + <!-- no translation found for launch_warning_title (8323761616052121936) --> + <skip /> + <!-- no translation found for launch_warning_replace (6202498949970281412) --> + <skip /> + <!-- no translation found for launch_warning_original (188102023021668683) --> + <skip /> <string name="smv_application" msgid="295583804361236288">"L\'applicazione <xliff:g id="APPLICATION">%1$s</xliff:g> (processo <xliff:g id="PROCESS">%2$s</xliff:g>) ha violato la norma StrictMode autoimposta."</string> <string name="smv_process" msgid="5120397012047462446">"Il processo <xliff:g id="PROCESS">%1$s</xliff:g> ha violato la norma StrictMode autoimposta."</string> <string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> in esecuzione"</string> diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml index 802c6a33e4cf..ae44bb276c54 100644 --- a/core/res/res/values-ja/strings.xml +++ b/core/res/res/values-ja/strings.xml @@ -288,10 +288,6 @@ <string name="permdesc_readContacts" msgid="3371591512896545975">"端末に保存した連絡先(アドレス)データの読み取りをアプリケーションに許可します。悪意のあるアプリケーションがデータを他人に送信する恐れがあります。"</string> <string name="permlab_writeContacts" msgid="644616215860933284">"連絡先データの書き込み"</string> <string name="permdesc_writeContacts" msgid="3924383579108183601">"端末に保存した連絡先(アドレス)データの変更をアプリケーションに許可します。悪意のあるアプリケーションが連絡先データを消去/変更する恐れがあります。"</string> - <string name="permlab_writeOwnerData" msgid="4892555913849295393">"所有者データの書き込み"</string> - <string name="permdesc_writeOwnerData" msgid="2344055317969787124">"端末に保存した所有者のデータの変更をアプリケーションに許可します。悪意のあるアプリケーションが所有者のデータを消去/変更する恐れがあります。"</string> - <string name="permlab_readOwnerData" msgid="6668525984731523563">"所有者データの読み取り"</string> - <string name="permdesc_readOwnerData" msgid="3088486383128434507">"携帯電話に保存した所有者データの読み取りをアプリケーションに許可します。悪意のあるアプリケーションが所有者データを読み取る恐れがあります。"</string> <string name="permlab_readCalendar" msgid="6898987798303840534">"カレンダーの予定の読み取り"</string> <string name="permdesc_readCalendar" msgid="5533029139652095734">"端末に保存したカレンダーの予定の読み取りをアプリケーションに許可します。悪意のあるアプリケーションがカレンダーの予定を他人に送信する恐れがあります。"</string> <string name="permlab_writeCalendar" msgid="3894879352594904361">"カレンダーの予定の追加や変更を行い、ゲストにメールを送信する"</string> @@ -736,6 +732,12 @@ <string name="force_close" msgid="3653416315450806396">"強制終了"</string> <string name="report" msgid="4060218260984795706">"レポート"</string> <string name="wait" msgid="7147118217226317732">"待機"</string> + <!-- no translation found for launch_warning_title (8323761616052121936) --> + <skip /> + <!-- no translation found for launch_warning_replace (6202498949970281412) --> + <skip /> + <!-- no translation found for launch_warning_original (188102023021668683) --> + <skip /> <string name="smv_application" msgid="295583804361236288">"アプリケーション<xliff:g id="APPLICATION">%1$s</xliff:g>(プロセス<xliff:g id="PROCESS">%2$s</xliff:g>)でStrictModeポリシー違反がありました。"</string> <string name="smv_process" msgid="5120397012047462446">"プロセス<xliff:g id="PROCESS">%1$s</xliff:g>でStrictModeポリシー違反がありました。"</string> <string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g>を実行中"</string> diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml index 165c5e54ded1..040f9e87dc66 100644 --- a/core/res/res/values-ko/strings.xml +++ b/core/res/res/values-ko/strings.xml @@ -288,10 +288,6 @@ <string name="permdesc_readContacts" msgid="3371591512896545975">"애플리케이션이 휴대전화에 저장된 모든 연락처(주소) 데이터를 읽을 수 있도록 합니다. 이 경우 악성 애플리케이션이 데이터를 다른 사람에게 보낼 수 있습니다."</string> <string name="permlab_writeContacts" msgid="644616215860933284">"연락처 데이터 작성"</string> <string name="permdesc_writeContacts" msgid="3924383579108183601">"애플리케이션이 휴대전화에 저장된 연락처(주소) 데이터를 수정할 수 있도록 합니다. 이 경우 악성 애플리케이션이 연락처 데이터를 지우거나 수정할 수 있습니다."</string> - <string name="permlab_writeOwnerData" msgid="4892555913849295393">"소유자 데이터 작성"</string> - <string name="permdesc_writeOwnerData" msgid="2344055317969787124">"애플리케이션이 휴대전화에 저장된 소유자 데이터를 수정할 수 있도록 합니다. 단, 악성 애플리케이션이 이 기능을 이용하여 소유자 데이터를 지우거나 수정할 수 있습니다."</string> - <string name="permlab_readOwnerData" msgid="6668525984731523563">"소유자 데이터 읽기"</string> - <string name="permdesc_readOwnerData" msgid="3088486383128434507">"애플리케이션이 휴대전화에 저장된 휴대전화 소유자 데이터를 읽을 수 있도록 합니다. 이 경우 악성 애플리케이션이 휴대전화 소유자 데이터를 읽을 수 있습니다."</string> <string name="permlab_readCalendar" msgid="6898987798303840534">"캘린더 일정 읽기"</string> <string name="permdesc_readCalendar" msgid="5533029139652095734">"애플리케이션이 휴대전화에 저장된 모든 캘린더 일정을 읽을 수 있도록 합니다. 이 경우 악성 애플리케이션이 캘린더 일정을 다른 사람에게 보낼 수 있습니다."</string> <string name="permlab_writeCalendar" msgid="3894879352594904361">"캘린더 일정 추가/수정 및 참석자에게 이메일 전송"</string> @@ -736,6 +732,12 @@ <string name="force_close" msgid="3653416315450806396">"닫기"</string> <string name="report" msgid="4060218260984795706">"신고"</string> <string name="wait" msgid="7147118217226317732">"대기"</string> + <!-- no translation found for launch_warning_title (8323761616052121936) --> + <skip /> + <!-- no translation found for launch_warning_replace (6202498949970281412) --> + <skip /> + <!-- no translation found for launch_warning_original (188102023021668683) --> + <skip /> <string name="smv_application" msgid="295583804361236288">"애플리케이션 <xliff:g id="APPLICATION">%1$s</xliff:g>(프로세스 <xliff:g id="PROCESS">%2$s</xliff:g>)이(가) 자체 시행 StrictMode 정책을 위반했습니다."</string> <string name="smv_process" msgid="5120397012047462446">"프로세스(<xliff:g id="PROCESS">%1$s</xliff:g>)가 자체 시행 StrictMode 정책을 위반했습니다."</string> <string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> 실행 중"</string> diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml index b4af7a6a0d96..4ca84ed06bb0 100644 --- a/core/res/res/values-nb/strings.xml +++ b/core/res/res/values-nb/strings.xml @@ -288,10 +288,6 @@ <string name="permdesc_readContacts" msgid="3371591512896545975">"Lar applikasjonen lese all kontakt- og adresseinformasjon lagret på telefonen. Ondsinnede applikasjoner kan bruke dette til å sende personlige data til andre."</string> <string name="permlab_writeContacts" msgid="644616215860933284">"skrive kontaktinformasjon"</string> <string name="permdesc_writeContacts" msgid="3924383579108183601">"Lar applikasjonen endre kontakt- og adresseinformasjon lagret på telefonen. Ondsinnede applikasjoner kan bruke dette til å redigere eller endre kontaktinformasjonen."</string> - <string name="permlab_writeOwnerData" msgid="4892555913849295393">"skrive eierinformasjon"</string> - <string name="permdesc_writeOwnerData" msgid="2344055317969787124">"Lar applikasjonen endre dataene om telefoneieren. Ondsinnede applikasjoner kan bruke dette til å slette eller redigere telefonens eierdata."</string> - <string name="permlab_readOwnerData" msgid="6668525984731523563">"lese eierinformasjon"</string> - <string name="permdesc_readOwnerData" msgid="3088486383128434507">"Lar applikasjonen lese dataene om telefoneieren. Ondsinnede applikasjoner kan bruke dette til å lese telefonens eierdata."</string> <string name="permlab_readCalendar" msgid="6898987798303840534">"les kalenderaktiviteter"</string> <string name="permdesc_readCalendar" msgid="5533029139652095734">"Lar applikasjonen lese alle kalenderhendelser lagret på telefonen. Ondsinnede applikasjoner kan bruke dette til å sende kalenderhendelser til andre."</string> <string name="permlab_writeCalendar" msgid="3894879352594904361">"legg til eller endre kalenderaktiviteter og send e-postmelding til gjestene"</string> @@ -736,6 +732,12 @@ <string name="force_close" msgid="3653416315450806396">"Tving avslutning"</string> <string name="report" msgid="4060218260984795706">"Rapportér"</string> <string name="wait" msgid="7147118217226317732">"Vent"</string> + <!-- no translation found for launch_warning_title (8323761616052121936) --> + <skip /> + <!-- no translation found for launch_warning_replace (6202498949970281412) --> + <skip /> + <!-- no translation found for launch_warning_original (188102023021668683) --> + <skip /> <string name="smv_application" msgid="295583804361236288">"Programmet <xliff:g id="APPLICATION">%1$s</xliff:g> (prosessen <xliff:g id="PROCESS">%2$s</xliff:g>) har brutt de selvpålagte StrictMode-retningslinjene."</string> <string name="smv_process" msgid="5120397012047462446">"Prosessen<xliff:g id="PROCESS">%1$s</xliff:g> har brutt de selvpålagte StrictMode-retningslinjene."</string> <string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> kjører"</string> diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml index 8829f27785d3..c8f00689cd8d 100644 --- a/core/res/res/values-nl/strings.xml +++ b/core/res/res/values-nl/strings.xml @@ -288,10 +288,6 @@ <string name="permdesc_readContacts" msgid="3371591512896545975">"Hiermee kan een toepassing alle contactgegevens (adresgegevens) zien die op uw telefoon zijn opgeslagen. Schadelijke toepassingen kunnen hiervan gebruik maken om uw gegevens te verzenden naar andere personen."</string> <string name="permlab_writeContacts" msgid="644616215860933284">"contactgegevens schrijven"</string> <string name="permdesc_writeContacts" msgid="3924383579108183601">"Hiermee kan een toepassing de op uw telefoon opgeslagen contactgegevens (adresgegevens) wijzigen. Schadelijke toepassingen kunnen hiermee uw contactgegevens verwijderen of wijzigen."</string> - <string name="permlab_writeOwnerData" msgid="4892555913849295393">"gegevens eigenaar schrijven"</string> - <string name="permdesc_writeOwnerData" msgid="2344055317969787124">"Hiermee kan een toepassing de op uw telefoon opgeslagen gegevens van de eigenaar wijzigen. Schadelijke toepassingen kunnen hiermee gegevens van de eigenaar verwijderen of wijzigen."</string> - <string name="permlab_readOwnerData" msgid="6668525984731523563">"gegevens eigenaar lezen"</string> - <string name="permdesc_readOwnerData" msgid="3088486383128434507">"Hiermee kan een toepassing de op uw telefoon opgeslagen gegevens van de eigenaar lezen. Schadelijke toepassingen kunnen hiermee gegevens van de eigenaar lezen."</string> <string name="permlab_readCalendar" msgid="6898987798303840534">"agendagebeurtenissen lezen"</string> <string name="permdesc_readCalendar" msgid="5533029139652095734">"Hiermee kan een toepassing alle agendagebeurtenissen lezen die zijn opgeslagen op uw telefoon. Schadelijke toepassingen kunnen hiervan gebruik maken om uw agendagebeurtenissen te verzenden naar andere personen."</string> <string name="permlab_writeCalendar" msgid="3894879352594904361">"agendagebeurtenissen toevoegen of aanpassen en e-mail verzenden naar gasten"</string> @@ -736,6 +732,12 @@ <string name="force_close" msgid="3653416315450806396">"Nu sluiten"</string> <string name="report" msgid="4060218260984795706">"Rapport"</string> <string name="wait" msgid="7147118217226317732">"Wachten"</string> + <!-- no translation found for launch_warning_title (8323761616052121936) --> + <skip /> + <!-- no translation found for launch_warning_replace (6202498949970281412) --> + <skip /> + <!-- no translation found for launch_warning_original (188102023021668683) --> + <skip /> <string name="smv_application" msgid="295583804361236288">"De toepassing <xliff:g id="APPLICATION">%1$s</xliff:g> (proces <xliff:g id="PROCESS">%2$s</xliff:g>) heeft het zelf afgedwongen StrictMode-beleid geschonden."</string> <string name="smv_process" msgid="5120397012047462446">"Het proces <xliff:g id="PROCESS">%1$s</xliff:g> heeft het zelf afgedwongen StrictMode-beleid geschonden."</string> <string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> wordt uitgevoerd"</string> diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml index dd9747d1f536..ae897a8d87a8 100644 --- a/core/res/res/values-pl/strings.xml +++ b/core/res/res/values-pl/strings.xml @@ -288,10 +288,6 @@ <string name="permdesc_readContacts" msgid="3371591512896545975">"Pozwala aplikacji na czytanie wszystkich danych kontaktowych (adresowych) zapisanych w telefonie. Szkodliwe aplikacje mogą to wykorzystać, aby wysyłać dane użytkownika do innych ludzi."</string> <string name="permlab_writeContacts" msgid="644616215860933284">"zapisywanie danych kontaktowych"</string> <string name="permdesc_writeContacts" msgid="3924383579108183601">"Pozwala aplikacji na zmianę danych kontaktowych (adresowych) zapisanych w telefonie. Szkodliwe aplikacje mogą to wykorzystać, aby usunąć lub zmienić dane kontaktowe."</string> - <string name="permlab_writeOwnerData" msgid="4892555913849295393">"zapisywanie danych właściciela"</string> - <string name="permdesc_writeOwnerData" msgid="2344055317969787124">"Pozwala aplikacji na zmianę danych właściciela zapisanych w telefonie. Szkodliwe aplikacje mogą to wykorzystać, aby wymazać lub zmienić dane właściciela."</string> - <string name="permlab_readOwnerData" msgid="6668525984731523563">"czytanie danych właściciela"</string> - <string name="permdesc_readOwnerData" msgid="3088486383128434507">"Pozwala aplikacji na czytanie danych właściciela zapisanych w telefonie. Szkodliwe aplikacje mogą to wykorzystać do odczytania danych właściciela."</string> <string name="permlab_readCalendar" msgid="6898987798303840534">"odczytywanie wydarzeń w kalendarzu"</string> <string name="permdesc_readCalendar" msgid="5533029139652095734">"Pozwala aplikacji na odczytywanie wszystkich wydarzeń z kalendarza, zapisanych w telefonie. Szkodliwe aplikacje mogą to wykorzystać do rozsyłania wydarzeń z kalendarza do innych ludzi."</string> <string name="permlab_writeCalendar" msgid="3894879352594904361">"dodawanie i modyfikowanie wydarzeń w kalendarzu oraz wysyłanie wiadomości e-mail do gości"</string> @@ -736,6 +732,12 @@ <string name="force_close" msgid="3653416315450806396">"Wymuś zamknięcie"</string> <string name="report" msgid="4060218260984795706">"Zgłoś"</string> <string name="wait" msgid="7147118217226317732">"Czekaj"</string> + <!-- no translation found for launch_warning_title (8323761616052121936) --> + <skip /> + <!-- no translation found for launch_warning_replace (6202498949970281412) --> + <skip /> + <!-- no translation found for launch_warning_original (188102023021668683) --> + <skip /> <string name="smv_application" msgid="295583804361236288">"Aplikacja <xliff:g id="APPLICATION">%1$s</xliff:g> (proces <xliff:g id="PROCESS">%2$s</xliff:g>) naruszyła wymuszone przez siebie zasady StrictMode."</string> <string name="smv_process" msgid="5120397012047462446">"Proces <xliff:g id="PROCESS">%1$s</xliff:g> naruszył wymuszone przez siebie zasady StrictMode."</string> <string name="heavy_weight_notification" msgid="9087063985776626166">"Działa <xliff:g id="APP">%1$s</xliff:g>"</string> diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml index cce7ff9bdea3..b9f9be2910a2 100644 --- a/core/res/res/values-pt-rPT/strings.xml +++ b/core/res/res/values-pt-rPT/strings.xml @@ -288,10 +288,6 @@ <string name="permdesc_readContacts" msgid="3371591512896545975">"Permite a uma aplicação ler todos os dados de contactos (endereços) armazenados no seu telefone. Algumas aplicações maliciosas podem utilizar este item para enviar os seus dados a outras pessoas."</string> <string name="permlab_writeContacts" msgid="644616215860933284">"escrever dados de contacto"</string> <string name="permdesc_writeContacts" msgid="3924383579108183601">"Permite a uma aplicação modificar os dados de contacto (endereço) armazenados no seu telefone. Algumas aplicações maliciosas podem utilizar estes dados para apagar ou modificar os dados dos seus contactos."</string> - <string name="permlab_writeOwnerData" msgid="4892555913849295393">"escrever dados do proprietário"</string> - <string name="permdesc_writeOwnerData" msgid="2344055317969787124">"Permite a uma aplicação modificar os dados do proprietário do telefone armazenados no seu telefone. Algumas aplicações maliciosas podem utilizar este item para apagar ou modificar dados do proprietário."</string> - <string name="permlab_readOwnerData" msgid="6668525984731523563">"ler dados do proprietário"</string> - <string name="permdesc_readOwnerData" msgid="3088486383128434507">"Permite a uma aplicação modificar os dados do proprietário do telefone armazenados no seu telefone. Algumas aplicações maliciosas podem utilizar este item para ler dados do proprietário do telefone."</string> <string name="permlab_readCalendar" msgid="6898987798303840534">"ler eventos da agenda"</string> <string name="permdesc_readCalendar" msgid="5533029139652095734">"Permite a uma aplicação ler todos os eventos do calendário armazenados no seu telefone. Algumas aplicações maliciosas podem utilizar este item para enviar os eventos do seu calendário a outras pessoas."</string> <string name="permlab_writeCalendar" msgid="3894879352594904361">"adicionar ou alterar eventos da agenda e enviar e-mails para os convidados"</string> @@ -736,6 +732,12 @@ <string name="force_close" msgid="3653416315450806396">"Forçar fecho"</string> <string name="report" msgid="4060218260984795706">"Relatório"</string> <string name="wait" msgid="7147118217226317732">"Esperar"</string> + <!-- no translation found for launch_warning_title (8323761616052121936) --> + <skip /> + <!-- no translation found for launch_warning_replace (6202498949970281412) --> + <skip /> + <!-- no translation found for launch_warning_original (188102023021668683) --> + <skip /> <string name="smv_application" msgid="295583804361236288">"A aplicação <xliff:g id="APPLICATION">%1$s</xliff:g> (processo <xliff:g id="PROCESS">%2$s</xliff:g>) violou a política StrictMode auto-imposta."</string> <string name="smv_process" msgid="5120397012047462446">"O processo <xliff:g id="PROCESS">%1$s</xliff:g> violou a política StrictMode auto-imposta."</string> <string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> em execução"</string> diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml index 7163fce72429..7cc266a9b731 100644 --- a/core/res/res/values-pt/strings.xml +++ b/core/res/res/values-pt/strings.xml @@ -288,10 +288,6 @@ <string name="permdesc_readContacts" msgid="3371591512896545975">"Permite que um aplicativo leia todos os dados de contato (endereço) armazenados no seu telefone. Aplicativos maliciosos podem usar isso para enviar os seus dados para outras pessoas."</string> <string name="permlab_writeContacts" msgid="644616215860933284">"gravar dados de contato"</string> <string name="permdesc_writeContacts" msgid="3924383579108183601">"Permite que um aplicativo modifique os dados de contato (endereço) armazenados no seu telefone. Aplicativos maliciosos podem usar isso para apagar ou modificar os seus dados de contato."</string> - <string name="permlab_writeOwnerData" msgid="4892555913849295393">"gravar dados do proprietário"</string> - <string name="permdesc_writeOwnerData" msgid="2344055317969787124">"Permite que um aplicativo modifique os dados de proprietário do telefone armazenados no seu telefone. Aplicativos maliciosos podem usar isso para apagar ou modificar dados do proprietário."</string> - <string name="permlab_readOwnerData" msgid="6668525984731523563">"ler dados do proprietário"</string> - <string name="permdesc_readOwnerData" msgid="3088486383128434507">"Permite que um aplicativo leia os dados de proprietário do telefone armazenados no seu telefone. Aplicativos maliciosos podem usar isso para ler os dados de proprietário do telefone."</string> <string name="permlab_readCalendar" msgid="6898987798303840534">"ler eventos da agenda"</string> <string name="permdesc_readCalendar" msgid="5533029139652095734">"Permite que um aplicativo leia todos os eventos da agenda armazenados no seu telefone. Aplicativos maliciosos podem usar isso para enviar eventos da sua agenda para outras pessoas."</string> <string name="permlab_writeCalendar" msgid="3894879352594904361">"adicionar ou modificar eventos da agenda e enviar e-mail aos convidados"</string> @@ -736,6 +732,12 @@ <string name="force_close" msgid="3653416315450806396">"Forçar fechamento"</string> <string name="report" msgid="4060218260984795706">"Informar"</string> <string name="wait" msgid="7147118217226317732">"Aguardar"</string> + <!-- no translation found for launch_warning_title (8323761616052121936) --> + <skip /> + <!-- no translation found for launch_warning_replace (6202498949970281412) --> + <skip /> + <!-- no translation found for launch_warning_original (188102023021668683) --> + <skip /> <string name="smv_application" msgid="295583804361236288">"O aplicativo <xliff:g id="APPLICATION">%1$s</xliff:g> (processo <xliff:g id="PROCESS">%2$s</xliff:g>) violou a política StrictMode imposta automaticamente."</string> <string name="smv_process" msgid="5120397012047462446">"O processo <xliff:g id="PROCESS">%1$s</xliff:g> violou a política StrictMode imposta automaticamente."</string> <string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> em execução"</string> diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml index 043e094c00c3..29b7e4681f3f 100644 --- a/core/res/res/values-ru/strings.xml +++ b/core/res/res/values-ru/strings.xml @@ -288,10 +288,6 @@ <string name="permdesc_readContacts" msgid="3371591512896545975">"Позволяет приложению считывать все данные контактов (адресов), сохраненные в памяти телефона. Вредоносные приложения могут использовать эту возможность для передачи данных посторонним лицам."</string> <string name="permlab_writeContacts" msgid="644616215860933284">"перезаписывать данные контакта"</string> <string name="permdesc_writeContacts" msgid="3924383579108183601">"Позволяет приложению изменять данные (адрес) контакта, сохраненные в памяти телефона. Вредоносные приложения могут использовать эту возможность для удаления или изменения данных контакта."</string> - <string name="permlab_writeOwnerData" msgid="4892555913849295393">"перезаписывать данные о владельце"</string> - <string name="permdesc_writeOwnerData" msgid="2344055317969787124">"Позволяет приложению изменять сведения о владельце, сохраненные на телефоне. Вредоносные приложения могут использовать эту возможность для удаления или изменения данных владельца."</string> - <string name="permlab_readOwnerData" msgid="6668525984731523563">"считывать данные о владельце"</string> - <string name="permdesc_readOwnerData" msgid="3088486383128434507">"Позволяет приложению считывать сведения о владельце, сохраненные в памяти телефона. Вредоносные приложения могут использовать эту возможность для считывания данных владельца."</string> <string name="permlab_readCalendar" msgid="6898987798303840534">"считывать мероприятия в календаре"</string> <string name="permdesc_readCalendar" msgid="5533029139652095734">"Позволяет приложению считывать все события календаря, сохраненные на телефоне. Вредоносные приложения могут использовать эту возможность для передачи ваших событий календаря посторонним лицам."</string> <string name="permlab_writeCalendar" msgid="3894879352594904361">"добавлять и изменять мероприятия в календаре и отправлять письма гостям"</string> @@ -736,6 +732,12 @@ <string name="force_close" msgid="3653416315450806396">"Закрыть"</string> <string name="report" msgid="4060218260984795706">"Отчет"</string> <string name="wait" msgid="7147118217226317732">"Подождать"</string> + <!-- no translation found for launch_warning_title (8323761616052121936) --> + <skip /> + <!-- no translation found for launch_warning_replace (6202498949970281412) --> + <skip /> + <!-- no translation found for launch_warning_original (188102023021668683) --> + <skip /> <string name="smv_application" msgid="295583804361236288">"Приложение <xliff:g id="APPLICATION">%1$s</xliff:g> (процесс <xliff:g id="PROCESS">%2$s</xliff:g>) нарушило собственную политику StrictMode."</string> <string name="smv_process" msgid="5120397012047462446">"Процесс <xliff:g id="PROCESS">%1$s</xliff:g> нарушил собственную политику StrictMode."</string> <string name="heavy_weight_notification" msgid="9087063985776626166">"Приложение <xliff:g id="APP">%1$s</xliff:g> запущено"</string> diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml index e32746ab24d2..b53f21970401 100644 --- a/core/res/res/values-sv/strings.xml +++ b/core/res/res/values-sv/strings.xml @@ -288,10 +288,6 @@ <string name="permdesc_readContacts" msgid="3371591512896545975">"Tillåter att ett program läser alla kontaktuppgifter (adresser) som har lagrats på din telefon. Skadliga program kan använda detta för att skicka dina data till andra personer."</string> <string name="permlab_writeContacts" msgid="644616215860933284">"skriva kontaktuppgifter"</string> <string name="permdesc_writeContacts" msgid="3924383579108183601">"Tillåter att ett program ändrar kontaktuppgifter (adress) som har lagrats på din telefon. Skadliga program kan använda detta för att radera eller ändra kontaktuppgifter."</string> - <string name="permlab_writeOwnerData" msgid="4892555913849295393">"skriva ägarinformation"</string> - <string name="permdesc_writeOwnerData" msgid="2344055317969787124">"Tillåter att ett program ändrar information om telefonens ägare som har lagrats på din telefon. Skadliga program kan använda detta för att radera eller ändra ägaruppgifter."</string> - <string name="permlab_readOwnerData" msgid="6668525984731523563">"läsa information om ägare"</string> - <string name="permdesc_readOwnerData" msgid="3088486383128434507">"Tillåter att ett program läser information om telefonens ägare som har lagrats på telefonen. Skadliga program kan använda detta för att läsa telefonens ägaruppgifter."</string> <string name="permlab_readCalendar" msgid="6898987798303840534">"läsa kalenderhändelser"</string> <string name="permdesc_readCalendar" msgid="5533029139652095734">"Tillåter att ett program läser alla händelser i kalendern som har lagrats på din telefon. Skadliga program kan använda detta för att skicka din kalender till andra personer."</string> <string name="permlab_writeCalendar" msgid="3894879352594904361">"lägg till och ändra kalenderhändelser och skicka e-post till gäster"</string> @@ -736,6 +732,12 @@ <string name="force_close" msgid="3653416315450806396">"Tvinga fram en stängning"</string> <string name="report" msgid="4060218260984795706">"Rapportera"</string> <string name="wait" msgid="7147118217226317732">"Vänta"</string> + <!-- no translation found for launch_warning_title (8323761616052121936) --> + <skip /> + <!-- no translation found for launch_warning_replace (6202498949970281412) --> + <skip /> + <!-- no translation found for launch_warning_original (188102023021668683) --> + <skip /> <string name="smv_application" msgid="295583804361236288">"Programmet <xliff:g id="APPLICATION">%1$s</xliff:g> (processen <xliff:g id="PROCESS">%2$s</xliff:g>) har brutit mot sin egen StrictMode-policy."</string> <string name="smv_process" msgid="5120397012047462446">"Processen <xliff:g id="PROCESS">%1$s</xliff:g> har brutit mot sin egen StrictMode-policy."</string> <string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> körs"</string> diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml index bd87446c40f5..ea46db0ed1fd 100644 --- a/core/res/res/values-tr/strings.xml +++ b/core/res/res/values-tr/strings.xml @@ -288,10 +288,6 @@ <string name="permdesc_readContacts" msgid="3371591512896545975">"Uygulamaların telefonunuzda depolanan tüm kişi (adres) verilerini okumasına izin verir. Kötü amaçlı uygulamalar bu işlevi verilerinizi başkalarına göndermek için kullanabilir."</string> <string name="permlab_writeContacts" msgid="644616215860933284">"kişi verileri yaz"</string> <string name="permdesc_writeContacts" msgid="3924383579108183601">"Uygulamaların telefonunuzda depolanan kişi (adres) verilerini değiştirmesine izin verir. Kötü amaçlı uygulamalar bu işlevi kişi verilerinizi silmek veya değiştirmek için kullanabilir."</string> - <string name="permlab_writeOwnerData" msgid="4892555913849295393">"sahip verilerini yaz"</string> - <string name="permdesc_writeOwnerData" msgid="2344055317969787124">"Uygulamaların telefonunuzda depolanan telefon sahibi verilerini değiştirmesine izin verir. Kötü amaçlı uygulamalar bu işlevi kullanıcı verilerini silmek veya değiştirmek için kullanabilir."</string> - <string name="permlab_readOwnerData" msgid="6668525984731523563">"sahip verilerini oku"</string> - <string name="permdesc_readOwnerData" msgid="3088486383128434507">"Uygulamaların telefonunuzda depolanan telefon sahibi verilerini okumasına izin verir. Kötü amaçlı uygulamalar bunu telefon sahibi verilerini okumak için kullanabilir."</string> <string name="permlab_readCalendar" msgid="6898987798303840534">"takvim etkinliklerini oku"</string> <string name="permdesc_readCalendar" msgid="5533029139652095734">"Uygulamaların telefonunuzda depolanan takvim etkinliklerinin tümünü okumasına izin verir. Kötü amaçlı uygulamalar bunu, takvim etkinliklerinizi başkalarına göndermek için kullanabilir."</string> <string name="permlab_writeCalendar" msgid="3894879352594904361">"takvim etkinlikleri ekle veya değiştir ve konuklara e-posta gönder"</string> @@ -736,6 +732,12 @@ <string name="force_close" msgid="3653416315450806396">"Kapanmaya zorla"</string> <string name="report" msgid="4060218260984795706">"Rapor"</string> <string name="wait" msgid="7147118217226317732">"Bekle"</string> + <!-- no translation found for launch_warning_title (8323761616052121936) --> + <skip /> + <!-- no translation found for launch_warning_replace (6202498949970281412) --> + <skip /> + <!-- no translation found for launch_warning_original (188102023021668683) --> + <skip /> <string name="smv_application" msgid="295583804361236288">"<xliff:g id="APPLICATION">%1$s</xliff:g> uygulaması (<xliff:g id="PROCESS">%2$s</xliff:g> işlemi) kendiliğinden uyguladığı StrictMode politikasını ihlal etti."</string> <string name="smv_process" msgid="5120397012047462446">"<xliff:g id="PROCESS">%1$s</xliff:g> işlemi kendiliğinden uyguladığı StrictMode politikasını ihlal etti."</string> <string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> çalışıyor"</string> diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml index aa1f93fc1f3a..b9636128ed05 100644 --- a/core/res/res/values-zh-rCN/strings.xml +++ b/core/res/res/values-zh-rCN/strings.xml @@ -288,10 +288,6 @@ <string name="permdesc_readContacts" msgid="3371591512896545975">"允许应用程序读取您手机上存储的所有联系人(地址)数据。恶意应用程序可借此将您的数据发送给其他人。"</string> <string name="permlab_writeContacts" msgid="644616215860933284">"写入联系数据"</string> <string name="permdesc_writeContacts" msgid="3924383579108183601">"允许应用程序修改您手机上存储的联系人(地址)数据。恶意应用程序可借此清除或修改您的联系人数据。"</string> - <string name="permlab_writeOwnerData" msgid="4892555913849295393">"写入所有者数据"</string> - <string name="permdesc_writeOwnerData" msgid="2344055317969787124">"允许应用程序修改您手机上存储的手机所有者数据。恶意应用程序可借此清除或修改所有者数据。"</string> - <string name="permlab_readOwnerData" msgid="6668525984731523563">"读取所有者数据"</string> - <string name="permdesc_readOwnerData" msgid="3088486383128434507">"允许应用程序读取您手机上存储的手机所有者数据。恶意应用程序可借此读取手机所有者数据。"</string> <string name="permlab_readCalendar" msgid="6898987798303840534">"读取日历活动"</string> <string name="permdesc_readCalendar" msgid="5533029139652095734">"允许应用程序读取您手机上存储的所有日历活动。恶意应用程序可借此将您的日历活动发送给其他人。"</string> <string name="permlab_writeCalendar" msgid="3894879352594904361">"添加或修改日历活动以及向邀请对象发送电子邮件"</string> @@ -736,6 +732,12 @@ <string name="force_close" msgid="3653416315450806396">"强行关闭"</string> <string name="report" msgid="4060218260984795706">"报告"</string> <string name="wait" msgid="7147118217226317732">"等待"</string> + <!-- no translation found for launch_warning_title (8323761616052121936) --> + <skip /> + <!-- no translation found for launch_warning_replace (6202498949970281412) --> + <skip /> + <!-- no translation found for launch_warning_original (188102023021668683) --> + <skip /> <string name="smv_application" msgid="295583804361236288">"应用程序<xliff:g id="APPLICATION">%1$s</xliff:g>(<xliff:g id="PROCESS">%2$s</xliff:g> 进程)违反了自我强制执行的严格模式 (StrictMode) 政策。"</string> <string name="smv_process" msgid="5120397012047462446">"进程 <xliff:g id="PROCESS">%1$s</xliff:g> 违反了自我强制执行的严格模式 (StrictMode) 政策。"</string> <string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g>正在运行"</string> diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml index fdce81369482..939510c01151 100644 --- a/core/res/res/values-zh-rTW/strings.xml +++ b/core/res/res/values-zh-rTW/strings.xml @@ -288,10 +288,6 @@ <string name="permdesc_readContacts" msgid="3371591512896545975">"允許應用程式讀取手機上所有聯絡人 (地址)。請注意:惡意程式可能利用此功能將您的資料傳送給其他人。"</string> <string name="permlab_writeContacts" msgid="644616215860933284">"輸入聯絡人資料"</string> <string name="permdesc_writeContacts" msgid="3924383579108183601">"允許應用程式更改聯絡資訊 (地址)。請注意:惡意程式可能利用此功能,清除或修改聯絡資料。"</string> - <string name="permlab_writeOwnerData" msgid="4892555913849295393">"寫入持有者的資料"</string> - <string name="permdesc_writeOwnerData" msgid="2344055317969787124">"允許應用程式更改手機持有者的資料。請注意:惡意程式可能利用此功能,清除或修改持有者的資料。"</string> - <string name="permlab_readOwnerData" msgid="6668525984731523563">"讀取持有者的資料"</string> - <string name="permdesc_readOwnerData" msgid="3088486383128434507">"允許應用程式讀取手機持有者資料。請注意:惡意程式可能利用此功能讀取持有者的資料。"</string> <string name="permlab_readCalendar" msgid="6898987798303840534">"讀取日曆活動"</string> <string name="permdesc_readCalendar" msgid="5533029139652095734">"允許應用程式讀取手機上所有日曆資料。請注意:惡意程式可能利用此功能將您的日曆資料傳送給其他人。"</string> <string name="permlab_writeCalendar" msgid="3894879352594904361">"新增或修改日曆活動,並傳送電子郵件給他人"</string> @@ -736,6 +732,12 @@ <string name="force_close" msgid="3653416315450806396">"強制關閉"</string> <string name="report" msgid="4060218260984795706">"回報"</string> <string name="wait" msgid="7147118217226317732">"等待"</string> + <!-- no translation found for launch_warning_title (8323761616052121936) --> + <skip /> + <!-- no translation found for launch_warning_replace (6202498949970281412) --> + <skip /> + <!-- no translation found for launch_warning_original (188102023021668683) --> + <skip /> <string name="smv_application" msgid="295583804361236288">"應用程式 <xliff:g id="APPLICATION">%1$s</xliff:g> (處理程序 <xliff:g id="PROCESS">%2$s</xliff:g>) 已違反其自行強制實施的嚴格模式 (StrictMode) 政策。"</string> <string name="smv_process" msgid="5120397012047462446">"處理程序 <xliff:g id="PROCESS">%1$s</xliff:g> 已違反其自行強制實施的嚴格模式 (StrictMode) 政策。"</string> <string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> 執行中"</string> diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml index 29ac2eafd7fd..59136392ccb8 100644 --- a/core/res/res/values/strings.xml +++ b/core/res/res/values/strings.xml @@ -1921,6 +1921,12 @@ <string name="report">Report</string> <!-- Button allowing the user to choose to wait for an application that is not responding to become responsive again. --> <string name="wait">Wait</string> + <!-- [CHAR LIMIT=25] Title of the alert when application launches on top of another. --> + <string name="launch_warning_title">Application redirected</string> + <!-- [CHAR LIMIT=50] Title of the alert when application launches on top of another. --> + <string name="launch_warning_replace"><xliff:g id="app_name">%1$s</xliff:g> is now running.</string> + <!-- [CHAR LIMIT=50] Title of the alert when application launches on top of another. --> + <string name="launch_warning_original"><xliff:g id="app_name">%1$s</xliff:g> was originally launched.</string> <!-- Text of the alert that is displayed when an application has violated StrictMode. --> <string name="smv_application">The application <xliff:g id="application">%1$s</xliff:g> diff --git a/core/res/res/values/styles.xml b/core/res/res/values/styles.xml index bab84151c9cc..1c60ba0b1d37 100644 --- a/core/res/res/values/styles.xml +++ b/core/res/res/values/styles.xml @@ -506,7 +506,7 @@ <item name="android:fadingEdge">vertical</item> <item name="listSelector">@android:drawable/menu_selector</item> <!-- Light background for the list in menus, so the divider for bright themes --> - <item name="android:divider">@android:drawable/divider_horizontal_bright</item> + <item name="android:divider">@android:drawable/divider_horizontal_dark</item> </style> <style name="Widget.GridView" parent="Widget.AbsListView"> @@ -676,7 +676,7 @@ </style> <style name="TextAppearance.Widget.IconMenu.Item" parent="TextAppearance.Small"> - <item name="android:textColor">?textColorPrimaryInverse</item> + <item name="android:textColor">?textColorPrimary</item> </style> <style name="TextAppearance.Widget.EditText"> diff --git a/core/res/res/values/themes.xml b/core/res/res/values/themes.xml index d585d9e11f63..2311bdd28698 100644 --- a/core/res/res/values/themes.xml +++ b/core/res/res/values/themes.xml @@ -122,9 +122,10 @@ <!-- Panel attributes --> <item name="panelBackground">@android:drawable/menu_background</item> <item name="panelFullBackground">@android:drawable/menu_background_fill_parent_width</item> - <item name="panelColorBackground">#fff</item> - <item name="panelColorForeground">?android:attr/textColorPrimaryInverse</item> - <item name="panelTextAppearance">?android:attr/textAppearanceInverse</item> + <!-- These three attributes do not seems to be used by the framework. Declared public though --> + <item name="panelColorBackground">#000</item> + <item name="panelColorForeground">?android:attr/textColorPrimary</item> + <item name="panelTextAppearance">?android:attr/textAppearance</item> <!-- Scrollbar attributes --> <item name="scrollbarFadeDuration">250</item> @@ -488,8 +489,8 @@ <item name="android:itemTextAppearance">@android:style/TextAppearance.Widget.IconMenu.Item</item> <item name="android:itemBackground">@android:drawable/menu_selector</item> <item name="android:itemIconDisabledAlpha">?android:attr/disabledAlpha</item> - <item name="android:horizontalDivider">@android:drawable/divider_horizontal_bright</item> - <item name="android:verticalDivider">@android:drawable/divider_vertical_bright</item> + <item name="android:horizontalDivider">@android:drawable/divider_horizontal_dark</item> + <item name="android:verticalDivider">@android:drawable/divider_vertical_dark</item> <item name="android:windowAnimationStyle">@android:style/Animation.OptionsPanel</item> <item name="android:moreIcon">@android:drawable/ic_menu_more</item> <item name="android:background">@null</item> @@ -497,7 +498,7 @@ <style name="Theme.ExpandedMenu"> <!-- Menu/item attributes --> - <item name="android:itemTextAppearance">?android:attr/textAppearanceLargeInverse</item> + <item name="android:itemTextAppearance">?android:attr/textAppearanceLarge</item> <item name="android:listViewStyle">@android:style/Widget.ListView.Menu</item> <item name="android:windowAnimationStyle">@android:style/Animation.OptionsPanel</item> <item name="android:background">@null</item> @@ -521,5 +522,12 @@ <item name="android:windowAnimationStyle">@android:style/Animation.RecentApplications</item> <item name="android:textColor">@android:color/secondary_text_nofocus</item> </style> + + <!-- Default theme for window that looks like a toast. --> + <style name="Theme.Toast" parent="@android:style/Theme.Dialog"> + <item name="android:windowBackground">@android:drawable/toast_frame</item> + <item name="android:windowAnimationStyle">@android:style/Animation.Toast</item> + <item name="android:backgroundDimEnabled">false</item> + </style> </resources> diff --git a/docs/html/resources/dashboard/platform-versions.jd b/docs/html/resources/dashboard/platform-versions.jd index ec47796619da..92d4e1595943 100644 --- a/docs/html/resources/dashboard/platform-versions.jd +++ b/docs/html/resources/dashboard/platform-versions.jd @@ -52,7 +52,7 @@ Android Market within a 14-day period ending on the data collection date noted b <div class="dashboard-panel"> <img alt="" height="250" width="460" -src="http://chart.apis.google.com/chart?&cht=p&chs=460x250&chd=t:15.3,20.3,0.2,59.7,4.5&chl= +src="http://chart.apis.google.com/chart?&cht=p&chs=460x250&chd=t:12.0,17.5,0.1,41.7,28.7&chl= Android%201.5|Android%201.6|Other*|Android%202.1|Android%202.2&chco=c4df9b, 6fad0c" /> @@ -62,14 +62,14 @@ Android%201.5|Android%201.6|Other*|Android%202.1|Android%202.2&chco=c4df9b, <th>API Level</th> <th>Distribution</th> </tr> -<tr><td>Android 1.5</td><td>3</td><td>15.3%</td></tr> -<tr><td>Android 1.6</td><td>4</td><td>20.3%</td></tr> -<tr><td>Android 2.1</td><td>7</td><td>59.7%</td></tr> -<tr><td>Android 2.2</td><td>8</td><td>4.5%</td></tr> +<tr><td>Android 1.5</td><td>3</td><td>12.0%</td></tr> +<tr><td>Android 1.6</td><td>4</td><td>17.5%</td></tr> +<tr><td>Android 2.1</td><td>7</td><td>41.7%</td></tr> +<tr><td>Android 2.2</td><td>8</td><td>28.7%</td></tr> </table> -<p><em>Data collected during two weeks ending on August 2, 2010</em></p> -<p style="font-size:.9em">* <em>Other: 0.2% of devices running obsolete versions</em></p> +<p><em>Data collected during two weeks ending on September 1, 2010</em></p> +<p style="font-size:.9em">* <em>Other: 0.1% of devices running obsolete versions</em></p> </div><!-- end dashboard-panel --> @@ -97,18 +97,18 @@ Android Market within a 14-day period ending on the date indicated on the x-axis <img alt="" height="250" width="660" style="padding:5px;background:#fff" src="http://chart.apis.google.com/chart?&cht=lc&chs=660x250&chxt=x,y,r&chxr=0,0,12|1,0,100|2,0,100& -chxl=0%3A%7C2010/02/01%7C02/15%7C03/01%7C03/15%7C04/01%7C04/15%7C05/01%7C05/15%7C06/01%7C06/15%7C07/ -01%7C07/15%7C2010/08/01%7C1%3A%7C0%25%7C25%25%7C50%25%7C75%25%7C100%25%7C2%3A%7C0%25%7C25%25%7C50%25 -%7C75%25%7C100%25&chxp=0,0,1,2,3,4,5,6,7,8,9,10,11,12&chxtc=0,5&chd=t:99.0,99.2,99.4,99.5,99.6,99.6, -99.6,99.7,100.6,101.1,99.9,100.0,100.0|63.4,62.5,61.6,60.6,61.5,61.7,62.3,63.5,73.0,76.4,78.6,81.1, -84.5|22.6,23.2,24.3,25.4,29.4,30.2,32.7,35.3,46.2,51.3,55.1,59.0,64.1|0.0,0.0,0.0,0.0,4.0,28.3,32.0, -34.9,45.9,51.0,54.9,58.8,64.0|0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.8,1.2,1.8,3.3,4.3&chm=tAndroid%201.5 -,7caa36,0,0,15,,t::-5|b,c3df9b,0,1,0|tAndroid%201.6,638d23,1,0,15,,t::-5|b,b0db6e,1,2,0|tAndroid%202 -.0.1,496c13,2,0,15,,t::-5|b,9ddb3d,2,3,0|tAndroid%202.1,2f4708,3,5,15,,t::-5|b,89cf19,3,4,0|B,6fad0c -,4,5,0&chg=7,25&chdl=Android%201.5|Android%201.6|Android%202.0.1|Android%202.1|Android%202.2&chco= -add274,9ad145,84c323,6ba213,507d08" /> - -<p><em>Last historical dataset collected during two weeks ending on August 2, 2010</em></p> +chxl=0%3A%7C2010/03/01%7C03/15%7C04/01%7C04/15%7C05/01%7C05/15%7C06/01%7C06/15%7C07/01%7C07/15%7C08/ +01%7C08/15%7C2010/09/01%7C1%3A%7C0%25%7C25%25%7C50%25%7C75%25%7C100%25%7C2%3A%7C0%25%7C25%25%7C50%25 +%7C75%25%7C100%25&chxp=0,0,1,2,3,4,5,6,7,8,9,10,11,12&chxtc=0,5&chd=t:99.4,99.5,99.6,99.6,99.6,99.7, +100.6,101.1,99.9,100.0,100.0,99.8,99.9|61.6,60.6,61.5,61.7,62.3,63.5,73.0,76.4,78.6,81.1,84.5,86.6, +88.0|24.3,25.4,29.4,30.2,32.7,35.3,46.2,51.3,55.1,59.0,64.1,68.2,70.4|0.0,0.0,4.0,28.3,32.0,34.9,45. +9,51.0,54.9,58.8,64.0,68.1,70.3|0.0,0.0,0.0,0.0,0.0,0.0,0.8,1.2,1.8,3.3,4.3,11.3,27.8&chm=tAndroid% +201.5,7caa36,0,0,15,,t::-5|b,c3df9b,0,1,0|tAndroid%201.6,638d23,1,0,15,,t::-5|b,b0db6e,1,2,0| +tAndroid%202.0.1,496c13,2,0,15,,t::-5|b,9ddb3d,2,3,0|tAndroid%202.1,2f4708,3,3,15,,t::-5|b,89cf19,3, +4,0|tAndroid%202.2,131d02,4,11,15,,t::-5|B,6fad0c,4,5,0&chg=7,25&chdl=Android%201.5|Android%201.6| +Android%202.0.1|Android%202.1|Android%202.2&chco=add274,9ad145,84c323,6ba213,507d08" /> + +<p><em>Last historical dataset collected during two weeks ending on September 1, 2010</em></p> </div><!-- end dashboard-panel --> diff --git a/docs/html/sdk/eclipse-adt.jd b/docs/html/sdk/eclipse-adt.jd index 9d6c3ab525ce..4594bb58185a 100644 --- a/docs/html/sdk/eclipse-adt.jd +++ b/docs/html/sdk/eclipse-adt.jd @@ -101,7 +101,7 @@ padding: .25em 1em; <div class="toggleable opened"> <a href="#" onclick="return toggleDiv(this)"> <img src="{@docRoot}assets/images/triangle-opened.png" class="toggle-img" height="9px" width="9px" /> -ADT 0.9.8</a> <em>(August 2010)</em> +ADT 0.9.8</a> <em>(September 2010)</em> <div class="toggleme"> diff --git a/docs/html/sdk/tools-notes.jd b/docs/html/sdk/tools-notes.jd index dc58801f3b69..0f075e596c2b 100644 --- a/docs/html/sdk/tools-notes.jd +++ b/docs/html/sdk/tools-notes.jd @@ -127,7 +127,7 @@ provides the equivalent library project support.</p> <div class="toggleable closed"> <a href="#" onclick="return toggleDiv(this)"> - <img src="{@docRoot}assets/images/triangle-opened.png" class="toggle-img" height="9px" width="9px" /> + <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px" /> SDK Tools, Revision 5</a> <em>(March 2010)</em> <div class="toggleme"> diff --git a/graphics/java/android/graphics/BitmapFactory.java b/graphics/java/android/graphics/BitmapFactory.java index 02e16cdad4c7..6234f2c1c3d1 100644 --- a/graphics/java/android/graphics/BitmapFactory.java +++ b/graphics/java/android/graphics/BitmapFactory.java @@ -628,12 +628,6 @@ public class BitmapFactory { */ public static LargeBitmap createLargeBitmap( FileDescriptor fd, boolean isShareable) throws IOException { - if (MemoryFile.isMemoryFile(fd)) { - int mappedlength = MemoryFile.getSize(fd); - MemoryFile file = new MemoryFile(fd, mappedlength, "r"); - InputStream is = file.getInputStream(); - return createLargeBitmap(is, isShareable); - } return nativeCreateLargeBitmap(fd, isShareable); } diff --git a/keystore/java/android/security/SystemKeyStore.java b/keystore/java/android/security/SystemKeyStore.java index abdb0aed8ce5..10932190a19b 100644 --- a/keystore/java/android/security/SystemKeyStore.java +++ b/keystore/java/android/security/SystemKeyStore.java @@ -20,6 +20,8 @@ import android.os.Environment; import android.os.FileUtils; import android.os.Process; +import org.apache.harmony.luni.util.InputStreamHelper; + import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; @@ -108,26 +110,19 @@ public class SystemKeyStore { return keyFile; } - public String retrieveKeyHexString(String keyName) { + public String retrieveKeyHexString(String keyName) throws IOException { return toHexString(retrieveKey(keyName)); } - public byte[] retrieveKey(String keyName) { - + public byte[] retrieveKey(String keyName) throws IOException { File keyFile = getKeyFile(keyName); + if (!keyFile.exists()) { return null; } - try { - FileInputStream fis = new FileInputStream(keyFile); - int keyLen = fis.available(); - byte[] retKey = new byte[keyLen]; - fis.read(retKey); - fis.close(); - return retKey; - } catch (IOException ioe) { } - throw new IllegalArgumentException(); + FileInputStream fis = new FileInputStream(keyFile); + return InputStreamHelper.readFullyAndClose(fis); } public void deleteKey(String keyName) { diff --git a/libs/utils/Threads.cpp b/libs/utils/Threads.cpp index e5ece8e8a25a..f6c55e4d89de 100644 --- a/libs/utils/Threads.cpp +++ b/libs/utils/Threads.cpp @@ -65,6 +65,20 @@ using namespace android; typedef void* (*android_pthread_entry)(void*); +static pthread_once_t gDoSchedulingGroupOnce = PTHREAD_ONCE_INIT; +static bool gDoSchedulingGroup = true; + +static void checkDoSchedulingGroup(void) { + char buf[PROPERTY_VALUE_MAX]; + int len = property_get("debug.sys.noschedgroups", buf, ""); + if (len > 0) { + int temp; + if (sscanf(buf, "%d", &temp) == 1) { + gDoSchedulingGroup = temp == 0; + } + } +} + struct thread_data_t { thread_func_t entryFunction; void* userData; @@ -80,6 +94,15 @@ struct thread_data_t { char * name = t->threadName; delete t; setpriority(PRIO_PROCESS, 0, prio); + pthread_once(&gDoSchedulingGroupOnce, checkDoSchedulingGroup); + if (gDoSchedulingGroup) { + if (prio >= ANDROID_PRIORITY_BACKGROUND) { + set_sched_policy(androidGetTid(), SP_BACKGROUND); + } else { + set_sched_policy(androidGetTid(), SP_FOREGROUND); + } + } + if (name) { #if defined(HAVE_PRCTL) // Mac OS doesn't have this, and we build libutil for the host too @@ -281,22 +304,6 @@ pid_t androidGetTid() #endif } -#if defined(HAVE_PTHREADS) -static pthread_once_t gDoSchedulingGroupOnce = PTHREAD_ONCE_INIT; -static bool gDoSchedulingGroup = true; - -static void checkDoSchedulingGroup(void) { - char buf[PROPERTY_VALUE_MAX]; - int len = property_get("debug.sys.noschedgroups", buf, ""); - if (len > 0) { - int temp; - if (sscanf(buf, "%d", &temp) == 1) { - gDoSchedulingGroup = temp == 0; - } - } -} -#endif - int androidSetThreadSchedulingGroup(pid_t tid, int grp) { if (grp > ANDROID_TGROUP_MAX || grp < 0) { diff --git a/media/jni/android_media_MediaRecorder.cpp b/media/jni/android_media_MediaRecorder.cpp index f69b8adfdfc5..efa0813e327d 100644 --- a/media/jni/android_media_MediaRecorder.cpp +++ b/media/jni/android_media_MediaRecorder.cpp @@ -437,7 +437,7 @@ android_media_MediaRecorder_native_setup(JNIEnv *env, jobject thiz, jobject weak return; } if (mr->initCheck() != NO_ERROR) { - jniThrowException(env, "java/lang/IOException", "Unable to initialize camera"); + jniThrowException(env, "java/lang/RuntimeException", "Unable to initialize media recorder"); return; } diff --git a/media/libeffects/lvm/lib/Bass/src/LVDBE_Private.h b/media/libeffects/lvm/lib/Bass/src/LVDBE_Private.h index 495b38f10235..8339d3c52cf8 100644 --- a/media/libeffects/lvm/lib/Bass/src/LVDBE_Private.h +++ b/media/libeffects/lvm/lib/Bass/src/LVDBE_Private.h @@ -64,7 +64,7 @@ extern "C" { #define LVDBE_PERSISTENT_COEF_ALIGN 4 /* 32-bit alignment for coef */ #define LVDBE_SCRATCH_ALIGN 4 /* 32-bit alignment for long data */ -#define LVDBE_SCRATCHBUFFERS_INPLACE 4 /* Number of buffers required for inplace processing */ +#define LVDBE_SCRATCHBUFFERS_INPLACE 6 /* Number of buffers required for inplace processing */ #define LVDBE_MIXER_TC 5 /* Mixer time */ #define LVDBE_BYPASS_MIXER_TC 100 /* Bypass mixer time */ diff --git a/media/libeffects/lvm/lib/Reverb/src/LVREV_ApplyNewSettings.c b/media/libeffects/lvm/lib/Reverb/src/LVREV_ApplyNewSettings.c index 9a40f683e533..ac2ef9dfb4a9 100644 --- a/media/libeffects/lvm/lib/Reverb/src/LVREV_ApplyNewSettings.c +++ b/media/libeffects/lvm/lib/Reverb/src/LVREV_ApplyNewSettings.c @@ -496,7 +496,6 @@ LVREV_ReturnStatus_en LVREV_ApplyNewSettings (LVREV_Instance_st *pPrivate) * Update the bypass mixer time constant */ if((pPrivate->NewParams.SampleRate != pPrivate->CurrentParams.SampleRate) || - (pPrivate->NewParams.SourceFormat != pPrivate->CurrentParams.SourceFormat) || (pPrivate->bFirstControl == LVM_TRUE)) { LVM_UINT16 NumChannels = 1; /* Assume MONO format */ @@ -508,11 +507,7 @@ LVREV_ReturnStatus_en LVREV_ApplyNewSettings (LVREV_Instance_st *pPrivate) pPrivate->FeedbackMixer[2].Alpha=Alpha; pPrivate->FeedbackMixer[3].Alpha=Alpha; - if (pPrivate->NewParams.SourceFormat != LVM_MONO) - { - /* Stereo or Mono-in-Stereo format data */ - NumChannels = 2; - } + NumChannels = 2; /* Always stereo output */ pPrivate->BypassMixer.Alpha1 = (LVM_INT32)LVM_Mixer_TimeConstant(LVREV_BYPASSMIXER_TC, LVM_GetFsFromTable(pPrivate->NewParams.SampleRate), NumChannels); pPrivate->BypassMixer.Alpha2 = pPrivate->BypassMixer.Alpha1; pPrivate->GainMixer.Alpha = pPrivate->BypassMixer.Alpha1; diff --git a/media/libeffects/lvm/lib/Reverb/src/LVREV_Process.c b/media/libeffects/lvm/lib/Reverb/src/LVREV_Process.c index 81521bad89cb..5c7a8a0d999a 100644 --- a/media/libeffects/lvm/lib/Reverb/src/LVREV_Process.c +++ b/media/libeffects/lvm/lib/Reverb/src/LVREV_Process.c @@ -54,7 +54,8 @@ LVREV_ReturnStatus_en LVREV_Process(LVREV_Handle_t hInstance, LVREV_Instance_st *pLVREV_Private = (LVREV_Instance_st *)hInstance; LVM_INT32 *pInput = (LVM_INT32 *)pInData; LVM_INT32 *pOutput = pOutData; - LVM_INT32 SamplesToProcess, RemainingSamples, format; + LVM_INT32 SamplesToProcess, RemainingSamples; + LVM_INT32 format = 1; /* * Check for error conditions @@ -66,7 +67,6 @@ LVREV_ReturnStatus_en LVREV_Process(LVREV_Handle_t hInstance, return LVREV_NULLADDRESS; } - /* * Apply the new controls settings if required */ @@ -95,9 +95,31 @@ LVREV_ReturnStatus_en LVREV_Process(LVREV_Handle_t hInstance, return LVREV_SUCCESS; } + /* + * If OFF copy and reformat the data as necessary + */ + if (pLVREV_Private->CurrentParams.OperatingMode == LVM_MODE_OFF) + { + if(pInput != pOutput) + { + /* + * Copy the data to the output buffer, convert to stereo is required + */ + + if(pLVREV_Private->CurrentParams.SourceFormat == LVM_MONO){ + MonoTo2I_32(pInput, pOutput, NumSamples); + } else { + Copy_16((LVM_INT16 *)pInput, + (LVM_INT16 *)pOutput, + (LVM_INT16)(NumSamples << 2)); // 32 bit data, stereo + } + } + + return LVREV_SUCCESS; + } + RemainingSamples = (LVM_INT32)NumSamples; - format = 1; if (pLVREV_Private->CurrentParams.SourceFormat != LVM_MONO) { format = 2; @@ -106,51 +128,24 @@ LVREV_ReturnStatus_en LVREV_Process(LVREV_Handle_t hInstance, while (RemainingSamples!=0) { /* - * If OFF copy and reformat the data as necessary + * Process the data */ - if (pLVREV_Private->CurrentParams.OperatingMode == LVM_MODE_OFF) - { - if((pInput != pOutput) || (pLVREV_Private->CurrentParams.SourceFormat == LVM_MONO)) - { - /* - * Copy the data to the output buffer - */ - if (pLVREV_Private->CurrentParams.SourceFormat != LVM_MONO) - { - RemainingSamples = (RemainingSamples << 1); /* Stereo data */ - } - - Copy_16((LVM_INT16 *)pInput, - (LVM_INT16 *)pOutput, - (LVM_INT16)(RemainingSamples << 1)); - } - - RemainingSamples = 0; + if(RemainingSamples > pLVREV_Private->MaxBlkLen) + { + SamplesToProcess = pLVREV_Private->MaxBlkLen; + RemainingSamples = (LVM_INT16)(RemainingSamples - SamplesToProcess); } - - /* - * Process the data - */ else { + SamplesToProcess = RemainingSamples; + RemainingSamples = 0; + } - if(RemainingSamples > pLVREV_Private->MaxBlkLen) - { - SamplesToProcess = pLVREV_Private->MaxBlkLen; - RemainingSamples = (LVM_INT16)(RemainingSamples - SamplesToProcess); - } - else - { - SamplesToProcess = RemainingSamples; - RemainingSamples = 0; - } - - ReverbBlock(pInput, pOutput, pLVREV_Private, (LVM_UINT16)SamplesToProcess); + ReverbBlock(pInput, pOutput, pLVREV_Private, (LVM_UINT16)SamplesToProcess); - pInput = (LVM_INT32 *)(pInput +(SamplesToProcess*format)); - pOutput = (LVM_INT32 *)(pOutput+(SamplesToProcess*format)); - } + pInput = (LVM_INT32 *)(pInput +(SamplesToProcess*format)); + pOutput = (LVM_INT32 *)(pOutput+(SamplesToProcess*2)); // Always stereo output } return LVREV_SUCCESS; @@ -420,26 +415,13 @@ void ReverbBlock(LVM_INT32 *pInput, LVM_INT32 *pOutput, LVREV_Instance_st *pPriv pPrivate->pScratchDelayLine[1], (LVM_INT16)NumSamples); - if(pPrivate->CurrentParams.SourceFormat != LVM_MONO) - { - JoinTo2i_32x32(pPrivate->pScratchDelayLine[0], - pPrivate->pScratchDelayLine[1], - pTemp, - (LVM_INT16)NumSamples); - } - else - { - Add2_Sat_32x32(pPrivate->pScratchDelayLine[1], - pPrivate->pScratchDelayLine[0], - (LVM_INT16)NumSamples); + JoinTo2i_32x32(pPrivate->pScratchDelayLine[0], + pPrivate->pScratchDelayLine[1], + pTemp, + (LVM_INT16)NumSamples); + - /*Apply 3-dB gain in-order to compensate for the gain change in stereo mode*/ - Mult3s_32x16(pPrivate->pScratchDelayLine[0], - LVREV_MIN3DB, - pTemp, - (LVM_INT16)NumSamples); - } break; case LVREV_DELAYLINES_2: @@ -447,49 +429,25 @@ void ReverbBlock(LVM_INT32 *pInput, LVM_INT32 *pOutput, LVREV_Instance_st *pPriv (LVM_INT16*)pScratch, (LVM_INT16)(NumSamples << 1)); - - - if(pPrivate->CurrentParams.SourceFormat != LVM_MONO) - { - - Mac3s_Sat_32x16(pPrivate->pScratchDelayLine[0], - -0x8000, - pScratch, - (LVM_INT16)NumSamples); - } + Mac3s_Sat_32x16(pPrivate->pScratchDelayLine[0], + -0x8000, + pScratch, + (LVM_INT16)NumSamples); Add2_Sat_32x32(pPrivate->pScratchDelayLine[1], pPrivate->pScratchDelayLine[0], (LVM_INT16)NumSamples); - if(pPrivate->CurrentParams.SourceFormat != LVM_MONO) - { - JoinTo2i_32x32(pPrivate->pScratchDelayLine[0], - pScratch, - pTemp, - (LVM_INT16)NumSamples); - } - else - { - Copy_16( (LVM_INT16*)pPrivate->pScratchDelayLine[0], - (LVM_INT16*)pTemp, - (LVM_INT16)(NumSamples << 1)); - - } - break; - case LVREV_DELAYLINES_1: - if(pPrivate->CurrentParams.SourceFormat != LVM_MONO) - { - - MonoTo2I_32(pPrivate->pScratchDelayLine[0], + JoinTo2i_32x32(pPrivate->pScratchDelayLine[0], + pScratch, pTemp, (LVM_INT16)NumSamples); - } - else - { - pTemp = pPrivate->pScratchDelayLine[0]; - } + break; + case LVREV_DELAYLINES_1: + MonoTo2I_32(pPrivate->pScratchDelayLine[0], + pTemp, + (LVM_INT16)NumSamples); break; default: break; @@ -499,30 +457,15 @@ void ReverbBlock(LVM_INT32 *pInput, LVM_INT32 *pOutput, LVREV_Instance_st *pPriv /* * Dry/wet mixer */ - if(pPrivate->CurrentParams.SourceFormat != LVM_MONO) - { - size = (LVM_INT16)(NumSamples << 1); - } - else - { - size = (LVM_INT16)NumSamples; - } + size = (LVM_INT16)(NumSamples << 1); MixSoft_2St_D32C31_SAT(&pPrivate->BypassMixer, - pInput, + pTemp, pTemp, pOutput, size); /* Apply Gain*/ - if(pPrivate->CurrentParams.SourceFormat != LVM_MONO) - { - size = (LVM_INT16)(NumSamples << 1); - } - else - { - size = (LVM_INT16)NumSamples; - } Shift_Sat_v32xv32 (LVREV_OUTPUTGAIN_SHIFT, pOutput, @@ -533,6 +476,7 @@ void ReverbBlock(LVM_INT32 *pInput, LVM_INT32 *pOutput, LVREV_Instance_st *pPriv pOutput, pOutput, size); + return; } diff --git a/media/libeffects/lvm/wrapper/Reverb/EffectReverb.cpp b/media/libeffects/lvm/wrapper/Reverb/EffectReverb.cpp index b3e153122ca9..60f42884801c 100755 --- a/media/libeffects/lvm/wrapper/Reverb/EffectReverb.cpp +++ b/media/libeffects/lvm/wrapper/Reverb/EffectReverb.cpp @@ -431,26 +431,15 @@ int process( LVM_INT16 *pIn, pContext->InFrames32[i] = (LVM_INT32)pIn[i]<<8; } - // If the input was MONO, convert to STEREO - if(pContext->config.inputCfg.channels == CHANNEL_MONO){ - //LOGV("\tConverting Output from MONO to STEREO"); - MonoTo2I_32(pContext->InFrames32, pContext->InFrames32, frameCount); - } - - //LOGV("\tProcess, frames: %d, InFormat: %d(MONO=%d), OutFormat: %d(STEREO=%d)", - //frameCount, pContext->config.inputCfg.channels, CHANNEL_MONO, - //pContext->config.outputCfg.channels, CHANNEL_STEREO); - if (pContext->preset && pContext->curPreset == REVERB_PRESET_NONE) { memset(pContext->OutFrames32, 0, frameCount * sizeof(LVM_INT32) * 2); //always stereo here } else { if(pContext->bEnabled == LVM_FALSE && pContext->SamplesToExitCount > 0) { - memset(pContext->InFrames32, - 0, - frameCount * sizeof(LVM_INT32) * 2); //always stereo here + memset(pContext->InFrames32,0,frameCount * sizeof(LVM_INT32) * samplesPerFrame); + LOGV("\tZeroing %d samples per frame at the end of call", samplesPerFrame); } - /* Process the samples */ + /* Process the samples, producing a stereo output */ LvmStatus = LVREV_Process(pContext->hInstance, /* Instance handle */ pContext->InFrames32, /* Input buffer */ pContext->OutFrames32, /* Output buffer */ @@ -677,7 +666,7 @@ int Reverb_init(ReverbContext *pContext){ /* Set the capabilities */ InstParams.MaxBlockSize = MAX_CALL_SIZE; - InstParams.SourceFormat = LVM_STEREO; + InstParams.SourceFormat = LVM_STEREO; // Max format, could be mono during process InstParams.NumDelays = LVREV_DELAYLINES_4; /* Allocate memory, forcing alignment */ @@ -742,7 +731,12 @@ int Reverb_init(ReverbContext *pContext){ /* General parameters */ params.OperatingMode = LVM_MODE_ON; params.SampleRate = LVM_FS_44100; - params.SourceFormat = LVM_STEREO; + + if(pContext->config.inputCfg.channels == CHANNEL_MONO){ + params.SourceFormat = LVM_MONO; + } else { + params.SourceFormat = LVM_STEREO; + } /* Reverb parameters */ params.Level = 0; @@ -1790,8 +1784,9 @@ extern "C" int Reverb_process(effect_interface_t self, if (pContext->bEnabled == LVM_FALSE){ if( pContext->SamplesToExitCount > 0){ pContext->SamplesToExitCount -= outBuffer->frameCount; + LOGV("\tReverb_process() Effect is being stopped %d", pContext->SamplesToExitCount); }else{ - LOGV("\tReverb_process() ERROR Effect is not enabled %d", pContext->SamplesToExitCount); + LOGV("\tReverb_process() Effect is being stopped"); return -ENODATA; } } diff --git a/media/libstagefright/MP3Extractor.cpp b/media/libstagefright/MP3Extractor.cpp index 2e369682b5db..82c04265e407 100644 --- a/media/libstagefright/MP3Extractor.cpp +++ b/media/libstagefright/MP3Extractor.cpp @@ -459,7 +459,8 @@ private: MP3Extractor::MP3Extractor( const sp<DataSource> &source, const sp<AMessage> &meta) - : mDataSource(source), + : mInitCheck(NO_INIT), + mDataSource(source), mFirstFramePos(-1), mFixedHeader(0), mByteNumber(0) { @@ -480,53 +481,54 @@ MP3Extractor::MP3Extractor( success = true; } else { success = Resync(mDataSource, 0, &pos, &header); - CHECK(success); } - if (success) { - mFirstFramePos = pos; - mFixedHeader = header; - - size_t frame_size; - int sample_rate; - int num_channels; - int bitrate; - get_mp3_frame_size( - header, &frame_size, &sample_rate, &num_channels, &bitrate); - - mMeta = new MetaData; + if (!success) { + // mInitCheck will remain NO_INIT + return; + } - mMeta->setCString(kKeyMIMEType, MEDIA_MIMETYPE_AUDIO_MPEG); - mMeta->setInt32(kKeySampleRate, sample_rate); - mMeta->setInt32(kKeyBitRate, bitrate * 1000); - mMeta->setInt32(kKeyChannelCount, num_channels); + mFirstFramePos = pos; + mFixedHeader = header; - int64_t duration; - parse_xing_header( - mDataSource, mFirstFramePos, NULL, &mByteNumber, - mTableOfContents, NULL, &duration); - if (duration > 0) { - mMeta->setInt64(kKeyDuration, duration); - } else { - off_t fileSize; - if (mDataSource->getSize(&fileSize) == OK) { - mMeta->setInt64( - kKeyDuration, - 8000LL * (fileSize - mFirstFramePos) / bitrate); - } + size_t frame_size; + int sample_rate; + int num_channels; + int bitrate; + get_mp3_frame_size( + header, &frame_size, &sample_rate, &num_channels, &bitrate); + + mMeta = new MetaData; + + mMeta->setCString(kKeyMIMEType, MEDIA_MIMETYPE_AUDIO_MPEG); + mMeta->setInt32(kKeySampleRate, sample_rate); + mMeta->setInt32(kKeyBitRate, bitrate * 1000); + mMeta->setInt32(kKeyChannelCount, num_channels); + + int64_t duration; + parse_xing_header( + mDataSource, mFirstFramePos, NULL, &mByteNumber, + mTableOfContents, NULL, &duration); + if (duration > 0) { + mMeta->setInt64(kKeyDuration, duration); + } else { + off_t fileSize; + if (mDataSource->getSize(&fileSize) == OK) { + mMeta->setInt64( + kKeyDuration, + 8000LL * (fileSize - mFirstFramePos) / bitrate); } } -} -MP3Extractor::~MP3Extractor() { + mInitCheck = OK; } size_t MP3Extractor::countTracks() { - return (mFirstFramePos < 0) ? 0 : 1; + return mInitCheck != OK ? 0 : 1; } sp<MediaSource> MP3Extractor::getTrack(size_t index) { - if (mFirstFramePos < 0 || index != 0) { + if (mInitCheck != OK || index != 0) { return NULL; } @@ -536,7 +538,7 @@ sp<MediaSource> MP3Extractor::getTrack(size_t index) { } sp<MetaData> MP3Extractor::getTrackMetaData(size_t index, uint32_t flags) { - if (mFirstFramePos < 0 || index != 0) { + if (mInitCheck != OK || index != 0) { return NULL; } @@ -713,7 +715,7 @@ status_t MP3Source::read( sp<MetaData> MP3Extractor::getMetaData() { sp<MetaData> meta = new MetaData; - if (mFirstFramePos < 0) { + if (mInitCheck != OK) { return meta; } diff --git a/media/libstagefright/MPEG4Extractor.cpp b/media/libstagefright/MPEG4Extractor.cpp index ba904072895f..4bbc25181d69 100644 --- a/media/libstagefright/MPEG4Extractor.cpp +++ b/media/libstagefright/MPEG4Extractor.cpp @@ -872,7 +872,11 @@ status_t MPEG4Extractor::parseChunk(off_t *offset, int depth) { } size_t max_size; - CHECK_EQ(mLastTrack->sampleTable->getMaxSampleSize(&max_size), OK); + err = mLastTrack->sampleTable->getMaxSampleSize(&max_size); + + if (err != OK) { + return err; + } // Assume that a given buffer only contains at most 10 fragments, // each fragment originally prefixed with a 2 byte length will diff --git a/media/libstagefright/MPEG4Writer.cpp b/media/libstagefright/MPEG4Writer.cpp index 806836d82c6a..de4233d3bb95 100644 --- a/media/libstagefright/MPEG4Writer.cpp +++ b/media/libstagefright/MPEG4Writer.cpp @@ -346,9 +346,10 @@ status_t MPEG4Writer::start(MetaData *param) { // If file size is set to be larger than the 32 bit file // size limit, treat it as an error. if (mMaxFileSizeLimitBytes > kMax32BitFileSize) { - LOGE("32-bit file size limit too big: %lld bytes", - mMaxFileSizeLimitBytes); - return UNKNOWN_ERROR; + LOGW("32-bi file size limit (%lld bytes) too big. " + "It is changed to %lld bytes", + mMaxFileSizeLimitBytes, kMax32BitFileSize); + mMaxFileSizeLimitBytes = kMax32BitFileSize; } } diff --git a/media/libstagefright/TimedEventQueue.cpp b/media/libstagefright/TimedEventQueue.cpp index 0dacb53efa16..5a453e96a499 100644 --- a/media/libstagefright/TimedEventQueue.cpp +++ b/media/libstagefright/TimedEventQueue.cpp @@ -26,6 +26,8 @@ #include "include/TimedEventQueue.h" +#include <cutils/sched_policy.h> + #include <sys/prctl.h> #include <sys/time.h> #include <sys/resource.h> @@ -209,6 +211,8 @@ void *TimedEventQueue::ThreadWrapper(void *me) { #endif setpriority(PRIO_PROCESS, 0, ANDROID_PRIORITY_FOREGROUND); + set_sched_policy(androidGetTid(), SP_FOREGROUND); + static_cast<TimedEventQueue *>(me)->threadEntry(); #ifdef ANDROID_SIMULATOR diff --git a/media/libstagefright/include/MP3Extractor.h b/media/libstagefright/include/MP3Extractor.h index 0e6ccde11d21..30136e7d805d 100644 --- a/media/libstagefright/include/MP3Extractor.h +++ b/media/libstagefright/include/MP3Extractor.h @@ -37,10 +37,9 @@ public: virtual sp<MetaData> getMetaData(); -protected: - virtual ~MP3Extractor(); - private: + status_t mInitCheck; + sp<DataSource> mDataSource; off_t mFirstFramePos; sp<MetaData> mMeta; diff --git a/opengl/libs/EGL/egl.cpp b/opengl/libs/EGL/egl.cpp index 5e61607da85e..df21358dc784 100644 --- a/opengl/libs/EGL/egl.cpp +++ b/opengl/libs/EGL/egl.cpp @@ -239,7 +239,7 @@ struct egl_image_t : public egl_object_t memset(images, 0, sizeof(images)); } EGLDisplay dpy; - EGLConfig context; + EGLContext context; EGLImageKHR images[IMPL_NUM_IMPLEMENTATIONS]; }; @@ -1769,7 +1769,7 @@ EGLBoolean eglDestroyImageKHR(EGLDisplay dpy, EGLImageKHR img) egl_connection_t* const cnx = &gEGLImpl[i]; if (image->images[i] != EGL_NO_IMAGE_KHR) { if (cnx->dso) { - if (cnx->egl.eglCreateImageKHR) { + if (cnx->egl.eglDestroyImageKHR) { if (cnx->egl.eglDestroyImageKHR( dp->disp[i].dpy, image->images[i])) { success = true; diff --git a/opengl/tests/angeles/app-linux.cpp b/opengl/tests/angeles/app-linux.cpp index 9f80ed44420f..4d10ee509924 100644 --- a/opengl/tests/angeles/app-linux.cpp +++ b/opengl/tests/angeles/app-linux.cpp @@ -63,7 +63,7 @@ using namespace android; int gAppAlive = 1; static const char sAppName[] = - "San Angeles Observation OpenGL ES version example (Linux)"; + "San Angeles Observation OpenGL ES version example (Linux)"; static int sWindowWidth = WINDOW_DEFAULT_WIDTH; static int sWindowHeight = WINDOW_DEFAULT_HEIGHT; @@ -74,22 +74,22 @@ static EGLSurface sEglSurface = EGL_NO_SURFACE; const char *egl_strerror(unsigned err) { switch(err){ - case EGL_SUCCESS: return "SUCCESS"; - case EGL_NOT_INITIALIZED: return "NOT INITIALIZED"; - case EGL_BAD_ACCESS: return "BAD ACCESS"; - case EGL_BAD_ALLOC: return "BAD ALLOC"; - case EGL_BAD_ATTRIBUTE: return "BAD_ATTRIBUTE"; - case EGL_BAD_CONFIG: return "BAD CONFIG"; - case EGL_BAD_CONTEXT: return "BAD CONTEXT"; - case EGL_BAD_CURRENT_SURFACE: return "BAD CURRENT SURFACE"; - case EGL_BAD_DISPLAY: return "BAD DISPLAY"; - case EGL_BAD_MATCH: return "BAD MATCH"; - case EGL_BAD_NATIVE_PIXMAP: return "BAD NATIVE PIXMAP"; - case EGL_BAD_NATIVE_WINDOW: return "BAD NATIVE WINDOW"; - case EGL_BAD_PARAMETER: return "BAD PARAMETER"; - case EGL_BAD_SURFACE: return "BAD_SURFACE"; -// case EGL_CONTEXT_LOST: return "CONTEXT LOST"; - default: return "UNKNOWN"; + case EGL_SUCCESS: return "SUCCESS"; + case EGL_NOT_INITIALIZED: return "NOT INITIALIZED"; + case EGL_BAD_ACCESS: return "BAD ACCESS"; + case EGL_BAD_ALLOC: return "BAD ALLOC"; + case EGL_BAD_ATTRIBUTE: return "BAD_ATTRIBUTE"; + case EGL_BAD_CONFIG: return "BAD CONFIG"; + case EGL_BAD_CONTEXT: return "BAD CONTEXT"; + case EGL_BAD_CURRENT_SURFACE: return "BAD CURRENT SURFACE"; + case EGL_BAD_DISPLAY: return "BAD DISPLAY"; + case EGL_BAD_MATCH: return "BAD MATCH"; + case EGL_BAD_NATIVE_PIXMAP: return "BAD NATIVE PIXMAP"; + case EGL_BAD_NATIVE_WINDOW: return "BAD NATIVE WINDOW"; + case EGL_BAD_PARAMETER: return "BAD PARAMETER"; + case EGL_BAD_SURFACE: return "BAD_SURFACE"; + // case EGL_CONTEXT_LOST: return "CONTEXT LOST"; + default: return "UNKNOWN"; } } @@ -118,52 +118,59 @@ static void checkEGLErrors() fprintf(stderr, "EGL Error: 0x%04x\n", (int)error); } -static int initGraphics() +static int initGraphics(unsigned samples) { EGLint configAttribs[] = { - EGL_DEPTH_SIZE, 16, - EGL_NONE - }; - - EGLint majorVersion; - EGLint minorVersion; - EGLContext context; - EGLConfig config; - EGLSurface surface; - EGLint w, h; - EGLDisplay dpy; - - EGLNativeWindowType window = android_createDisplaySurface(); - - dpy = eglGetDisplay(EGL_DEFAULT_DISPLAY); - eglInitialize(dpy, &majorVersion, &minorVersion); - - status_t err = EGLUtils::selectConfigForNativeWindow( - dpy, configAttribs, window, &config); - if (err) { - fprintf(stderr, "couldn't find an EGLConfig matching the screen format\n"); - return 0; - } - - surface = eglCreateWindowSurface(dpy, config, window, NULL); - egl_error("eglCreateWindowSurface"); - - fprintf(stderr,"surface = %p\n", surface); - - context = eglCreateContext(dpy, config, NULL, NULL); - egl_error("eglCreateContext"); - fprintf(stderr,"context = %p\n", context); - - eglMakeCurrent(dpy, surface, surface, context); - egl_error("eglMakeCurrent"); - - eglQuerySurface(dpy, surface, EGL_WIDTH, &sWindowWidth); - eglQuerySurface(dpy, surface, EGL_HEIGHT, &sWindowHeight); + EGL_DEPTH_SIZE, 16, + EGL_SAMPLE_BUFFERS, samples ? 1 : 0, + EGL_SAMPLES, samples, + EGL_NONE + }; + + EGLint majorVersion; + EGLint minorVersion; + EGLContext context; + EGLConfig config; + EGLSurface surface; + EGLint w, h; + EGLDisplay dpy; + + EGLNativeWindowType window = android_createDisplaySurface(); + + dpy = eglGetDisplay(EGL_DEFAULT_DISPLAY); + eglInitialize(dpy, &majorVersion, &minorVersion); + + status_t err = EGLUtils::selectConfigForNativeWindow( + dpy, configAttribs, window, &config); + if (err) { + fprintf(stderr, "couldn't find an EGLConfig matching the screen format\n"); + return 0; + } + + surface = eglCreateWindowSurface(dpy, config, window, NULL); + egl_error("eglCreateWindowSurface"); + + fprintf(stderr,"surface = %p\n", surface); + + context = eglCreateContext(dpy, config, NULL, NULL); + egl_error("eglCreateContext"); + fprintf(stderr,"context = %p\n", context); + + eglMakeCurrent(dpy, surface, surface, context); + egl_error("eglMakeCurrent"); + + eglQuerySurface(dpy, surface, EGL_WIDTH, &sWindowWidth); + eglQuerySurface(dpy, surface, EGL_HEIGHT, &sWindowHeight); sEglDisplay = dpy; sEglSurface = surface; sEglContext = context; + if (samples == 0) { + // GL_MULTISAMPLE is enabled by default + glDisable(GL_MULTISAMPLE); + } + return EGL_TRUE; } @@ -179,11 +186,14 @@ static void deinitGraphics() int main(int argc, char *argv[]) { - // not referenced: - argc = argc; - argv = argv; + unsigned samples = 0; + printf("usage: %s [samples]\n", argv[0]); + if (argc == 2) { + samples = atoi( argv[1] ); + printf("Multisample enabled: GL_SAMPLES = %u\n", samples); + } - if (!initGraphics()) + if (!initGraphics(samples)) { fprintf(stderr, "Graphics initialization failed.\n"); return EXIT_FAILURE; @@ -195,7 +205,7 @@ int main(int argc, char *argv[]) int frameCount = 0; gettimeofday(&timeTemp, NULL); double totalTime = timeTemp.tv_usec/1000000.0 + timeTemp.tv_sec; - + while (gAppAlive) { struct timeval timeNow; diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_1x.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_1x.png Binary files differindex 12d4ac411e97..bdc8c2763ee2 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_1x.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_1x.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_3g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_3g.png Binary files differindex 4f1f3774d7dc..d0d13457b112 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_3g.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_3g.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_e.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_e.png Binary files differindex c65f56ae0179..4211b8c2b933 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_e.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_e.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_g.png Binary files differindex 4aca0c7dda99..d5ece7a58a74 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_g.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_g.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_h.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_h.png Binary files differindex 24e07aba1dee..6687b40fbd90 100755 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_h.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_h.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_1x.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_1x.png Binary files differnew file mode 100755 index 000000000000..ba240827d256 --- /dev/null +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_1x.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_3g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_3g.png Binary files differnew file mode 100755 index 000000000000..5af2b050cb9e --- /dev/null +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_3g.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_e.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_e.png Binary files differnew file mode 100755 index 000000000000..9909b09ca44e --- /dev/null +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_e.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_g.png Binary files differnew file mode 100755 index 000000000000..0e02b8d6ead0 --- /dev/null +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_g.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_h.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_h.png Binary files differnew file mode 100755 index 000000000000..f84ad32aaa52 --- /dev/null +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_h.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_in_1x.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_in_1x.png Binary files differnew file mode 100755 index 000000000000..d80a8ce1ea85 --- /dev/null +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_in_1x.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_in_3g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_in_3g.png Binary files differnew file mode 100755 index 000000000000..31c976a0d6cc --- /dev/null +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_in_3g.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_in_e.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_in_e.png Binary files differnew file mode 100755 index 000000000000..c299e12b7fa2 --- /dev/null +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_in_e.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_in_g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_in_g.png Binary files differnew file mode 100755 index 000000000000..a487f2977d9a --- /dev/null +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_in_g.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_in_h.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_in_h.png Binary files differnew file mode 100755 index 000000000000..816085bdb799 --- /dev/null +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_in_h.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_inandout_1x.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_inandout_1x.png Binary files differnew file mode 100755 index 000000000000..01320192bcc7 --- /dev/null +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_inandout_1x.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_inandout_3g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_inandout_3g.png Binary files differnew file mode 100755 index 000000000000..3903545edde0 --- /dev/null +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_inandout_3g.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_inandout_e.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_inandout_e.png Binary files differnew file mode 100755 index 000000000000..ed099ffbdd59 --- /dev/null +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_inandout_e.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_inandout_g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_inandout_g.png Binary files differnew file mode 100755 index 000000000000..c930e4c43777 --- /dev/null +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_inandout_g.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_inandout_h.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_inandout_h.png Binary files differnew file mode 100755 index 000000000000..407a06ca2fba --- /dev/null +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_inandout_h.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_out_1x.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_out_1x.png Binary files differnew file mode 100755 index 000000000000..6141f7282501 --- /dev/null +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_out_1x.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_out_3g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_out_3g.png Binary files differnew file mode 100755 index 000000000000..d44a4cfc1177 --- /dev/null +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_out_3g.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_out_e.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_out_e.png Binary files differnew file mode 100755 index 000000000000..54ebd9bcafab --- /dev/null +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_out_e.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_out_g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_out_g.png Binary files differnew file mode 100755 index 000000000000..2fe0bbf690c2 --- /dev/null +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_out_g.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_out_h.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_out_h.png Binary files differnew file mode 100755 index 000000000000..e58e01946871 --- /dev/null +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_out_h.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_1x.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_1x.png Binary files differindex 511e22a1f93f..00a29a484acd 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_1x.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_1x.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_3g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_3g.png Binary files differindex 64f8087f4e11..11ee0f289511 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_3g.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_3g.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_e.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_e.png Binary files differindex 90aaf71a994d..fc135fcbb603 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_e.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_e.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_g.png Binary files differindex c21387e27f63..3d33a6262f78 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_g.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_g.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_h.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_h.png Binary files differindex f2f6daa29309..f36e1ebb8a3e 100755 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_h.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_in_h.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_1x.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_1x.png Binary files differindex 19ea80c5de9b..ef5dbf47abf2 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_1x.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_1x.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_3g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_3g.png Binary files differindex ebfa6fb6ee7f..dba9675cd963 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_3g.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_3g.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_e.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_e.png Binary files differindex 7ccd7dea45ad..2e5d82e85091 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_e.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_e.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_g.png Binary files differindex c614d0d84187..0985a0956d7c 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_g.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_g.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_h.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_h.png Binary files differindex 5d6ef05c0fb1..7a32c4316f4a 100755 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_h.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_inandout_h.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_1x.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_1x.png Binary files differindex adf5f955c493..b62255661df8 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_1x.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_1x.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_3g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_3g.png Binary files differindex 9936f2ab7377..04ec59e36d32 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_3g.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_3g.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_e.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_e.png Binary files differindex 904c5650e1a1..a47b9822bdb3 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_e.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_e.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_g.png Binary files differindex 1261c152a3ad..9d90e71a14ed 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_g.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_g.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_h.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_h.png Binary files differindex 5e3122d612d6..920f290c6b24 100755 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_h.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_out_h.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_0.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_0.png Binary files differindex 55a2ad82f976..98e874aad97a 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_0.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_0.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_1.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_1.png Binary files differindex d16b3e8d8e78..aea18eda8726 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_1.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_1.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_1_fully.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_1_fully.png Binary files differnew file mode 100755 index 000000000000..1a25a2c49174 --- /dev/null +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_1_fully.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_2.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_2.png Binary files differindex 2511083e9a16..77e6ee40ae5e 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_2.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_2.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_2_fully.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_2_fully.png Binary files differnew file mode 100755 index 000000000000..00d86bfd2f38 --- /dev/null +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_2_fully.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_3.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_3.png Binary files differindex e0799a573c89..c2574e1486af 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_3.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_3.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_3_fully.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_3_fully.png Binary files differnew file mode 100755 index 000000000000..70c030bd3d88 --- /dev/null +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_3_fully.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_4.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_4.png Binary files differindex 2385c3a492ed..55caecff88a0 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_4.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_4.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_4_fully.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_4_fully.png Binary files differnew file mode 100755 index 000000000000..b5326d257961 --- /dev/null +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_4_fully.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_1x.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_1x.png Binary files differdeleted file mode 100644 index 130724fd0550..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_3g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_3g.png Binary files differdeleted file mode 100644 index a1092807a9cf..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_e.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_e.png Binary files differdeleted file mode 100644 index c55264447967..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_g.png Binary files differdeleted file mode 100644 index f7edb49954c4..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_h.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_h.png Binary files differdeleted file mode 100644 index 7d5413afcb6c..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_in_1x.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_in_1x.png Binary files differdeleted file mode 100644 index 3155e632fe7b..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_in_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_in_3g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_in_3g.png Binary files differdeleted file mode 100644 index 01b003ce85ef..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_in_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_in_e.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_in_e.png Binary files differdeleted file mode 100644 index bffa0eb1a5b1..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_in_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_in_g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_in_g.png Binary files differdeleted file mode 100644 index 8884b482e3b4..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_in_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_in_h.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_in_h.png Binary files differdeleted file mode 100644 index 695b80c36bcf..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_in_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_inandout_1x.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_inandout_1x.png Binary files differdeleted file mode 100644 index 1017e3bb4166..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_inandout_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_inandout_3g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_inandout_3g.png Binary files differdeleted file mode 100644 index 365130064ebe..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_inandout_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_inandout_e.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_inandout_e.png Binary files differdeleted file mode 100644 index 99533e0cade9..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_inandout_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_inandout_g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_inandout_g.png Binary files differdeleted file mode 100644 index f4e5a12ed445..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_inandout_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_inandout_h.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_inandout_h.png Binary files differdeleted file mode 100644 index 467acd137a1c..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_inandout_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_out_1x.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_out_1x.png Binary files differdeleted file mode 100644 index 54187912f6b8..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_out_1x.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_out_3g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_out_3g.png Binary files differdeleted file mode 100644 index f7f0f894d68d..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_out_3g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_out_e.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_out_e.png Binary files differdeleted file mode 100644 index c91542635862..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_out_e.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_out_g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_out_g.png Binary files differdeleted file mode 100644 index 5d36035158b9..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_out_g.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_out_h.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_out_h.png Binary files differdeleted file mode 100644 index da503054bf6f..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_out_h.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_0.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_0.png Binary files differdeleted file mode 100644 index 8ee3421fb72b..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_0.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_1.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_1.png Binary files differdeleted file mode 100644 index 184fa366ed04..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_1.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_2.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_2.png Binary files differdeleted file mode 100644 index 79935bb7e3d1..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_2.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_3.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_3.png Binary files differdeleted file mode 100644 index d2099e616a41..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_3.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_4.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_4.png Binary files differdeleted file mode 100644 index 2062aada3e3e..000000000000 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_4.png +++ /dev/null diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarPolicy.java b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarPolicy.java index e828f68ac9bc..b4e0d3ae5d55 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarPolicy.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarPolicy.java @@ -36,6 +36,7 @@ import android.location.LocationManager; import android.media.AudioManager; import android.media.Ringtone; import android.media.RingtoneManager; +import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.net.Uri; import android.net.wifi.WifiManager; @@ -91,6 +92,8 @@ public class StatusBarPolicy { private static final int AM_PM_STYLE = AM_PM_STYLE_GONE; + private static final int INET_CONDITION_THRESHOLD = 50; + private final Context mContext; private final StatusBarManager mService; private final Handler mHandler = new StatusBarHandler(); @@ -232,42 +235,62 @@ public class StatusBarPolicy { }; //***** Data connection icons - private int[] mDataIconList = sDataNetType_g; + private int[] mDataIconList = sDataNetType_g[0]; //GSM/UMTS - private static final int[] sDataNetType_g = new int[] { - R.drawable.stat_sys_data_connected_g, - R.drawable.stat_sys_data_in_g, - R.drawable.stat_sys_data_out_g, - R.drawable.stat_sys_data_inandout_g, + private static final int[][] sDataNetType_g = { + { R.drawable.stat_sys_data_connected_g, + R.drawable.stat_sys_data_in_g, + R.drawable.stat_sys_data_out_g, + R.drawable.stat_sys_data_inandout_g }, + { R.drawable.stat_sys_data_fully_connected_g, + R.drawable.stat_sys_data_fully_in_g, + R.drawable.stat_sys_data_fully_out_g, + R.drawable.stat_sys_data_fully_inandout_g } }; - private static final int[] sDataNetType_3g = new int[] { - R.drawable.stat_sys_data_connected_3g, - R.drawable.stat_sys_data_in_3g, - R.drawable.stat_sys_data_out_3g, - R.drawable.stat_sys_data_inandout_3g, + private static final int[][] sDataNetType_3g = { + { R.drawable.stat_sys_data_connected_3g, + R.drawable.stat_sys_data_in_3g, + R.drawable.stat_sys_data_out_3g, + R.drawable.stat_sys_data_inandout_3g }, + { R.drawable.stat_sys_data_fully_connected_3g, + R.drawable.stat_sys_data_fully_in_3g, + R.drawable.stat_sys_data_fully_out_3g, + R.drawable.stat_sys_data_fully_inandout_3g } }; - private static final int[] sDataNetType_e = new int[] { - R.drawable.stat_sys_data_connected_e, - R.drawable.stat_sys_data_in_e, - R.drawable.stat_sys_data_out_e, - R.drawable.stat_sys_data_inandout_e, + private static final int[][] sDataNetType_e = { + { R.drawable.stat_sys_data_connected_e, + R.drawable.stat_sys_data_in_e, + R.drawable.stat_sys_data_out_e, + R.drawable.stat_sys_data_inandout_e }, + { R.drawable.stat_sys_data_fully_connected_e, + R.drawable.stat_sys_data_fully_in_e, + R.drawable.stat_sys_data_fully_out_e, + R.drawable.stat_sys_data_fully_inandout_e } }; //3.5G - private static final int[] sDataNetType_h = new int[] { - R.drawable.stat_sys_data_connected_h, - R.drawable.stat_sys_data_in_h, - R.drawable.stat_sys_data_out_h, - R.drawable.stat_sys_data_inandout_h, + private static final int[][] sDataNetType_h = { + { R.drawable.stat_sys_data_connected_h, + R.drawable.stat_sys_data_in_h, + R.drawable.stat_sys_data_out_h, + R.drawable.stat_sys_data_inandout_h }, + { R.drawable.stat_sys_data_fully_connected_h, + R.drawable.stat_sys_data_fully_in_h, + R.drawable.stat_sys_data_fully_out_h, + R.drawable.stat_sys_data_fully_inandout_h } }; //CDMA // Use 3G icons for EVDO data and 1x icons for 1XRTT data - private static final int[] sDataNetType_1x = new int[] { - R.drawable.stat_sys_data_connected_1x, - R.drawable.stat_sys_data_in_1x, - R.drawable.stat_sys_data_out_1x, - R.drawable.stat_sys_data_inandout_1x, - }; + private static final int[][] sDataNetType_1x = { + { R.drawable.stat_sys_data_connected_1x, + R.drawable.stat_sys_data_in_1x, + R.drawable.stat_sys_data_out_1x, + R.drawable.stat_sys_data_inandout_1x }, + { R.drawable.stat_sys_data_fully_connected_1x, + R.drawable.stat_sys_data_fully_in_1x, + R.drawable.stat_sys_data_fully_out_1x, + R.drawable.stat_sys_data_fully_inandout_1x } + }; // Assume it's all good unless we hear otherwise. We don't always seem // to get broadcasts that it *is* there. @@ -292,17 +315,22 @@ public class StatusBarPolicy { private boolean mBluetoothEnabled; // wifi - private static final int[] sWifiSignalImages = new int[] { - R.drawable.stat_sys_wifi_signal_1, - R.drawable.stat_sys_wifi_signal_2, - R.drawable.stat_sys_wifi_signal_3, - R.drawable.stat_sys_wifi_signal_4, + private static final int[][] sWifiSignalImages = { + { R.drawable.stat_sys_wifi_signal_1, + R.drawable.stat_sys_wifi_signal_2, + R.drawable.stat_sys_wifi_signal_3, + R.drawable.stat_sys_wifi_signal_4 }, + { R.drawable.stat_sys_wifi_signal_1_fully, + R.drawable.stat_sys_wifi_signal_2_fully, + R.drawable.stat_sys_wifi_signal_3_fully, + R.drawable.stat_sys_wifi_signal_4_fully } }; private static final int sWifiTemporarilyNotConnectedImage = R.drawable.stat_sys_wifi_signal_0; private int mLastWifiSignalLevel = -1; private boolean mIsWifiConnected = false; + private int mLastWifiInetConnectivityState = 0; // sync state // If sync is active the SyncActive icon is displayed. If sync is not active but @@ -353,6 +381,10 @@ public class StatusBarPolicy { else if (action.equals(TtyIntent.TTY_ENABLED_CHANGE_ACTION)) { updateTTY(intent); } + else if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) { + // TODO - stop using other means to get wifi/mobile info + updateConnectivity(intent); + } } }; @@ -389,7 +421,7 @@ public class StatusBarPolicy { mService.setIconVisibility("data_connection", false); // wifi - mService.setIcon("wifi", sWifiSignalImages[0], 0); + mService.setIcon("wifi", sWifiSignalImages[0][0], 0); mService.setIconVisibility("wifi", false); // wifi will get updated by the sticky intents @@ -456,6 +488,7 @@ public class StatusBarPolicy { filter.addAction(LocationManager.GPS_FIX_CHANGE_ACTION); filter.addAction(TelephonyIntents.ACTION_SIM_STATE_CHANGED); filter.addAction(TtyIntent.TTY_ENABLED_CHANGE_ACTION); + filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION); mContext.registerReceiver(mIntentReceiver, filter, null, mHandler); // load config to determine if to distinguish Hspa data icon @@ -659,6 +692,50 @@ public class StatusBarPolicy { } } + private void updateConnectivity(Intent intent) { + NetworkInfo info = (NetworkInfo)(intent.getParcelableExtra( + ConnectivityManager.EXTRA_NETWORK_INFO)); + int connectionStatus = intent.getIntExtra(ConnectivityManager.EXTRA_INET_CONDITION, 0); + Slog.d(TAG, "got CONNECTIVITY_ACTION - info=" + info + ", status = " + connectionStatus); + if (info.isConnected() == false) return; + + switch (info.getType()) { + case ConnectivityManager.TYPE_MOBILE: + if (info.isConnected()) { + updateDataNetType(info.getSubtype(), connectionStatus); + updateDataIcon(); + } + break; + case ConnectivityManager.TYPE_WIFI: + if (info.isConnected()) { + mIsWifiConnected = true; + mLastWifiInetConnectivityState = + (connectionStatus > INET_CONDITION_THRESHOLD ? 1 : 0); + int iconId; + if (mLastWifiSignalLevel == -1) { + iconId = sWifiSignalImages[mLastWifiInetConnectivityState][0]; + } else { + iconId = sWifiSignalImages[mLastWifiInetConnectivityState] + [mLastWifiSignalLevel]; + } + + mService.setIcon("wifi", iconId, 0); + // Show the icon since wi-fi is connected + mService.setIconVisibility("wifi", true); + } else { + mLastWifiSignalLevel = -1; + mIsWifiConnected = false; + mLastWifiInetConnectivityState = 0; + int iconId = sWifiSignalImages[0][0]; + + mService.setIcon("wifi", iconId, 0); + // Hide the icon since we're not connected + mService.setIconVisibility("wifi", false); + } + break; + } + } + private PhoneStateListener mPhoneStateListener = new PhoneStateListener() { @Override public void onSignalStrengthsChanged(SignalStrength signalStrength) { @@ -686,7 +763,7 @@ public class StatusBarPolicy { @Override public void onDataConnectionStateChanged(int state, int networkType) { mDataState = state; - updateDataNetType(networkType); + updateDataNetType(networkType, 0); updateDataIcon(); } @@ -848,37 +925,38 @@ public class StatusBarPolicy { return (levelEvdoDbm < levelEvdoSnr) ? levelEvdoDbm : levelEvdoSnr; } - private final void updateDataNetType(int net) { + private final void updateDataNetType(int net, int inetCondition) { + int connected = (inetCondition > INET_CONDITION_THRESHOLD ? 1 : 0); switch (net) { case TelephonyManager.NETWORK_TYPE_EDGE: - mDataIconList = sDataNetType_e; + mDataIconList = sDataNetType_e[connected]; break; case TelephonyManager.NETWORK_TYPE_UMTS: - mDataIconList = sDataNetType_3g; + mDataIconList = sDataNetType_3g[connected]; break; case TelephonyManager.NETWORK_TYPE_HSDPA: case TelephonyManager.NETWORK_TYPE_HSUPA: case TelephonyManager.NETWORK_TYPE_HSPA: if (mHspaDataDistinguishable) { - mDataIconList = sDataNetType_h; + mDataIconList = sDataNetType_h[connected]; } else { - mDataIconList = sDataNetType_3g; + mDataIconList = sDataNetType_3g[connected]; } break; case TelephonyManager.NETWORK_TYPE_CDMA: // display 1xRTT for IS95A/B - mDataIconList = this.sDataNetType_1x; + mDataIconList = sDataNetType_1x[connected]; break; case TelephonyManager.NETWORK_TYPE_1xRTT: - mDataIconList = this.sDataNetType_1x; + mDataIconList = sDataNetType_1x[connected]; break; case TelephonyManager.NETWORK_TYPE_EVDO_0: //fall through case TelephonyManager.NETWORK_TYPE_EVDO_A: case TelephonyManager.NETWORK_TYPE_EVDO_B: - mDataIconList = sDataNetType_3g; + mDataIconList = sDataNetType_3g[connected]; break; default: - mDataIconList = sDataNetType_g; + mDataIconList = sDataNetType_g[connected]; break; } } @@ -1019,34 +1097,6 @@ public class StatusBarPolicy { if (!enabled) { mService.setIconVisibility("wifi", false); } - } else if (action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) { - - final NetworkInfo networkInfo = (NetworkInfo) - intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO); - - int iconId; - if (networkInfo != null && networkInfo.isConnected()) { - mIsWifiConnected = true; - if (mLastWifiSignalLevel == -1) { - iconId = sWifiSignalImages[0]; - } else { - iconId = sWifiSignalImages[mLastWifiSignalLevel]; - } - - mService.setIcon("wifi", iconId, 0); - // Show the icon since wi-fi is connected - mService.setIconVisibility("wifi", true); - - } else { - mLastWifiSignalLevel = -1; - mIsWifiConnected = false; - iconId = sWifiSignalImages[0]; - - mService.setIcon("wifi", iconId, 0); - // Hide the icon since we're not connected - mService.setIconVisibility("wifi", false); - } - } else if (action.equals(WifiManager.RSSI_CHANGED_ACTION)) { int iconId; final int newRssi = intent.getIntExtra(WifiManager.EXTRA_NEW_RSSI, -200); @@ -1055,7 +1105,7 @@ public class StatusBarPolicy { if (newSignalLevel != mLastWifiSignalLevel) { mLastWifiSignalLevel = newSignalLevel; if (mIsWifiConnected) { - iconId = sWifiSignalImages[newSignalLevel]; + iconId = sWifiSignalImages[mLastWifiInetConnectivityState][newSignalLevel]; } else { iconId = sWifiTemporarilyNotConnectedImage; } diff --git a/services/java/com/android/server/ConnectivityService.java b/services/java/com/android/server/ConnectivityService.java index c751f3decdc0..9784d96aedeb 100644 --- a/services/java/com/android/server/ConnectivityService.java +++ b/services/java/com/android/server/ConnectivityService.java @@ -89,6 +89,11 @@ public class ConnectivityService extends IConnectivityManager.Stub { private Context mContext; private int mNetworkPreference; private int mActiveDefaultNetwork = -1; + // 0 is full bad, 100 is full good + private int mDefaultInetCondition = 0; + private int mDefaultInetConditionPublished = 0; + private boolean mInetConditionChangeInFlight = false; + private int mDefaultConnectionSequence = 0; private int mNumDnsEntries; @@ -1016,6 +1021,7 @@ public class ConnectivityService extends IConnectivityManager.Stub { intent.putExtra(ConnectivityManager.EXTRA_EXTRA_INFO, info.getExtraInfo()); } + intent.putExtra(ConnectivityManager.EXTRA_INET_CONDITION, mDefaultInetConditionPublished); sendStickyBroadcast(intent); } @@ -1134,6 +1140,14 @@ public class ConnectivityService extends IConnectivityManager.Stub { } } mActiveDefaultNetwork = type; + // this will cause us to come up initially as unconnected and switching + // to connected after our normal pause unless somebody reports us as reall + // disconnected + mDefaultInetConditionPublished = 0; + mDefaultConnectionSequence++; + mInetConditionChangeInFlight = false; + // Don't do this - if we never sign in stay, grey + //reportNetworkCondition(mActiveDefaultNetwork, 100); } thisNet.setTeardownRequested(false); thisNet.updateNetworkSettings(); @@ -1436,6 +1450,70 @@ public class ConnectivityService extends IConnectivityManager.Stub { FeatureUser u = (FeatureUser)msg.obj; u.expire(); break; + case NetworkStateTracker.EVENT_INET_CONDITION_CHANGE: + if (DBG) { + Slog.d(TAG, "Inet connectivity change, net=" + + msg.arg1 + ", condition=" + msg.arg2 + + ",mActiveDefaultNetwork=" + mActiveDefaultNetwork); + } + if (mActiveDefaultNetwork == -1) { + if (DBG) Slog.d(TAG, "no active default network - aborting"); + break; + } + if (mActiveDefaultNetwork != msg.arg1) { + if (DBG) Slog.d(TAG, "given net not default - aborting"); + break; + } + mDefaultInetCondition = msg.arg2; + int delay; + if (mInetConditionChangeInFlight == false) { + if (DBG) Slog.d(TAG, "starting a change hold"); + // setup a new hold to debounce this + if (mDefaultInetCondition > 50) { + delay = Settings.Secure.getInt(mContext.getContentResolver(), + Settings.Secure.INET_CONDITION_DEBOUNCE_UP_DELAY, 500); + } else { + delay = Settings.Secure.getInt(mContext.getContentResolver(), + Settings.Secure.INET_CONDITION_DEBOUNCE_DOWN_DELAY, 3000); + } + mInetConditionChangeInFlight = true; + sendMessageDelayed(obtainMessage( + NetworkStateTracker.EVENT_INET_CONDITION_HOLD_END, + mActiveDefaultNetwork, mDefaultConnectionSequence), delay); + } else { + // we've set the new condition, when this hold ends that will get + // picked up + if (DBG) Slog.d(TAG, "currently in hold - not setting new end evt"); + } + break; + case NetworkStateTracker.EVENT_INET_CONDITION_HOLD_END: + if (DBG) { + Slog.d(TAG, "Inet hold end, net=" + msg.arg1 + + ", condition =" + mDefaultInetCondition + + ", published condition =" + mDefaultInetConditionPublished); + } + mInetConditionChangeInFlight = false; + + if (mActiveDefaultNetwork == -1) { + if (DBG) Slog.d(TAG, "no active default network - aborting"); + break; + } + if (mDefaultConnectionSequence != msg.arg2) { + if (DBG) Slog.d(TAG, "event hold for obsolete network - aborting"); + break; + } + if (mDefaultInetConditionPublished == mDefaultInetCondition) { + if (DBG) Slog.d(TAG, "no change in condition - aborting"); + break; + } + NetworkInfo networkInfo = mNetTrackers[mActiveDefaultNetwork].getNetworkInfo(); + if (networkInfo.isConnected() == false) { + if (DBG) Slog.d(TAG, "default network not connected - aborting"); + break; + } + mDefaultInetConditionPublished = mDefaultInetCondition; + sendConnectedBroadcast(networkInfo); + break; } } } @@ -1519,4 +1597,15 @@ public class ConnectivityService extends IConnectivityManager.Stub { Settings.Secure.TETHER_SUPPORTED, defaultVal) != 0); return tetherEnabledInSettings && mTetheringConfigValid; } + + // 100 percent is full good, 0 is full bad. + public void reportInetCondition(int networkType, int percentage) { + if (DBG) Slog.d(TAG, "reportNetworkCondition(" + networkType + ", " + percentage + ")"); + mContext.enforceCallingOrSelfPermission( + android.Manifest.permission.STATUS_BAR, + "ConnectivityService"); + + mHandler.sendMessage(mHandler.obtainMessage( + NetworkStateTracker.EVENT_INET_CONDITION_CHANGE, networkType, percentage)); + } } diff --git a/services/java/com/android/server/NotificationManagerService.java b/services/java/com/android/server/NotificationManagerService.java index 63325dd040c8..0a5b72bebb9f 100755 --- a/services/java/com/android/server/NotificationManagerService.java +++ b/services/java/com/android/server/NotificationManagerService.java @@ -112,6 +112,10 @@ public class NotificationManagerService extends INotificationManager.Stub private boolean mScreenOn = true; private boolean mInCall = false; private boolean mNotificationPulseEnabled; + // This is true if we have received a new notification while the screen is off + // (that is, if mLedNotification was set while the screen was off) + // This is reset to false when the screen is turned on. + private boolean mPendingPulseNotification; // for adb connected notifications private boolean mAdbNotificationShown = false; @@ -1082,6 +1086,11 @@ public class NotificationManagerService extends INotificationManager.Stub mBatteryLight.turnOff(); } + // clear pending pulse notification if screen is on + if (mScreenOn || mLedNotification == null) { + mPendingPulseNotification = false; + } + // handle notification lights if (mLedNotification == null) { // get next notification, if any @@ -1089,11 +1098,14 @@ public class NotificationManagerService extends INotificationManager.Stub if (n > 0) { mLedNotification = mLights.get(n-1); } + if (mLedNotification != null && !mScreenOn) { + mPendingPulseNotification = true; + } } // we only flash if screen is off and persistent pulsing is enabled // and we are not currently in a call - if (mLedNotification == null || mScreenOn || mInCall) { + if (!mPendingPulseNotification || mScreenOn || mInCall) { mNotificationLight.turnOff(); } else { int ledARGB = mLedNotification.notification.ledARGB; diff --git a/services/java/com/android/server/PackageManagerService.java b/services/java/com/android/server/PackageManagerService.java index e3480a888771..1279cf72664c 100644 --- a/services/java/com/android/server/PackageManagerService.java +++ b/services/java/com/android/server/PackageManagerService.java @@ -9408,7 +9408,12 @@ class PackageManagerService extends IPackageManager.Stub { } catch (NoSuchAlgorithmException nsae) { Slog.e(TAG, "Failed to create encryption keys with exception: " + nsae); return null; + } catch (IOException ioe) { + Slog.e(TAG, "Failed to retrieve encryption keys with exception: " + + ioe); + return null; } + } /* package */ static String getTempContainerId() { diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java index 4a286e7244ba..4a9c9e938864 100644 --- a/services/java/com/android/server/SystemServer.java +++ b/services/java/com/android/server/SystemServer.java @@ -517,6 +517,17 @@ class ServerThread extends Thread { } }); + // For debug builds, log event loop stalls to dropbox for analysis. + // Similar logic also appears in ActivityThread.java for system apps. + if (!"user".equals(Build.TYPE)) { + Slog.i(TAG, "Enabling StrictMode for system server."); + StrictMode.setThreadPolicy( + StrictMode.DISALLOW_DISK_WRITE | + StrictMode.DISALLOW_DISK_READ | + StrictMode.DISALLOW_NETWORK | + StrictMode.PENALTY_DROPBOX); + } + Looper.loop(); Slog.d(TAG, "System ServerThread is exiting!"); } diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java index 3142ee454870..2cdf31e95791 100644 --- a/services/java/com/android/server/am/ActivityManagerService.java +++ b/services/java/com/android/server/am/ActivityManagerService.java @@ -752,6 +752,7 @@ public final class ActivityManagerService extends ActivityManagerNative boolean mWaitingUpdate = false; boolean mDidUpdate = false; boolean mOnBattery = false; + boolean mLaunchWarningShown = false; Context mContext; @@ -2902,6 +2903,30 @@ public final class ActivityManagerService extends ActivityManagerNative } } + final void showLaunchWarningLocked(final ActivityRecord cur, final ActivityRecord next) { + if (!mLaunchWarningShown) { + mLaunchWarningShown = true; + mHandler.post(new Runnable() { + @Override + public void run() { + synchronized (ActivityManagerService.this) { + final Dialog d = new LaunchWarningWindow(mContext, cur, next); + d.show(); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + synchronized (ActivityManagerService.this) { + d.dismiss(); + mLaunchWarningShown = false; + } + } + }, 4000); + } + } + }); + } + } + final void decPersistentCountLocked(ProcessRecord app) { app.persistentActivities--; if (app.persistentActivities > 0) { @@ -6510,13 +6535,19 @@ public final class ActivityManagerService extends ActivityManagerNative * Utility function for addErrorToDropBox and handleStrictModeViolation's logging * to append various headers to the dropbox log text. */ - private static void appendDropBoxProcessHeaders(ProcessRecord process, StringBuilder sb) { - if (process == null || process.pid == MY_PID) { - sb.append("Process: system_server\n"); - } else { - sb.append("Process: ").append(process.processName).append("\n"); - } - if (process != null) { + private void appendDropBoxProcessHeaders(ProcessRecord process, StringBuilder sb) { + // Note: ProcessRecord 'process' is guarded by the service + // instance. (notably process.pkgList, which could otherwise change + // concurrently during execution of this method) + synchronized (this) { + if (process == null || process.pid == MY_PID) { + sb.append("Process: system_server\n"); + } else { + sb.append("Process: ").append(process.processName).append("\n"); + } + if (process == null) { + return; + } int flags = process.info.flags; IPackageManager pm = AppGlobals.getPackageManager(); sb.append("Flags: 0x").append(Integer.toString(flags, 16)).append("\n"); diff --git a/services/java/com/android/server/am/ActivityRecord.java b/services/java/com/android/server/am/ActivityRecord.java index 1687db13e8ce..93584699f876 100644 --- a/services/java/com/android/server/am/ActivityRecord.java +++ b/services/java/com/android/server/am/ActivityRecord.java @@ -34,6 +34,7 @@ import android.os.SystemClock; import android.util.EventLog; import android.util.Log; import android.util.Slog; +import android.util.TimeUtils; import android.view.IApplicationToken; import java.io.PrintWriter; @@ -68,7 +69,8 @@ class ActivityRecord extends IApplicationToken.Stub { int icon; // resource identifier of activity's icon. int theme; // resource identifier of activity's theme. TaskRecord task; // the task this is in. - long startTime; // when we starting launching this activity + long launchTime; // when we starting launching this activity + long startTime; // last time this activity was started long cpuTimeAtResume; // the cpu time of host process at the time of resuming activity Configuration configuration; // configuration activity was last running in ActivityRecord resultTo; // who started this entry, so will get our reply @@ -165,6 +167,11 @@ class ActivityRecord extends IApplicationToken.Stub { pw.print(" frozenBeforeDestroy="); pw.print(frozenBeforeDestroy); pw.print(" thumbnailNeeded="); pw.print(thumbnailNeeded); pw.print(" idle="); pw.println(idle); + if (launchTime != 0 || startTime != 0) { + pw.print(prefix); pw.print("launchTime="); + TimeUtils.formatDuration(launchTime, pw); pw.print(" startTime="); + TimeUtils.formatDuration(startTime, pw); pw.println(""); + } if (waitingVisible || nowVisible) { pw.print(prefix); pw.print("waitingVisible="); pw.print(waitingVisible); pw.print(" nowVisible="); pw.println(nowVisible); @@ -417,9 +424,9 @@ class ActivityRecord extends IApplicationToken.Stub { public void windowsVisible() { synchronized(service) { - if (startTime != 0) { + if (launchTime != 0) { final long curTime = SystemClock.uptimeMillis(); - final long thisTime = curTime - startTime; + final long thisTime = curTime - launchTime; final long totalTime = stack.mInitialStartTime != 0 ? (curTime - stack.mInitialStartTime) : thisTime; if (ActivityManagerService.SHOW_ACTIVITY_START_TIME) { @@ -428,22 +435,24 @@ class ActivityRecord extends IApplicationToken.Stub { thisTime, totalTime); StringBuilder sb = service.mStringBuilder; sb.setLength(0); - sb.append("Displayed activity "); + sb.append("Displayed "); sb.append(shortComponentName); sb.append(": "); - sb.append(thisTime); - sb.append(" ms (total "); + TimeUtils.formatDuration(thisTime, sb); + sb.append(" (total "); + TimeUtils.formatDuration(totalTime, sb); sb.append(totalTime); - sb.append(" ms)"); + sb.append(")"); Log.i(ActivityManagerService.TAG, sb.toString()); } stack.reportActivityLaunchedLocked(false, this, thisTime, totalTime); if (totalTime > 0) { service.mUsageStatsService.noteLaunchTime(realActivity, (int)totalTime); } - startTime = 0; + launchTime = 0; stack.mInitialStartTime = 0; } + startTime = 0; stack.reportActivityVisibleLocked(this); if (ActivityManagerService.DEBUG_SWITCH) Log.v( ActivityManagerService.TAG, "windowsVisible(): " + this); diff --git a/services/java/com/android/server/am/ActivityStack.java b/services/java/com/android/server/am/ActivityStack.java index 5f79b8559a27..a0c21ddc3525 100644 --- a/services/java/com/android/server/am/ActivityStack.java +++ b/services/java/com/android/server/am/ActivityStack.java @@ -102,6 +102,10 @@ public class ActivityStack { // 30 minutes. static final long ACTIVITY_INACTIVE_RESET_TIME = 1000*60*30; + // How long between activity launches that we consider safe to not warn + // the user about an unexpected activity being launched on top. + static final long START_WARN_TIME = 5*1000; + // Set to false to disable the preview that is shown while a new activity // is being started. static final boolean SHOW_APP_STARTING_PREVIEW = true; @@ -213,6 +217,13 @@ public class ActivityStack { ActivityRecord mResumedActivity = null; /** + * This is the last activity that has been started. It is only used to + * identify when multiple activities are started at once so that the user + * can be warned they may not be in the activity they think they are. + */ + ActivityRecord mLastStartedActivity = null; + + /** * Set when we know we are going to be calling updateConfiguration() * soon, so want to skip intermediate config checks. */ @@ -586,10 +597,10 @@ public class ActivityStack { ProcessRecord app = mService.getProcessRecordLocked(r.processName, r.info.applicationInfo.uid); - if (r.startTime == 0) { - r.startTime = SystemClock.uptimeMillis(); + if (r.launchTime == 0) { + r.launchTime = SystemClock.uptimeMillis(); if (mInitialStartTime == 0) { - mInitialStartTime = r.startTime; + mInitialStartTime = r.launchTime; } } else if (mInitialStartTime == 0) { mInitialStartTime = SystemClock.uptimeMillis(); @@ -1090,6 +1101,31 @@ public class ActivityStack { return false; } + // Okay we are now going to start a switch, to 'next'. We may first + // have to pause the current activity, but this is an important point + // where we have decided to go to 'next' so keep track of that. + if (mLastStartedActivity != null) { + long now = SystemClock.uptimeMillis(); + final boolean inTime = mLastStartedActivity.startTime != 0 + && (mLastStartedActivity.startTime + START_WARN_TIME) >= now; + final int lastUid = mLastStartedActivity.info.applicationInfo.uid; + final int nextUid = next.info.applicationInfo.uid; + if (inTime && lastUid != nextUid + && lastUid != next.launchedFromUid + && mService.checkPermission( + android.Manifest.permission.STOP_APP_SWITCHES, + -1, next.launchedFromUid) + != PackageManager.PERMISSION_GRANTED) { + mService.showLaunchWarningLocked(mLastStartedActivity, next); + } else { + next.startTime = now; + mLastStartedActivity = next; + } + } else { + next.startTime = SystemClock.uptimeMillis(); + mLastStartedActivity = next; + } + // We need to start pausing the current activity so the top one // can be resumed... if (mResumedActivity != null) { @@ -1314,7 +1350,6 @@ public class ActivityStack { if (!newTask) { // If starting in an existing task, find where that is... - ActivityRecord next = null; boolean startIt = true; for (int i = NH-1; i >= 0; i--) { ActivityRecord p = (ActivityRecord)mHistory.get(i); @@ -1342,14 +1377,13 @@ public class ActivityStack { if (p.fullscreen) { startIt = false; } - next = p; } } // Place a new activity at top of stack, so it is next to interact // with the user. if (addPos < 0) { - addPos = mHistory.size(); + addPos = NH; } // If we are not placing the new activity frontmost, we do not want diff --git a/services/java/com/android/server/am/LaunchWarningWindow.java b/services/java/com/android/server/am/LaunchWarningWindow.java new file mode 100644 index 000000000000..4130e33fdcb2 --- /dev/null +++ b/services/java/com/android/server/am/LaunchWarningWindow.java @@ -0,0 +1,36 @@ +package com.android.server.am; + +import com.android.internal.R; + +import android.app.Dialog; +import android.content.Context; +import android.view.Window; +import android.view.WindowManager; +import android.widget.ImageView; +import android.widget.TextView; + +public class LaunchWarningWindow extends Dialog { + public LaunchWarningWindow(Context context, ActivityRecord cur, ActivityRecord next) { + super(context, R.style.Theme_Toast); + + requestWindowFeature(Window.FEATURE_LEFT_ICON); + getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); + getWindow().addFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE + | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE); + + setContentView(R.layout.launch_warning); + setTitle(context.getText(R.string.launch_warning_title)); + getWindow().setFeatureDrawableResource(Window.FEATURE_LEFT_ICON, + R.drawable.ic_dialog_alert); + ImageView icon = (ImageView)findViewById(R.id.replace_app_icon); + icon.setImageDrawable(next.info.applicationInfo.loadIcon(context.getPackageManager())); + TextView text = (TextView)findViewById(R.id.replace_message); + text.setText(context.getResources().getString(R.string.launch_warning_replace, + next.info.applicationInfo.loadLabel(context.getPackageManager()).toString())); + icon = (ImageView)findViewById(R.id.original_app_icon); + icon.setImageDrawable(cur.info.applicationInfo.loadIcon(context.getPackageManager())); + text = (TextView)findViewById(R.id.original_message); + text.setText(context.getResources().getString(R.string.launch_warning_original, + cur.info.applicationInfo.loadLabel(context.getPackageManager()).toString())); + } +} diff --git a/services/java/com/android/server/sip/SipService.java b/services/java/com/android/server/sip/SipService.java index 563ce58e36c4..eee97c361d6b 100644 --- a/services/java/com/android/server/sip/SipService.java +++ b/services/java/com/android/server/sip/SipService.java @@ -490,7 +490,7 @@ public final class SipService extends ISipService.Stub { private class KeepAliveProcess implements Runnable { private static final String TAG = "\\KEEPALIVE/"; - private static final int INTERVAL = 15; + private static final int INTERVAL = 10; private SipSessionGroup.SipSessionImpl mSession; public KeepAliveProcess(SipSessionGroup.SipSessionImpl session) { diff --git a/services/java/com/android/server/sip/SipSessionGroup.java b/services/java/com/android/server/sip/SipSessionGroup.java index 70ff9eafe871..2f7ddc4ff552 100644 --- a/services/java/com/android/server/sip/SipSessionGroup.java +++ b/services/java/com/android/server/sip/SipSessionGroup.java @@ -25,6 +25,7 @@ import gov.nist.javax.sip.message.SIPMessage; import android.net.sip.ISipSession; import android.net.sip.ISipSessionListener; import android.net.sip.SessionDescription; +import android.net.sip.SipErrorCode; import android.net.sip.SipProfile; import android.net.sip.SipSessionAdapter; import android.net.sip.SipSessionState; @@ -34,6 +35,7 @@ import android.util.Log; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.DatagramSocket; +import java.net.UnknownHostException; import java.text.ParseException; import java.util.Collection; import java.util.EventObject; @@ -60,6 +62,7 @@ import javax.sip.TimeoutEvent; import javax.sip.Transaction; import javax.sip.TransactionState; import javax.sip.TransactionTerminatedEvent; +import javax.sip.TransactionUnavailableException; import javax.sip.address.Address; import javax.sip.address.SipURI; import javax.sip.header.CSeqHeader; @@ -77,6 +80,7 @@ import javax.sip.message.Response; class SipSessionGroup implements SipListener { private static final String TAG = "SipSession"; private static final String ANONYMOUS = "anonymous"; + private static final String SERVER_ERROR_PREFIX = "Response: "; private static final int EXPIRY_TIME = 3600; private static final EventObject DEREGISTER = new EventObject("Deregister"); @@ -282,7 +286,7 @@ class SipSessionGroup implements SipListener { Log.d(TAG, "event not processed: " + event); } } catch (Throwable e) { - Log.e(TAG, "event process error: " + event, e); + Log.w(TAG, "event process error: " + event, e); session.onError(e); } } @@ -407,6 +411,7 @@ class SipSessionGroup implements SipListener { try { processCommand(command); } catch (SipException e) { + Log.w(TAG, "command error: " + command, e); // TODO: find a better way to do this if ((command instanceof RegisterCommand) || (command == DEREGISTER)) { @@ -603,7 +608,7 @@ class SipSessionGroup implements SipListener { case INCOMING_CALL: case INCOMING_CALL_ANSWERING: case OUTGOING_CALL_CANCELING: - endCallOnError(new SipException("timed out")); + endCallOnError(SipErrorCode.TIME_OUT, event.toString()); break; case PINGING: reset(); @@ -691,15 +696,11 @@ class SipSessionGroup implements SipListener { return true; case Response.UNAUTHORIZED: case Response.PROXY_AUTHENTICATION_REQUIRED: - String nonce = getNonceFromResponse(response); - if (((nonce != null) && nonce.equals(mLastNonce)) || - (nonce == mLastNonce)) { + if (!handleAuthentication(event)) { Log.v(TAG, "Incorrect username/password"); reset(); - onRegistrationFailed(createCallbackException(response)); - } else { - mSipHelper.handleChallenge(event, getAccountManager()); - mLastNonce = nonce; + onRegistrationFailed(SipErrorCode.INVALID_CREDENTIALS, + "incorrect username or password"); } return true; default: @@ -713,6 +714,23 @@ class SipSessionGroup implements SipListener { return false; } + private boolean handleAuthentication(ResponseEvent event) + throws SipException { + Response response = event.getResponse(); + String nonce = getNonceFromResponse(response); + if (((nonce != null) && nonce.equals(mLastNonce)) || + (nonce == mLastNonce)) { + Log.v(TAG, "Incorrect username/password"); + return false; + } else { + mClientTransaction = mSipHelper.handleChallenge( + event, getAccountManager()); + mDialog = mClientTransaction.getDialog(); + mLastNonce = nonce; + return true; + } + } + private AccountManager getAccountManager() { return new AccountManager() { public UserCredentials getCredentials(ClientTransaction @@ -833,14 +851,12 @@ class SipSessionGroup implements SipListener { establishCall(); return true; case Response.PROXY_AUTHENTICATION_REQUIRED: - mClientTransaction = mSipHelper.handleChallenge( - (ResponseEvent) evt, getAccountManager()); - mDialog = mClientTransaction.getDialog(); - addSipSession(this); - return true; - case Response.BUSY_HERE: - reset(); - mProxy.onCallBusy(this); + if (handleAuthentication(event)) { + addSipSession(this); + } else { + endCallOnError(SipErrorCode.INVALID_CREDENTIALS, + "incorrect username or password"); + } return true; case Response.REQUEST_PENDING: // TODO: @@ -849,7 +865,7 @@ class SipSessionGroup implements SipListener { default: if (statusCode >= 400) { // error: an ack is sent automatically by the stack - onError(createCallbackException(response)); + onError(response); return true; } else if (statusCode >= 300) { // TODO: handle 3xx (redirect) @@ -933,9 +949,13 @@ class SipSessionGroup implements SipListener { return false; } + private String createErrorMessage(Response response) { + return String.format(SERVER_ERROR_PREFIX + "%s (%d)", + response.getReasonPhrase(), response.getStatusCode()); + } + private Exception createCallbackException(Response response) { - return new SipException(String.format("Response: %s (%d)", - response.getReasonPhrase(), response.getStatusCode())); + return new SipException(createErrorMessage(response)); } private void establishCall() { @@ -946,8 +966,9 @@ class SipSessionGroup implements SipListener { private void fallbackToPreviousInCall(Throwable exception) { mState = SipSessionState.IN_CALL; - mProxy.onCallChangeFailed(this, exception.getClass().getName(), - exception.getMessage()); + exception = getRootCause(exception); + mProxy.onCallChangeFailed(this, getErrorCode(exception).toString(), + exception.toString()); } private void endCallNormally() { @@ -956,9 +977,18 @@ class SipSessionGroup implements SipListener { } private void endCallOnError(Throwable exception) { + exception = getRootCause(exception); + endCallOnError(getErrorCode(exception), exception.toString()); + } + + private void endCallOnError(SipErrorCode errorCode, String message) { reset(); - mProxy.onError(this, exception.getClass().getName(), - exception.getMessage()); + mProxy.onError(this, errorCode.toString(), message); + } + + private void endCallOnBusy() { + reset(); + mProxy.onCallBusy(this); } private void onError(Throwable exception) { @@ -969,13 +999,72 @@ class SipSessionGroup implements SipListener { } } + private void onError(Response response) { + if (mInCall) { + fallbackToPreviousInCall(createCallbackException(response)); + } else { + int statusCode = response.getStatusCode(); + if ((statusCode == Response.TEMPORARILY_UNAVAILABLE) + || (statusCode == Response.BUSY_HERE)) { + endCallOnBusy(); + } else { + endCallOnError(getErrorCode(statusCode), + createErrorMessage(response)); + } + } + } + + private SipErrorCode getErrorCode(int responseStatusCode) { + switch (responseStatusCode) { + case Response.NOT_FOUND: + case Response.ADDRESS_INCOMPLETE: + return SipErrorCode.INVALID_REMOTE_URI; + case Response.REQUEST_TIMEOUT: + return SipErrorCode.TIME_OUT; + default: + if (responseStatusCode < 500) { + return SipErrorCode.CLIENT_ERROR; + } else { + return SipErrorCode.SERVER_ERROR; + } + } + } + + private Throwable getRootCause(Throwable exception) { + Throwable cause = exception.getCause(); + while (cause != null) { + exception = cause; + cause = exception.getCause(); + } + return exception; + } + + private SipErrorCode getErrorCode(Throwable exception) { + String message = exception.getMessage(); + if (exception instanceof UnknownHostException) { + return SipErrorCode.INVALID_REMOTE_URI; + } else if (exception instanceof IOException) { + return SipErrorCode.SOCKET_ERROR; + } else if (message.startsWith(SERVER_ERROR_PREFIX)) { + return SipErrorCode.SERVER_ERROR; + } else { + return SipErrorCode.CLIENT_ERROR; + } + } + private void onRegistrationDone(int duration) { mProxy.onRegistrationDone(this, duration); } + private void onRegistrationFailed(SipErrorCode errorCode, + String message) { + mProxy.onRegistrationFailed(this, errorCode.toString(), message); + } + private void onRegistrationFailed(Throwable exception) { - mProxy.onRegistrationFailed(this, exception.getClass().getName(), - exception.getMessage()); + exception = getRootCause(exception); + onRegistrationFailed(getErrorCode(exception), + exception.toString()); } } diff --git a/services/java/com/android/server/sip/SipSessionListenerProxy.java b/services/java/com/android/server/sip/SipSessionListenerProxy.java index 7234196473c1..747d79fda944 100644 --- a/services/java/com/android/server/sip/SipSessionListenerProxy.java +++ b/services/java/com/android/server/sip/SipSessionListenerProxy.java @@ -124,12 +124,12 @@ class SipSessionListenerProxy extends ISipSessionListener.Stub { } public void onCallChangeFailed(final ISipSession session, - final String className, final String message) { + final String errorCode, final String message) { if (mListener == null) return; proxy(new Runnable() { public void run() { try { - mListener.onCallChangeFailed(session, className, message); + mListener.onCallChangeFailed(session, errorCode, message); } catch (Throwable t) { handle(t, "onCallChangeFailed()"); } @@ -137,13 +137,13 @@ class SipSessionListenerProxy extends ISipSessionListener.Stub { }); } - public void onError(final ISipSession session, final String className, + public void onError(final ISipSession session, final String errorCode, final String message) { if (mListener == null) return; proxy(new Runnable() { public void run() { try { - mListener.onError(session, className, message); + mListener.onError(session, errorCode, message); } catch (Throwable t) { handle(t, "onError()"); } @@ -179,12 +179,12 @@ class SipSessionListenerProxy extends ISipSessionListener.Stub { } public void onRegistrationFailed(final ISipSession session, - final String className, final String message) { + final String errorCode, final String message) { if (mListener == null) return; proxy(new Runnable() { public void run() { try { - mListener.onRegistrationFailed(session, className, message); + mListener.onRegistrationFailed(session, errorCode, message); } catch (Throwable t) { handle(t, "onRegistrationFailed()"); } diff --git a/telephony/java/com/android/internal/telephony/Connection.java b/telephony/java/com/android/internal/telephony/Connection.java index 11d0b1b3a28f..e5456e44789e 100644 --- a/telephony/java/com/android/internal/telephony/Connection.java +++ b/telephony/java/com/android/internal/telephony/Connection.java @@ -39,6 +39,7 @@ public abstract class Connection { CONGESTION, /* outgoing call to congested network */ MMI, /* not presently used; dial() returns null */ INVALID_NUMBER, /* invalid dial string */ + INVALID_CREDENTIALS, /* invalid credentials */ LOST_SIGNAL, LIMIT_EXCEEDED, /* eg GSM ACM limit exceeded */ INCOMING_REJECTED, /* an incoming call that was rejected */ diff --git a/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java b/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java index f6d4491db35a..e7d57bc22037 100644 --- a/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java +++ b/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java @@ -1157,10 +1157,8 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker { // No try for permanent failure if (cause.isPermanentFail()) { notifyNoData(cause); - if (!mRequestedApnType.equals(Phone.APN_TYPE_DEFAULT)) { - phone.notifyDataConnection(Phone.REASON_APN_FAILED); - onEnableApn(apnTypeToId(mRequestedApnType), DISABLED); - } + phone.notifyDataConnection(Phone.REASON_APN_FAILED); + onEnableApn(apnTypeToId(mRequestedApnType), DISABLED); return; } diff --git a/telephony/java/com/android/internal/telephony/sip/SipPhone.java b/telephony/java/com/android/internal/telephony/sip/SipPhone.java index 6eb619a1b908..bf1b93937375 100755 --- a/telephony/java/com/android/internal/telephony/sip/SipPhone.java +++ b/telephony/java/com/android/internal/telephony/sip/SipPhone.java @@ -23,6 +23,7 @@ import android.net.Uri; import android.net.rtp.AudioGroup; import android.net.rtp.AudioStream; import android.net.sip.SipAudioCall; +import android.net.sip.SipErrorCode; import android.net.sip.SipManager; import android.net.sip.SipProfile; import android.net.sip.SipSessionState; @@ -633,16 +634,15 @@ public class SipPhone extends SipPhoneBase { } @Override - protected void onError(String errorMessage) { - Log.w(LOG_TAG, "SIP error: " + errorMessage); + protected void onError(DisconnectCause cause) { + Log.w(LOG_TAG, "SIP error: " + cause); if (mSipAudioCall.isInCall()) { // Don't end the call when in call. // TODO: how to deliver the error to PhoneApp return; } - // FIXME: specify error - onCallEnded(DisconnectCause.ERROR_UNSPECIFIED); + onCallEnded(cause); } }; @@ -807,7 +807,7 @@ public class SipPhone extends SipPhoneBase { private abstract class SipAudioCallAdapter extends SipAudioCall.Adapter { protected abstract void onCallEnded(Connection.DisconnectCause cause); - protected abstract void onError(String errorMessage); + protected abstract void onError(Connection.DisconnectCause cause); @Override public void onCallEnded(SipAudioCall call) { @@ -820,8 +820,24 @@ public class SipPhone extends SipPhoneBase { } @Override - public void onError(SipAudioCall call, String errorMessage) { - onError(errorMessage); + public void onError(SipAudioCall call, String errorCode, + String errorMessage) { + switch (Enum.valueOf(SipErrorCode.class, errorCode)) { + case INVALID_REMOTE_URI: + onError(Connection.DisconnectCause.INVALID_NUMBER); + break; + case TIME_OUT: + onError(Connection.DisconnectCause.CONGESTION); + break; + case INVALID_CREDENTIALS: + onError(Connection.DisconnectCause.INVALID_CREDENTIALS); + break; + case SOCKET_ERROR: + case SERVER_ERROR: + case CLIENT_ERROR: + default: + onError(Connection.DisconnectCause.ERROR_UNSPECIFIED); + } } } } diff --git a/voip/java/android/net/sip/ISipSessionListener.aidl b/voip/java/android/net/sip/ISipSessionListener.aidl index c552a57b6ecd..0a6220b1adf8 100644 --- a/voip/java/android/net/sip/ISipSessionListener.aidl +++ b/voip/java/android/net/sip/ISipSessionListener.aidl @@ -76,20 +76,20 @@ interface ISipSessionListener { * termination. * * @param session the session object that carries out the transaction - * @param errorClass name of the exception class + * @param errorCode error code defined in {@link SipErrorCode} * @param errorMessage error message */ - void onError(in ISipSession session, String errorClass, + void onError(in ISipSession session, String errorCode, String errorMessage); /** * Called when an error occurs during session modification negotiation. * * @param session the session object that carries out the transaction - * @param errorClass name of the exception class + * @param errorCode error code defined in {@link SipErrorCode} * @param errorMessage error message */ - void onCallChangeFailed(in ISipSession session, String errorClass, + void onCallChangeFailed(in ISipSession session, String errorCode, String errorMessage); /** @@ -111,10 +111,10 @@ interface ISipSessionListener { * Called when the registration fails. * * @param session the session object that carries out the transaction - * @param errorClass name of the exception class + * @param errorCode error code defined in {@link SipErrorCode} * @param errorMessage error message */ - void onRegistrationFailed(in ISipSession session, String errorClass, + void onRegistrationFailed(in ISipSession session, String errorCode, String errorMessage); /** diff --git a/voip/java/android/net/sip/SipAudioCall.java b/voip/java/android/net/sip/SipAudioCall.java index 82545439e815..02f82b309739 100644 --- a/voip/java/android/net/sip/SipAudioCall.java +++ b/voip/java/android/net/sip/SipAudioCall.java @@ -90,9 +90,10 @@ public interface SipAudioCall { * Called when an error occurs. * * @param call the call object that carries out the audio call + * @param errorCode error code defined in {@link SipErrorCode} * @param errorMessage error message */ - void onError(SipAudioCall call, String errorMessage); + void onError(SipAudioCall call, String errorCode, String errorMessage); } /** @@ -126,7 +127,8 @@ public interface SipAudioCall { public void onCallHeld(SipAudioCall call) { onChanged(call); } - public void onError(SipAudioCall call, String errorMessage) { + public void onError(SipAudioCall call, String errorCode, + String errorMessage) { onChanged(call); } } diff --git a/voip/java/android/net/sip/SipAudioCallImpl.java b/voip/java/android/net/sip/SipAudioCallImpl.java index a312f836ec7a..2e2ca5bef315 100644 --- a/voip/java/android/net/sip/SipAudioCallImpl.java +++ b/voip/java/android/net/sip/SipAudioCallImpl.java @@ -108,7 +108,8 @@ public class SipAudioCallImpl extends SipSessionAdapter listener.onCalling(this); break; default: - listener.onError(this, "wrong state to attach call: " + state); + listener.onError(this, SipErrorCode.CLIENT_ERROR.toString(), + "wrong state to attach call: " + state); } } catch (Throwable t) { Log.e(TAG, "setListener()", t); @@ -275,14 +276,13 @@ public class SipAudioCallImpl extends SipSessionAdapter } @Override - public void onCallChangeFailed(ISipSession session, - String className, String message) { + public void onCallChangeFailed(ISipSession session, String errorCode, + String message) { Log.d(TAG, "sip call change failed: " + message); Listener listener = mListener; if (listener != null) { try { - listener.onError(SipAudioCallImpl.this, - className + ": " + message); + listener.onError(SipAudioCallImpl.this, errorCode, message); } catch (Throwable t) { Log.e(TAG, "onCallBusy()", t); } @@ -290,17 +290,16 @@ public class SipAudioCallImpl extends SipSessionAdapter } @Override - public void onError(ISipSession session, String className, + public void onError(ISipSession session, String errorCode, String message) { - Log.d(TAG, "sip session error: " + className + ": " + message); + Log.d(TAG, "sip session error: " + errorCode + ": " + message); synchronized (this) { if (!isInCall()) close(true); } Listener listener = mListener; if (listener != null) { try { - listener.onError(SipAudioCallImpl.this, - className + ": " + message); + listener.onError(SipAudioCallImpl.this, errorCode, message); } catch (Throwable t) { Log.e(TAG, "onError()", t); } diff --git a/voip/java/android/net/sip/SipErrorCode.java b/voip/java/android/net/sip/SipErrorCode.java new file mode 100644 index 000000000000..2eb67e81803f --- /dev/null +++ b/voip/java/android/net/sip/SipErrorCode.java @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.net.sip; + +/** + * Defines error code returned in + * {@link SipRegistrationListener#onRegistrationFailed(String, String, String)}, + * {@link ISipSessionListener#onError(ISipSession, String, String)}, + * {@link ISipSessionListener#onCallChangeFailed(ISipSession, String, String)} and + * {@link ISipSessionListener#onRegistrationFailed(ISipSession, String, String)}. + * @hide + */ +public enum SipErrorCode { + /** When some socket error occurs. */ + SOCKET_ERROR, + + /** When server responds with an error. */ + SERVER_ERROR, + + /** When some error occurs on the device, possibly due to a bug. */ + CLIENT_ERROR, + + /** When the transaction gets timed out. */ + TIME_OUT, + + /** When the remote URI is not valid. */ + INVALID_REMOTE_URI, + + /** When invalid credentials are provided. */ + INVALID_CREDENTIALS; +} diff --git a/voip/java/android/net/sip/SipRegistrationListener.java b/voip/java/android/net/sip/SipRegistrationListener.java index 63faaf85f7aa..22488d7ab780 100644 --- a/voip/java/android/net/sip/SipRegistrationListener.java +++ b/voip/java/android/net/sip/SipRegistrationListener.java @@ -40,9 +40,9 @@ public interface SipRegistrationListener { * Called when the registration fails. * * @param localProfileUri the URI string of the SIP profile to register with - * @param errorClass name of the exception class + * @param errorCode error code defined in {@link SipErrorCode} * @param errorMessage error message */ - void onRegistrationFailed(String localProfileUri, String errorClass, + void onRegistrationFailed(String localProfileUri, String errorCode, String errorMessage); } diff --git a/voip/java/android/net/sip/SipSessionAdapter.java b/voip/java/android/net/sip/SipSessionAdapter.java index 770d4ebc5d39..6020f2c204ee 100644 --- a/voip/java/android/net/sip/SipSessionAdapter.java +++ b/voip/java/android/net/sip/SipSessionAdapter.java @@ -42,14 +42,11 @@ public class SipSessionAdapter extends ISipSessionListener.Stub { public void onCallBusy(ISipSession session) { } - public void onCallChanged(ISipSession session, byte[] sessionDescription) { - } - - public void onCallChangeFailed(ISipSession session, String className, + public void onCallChangeFailed(ISipSession session, String errorCode, String message) { } - public void onError(ISipSession session, String className, String message) { + public void onError(ISipSession session, String errorCode, String message) { } public void onRegistering(ISipSession session) { @@ -58,7 +55,7 @@ public class SipSessionAdapter extends ISipSessionListener.Stub { public void onRegistrationDone(ISipSession session, int duration) { } - public void onRegistrationFailed(ISipSession session, String className, + public void onRegistrationFailed(ISipSession session, String errorCode, String message) { } diff --git a/voip/jni/rtp/AudioGroup.cpp b/voip/jni/rtp/AudioGroup.cpp index bb45a9ac7a38..3433dcf44f7a 100644 --- a/voip/jni/rtp/AudioGroup.cpp +++ b/voip/jni/rtp/AudioGroup.cpp @@ -588,7 +588,7 @@ bool AudioGroup::set(int sampleRate, int sampleCount) // Give device socket a reasonable timeout and buffer size. timeval tv; tv.tv_sec = 0; - tv.tv_usec = 1000 * sampleCount / sampleRate * 1000; + tv.tv_usec = 1000 * sampleCount / sampleRate * 500; if (setsockopt(pair[0], SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv)) || setsockopt(pair[0], SOL_SOCKET, SO_RCVBUF, &output, sizeof(output)) || setsockopt(pair[1], SOL_SOCKET, SO_SNDBUF, &output, sizeof(output))) { @@ -793,7 +793,7 @@ bool AudioGroup::deviceLoop() status_t status = mRecord.obtainBuffer(&buffer, 1); if (status == NO_ERROR) { - int count = (buffer.frameCount < toRead) ? + int count = ((int)buffer.frameCount < toRead) ? buffer.frameCount : toRead; memcpy(&input[mSampleCount - toRead], buffer.i8, count * 2); toRead -= count; |