diff options
| -rw-r--r-- | api/current.xml | 110 | ||||
| -rw-r--r-- | cmds/keystore/keystore.c | 2 | ||||
| -rw-r--r-- | core/java/android/app/DownloadManager.java | 110 | ||||
| -rw-r--r-- | core/java/android/hardware/Camera.java | 54 | ||||
| -rw-r--r-- | core/java/android/provider/Downloads.java | 54 | ||||
| -rw-r--r-- | core/tests/coretests/src/android/app/DownloadManagerIntegrationTest.java | 8 | ||||
| -rw-r--r-- | core/tests/coretests/src/android/app/DownloadManagerStressTest.java | 2 | ||||
| -rw-r--r-- | core/tests/coretests/src/android/text/TextUtilsTest.java | 34 | ||||
| -rw-r--r-- | voip/jni/rtp/AudioGroup.cpp | 28 | ||||
| -rw-r--r-- | voip/jni/rtp/G711Codec.cpp | 2 | ||||
| -rw-r--r-- | voip/jni/rtp/RtpStream.cpp | 9 |
11 files changed, 244 insertions, 169 deletions
diff --git a/api/current.xml b/api/current.xml index a37a533..eab9c7f 100644 --- a/api/current.xml +++ b/api/current.xml @@ -24605,55 +24605,55 @@ visibility="public" > </field> -<field name="COLUMN_ERROR_CODE" +<field name="COLUMN_ID" type="java.lang.String" transient="false" volatile="false" - value=""error_code"" + value=""_id"" static="true" final="true" deprecated="not deprecated" visibility="public" > </field> -<field name="COLUMN_ID" +<field name="COLUMN_LAST_MODIFIED_TIMESTAMP" type="java.lang.String" transient="false" volatile="false" - value=""_id"" + value=""last_modified_timestamp"" static="true" final="true" deprecated="not deprecated" visibility="public" > </field> -<field name="COLUMN_LAST_MODIFIED_TIMESTAMP" +<field name="COLUMN_LOCAL_URI" type="java.lang.String" transient="false" volatile="false" - value=""last_modified_timestamp"" + value=""local_uri"" static="true" final="true" deprecated="not deprecated" visibility="public" > </field> -<field name="COLUMN_LOCAL_URI" +<field name="COLUMN_MEDIA_TYPE" type="java.lang.String" transient="false" volatile="false" - value=""local_uri"" + value=""media_type"" static="true" final="true" deprecated="not deprecated" visibility="public" > </field> -<field name="COLUMN_MEDIA_TYPE" +<field name="COLUMN_REASON" type="java.lang.String" transient="false" volatile="false" - value=""media_type"" + value=""reason"" static="true" final="true" deprecated="not deprecated" @@ -24814,6 +24814,50 @@ visibility="public" > </field> +<field name="PAUSED_QUEUED_FOR_WIFI" + type="int" + transient="false" + volatile="false" + value="3" + static="true" + final="true" + deprecated="not deprecated" + visibility="public" +> +</field> +<field name="PAUSED_UNKNOWN" + type="int" + transient="false" + volatile="false" + value="4" + static="true" + final="true" + deprecated="not deprecated" + visibility="public" +> +</field> +<field name="PAUSED_WAITING_FOR_NETWORK" + type="int" + transient="false" + volatile="false" + value="2" + static="true" + final="true" + deprecated="not deprecated" + visibility="public" +> +</field> +<field name="PAUSED_WAITING_TO_RETRY" + type="int" + transient="false" + volatile="false" + value="1" + static="true" + final="true" + deprecated="not deprecated" + visibility="public" +> +</field> <field name="STATUS_FAILED" type="int" transient="false" @@ -267165,9 +267209,9 @@ deprecated="not deprecated" visibility="protected" > -<parameter name="url1" type="java.net.URL"> +<parameter name="a" type="java.net.URL"> </parameter> -<parameter name="url2" type="java.net.URL"> +<parameter name="b" type="java.net.URL"> </parameter> </method> <method name="openConnection" @@ -289920,7 +289964,7 @@ > <parameter name="parameterName" type="java.lang.String"> </parameter> -<parameter name="x" type="java.sql.Blob"> +<parameter name="blob" type="java.sql.Blob"> </parameter> <exception name="SQLException" type="java.sql.SQLException"> </exception> @@ -290079,7 +290123,7 @@ > <parameter name="parameterName" type="java.lang.String"> </parameter> -<parameter name="x" type="java.sql.Clob"> +<parameter name="clob" type="java.sql.Clob"> </parameter> <exception name="SQLException" type="java.sql.SQLException"> </exception> @@ -290217,7 +290261,7 @@ > <parameter name="parameterName" type="java.lang.String"> </parameter> -<parameter name="value" type="java.io.Reader"> +<parameter name="reader" type="java.io.Reader"> </parameter> <parameter name="length" type="long"> </parameter> @@ -290253,7 +290297,7 @@ > <parameter name="parameterName" type="java.lang.String"> </parameter> -<parameter name="value" type="java.sql.NClob"> +<parameter name="nclob" type="java.sql.NClob"> </parameter> <exception name="SQLException" type="java.sql.SQLException"> </exception> @@ -290306,7 +290350,7 @@ > <parameter name="parameterName" type="java.lang.String"> </parameter> -<parameter name="value" type="java.lang.String"> +<parameter name="string" type="java.lang.String"> </parameter> <exception name="SQLException" type="java.sql.SQLException"> </exception> @@ -290416,7 +290460,7 @@ > <parameter name="parameterName" type="java.lang.String"> </parameter> -<parameter name="x" type="java.sql.RowId"> +<parameter name="rowId" type="java.sql.RowId"> </parameter> <exception name="SQLException" type="java.sql.SQLException"> </exception> @@ -290433,7 +290477,7 @@ > <parameter name="parameterName" type="java.lang.String"> </parameter> -<parameter name="xmlObject" type="java.sql.SQLXML"> +<parameter name="sqlXml" type="java.sql.SQLXML"> </parameter> <exception name="SQLException" type="java.sql.SQLException"> </exception> @@ -295569,7 +295613,7 @@ > <parameter name="parameterIndex" type="int"> </parameter> -<parameter name="x" type="java.io.InputStream"> +<parameter name="inputStream" type="java.io.InputStream"> </parameter> <parameter name="length" type="long"> </parameter> @@ -295588,7 +295632,7 @@ > <parameter name="parameterIndex" type="int"> </parameter> -<parameter name="x" type="java.io.InputStream"> +<parameter name="inputStream" type="java.io.InputStream"> </parameter> <exception name="SQLException" type="java.sql.SQLException"> </exception> @@ -295641,7 +295685,7 @@ > <parameter name="parameterIndex" type="int"> </parameter> -<parameter name="x" type="java.io.InputStream"> +<parameter name="inputStream" type="java.io.InputStream"> </parameter> <parameter name="length" type="long"> </parameter> @@ -295660,7 +295704,7 @@ > <parameter name="parameterIndex" type="int"> </parameter> -<parameter name="x" type="java.io.InputStream"> +<parameter name="inputStream" type="java.io.InputStream"> </parameter> <exception name="SQLException" type="java.sql.SQLException"> </exception> @@ -295993,7 +296037,7 @@ > <parameter name="parameterIndex" type="int"> </parameter> -<parameter name="value" type="java.io.Reader"> +<parameter name="reader" type="java.io.Reader"> </parameter> <parameter name="length" type="long"> </parameter> @@ -296012,7 +296056,7 @@ > <parameter name="parameterIndex" type="int"> </parameter> -<parameter name="value" type="java.io.Reader"> +<parameter name="reader" type="java.io.Reader"> </parameter> <exception name="SQLException" type="java.sql.SQLException"> </exception> @@ -296082,7 +296126,7 @@ > <parameter name="parameterIndex" type="int"> </parameter> -<parameter name="value" type="java.lang.String"> +<parameter name="theString" type="java.lang.String"> </parameter> <exception name="SQLException" type="java.sql.SQLException"> </exception> @@ -296209,7 +296253,7 @@ > <parameter name="parameterIndex" type="int"> </parameter> -<parameter name="x" type="java.sql.RowId"> +<parameter name="theRowId" type="java.sql.RowId"> </parameter> <exception name="SQLException" type="java.sql.SQLException"> </exception> @@ -299203,7 +299247,7 @@ > <parameter name="columnIndex" type="int"> </parameter> -<parameter name="x" type="java.sql.RowId"> +<parameter name="value" type="java.sql.RowId"> </parameter> <exception name="SQLException" type="java.sql.SQLException"> </exception> @@ -299220,7 +299264,7 @@ > <parameter name="columnLabel" type="java.lang.String"> </parameter> -<parameter name="x" type="java.sql.RowId"> +<parameter name="value" type="java.sql.RowId"> </parameter> <exception name="SQLException" type="java.sql.SQLException"> </exception> @@ -301552,7 +301596,7 @@ deprecated="not deprecated" visibility="public" > -<parameter name="x" type="java.sql.NClob"> +<parameter name="theNClob" type="java.sql.NClob"> </parameter> <exception name="SQLException" type="java.sql.SQLException"> </exception> @@ -301567,7 +301611,7 @@ deprecated="not deprecated" visibility="public" > -<parameter name="x" type="java.lang.String"> +<parameter name="theString" type="java.lang.String"> </parameter> <exception name="SQLException" type="java.sql.SQLException"> </exception> @@ -301612,7 +301656,7 @@ deprecated="not deprecated" visibility="public" > -<parameter name="x" type="java.sql.RowId"> +<parameter name="theRowId" type="java.sql.RowId"> </parameter> <exception name="SQLException" type="java.sql.SQLException"> </exception> @@ -301627,7 +301671,7 @@ deprecated="not deprecated" visibility="public" > -<parameter name="x" type="java.sql.SQLXML"> +<parameter name="theXml" type="java.sql.SQLXML"> </parameter> <exception name="SQLException" type="java.sql.SQLException"> </exception> diff --git a/cmds/keystore/keystore.c b/cmds/keystore/keystore.c index 60cc521..971a177 100644 --- a/cmds/keystore/keystore.c +++ b/cmds/keystore/keystore.c @@ -166,7 +166,7 @@ static int8_t encrypt_blob(char *name, AES_KEY *aes_key) int length; int fd; - if (read(the_entropy, vector, AES_BLOCK_SIZE) != AES_BLOCK_SIZE) { + if (read(the_entropy, blob.vector, AES_BLOCK_SIZE) != AES_BLOCK_SIZE) { return SYSTEM_ERROR; } diff --git a/core/java/android/app/DownloadManager.java b/core/java/android/app/DownloadManager.java index c6fef4f..3ec21ff 100644 --- a/core/java/android/app/DownloadManager.java +++ b/core/java/android/app/DownloadManager.java @@ -100,16 +100,23 @@ public class DownloadManager { public final static String COLUMN_STATUS = "status"; /** - * Indicates the type of error that occurred, when {@link #COLUMN_STATUS} is - * {@link #STATUS_FAILED}. If an HTTP error occurred, this will hold the HTTP status code as - * defined in RFC 2616. Otherwise, it will hold one of the ERROR_* constants. + * Provides more detail on the status of the download. Its meaning depends on the value of + * {@link #COLUMN_STATUS}. * - * If {@link #COLUMN_STATUS} is not {@link #STATUS_FAILED}, this column's value is undefined. + * When {@link #COLUMN_STATUS} is {@link #STATUS_FAILED}, this indicates the type of error that + * occurred. If an HTTP error occurred, this will hold the HTTP status code as defined in RFC + * 2616. Otherwise, it will hold one of the ERROR_* constants. + * + * When {@link #COLUMN_STATUS} is {@link #STATUS_PAUSED}, this indicates why the download is + * paused. It will hold one of the PAUSED_* constants. + * + * If {@link #COLUMN_STATUS} is neither {@link #STATUS_FAILED} nor {@link #STATUS_PAUSED}, this + * column's value is undefined. * * @see <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html#sec6.1.1">RFC 2616 * status codes</a> */ - public final static String COLUMN_ERROR_CODE = "error_code"; + public final static String COLUMN_REASON = "reason"; /** * Number of bytes download so far. @@ -156,54 +163,77 @@ public class DownloadManager { public final static int ERROR_UNKNOWN = 1000; /** - * Value of {@link #COLUMN_ERROR_CODE} when a storage issue arises which doesn't fit under any + * Value of {@link #COLUMN_REASON} when a storage issue arises which doesn't fit under any * other error code. Use the more specific {@link #ERROR_INSUFFICIENT_SPACE} and * {@link #ERROR_DEVICE_NOT_FOUND} when appropriate. */ public final static int ERROR_FILE_ERROR = 1001; /** - * Value of {@link #COLUMN_ERROR_CODE} when an HTTP code was received that download manager + * Value of {@link #COLUMN_REASON} when an HTTP code was received that download manager * can't handle. */ public final static int ERROR_UNHANDLED_HTTP_CODE = 1002; /** - * Value of {@link #COLUMN_ERROR_CODE} when an error receiving or processing data occurred at + * Value of {@link #COLUMN_REASON} when an error receiving or processing data occurred at * the HTTP level. */ public final static int ERROR_HTTP_DATA_ERROR = 1004; /** - * Value of {@link #COLUMN_ERROR_CODE} when there were too many redirects. + * Value of {@link #COLUMN_REASON} when there were too many redirects. */ public final static int ERROR_TOO_MANY_REDIRECTS = 1005; /** - * Value of {@link #COLUMN_ERROR_CODE} when there was insufficient storage space. Typically, + * Value of {@link #COLUMN_REASON} when there was insufficient storage space. Typically, * this is because the SD card is full. */ public final static int ERROR_INSUFFICIENT_SPACE = 1006; /** - * Value of {@link #COLUMN_ERROR_CODE} when no external storage device was found. Typically, + * Value of {@link #COLUMN_REASON} when no external storage device was found. Typically, * this is because the SD card is not mounted. */ public final static int ERROR_DEVICE_NOT_FOUND = 1007; /** - * Value of {@link #COLUMN_ERROR_CODE} when some possibly transient error occurred but we can't + * Value of {@link #COLUMN_REASON} when some possibly transient error occurred but we can't * resume the download. */ public final static int ERROR_CANNOT_RESUME = 1008; /** - * Value of {@link #COLUMN_ERROR_CODE} when the requested destination file already exists (the + * Value of {@link #COLUMN_REASON} when the requested destination file already exists (the * download manager will not overwrite an existing file). */ public final static int ERROR_FILE_ALREADY_EXISTS = 1009; /** + * Value of {@link #COLUMN_REASON} when the download is paused because some network error + * occurred and the download manager is waiting before retrying the request. + */ + public final static int PAUSED_WAITING_TO_RETRY = 1; + + /** + * Value of {@link #COLUMN_REASON} when the download is waiting for network connectivity to + * proceed. + */ + public final static int PAUSED_WAITING_FOR_NETWORK = 2; + + /** + * Value of {@link #COLUMN_REASON} when the download exceeds a size limit for downloads over + * the mobile network and the download manager is waiting for a Wi-Fi connection to proceed. + */ + public final static int PAUSED_QUEUED_FOR_WIFI = 3; + + /** + * Value of {@link #COLUMN_REASON} when the download is paused for some other reason. + */ + public final static int PAUSED_UNKNOWN = 4; + + /** * Broadcast intent action sent by the download manager when a download completes. */ public final static String ACTION_DOWNLOAD_COMPLETE = "android.intent.action.DOWNLOAD_COMPLETE"; @@ -236,7 +266,7 @@ public class DownloadManager { COLUMN_TOTAL_SIZE_BYTES, COLUMN_LOCAL_URI, COLUMN_STATUS, - COLUMN_ERROR_CODE, + COLUMN_REASON, COLUMN_BYTES_DOWNLOADED_SO_FAR, COLUMN_LAST_MODIFIED_TIMESTAMP }; @@ -258,7 +288,7 @@ public class DownloadManager { }; private static final Set<String> LONG_COLUMNS = new HashSet<String>( - Arrays.asList(COLUMN_ID, COLUMN_TOTAL_SIZE_BYTES, COLUMN_STATUS, COLUMN_ERROR_CODE, + Arrays.asList(COLUMN_ID, COLUMN_TOTAL_SIZE_BYTES, COLUMN_STATUS, COLUMN_REASON, COLUMN_BYTES_DOWNLOADED_SO_FAR, COLUMN_LAST_MODIFIED_TIMESTAMP)); /** @@ -617,8 +647,10 @@ public class DownloadManager { parts.add(statusClause("=", Downloads.STATUS_RUNNING)); } if ((mStatusFlags & STATUS_PAUSED) != 0) { - parts.add(statusClause("=", Downloads.STATUS_PENDING_PAUSED)); - parts.add(statusClause("=", Downloads.STATUS_RUNNING_PAUSED)); + parts.add(statusClause("=", Downloads.Impl.STATUS_PAUSED_BY_APP)); + parts.add(statusClause("=", Downloads.Impl.STATUS_WAITING_TO_RETRY)); + parts.add(statusClause("=", Downloads.Impl.STATUS_WAITING_FOR_NETWORK)); + parts.add(statusClause("=", Downloads.Impl.STATUS_QUEUED_FOR_WIFI)); } if ((mStatusFlags & STATUS_SUCCESSFUL) != 0) { parts.add(statusClause("=", Downloads.STATUS_SUCCESS)); @@ -914,8 +946,8 @@ public class DownloadManager { if (column.equals(COLUMN_STATUS)) { return translateStatus((int) getUnderlyingLong(Downloads.COLUMN_STATUS)); } - if (column.equals(COLUMN_ERROR_CODE)) { - return translateErrorCode((int) getUnderlyingLong(Downloads.COLUMN_STATUS)); + if (column.equals(COLUMN_REASON)) { + return getReason((int) getUnderlyingLong(Downloads.COLUMN_STATUS)); } if (column.equals(COLUMN_BYTES_DOWNLOADED_SO_FAR)) { return getUnderlyingLong(Downloads.COLUMN_CURRENT_BYTES); @@ -924,10 +956,36 @@ public class DownloadManager { return getUnderlyingLong(Downloads.COLUMN_LAST_MODIFICATION); } - private long translateErrorCode(int status) { - if (translateStatus(status) != STATUS_FAILED) { - return 0; // arbitrary value when status is not an error + private long getReason(int status) { + switch (translateStatus(status)) { + case STATUS_FAILED: + return getErrorCode(status); + + case STATUS_PAUSED: + return getPausedReason(status); + + default: + return 0; // arbitrary value when status is not an error } + } + + private long getPausedReason(int status) { + switch (status) { + case Downloads.Impl.STATUS_WAITING_TO_RETRY: + return PAUSED_WAITING_TO_RETRY; + + case Downloads.Impl.STATUS_WAITING_FOR_NETWORK: + return PAUSED_WAITING_FOR_NETWORK; + + case Downloads.Impl.STATUS_QUEUED_FOR_WIFI: + return PAUSED_QUEUED_FOR_WIFI; + + default: + return PAUSED_UNKNOWN; + } + } + + private long getErrorCode(int status) { if ((400 <= status && status < Downloads.Impl.MIN_ARTIFICIAL_ERROR_STATUS) || (500 <= status && status < 600)) { // HTTP status code @@ -973,7 +1031,7 @@ public class DownloadManager { return super.getString(super.getColumnIndex(column)); } - private long translateStatus(int status) { + private int translateStatus(int status) { switch (status) { case Downloads.STATUS_PENDING: return STATUS_PENDING; @@ -981,8 +1039,10 @@ public class DownloadManager { case Downloads.STATUS_RUNNING: return STATUS_RUNNING; - case Downloads.STATUS_PENDING_PAUSED: - case Downloads.STATUS_RUNNING_PAUSED: + case Downloads.Impl.STATUS_PAUSED_BY_APP: + case Downloads.Impl.STATUS_WAITING_TO_RETRY: + case Downloads.Impl.STATUS_WAITING_FOR_NETWORK: + case Downloads.Impl.STATUS_QUEUED_FOR_WIFI: return STATUS_PAUSED; case Downloads.STATUS_SUCCESS: diff --git a/core/java/android/hardware/Camera.java b/core/java/android/hardware/Camera.java index 0d8228c..7b930d5 100644 --- a/core/java/android/hardware/Camera.java +++ b/core/java/android/hardware/Camera.java @@ -181,6 +181,7 @@ public class Camera { * value should be 90. * * @see #setDisplayOrientation(int) + * @see #setRotation(int) */ public int orientation; }; @@ -1716,23 +1717,46 @@ public class Camera { } /** - * Sets the orientation of the device in degrees. For example, suppose - * the natural position of the device is landscape. If the user takes a - * picture in landscape mode in 2048x1536 resolution, the rotation - * should be set to 0. If the user rotates the phone 90 degrees - * clockwise, the rotation should be set to 90. Applications can use - * {@link android.view.OrientationEventListener} to set this parameter. - * - * The camera driver may set orientation in the EXIF header without - * rotating the picture. Or the driver may rotate the picture and - * the EXIF thumbnail. If the Jpeg picture is rotated, the orientation - * in the EXIF header will be missing or 1 (row #0 is top and column #0 - * is left side). - * - * @param rotation The orientation of the device in degrees. Rotation - * can only be 0, 90, 180 or 270. + * Sets the rotation angle in degrees relative to the orientation of + * the camera. This affects the pictures returned from JPEG {@link + * PictureCallback}. The camera driver may set orientation in the + * EXIF header without rotating the picture. Or the driver may rotate + * the picture and the EXIF thumbnail. If the Jpeg picture is rotated, + * the orientation in the EXIF header will be missing or 1 (row #0 is + * top and column #0 is left side). + * + * If appplications want to rotate the picture to match the + * orientation of what users see, apps should use {@link + * android.view.OrientationEventListener} and {@link CameraInfo}. + * The value from OrientationEventListener is relative to the natural + * orientation of the device. CameraInfo.mOrientation is the angle + * between camera orientation and natural device orientation. The sum + * of the two is the angle for rotation. + * + * For example, suppose the natural orientation of the device is + * portrait. The device is rotated 270 degrees clockwise, so the device + * orientation is 270. Suppose the camera sensor is mounted in landscape + * and the top side of the camera sensor is aligned with the right edge + * of the display in natural orientation. So the camera orientation is + * 90. The rotation should be set to 0 (270 + 90). + * + * The reference code is as follows. + * + * public void public void onOrientationChanged(int orientation) { + * if (orientation == ORIENTATION_UNKNOWN) return; + * android.hardware.Camera.CameraInfo info = + * new android.hardware.Camera.CameraInfo(); + * android.hardware.Camera.getCameraInfo(cameraId, info); + * orientation = (orientation + 45) / 90 * 90; + * mParameters.setRotation((orientation + info.mOrientation) % 360); + * } + * + * @param rotation The rotation angle in degrees relative to the + * orientation of the camera. Rotation can only be 0, + * 90, 180 or 270. * @throws IllegalArgumentException if rotation value is invalid. * @see android.view.OrientationEventListener + * @see #getCameraInfo(int, CameraInfo) */ public void setRotation(int rotation) { if (rotation == 0 || rotation == 90 || rotation == 180 diff --git a/core/java/android/provider/Downloads.java b/core/java/android/provider/Downloads.java index 1e358c9..8fd0e0a 100644 --- a/core/java/android/provider/Downloads.java +++ b/core/java/android/provider/Downloads.java @@ -378,16 +378,6 @@ public final class Downloads { } /** - * Returns whether the download is suspended. (i.e. whether the download - * won't complete without some action from outside the download - * manager). - * @hide - */ - public static boolean isStatusSuspended(int status) { - return (status == STATUS_PENDING_PAUSED || status == STATUS_RUNNING_PAUSED); - } - - /** * Returns whether the status is a success (i.e. 2xx). * @hide */ @@ -435,24 +425,12 @@ public final class Downloads { public static final int STATUS_PENDING = 190; /** - * This download hasn't stated yet and is paused - * @hide - */ - public static final int STATUS_PENDING_PAUSED = 191; - - /** * This download has started * @hide */ public static final int STATUS_RUNNING = 192; /** - * This download has started and is paused - * @hide - */ - public static final int STATUS_RUNNING_PAUSED = 193; - - /** * This download has successfully completed. * Warning: there might be other status values that indicate success * in the future. @@ -980,15 +958,6 @@ public final class Downloads { } /** - * Returns whether the download is suspended. (i.e. whether the download - * won't complete without some action from outside the download - * manager). - */ - public static boolean isStatusSuspended(int status) { - return (status == STATUS_PENDING_PAUSED || status == STATUS_RUNNING_PAUSED); - } - - /** * Returns whether the status is a success (i.e. 2xx). */ public static boolean isStatusSuccess(int status) { @@ -1030,19 +999,30 @@ public final class Downloads { public static final int STATUS_PENDING = 190; /** - * This download hasn't stated yet and is paused + * This download has started */ - public static final int STATUS_PENDING_PAUSED = 191; + public static final int STATUS_RUNNING = 192; /** - * This download has started + * This download has been paused by the owning app. */ - public static final int STATUS_RUNNING = 192; + public static final int STATUS_PAUSED_BY_APP = 193; + + /** + * This download encountered some network error and is waiting before retrying the request. + */ + public static final int STATUS_WAITING_TO_RETRY = 194; + + /** + * This download is waiting for network connectivity to proceed. + */ + public static final int STATUS_WAITING_FOR_NETWORK = 195; /** - * This download has started and is paused + * This download exceeded a size limit for mobile networks and is waiting for a Wi-Fi + * connection to proceed. */ - public static final int STATUS_RUNNING_PAUSED = 193; + public static final int STATUS_QUEUED_FOR_WIFI = 196; /** * This download has successfully completed. diff --git a/core/tests/coretests/src/android/app/DownloadManagerIntegrationTest.java b/core/tests/coretests/src/android/app/DownloadManagerIntegrationTest.java index 38f336e..27eea4d 100644 --- a/core/tests/coretests/src/android/app/DownloadManagerIntegrationTest.java +++ b/core/tests/coretests/src/android/app/DownloadManagerIntegrationTest.java @@ -120,7 +120,7 @@ public class DownloadManagerIntegrationTest extends DownloadManagerBaseTest { Cursor cursor = getCursor(dlRequest); try { - verifyInt(cursor, DownloadManager.COLUMN_ERROR_CODE, error); + verifyInt(cursor, DownloadManager.COLUMN_REASON, error); } finally { cursor.close(); } @@ -183,7 +183,7 @@ public class DownloadManagerIntegrationTest extends DownloadManagerBaseTest { Cursor cursor = getCursor(dlRequest); try { verifyInt(cursor, DownloadManager.COLUMN_STATUS, DownloadManager.STATUS_FAILED); - verifyInt(cursor, DownloadManager.COLUMN_ERROR_CODE, + verifyInt(cursor, DownloadManager.COLUMN_REASON, DownloadManager.ERROR_CANNOT_RESUME); } finally { cursor.close(); @@ -269,7 +269,7 @@ public class DownloadManagerIntegrationTest extends DownloadManagerBaseTest { try { verifyInt(cursor, DownloadManager.COLUMN_STATUS, DownloadManager.STATUS_FAILED); - verifyInt(cursor, DownloadManager.COLUMN_ERROR_CODE, + verifyInt(cursor, DownloadManager.COLUMN_REASON, DownloadManager.ERROR_FILE_ERROR); } finally { cursor.close(); @@ -476,7 +476,7 @@ public class DownloadManagerIntegrationTest extends DownloadManagerBaseTest { // For the last download we should have failed b/c there is not enough space left in cache Cursor cursor = getCursor(dlRequest); try { - verifyInt(cursor, DownloadManager.COLUMN_ERROR_CODE, + verifyInt(cursor, DownloadManager.COLUMN_REASON, DownloadManager.ERROR_INSUFFICIENT_SPACE); } finally { cursor.close(); diff --git a/core/tests/coretests/src/android/app/DownloadManagerStressTest.java b/core/tests/coretests/src/android/app/DownloadManagerStressTest.java index 4ff0295..ddf138f 100644 --- a/core/tests/coretests/src/android/app/DownloadManagerStressTest.java +++ b/core/tests/coretests/src/android/app/DownloadManagerStressTest.java @@ -145,7 +145,7 @@ public class DownloadManagerStressTest extends DownloadManagerBaseTest { cursor = getCursor(dlRequest); verifyInt(cursor, DownloadManager.COLUMN_STATUS, DownloadManager.STATUS_FAILED); - verifyInt(cursor, DownloadManager.COLUMN_ERROR_CODE, + verifyInt(cursor, DownloadManager.COLUMN_REASON, DownloadManager.ERROR_INSUFFICIENT_SPACE); } finally { if (cursor != null) { diff --git a/core/tests/coretests/src/android/text/TextUtilsTest.java b/core/tests/coretests/src/android/text/TextUtilsTest.java index 1beba53..e111662 100644 --- a/core/tests/coretests/src/android/text/TextUtilsTest.java +++ b/core/tests/coretests/src/android/text/TextUtilsTest.java @@ -30,7 +30,6 @@ import android.text.util.Rfc822Token; import android.text.util.Rfc822Tokenizer; import android.test.MoreAsserts; -import com.android.common.Rfc822Validator; import com.google.android.collect.Lists; import com.google.android.collect.Maps; @@ -238,39 +237,6 @@ public class TextUtilsTest extends TestCase { } } - //============================================================================================== - // Email validator - //============================================================================================== - - @SmallTest - public void testEmailValidator() { - Rfc822Validator validator = new Rfc822Validator("gmail.com"); - String[] validEmails = new String[] { - "a@b.com", "a@b.fr", "a+b@c.com", "a@b.info", - }; - - for (String email : validEmails) { - assertTrue(email + " should be a valid email address", validator.isValid(email)); - } - - String[] invalidEmails = new String[] { - "a", "a@b", "a b", "a@b.12" - }; - - for (String email : invalidEmails) { - assertFalse(email + " should not be a valid email address", validator.isValid(email)); - } - - Map<String, String> fixes = Maps.newHashMap(); - fixes.put("a", "<a@gmail.com>"); - fixes.put("a b", "<ab@gmail.com>"); - fixes.put("a@b", "<a@b>"); - - for (Map.Entry<String, String> e : fixes.entrySet()) { - assertEquals(e.getValue(), validator.fixText(e.getKey()).toString()); - } - } - @SmallTest public void testRfc822TokenizerFullAddress() { Rfc822Token[] tokens = Rfc822Tokenizer.tokenize("Foo Bar (something) <foo@google.com>"); diff --git a/voip/jni/rtp/AudioGroup.cpp b/voip/jni/rtp/AudioGroup.cpp index a1caa1f..a953d38 100644 --- a/voip/jni/rtp/AudioGroup.cpp +++ b/voip/jni/rtp/AudioGroup.cpp @@ -89,7 +89,6 @@ public: void encode(int tick, AudioStream *chain); void decode(int tick); -private: enum { NORMAL = 0, SEND_ONLY = 1, @@ -97,6 +96,7 @@ private: LAST_MODE = 2, }; +private: int mMode; int mSocket; sockaddr_storage mRemote; @@ -202,8 +202,8 @@ bool AudioStream::set(int mode, int socket, sockaddr_storage *remote, } } - LOGD("stream[%d] is configured as %s %dkHz %dms", mSocket, - (codec ? codec->name : "RAW"), mSampleRate, mInterval); + LOGD("stream[%d] is configured as %s %dkHz %dms mode %d", mSocket, + (codec ? codec->name : "RAW"), mSampleRate, mInterval, mMode); return true; } @@ -253,7 +253,7 @@ void AudioStream::encode(int tick, AudioStream *chain) mTick += skipped * mInterval; mSequence += skipped; mTimestamp += skipped * mSampleCount; - LOGD("stream[%d] skips %d packets", mSocket, skipped); + LOGV("stream[%d] skips %d packets", mSocket, skipped); } tick = mTick; @@ -302,7 +302,7 @@ void AudioStream::encode(int tick, AudioStream *chain) if (!mixed) { if ((mTick ^ mLogThrottle) >> 10) { mLogThrottle = mTick; - LOGD("stream[%d] no data", mSocket); + LOGV("stream[%d] no data", mSocket); } return; } @@ -330,7 +330,7 @@ void AudioStream::encode(int tick, AudioStream *chain) buffer[2] = mSsrc; int length = mCodec->encode(&buffer[3], samples); if (length <= 0) { - LOGD("stream[%d] encoder error", mSocket); + LOGV("stream[%d] encoder error", mSocket); return; } sendto(mSocket, buffer, length + 12, MSG_DONTWAIT, (sockaddr *)&mRemote, @@ -369,14 +369,14 @@ void AudioStream::decode(int tick) mLatencyTimer = tick; mLatencyScore = score; } else if (tick - mLatencyTimer >= MEASURE_PERIOD) { - LOGD("stream[%d] reduces latency of %dms", mSocket, mLatencyScore); + LOGV("stream[%d] reduces latency of %dms", mSocket, mLatencyScore); mBufferTail -= mLatencyScore; mLatencyTimer = tick; } if (mBufferTail - mBufferHead > BUFFER_SIZE - mInterval) { // Buffer overflow. Drop the packet. - LOGD("stream[%d] buffer overflow", mSocket); + LOGV("stream[%d] buffer overflow", mSocket); recv(mSocket, &c, 1, MSG_DONTWAIT); return; } @@ -400,7 +400,7 @@ void AudioStream::decode(int tick) // reliable but at least they can be used to identify duplicates? if (length < 12 || length > (int)sizeof(buffer) || (ntohl(*(uint32_t *)buffer) & 0xC07F0000) != mCodecMagic) { - LOGD("stream[%d] malformed packet", mSocket); + LOGV("stream[%d] malformed packet", mSocket); return; } int offset = 12 + ((buffer[0] & 0x0F) << 2); @@ -420,13 +420,13 @@ void AudioStream::decode(int tick) } } if (length <= 0) { - LOGD("stream[%d] decoder error", mSocket); + LOGV("stream[%d] decoder error", mSocket); return; } if (tick - mBufferTail > 0) { // Buffer underrun. Reset the jitter buffer. - LOGD("stream[%d] buffer underrun", mSocket); + LOGV("stream[%d] buffer underrun", mSocket); if (mBufferTail - mBufferHead <= 0) { mBufferHead = tick + mInterval; mBufferTail = mBufferHead; @@ -462,7 +462,6 @@ public: bool add(AudioStream *stream); bool remove(int socket); -private: enum { ON_HOLD = 0, MUTED = 1, @@ -471,6 +470,7 @@ private: LAST_MODE = 3, }; +private: AudioStream *mChain; int mEventQueue; volatile int mDtmfEvent; @@ -946,6 +946,10 @@ void remove(JNIEnv *env, jobject thiz, jint socket) void setMode(JNIEnv *env, jobject thiz, jint mode) { + if (mode < 0 || mode > AudioGroup::LAST_MODE) { + jniThrowException(env, "java/lang/IllegalArgumentException", NULL); + return; + } AudioGroup *group = (AudioGroup *)env->GetIntField(thiz, gNative); if (group && !group->setMode(mode)) { jniThrowException(env, "java/lang/IllegalArgumentException", NULL); diff --git a/voip/jni/rtp/G711Codec.cpp b/voip/jni/rtp/G711Codec.cpp index 091afa9..a467acf 100644 --- a/voip/jni/rtp/G711Codec.cpp +++ b/voip/jni/rtp/G711Codec.cpp @@ -18,7 +18,7 @@ namespace { -int8_t gExponents[128] = { +const int8_t gExponents[128] = { 0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, diff --git a/voip/jni/rtp/RtpStream.cpp b/voip/jni/rtp/RtpStream.cpp index 33b88e4..f5efc17 100644 --- a/voip/jni/rtp/RtpStream.cpp +++ b/voip/jni/rtp/RtpStream.cpp @@ -88,13 +88,11 @@ jint create(JNIEnv *env, jobject thiz, jstring jAddress) jint dup(JNIEnv *env, jobject thiz) { - int socket1 = env->GetIntField(thiz, gNative); - int socket2 = ::dup(socket1); - if (socket2 == -1) { + int socket = ::dup(env->GetIntField(thiz, gNative)); + if (socket == -1) { jniThrowException(env, "java/lang/IllegalStateException", strerror(errno)); } - LOGD("dup %d to %d", socket1, socket2); - return socket2; + return socket; } void close(JNIEnv *env, jobject thiz) @@ -102,7 +100,6 @@ void close(JNIEnv *env, jobject thiz) int socket = env->GetIntField(thiz, gNative); ::close(socket); env->SetIntField(thiz, gNative, -1); - LOGD("close %d", socket); } JNINativeMethod gMethods[] = { |
