am 43861f9d: am f46449ab: Merge "Avoid IllegalArgumentException in Preference.java compareTo()"

* commit '43861f9de965593340f6a63c270120a7f1a8701c':
  Avoid IllegalArgumentException in Preference.java compareTo()
diff --git a/core/res/res/values/attrs_manifest.xml b/core/res/res/values/attrs_manifest.xml
index f2c0aa0..e7f6c53 100644
--- a/core/res/res/values/attrs_manifest.xml
+++ b/core/res/res/values/attrs_manifest.xml
@@ -547,7 +547,10 @@
     
     <!-- Specify the orientation an activity should be run in.  If not
          specified, it will run in the current preferred orientation
-         of the screen. -->
+         of the screen.
+         <p>This attribute is supported by the <a
+            href="{@docRoot}guide/topics/manifest/activity-element.html">{@code &lt;activity>}</a>
+            element. -->
     <attr name="screenOrientation">
         <!-- No preference specified: let the system decide the best
              orientation.  This will either be the orientation selected
@@ -556,59 +559,91 @@
              explicitly turned off sensor based orientation through settings
              sensor based device rotation will be ignored. If not by default
              sensor based orientation will be taken into account and the 
-             orientation will changed based on how the user rotates the device -->
+             orientation will changed based on how the user rotates the device.
+             Corresponds to
+             {@link android.content.pm.ActivityInfo#SCREEN_ORIENTATION_UNSPECIFIED}. -->
         <enum name="unspecified" value="-1" />
         <!-- Would like to have the screen in a landscape orientation: that
-             is, with the display wider than it is tall, ignoring sensor data. -->
+             is, with the display wider than it is tall, ignoring sensor data.
+             Corresponds to
+             {@link android.content.pm.ActivityInfo#SCREEN_ORIENTATION_LANDSCAPE}. -->
         <enum name="landscape" value="0" />
         <!-- Would like to have the screen in a portrait orientation: that
-             is, with the display taller than it is wide, ignoring sensor data. -->
+             is, with the display taller than it is wide, ignoring sensor data.
+             Corresponds to
+             {@link android.content.pm.ActivityInfo#SCREEN_ORIENTATION_PORTRAIT}. -->
         <enum name="portrait" value="1" />
-        <!-- Use the user's current preferred orientation of the handset. -->
+        <!-- Use the user's current preferred orientation of the handset.
+             Corresponds to
+             {@link android.content.pm.ActivityInfo#SCREEN_ORIENTATION_USER}. -->
         <enum name="user" value="2" />
         <!-- Keep the screen in the same orientation as whatever is behind
-             this activity. -->
+             this activity.
+             Corresponds to
+             {@link android.content.pm.ActivityInfo#SCREEN_ORIENTATION_BEHIND}. -->
         <enum name="behind" value="3" />
         <!-- Orientation is determined by a physical orientation sensor:
              the display will rotate based on how the user moves the device.
-             Ignores user's setting to turn off sensor-based rotation. -->
+             Ignores user's setting to turn off sensor-based rotation.
+             Corresponds to
+             {@link android.content.pm.ActivityInfo#SCREEN_ORIENTATION_SENSOR}. -->
         <enum name="sensor" value="4" />
         <!-- Always ignore orientation determined by orientation sensor:
-             the display will not rotate when the user moves the device. -->
+             the display will not rotate when the user moves the device.
+             Corresponds to
+             {@link android.content.pm.ActivityInfo#SCREEN_ORIENTATION_NOSENSOR}. -->
         <enum name="nosensor" value="5" />
         <!-- Would like to have the screen in landscape orientation, but can
-             use the sensor to change which direction the screen is facing. -->
+             use the sensor to change which direction the screen is facing.
+             Corresponds to
+             {@link android.content.pm.ActivityInfo#SCREEN_ORIENTATION_SENSOR_LANDSCAPE}. -->
         <enum name="sensorLandscape" value="6" />
         <!-- Would like to have the screen in portrait orientation, but can
-             use the sensor to change which direction the screen is facing. -->
+             use the sensor to change which direction the screen is facing.
+             Corresponds to
+             {@link android.content.pm.ActivityInfo#SCREEN_ORIENTATION_SENSOR_PORTRAIT}. -->
         <enum name="sensorPortrait" value="7" />
         <!-- Would like to have the screen in landscape orientation, turned in
-             the opposite direction from normal landscape. -->
+             the opposite direction from normal landscape.
+             Corresponds to
+             {@link android.content.pm.ActivityInfo#SCREEN_ORIENTATION_REVERSE_LANDSCAPE}. -->
         <enum name="reverseLandscape" value="8" />
         <!-- Would like to have the screen in portrait orientation, turned in
-             the opposite direction from normal portrait. -->
+             the opposite direction from normal portrait.
+             Corresponds to
+             {@link android.content.pm.ActivityInfo#SCREEN_ORIENTATION_REVERSE_PORTRAIT}. -->
         <enum name="reversePortrait" value="9" />
         <!-- Orientation is determined by a physical orientation sensor:
              the display will rotate based on how the user moves the device.
              This allows any of the 4 possible rotations, regardless of what
              the device will normally do (for example some devices won't
-             normally use 180 degree rotation). -->
+             normally use 180 degree rotation).
+             Corresponds to
+             {@link android.content.pm.ActivityInfo#SCREEN_ORIENTATION_FULL_SENSOR}. -->
         <enum name="fullSensor" value="10" />
         <!-- Would like to have the screen in landscape orientation, but if
              the user has enabled sensor-based rotation then we can use the
-             sensor to change which direction the screen is facing. -->
+             sensor to change which direction the screen is facing.
+             Corresponds to
+             {@link android.content.pm.ActivityInfo#SCREEN_ORIENTATION_USER_LANDSCAPE}. -->
         <enum name="userLandscape" value="11" />
         <!-- Would like to have the screen in portrait orientation, but if
              the user has enabled sensor-based rotation then we can use the
-             sensor to change which direction the screen is facing. -->
+             sensor to change which direction the screen is facing.
+             Corresponds to
+             {@link android.content.pm.ActivityInfo#SCREEN_ORIENTATION_USER_PORTRAIT}. -->
         <enum name="userPortrait" value="12" />
         <!-- Respect the user's sensor-based rotation preference, but if
              sensor-based rotation is enabled then allow the screen to rotate
              in all 4 possible directions regardless of what
              the device will normally do (for example some devices won't
-             normally use 180 degree rotation). -->
+             normally use 180 degree rotation).
+             Corresponds to
+             {@link android.content.pm.ActivityInfo#SCREEN_ORIENTATION_FULL_USER}. -->
         <enum name="fullUser" value="13" />
-        <!-- Screen is locked to its current rotation, whatever that is. -->
+        <!-- Screen is locked to its current rotation, whatever that is.
+             Corresponds to
+             {@link android.content.pm.ActivityInfo#SCREEN_ORIENTATION_LOCKED}. -->
         <enum name="locked" value="14" />
     </attr>
     
diff --git a/docs/html/guide/topics/manifest/activity-element.jd b/docs/html/guide/topics/manifest/activity-element.jd
index c9f505f..adc795d 100644
--- a/docs/html/guide/topics/manifest/activity-element.jd
+++ b/docs/html/guide/topics/manifest/activity-element.jd
@@ -27,11 +27,13 @@
           android:<a href="#parent">parentActivityName</a>="<i>string</i>" <!-- api level 16 -->
           android:<a href="#prmsn">permission</a>="<i>string</i>"
           android:<a href="#proc">process</a>="<i>string</i>"
-          android:<a href="#screen">screenOrientation</a>=["unspecified" | "user" | "behind" |
+          android:<a href="#screen">screenOrientation</a>=["unspecified" | "behind" |
                                      "landscape" | "portrait" |
                                      "reverseLandscape" | "reversePortrait" |
                                      "sensorLandscape" | "sensorPortrait" |
-                                     "sensor" | "fullSensor" | "nosensor"]
+                                     "userLandscape" | "userPortrait" |
+                                     "sensor" | "fullSensor" | "nosensor" |
+                                     "user" | "fullUser" | "locked"]
           android:<a href="#state">stateNotNeeded</a>=["true" | "false"]
           android:<a href="#aff">taskAffinity</a>="<i>string</i>"
           android:<a href="#theme">theme</a>="<i>resource or theme</i>"
@@ -644,9 +646,6 @@
        uses, and therefore the choices made in specific contexts, may differ 
        from device to device.</td>
 </tr><tr>
-   <td>"{@code user}"</td>
-   <td>The user's current preferred orientation.</td>
-</tr><tr>
    <td>"{@code behind}"</td>
    <td>The same orientation as the activity that's immediately beneath it in 
        the activity stack.</td>
@@ -675,6 +674,18 @@
 sensor.
 <em>Added in API level 9.</em></td>
 </tr><tr>
+   <td>"{@code userLandscape}"</td>
+   <td>Landscape orientation, but can be either normal or reverse landscape based on the device
+sensor and the user's sensor preference. If the user has locked sensor-based rotation, this behaves
+the same as {@code landscape}, otherwise it behaves the same as {@code sensorLandscape}.
+<em>Added in API level 18.</em></td>
+</tr><tr>
+   <td>"{@code userPortrait}"</td>
+   <td>Portrait orientation, but can be either normal or reverse portrait based on the device
+sensor and the user's sensor preference. If the user has locked sensor-based rotation, this behaves
+the same as {@code portrait}, otherwise it behaves the same as {@code sensorPortrait}.
+<em>Added in API level 18.</em></td>
+</tr><tr>
    <td>"{@code sensor}"</td>
    <td>The orientation is determined by the device orientation sensor.  The orientation of the
 display depends on how the user is holding the device; it changes when the user rotates the
@@ -692,6 +703,19 @@
 is ignored, so the display will not rotate based on how the user moves the device.  Except for this
 distinction, the system chooses the orientation using the same policy as for the "{@code
 unspecified}" setting.</td>
+</tr><tr>
+   <td>"{@code user}"</td>
+   <td>The user's current preferred orientation.</td>
+</tr><tr>
+   <td>"{@code fullUser}"</td>
+   <td>If the user has locked sensor-based rotation, this behaves the same as {@code user},
+   otherwise it behaves the same as {@code fullSensor} and allows any of the 4 possible
+   screen orientations.
+    <em>Added in API level 18.</em></td>
+</tr><tr>
+   <td>"{@code locked}"</td>
+   <td>Locks the orientation to its current rotation, whatever that is.
+<em>Added in API level 18.</em></td>
 </tr>
 </table>
 
diff --git a/graphics/java/android/graphics/drawable/LayerDrawable.java b/graphics/java/android/graphics/drawable/LayerDrawable.java
index 09b3eac..6b59dba 100644
--- a/graphics/java/android/graphics/drawable/LayerDrawable.java
+++ b/graphics/java/android/graphics/drawable/LayerDrawable.java
@@ -575,7 +575,7 @@
     @Override
     public Drawable mutate() {
         if (!mMutated && super.mutate() == this) {
-            mLayerState = new LayerState(mLayerState, this, null);
+            mLayerState = createConstantState(mLayerState, null);
             final ChildDrawable[] array = mLayerState.mChildren;
             final int N = mLayerState.mNum;
             for (int i = 0; i < N; i++) {
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/performance/MediaPlayerPerformance.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/performance/MediaPlayerPerformance.java
index be12c7f..074bfe4 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/performance/MediaPlayerPerformance.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/performance/MediaPlayerPerformance.java
@@ -24,23 +24,19 @@
 import android.database.sqlite.SQLiteDatabase;
 import android.hardware.Camera;
 import android.hardware.Camera.PreviewCallback;
+import android.media.CamcorderProfile;
 import android.media.MediaPlayer;
 import android.media.MediaRecorder;
 import android.media.EncoderCapabilities.VideoEncoderCap;
 import android.os.ConditionVariable;
 import android.os.Looper;
-import android.os.SystemClock;
 import android.test.ActivityInstrumentationTestCase2;
 import android.test.suitebuilder.annotation.LargeTest;
-import android.test.suitebuilder.annotation.Suppress;
 import android.util.Log;
 import android.view.SurfaceHolder;
 
 import java.util.List;
 import java.io.BufferedReader;
-import java.io.FileDescriptor;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
@@ -49,7 +45,6 @@
 import java.io.FileWriter;
 import java.io.BufferedWriter;
 
-import android.media.MediaMetadataRetriever;
 import com.android.mediaframeworktest.MediaProfileReader;
 
 /**
@@ -63,7 +58,6 @@
 
     private String TAG = "MediaPlayerPerformance";
 
-    private SQLiteDatabase mDB;
     private SurfaceHolder mSurfaceHolder = null;
     private static final int NUM_STRESS_LOOP = 10;
     private static final int NUM_PLAYBACk_IN_EACH_LOOP = 20;
@@ -92,7 +86,9 @@
     private Writer mProcMemWriter;
     private Writer mMemWriter;
 
-    private static List<VideoEncoderCap> videoEncoders = MediaProfileReader.getVideoEncoders();
+    private CamcorderProfile mCamcorderProfile = CamcorderProfile.get(CAMERA_ID);
+    private int mVideoWidth = mCamcorderProfile.videoFrameWidth;
+    private int mVideoHeight = mCamcorderProfile.videoFrameHeight;
 
     Camera mCamera;
 
@@ -415,13 +411,13 @@
     @LargeTest
     public void testH263RecordVideoOnlyMemoryUsage() throws Exception {
         boolean memoryResult = false;
-
         mStartPid = getMediaserverPid();
         int frameRate = MediaProfileReader.getMaxFrameRateForCodec(MediaRecorder.VideoEncoder.H263);
         assertTrue("H263 video recording frame rate", frameRate != -1);
         for (int i = 0; i < NUM_STRESS_LOOP; i++) {
-            assertTrue(stressVideoRecord(frameRate, 352, 288, MediaRecorder.VideoEncoder.H263,
-                    MediaRecorder.OutputFormat.MPEG_4, MediaNames.RECORDED_VIDEO_3GP, true));
+            assertTrue(stressVideoRecord(frameRate, mVideoWidth, mVideoHeight,
+                    MediaRecorder.VideoEncoder.H263, MediaRecorder.OutputFormat.MPEG_4,
+                    MediaNames.RECORDED_VIDEO_3GP, true));
             getMemoryWriteToLog(i);
             writeProcmemInfo();
         }
@@ -435,11 +431,13 @@
         boolean memoryResult = false;
 
         mStartPid = getMediaserverPid();
-        int frameRate = MediaProfileReader.getMaxFrameRateForCodec(MediaRecorder.VideoEncoder.MPEG_4_SP);
+        int frameRate = MediaProfileReader.getMaxFrameRateForCodec
+                (MediaRecorder.VideoEncoder.MPEG_4_SP);
         assertTrue("MPEG4 video recording frame rate", frameRate != -1);
         for (int i = 0; i < NUM_STRESS_LOOP; i++) {
-            assertTrue(stressVideoRecord(frameRate, 352, 288, MediaRecorder.VideoEncoder.MPEG_4_SP,
-                    MediaRecorder.OutputFormat.MPEG_4, MediaNames.RECORDED_VIDEO_3GP, true));
+            assertTrue(stressVideoRecord(frameRate, mVideoWidth, mVideoHeight,
+                    MediaRecorder.VideoEncoder.MPEG_4_SP, MediaRecorder.OutputFormat.MPEG_4,
+                    MediaNames.RECORDED_VIDEO_3GP, true));
             getMemoryWriteToLog(i);
             writeProcmemInfo();
         }
@@ -457,8 +455,9 @@
         int frameRate = MediaProfileReader.getMaxFrameRateForCodec(MediaRecorder.VideoEncoder.H263);
         assertTrue("H263 video recording frame rate", frameRate != -1);
         for (int i = 0; i < NUM_STRESS_LOOP; i++) {
-            assertTrue(stressVideoRecord(frameRate, 352, 288, MediaRecorder.VideoEncoder.H263,
-                    MediaRecorder.OutputFormat.MPEG_4, MediaNames.RECORDED_VIDEO_3GP, false));
+            assertTrue(stressVideoRecord(frameRate, mVideoWidth, mVideoHeight,
+                    MediaRecorder.VideoEncoder.H263, MediaRecorder.OutputFormat.MPEG_4,
+                    MediaNames.RECORDED_VIDEO_3GP, false));
             getMemoryWriteToLog(i);
             writeProcmemInfo();
         }