Merge "Add resources to specify package name for network location and geocode providers."
diff --git a/api/current.xml b/api/current.xml
index 3b6e031..2fbd374 100644
--- a/api/current.xml
+++ b/api/current.xml
@@ -17644,6 +17644,17 @@
 <exception name="SecurityException" type="java.lang.SecurityException">
 </exception>
 </method>
+<method name="isUserAMonkey"
+ return="boolean"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
 <method name="killBackgroundProcesses"
  return="void"
  abstract="false"
@@ -20457,7 +20468,7 @@
  deprecated="not deprecated"
  visibility="public"
 >
-<parameter name="mode" type="int">
+<parameter name="quality" type="int">
 </parameter>
 </method>
 <method name="getPasswordMinimumLength"
@@ -20473,7 +20484,7 @@
 <parameter name="admin" type="android.content.ComponentName">
 </parameter>
 </method>
-<method name="getPasswordMode"
+<method name="getPasswordQuality"
  return="int"
  abstract="false"
  native="false"
@@ -20592,7 +20603,7 @@
 <parameter name="length" type="int">
 </parameter>
 </method>
-<method name="setPasswordMode"
+<method name="setPasswordQuality"
  return="void"
  abstract="false"
  native="false"
@@ -20604,7 +20615,7 @@
 >
 <parameter name="admin" type="android.content.ComponentName">
 </parameter>
-<parameter name="mode" type="int">
+<parameter name="quality" type="int">
 </parameter>
 </method>
 <method name="wipeData"
@@ -20664,40 +20675,40 @@
  visibility="public"
 >
 </field>
-<field name="PASSWORD_MODE_ALPHANUMERIC"
+<field name="PASSWORD_QUALITY_ALPHANUMERIC"
  type="int"
  transient="false"
  volatile="false"
- value="3000"
+ value="196608"
  static="true"
  final="true"
  deprecated="not deprecated"
  visibility="public"
 >
 </field>
-<field name="PASSWORD_MODE_NUMERIC"
+<field name="PASSWORD_QUALITY_NUMERIC"
  type="int"
  transient="false"
  volatile="false"
- value="2000"
+ value="131072"
  static="true"
  final="true"
  deprecated="not deprecated"
  visibility="public"
 >
 </field>
-<field name="PASSWORD_MODE_SOMETHING"
+<field name="PASSWORD_QUALITY_SOMETHING"
  type="int"
  transient="false"
  volatile="false"
- value="1000"
+ value="65536"
  static="true"
  final="true"
  deprecated="not deprecated"
  visibility="public"
 >
 </field>
-<field name="PASSWORD_MODE_UNSPECIFIED"
+<field name="PASSWORD_QUALITY_UNSPECIFIED"
  type="int"
  transient="false"
  volatile="false"
@@ -70182,6 +70193,17 @@
  visibility="public"
 >
 </method>
+<method name="getFocalLength"
+ return="float"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
 <method name="getFocusMode"
  return="java.lang.String"
  abstract="false"
@@ -70193,6 +70215,17 @@
  visibility="public"
 >
 </method>
+<method name="getHorizontalViewAngle"
+ return="float"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
 <method name="getInt"
  return="int"
  abstract="false"
@@ -70349,6 +70382,17 @@
  visibility="public"
 >
 </method>
+<method name="getSupportedJpegThumbnailSizes"
+ return="java.util.List&lt;android.hardware.Camera.Size&gt;"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
 <method name="getSupportedPictureFormats"
  return="java.util.List&lt;java.lang.Integer&gt;"
  abstract="false"
@@ -70426,6 +70470,17 @@
  visibility="public"
 >
 </method>
+<method name="getVerticalViewAngle"
+ return="float"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
 <method name="getWhiteBalance"
  return="java.lang.String"
  abstract="false"
@@ -340817,7 +340872,7 @@
  deprecated="not deprecated"
  visibility="public"
 >
-<parameter name="f" type="java.io.File">
+<parameter name="uri" type="java.lang.String">
 </parameter>
 <exception name="IOException" type="java.io.IOException">
 </exception>
@@ -340834,7 +340889,7 @@
  deprecated="not deprecated"
  visibility="public"
 >
-<parameter name="uri" type="java.lang.String">
+<parameter name="f" type="java.io.File">
 </parameter>
 <exception name="IOException" type="java.io.IOException">
 </exception>
diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java
index 932ad53..e8ab51fd 100644
--- a/core/java/android/app/ActivityManager.java
+++ b/core/java/android/app/ActivityManager.java
@@ -957,4 +957,15 @@
         return null;
     }
     
+    /**
+     * Returns "true" if the user interface is currently being messed with
+     * by a monkey.
+     */
+    public static boolean isUserAMonkey() {
+        try {
+            return ActivityManagerNative.getDefault().isUserAMonkey();
+        } catch (RemoteException e) {
+        }
+        return false;
+    }
 }
diff --git a/core/java/android/app/ActivityManagerNative.java b/core/java/android/app/ActivityManagerNative.java
index 09b88ee..2e39c10 100644
--- a/core/java/android/app/ActivityManagerNative.java
+++ b/core/java/android/app/ActivityManagerNative.java
@@ -1178,6 +1178,14 @@
             int enterAnim = data.readInt();
             int exitAnim = data.readInt();
             overridePendingTransition(token, packageName, enterAnim, exitAnim);
+            reply.writeNoException();
+            return true;
+        }
+        
+        case IS_USER_A_MONKEY_TRANSACTION: {
+            data.enforceInterface(IActivityManager.descriptor);
+            reply.writeInt(isUserAMonkey() ? 1 : 0);
+            reply.writeNoException();
             return true;
         }
         }
@@ -2598,5 +2606,17 @@
         reply.recycle();
     }
     
+    public boolean isUserAMonkey() throws RemoteException {
+        Parcel data = Parcel.obtain();
+        Parcel reply = Parcel.obtain();
+        data.writeInterfaceToken(IActivityManager.descriptor);
+        mRemote.transact(IS_USER_A_MONKEY_TRANSACTION, data, reply, 0);
+        reply.readException();
+        boolean res = reply.readInt() != 0;
+        data.recycle();
+        reply.recycle();
+        return res;
+    }
+    
     private IBinder mRemote;
 }
diff --git a/core/java/android/app/ApplicationContext.java b/core/java/android/app/ApplicationContext.java
index fe05393..6c65bd8 100644
--- a/core/java/android/app/ApplicationContext.java
+++ b/core/java/android/app/ApplicationContext.java
@@ -71,6 +71,7 @@
 import android.os.Binder;
 import android.os.Bundle;
 import android.os.DropBoxManager;
+import android.os.Environment;
 import android.os.FileUtils;
 import android.os.Handler;
 import android.os.IBinder;
@@ -80,6 +81,7 @@
 import android.os.Process;
 import android.os.RemoteException;
 import android.os.ServiceManager;
+import android.os.StatFs;
 import android.os.Vibrator;
 import android.os.FileUtils.FileStatus;
 import android.telephony.TelephonyManager;
@@ -2537,6 +2539,76 @@
             return PackageManager.COMPONENT_ENABLED_STATE_DEFAULT;
         }
 
+        // Constants related to app heuristics
+        // No-installation limit for internal flash: 10% or less space available
+        private static final double LOW_NAND_FLASH_TRESHOLD = 0.1;
+
+        // SD-to-internal app size threshold: currently set to 1 MB
+        private static final long INSTALL_ON_SD_THRESHOLD = (1024 * 1024);
+
+        @Override
+        public int recommendAppInstallLocation(ApplicationInfo appInfo, Uri packageURI) {
+            // Initial implementation:
+            // Package size = code size + cache size + data size
+            // If code size > 1 MB, install on SD card.
+            // Else install on internal NAND flash, unless space on NAND is less than 10%
+
+            if ((packageURI == null) || (appInfo == null)) {
+                return INSTALL_PARSE_FAILED_NOT_APK;
+            }
+
+            StatFs internalFlashStats = new StatFs(Environment.getDataDirectory().getPath());
+            StatFs sdcardStats = new StatFs(Environment.getExternalStorageDirectory().getPath());
+
+            long totalInternalFlashSize = (long)internalFlashStats.getBlockCount() *
+                    (long)internalFlashStats.getBlockSize();
+            long availInternalFlashSize = (long)internalFlashStats.getAvailableBlocks() *
+                    (long)internalFlashStats.getBlockSize();
+            long availSDSize = (long)sdcardStats.getAvailableBlocks() *
+                    (long)sdcardStats.getBlockSize();
+
+            double pctNandFree = (double)availInternalFlashSize / (double)totalInternalFlashSize;
+
+            final String archiveFilePath = packageURI.getPath();
+            File apkFile = new File(archiveFilePath);
+            long pkgLen = apkFile.length();
+
+            // Consider application flags preferences as well...
+            boolean installOnlyOnSD = ((appInfo.flags & PackageManager.INSTALL_ON_SDCARD) != 0);
+
+            // These are not very precise measures, but I guess it is hard to estimate sizes
+            // before installing the package.
+            // As a shortcut, I am assuming that the package fits on NAND flash if the available
+            // space is three times that of the APK size. For SD, we only worry about the APK size.
+            // Since packages are downloaded into SD, this might not even be necessary.
+            boolean fitsOnSD = (pkgLen < availSDSize) && ((2 * pkgLen) < availInternalFlashSize);
+            boolean fitsOnInternalFlash = ((pkgLen * 3) < availInternalFlashSize);
+
+            // Does not fit, recommend no installation.
+            if (!fitsOnSD && !fitsOnInternalFlash) {
+                return INSTALL_FAILED_INSUFFICIENT_STORAGE;
+            }
+
+            if (pkgLen < (INSTALL_ON_SD_THRESHOLD) && fitsOnInternalFlash && !(installOnlyOnSD)) {
+                // recommend internal NAND likely
+                if (pctNandFree < LOW_NAND_FLASH_TRESHOLD) {
+                    // Low space on NAND (<10%) - install on SD
+                    return INSTALL_ON_SDCARD;
+                }
+                return INSTALL_ON_INTERNAL_FLASH;
+            } else {
+                if (fitsOnSD) {
+                    // Recommend SD card
+                    return INSTALL_ON_SDCARD;
+                } else if (fitsOnInternalFlash && (pctNandFree >= LOW_NAND_FLASH_TRESHOLD) &&
+                        !(installOnlyOnSD)) {
+                    return INSTALL_ON_INTERNAL_FLASH;
+                } else {
+                    return INSTALL_FAILED_INSUFFICIENT_STORAGE;
+                }
+            }
+        }
+
         private final ApplicationContext mContext;
         private final IPackageManager mPM;
 
diff --git a/core/java/android/app/DeviceAdmin.java b/core/java/android/app/DeviceAdmin.java
index b9a84b7..ecbad01 100644
--- a/core/java/android/app/DeviceAdmin.java
+++ b/core/java/android/app/DeviceAdmin.java
@@ -34,15 +34,13 @@
  * {@link android.Manifest.permission#BIND_DEVICE_ADMIN} permission.  A typical
  * manifest entry would look like:</p>
  * 
- * <pre>{@include development/samples/ApiDemos/AndroidManifest.xml
- *   device_admin_declaration}</pre>
+ * {@sample development/samples/ApiDemos/AndroidManifest.xml device_admin_declaration}
  *   
  * <p>The meta-data referenced here provides addition information specific
  * to the device administrator, as parsed by the {@link DeviceAdminInfo} class.
  * A typical file would be:</p>
  * 
- * <pre>{@include development/samples/ApiDemos/res/xml/sample_device_admin.xml
- *   meta_data}</pre>
+ * {@sample development/samples/ApiDemos/res/xml/sample_device_admin.xml meta_data}
  */
 public class DeviceAdmin extends BroadcastReceiver {
     private static String TAG = "DevicePolicy";
diff --git a/core/java/android/app/DeviceAdminInfo.java b/core/java/android/app/DeviceAdminInfo.java
index 50b342b..ab9c44f 100644
--- a/core/java/android/app/DeviceAdminInfo.java
+++ b/core/java/android/app/DeviceAdminInfo.java
@@ -50,7 +50,7 @@
     
     /**
      * A type of policy that this device admin can use: limit the passwords
-     * that the user can select, via {@link DevicePolicyManager#setPasswordMode}
+     * that the user can select, via {@link DevicePolicyManager#setPasswordQuality}
      * and {@link DevicePolicyManager#setPasswordMinimumLength}.
      * 
      * <p>To control this policy, the device admin must have a "limit-password"
diff --git a/core/java/android/app/DevicePolicyManager.java b/core/java/android/app/DevicePolicyManager.java
index 779db3a..08cdd05 100644
--- a/core/java/android/app/DevicePolicyManager.java
+++ b/core/java/android/app/DevicePolicyManager.java
@@ -88,7 +88,7 @@
     
     /**
      * Activity action: have the user enter a new password.  This activity
-     * should be launched after using {@link #setPasswordMode(ComponentName, int)}
+     * should be launched after using {@link #setPasswordQuality(ComponentName, int)}
      * or {@link #setPasswordMinimumLength(ComponentName, int)} to have the
      * user enter a new password that meets the current requirements.  You can
      * use {@link #isActivePasswordSufficient()} to determine whether you need
@@ -149,32 +149,33 @@
     }
     
     /**
-     * Constant for {@link #setPasswordMode}: the policy has no requirements
-     * for the password.  Note that mode constants are ordered so that higher
+     * Constant for {@link #setPasswordQuality}: the policy has no requirements
+     * for the password.  Note that quality constants are ordered so that higher
      * values are more restrictive.
      */
-    public static final int PASSWORD_MODE_UNSPECIFIED = 0;
+    public static final int PASSWORD_QUALITY_UNSPECIFIED = 0;
     
     /**
-     * Constant for {@link #setPasswordMode}: the policy requires some kind
-     * of password, but doesn't care what it is.  Note that mode constants
+     * Constant for {@link #setPasswordQuality}: the policy requires some kind
+     * of password, but doesn't care what it is.  Note that quality constants
      * are ordered so that higher values are more restrictive.
      */
-    public static final int PASSWORD_MODE_SOMETHING = 1000;
+    public static final int PASSWORD_QUALITY_SOMETHING = 0x10000;
     
     /**
-     * Constant for {@link #setPasswordMode}: the user must have at least a
-     * numeric password.  Note that mode constants are ordered so that higher
-     * values are more restrictive.
+     * Constant for {@link #setPasswordQuality}: the user must have entered a
+     * password containing at least numeric characters.  Note that quality
+     * constants are ordered so that higher values are more restrictive.
      */
-    public static final int PASSWORD_MODE_NUMERIC = 2000;
+    public static final int PASSWORD_QUALITY_NUMERIC = 0x20000;
     
     /**
-     * Constant for {@link #setPasswordMode}: the user must have at least an
-     * alphanumeric password.  Note that mode constants are ordered so that higher
-     * values are more restrictive.
+     * Constant for {@link #setPasswordQuality}: the user must have entered a
+     * password containing at least <em>both></em> numeric <em>and</em>
+     * alphabeter (or other symbol) characters.  Note that quality constants are
+     * ordered so that higher values are more restrictive.
      */
-    public static final int PASSWORD_MODE_ALPHANUMERIC = 3000;
+    public static final int PASSWORD_QUALITY_ALPHANUMERIC = 0x30000;
     
     /**
      * Called by an application that is administering the device to set the
@@ -185,8 +186,8 @@
      * take place immediately.  To prompt the user for a new password, use
      * {@link #ACTION_SET_NEW_PASSWORD} after setting this value.
      * 
-     * <p>Mode constants are ordered so that higher values are more restrictive;
-     * thus the highest requested mode constant (between the policy set here,
+     * <p>Quality constants are ordered so that higher values are more restrictive;
+     * thus the highest requested quality constant (between the policy set here,
      * the user's preference, and any other considerations) is the one that
      * is in effect.
      * 
@@ -195,14 +196,14 @@
      * this method; if it has not, a security exception will be thrown.
      * 
      * @param admin Which {@link DeviceAdmin} this request is associated with.
-     * @param mode The new desired mode.  One of
-     * {@link #PASSWORD_MODE_UNSPECIFIED}, {@link #PASSWORD_MODE_SOMETHING},
-     * {@link #PASSWORD_MODE_NUMERIC}, or {@link #PASSWORD_MODE_ALPHANUMERIC}.
+     * @param quality The new desired quality.  One of
+     * {@link #PASSWORD_QUALITY_UNSPECIFIED}, {@link #PASSWORD_QUALITY_SOMETHING},
+     * {@link #PASSWORD_QUALITY_NUMERIC}, or {@link #PASSWORD_QUALITY_ALPHANUMERIC}.
      */
-    public void setPasswordMode(ComponentName admin, int mode) {
+    public void setPasswordQuality(ComponentName admin, int quality) {
         if (mService != null) {
             try {
-                mService.setPasswordMode(admin, mode);
+                mService.setPasswordQuality(admin, quality);
             } catch (RemoteException e) {
                 Log.w(TAG, "Failed talking with device policy service", e);
             }
@@ -210,20 +211,20 @@
     }
     
     /**
-     * Retrieve the current minimum password mode for all admins
+     * Retrieve the current minimum password quality for all admins
      * or a particular one.
      * @param admin The name of the admin component to check, or null to aggregate
      * all admins.
      */
-    public int getPasswordMode(ComponentName admin) {
+    public int getPasswordQuality(ComponentName admin) {
         if (mService != null) {
             try {
-                return mService.getPasswordMode(admin);
+                return mService.getPasswordQuality(admin);
             } catch (RemoteException e) {
                 Log.w(TAG, "Failed talking with device policy service", e);
             }
         }
-        return PASSWORD_MODE_UNSPECIFIED;
+        return PASSWORD_QUALITY_UNSPECIFIED;
     }
     
     /**
@@ -235,8 +236,8 @@
      * take place immediately.  To prompt the user for a new password, use
      * {@link #ACTION_SET_NEW_PASSWORD} after setting this value.  This
      * constraint is only imposed if the administrator has also requested either
-     * {@link #PASSWORD_MODE_NUMERIC} or {@link #PASSWORD_MODE_ALPHANUMERIC}
-     * with {@link #setPasswordMode}.
+     * {@link #PASSWORD_QUALITY_NUMERIC} or {@link #PASSWORD_QUALITY_ALPHANUMERIC}
+     * with {@link #setPasswordQuality}.
      * 
      * <p>The calling device admin must have requested
      * {@link DeviceAdminInfo#USES_POLICY_LIMIT_PASSWORD} to be able to call
@@ -275,18 +276,18 @@
     
     /**
      * Return the maximum password length that the device supports for a
-     * particular password mode.
-     * @param mode The mode being interrogated.
+     * particular password quality.
+     * @param quality The quality being interrogated.
      * @return Returns the maximum length that the user can enter.
      */
-    public int getPasswordMaximumLength(int mode) {
+    public int getPasswordMaximumLength(int quality) {
         // Kind-of arbitrary.
         return 16;
     }
     
     /**
      * Determine whether the current password the user has set is sufficient
-     * to meet the policy requirements (mode, minimum length) that have been
+     * to meet the policy requirements (quality, minimum length) that have been
      * requested.
      * 
      * <p>The calling device admin must have requested
@@ -368,14 +369,15 @@
     }
     
     /**
-     * Force a new password on the user.  This takes effect immediately.  The
-     * given password must meet the current password minimum length constraint
-     * or it will be rejected.  The given password will be accepted regardless
-     * of the current password mode, automatically adjusting the password mode
-     * higher if needed to meet the requirements of all active administrators.
-     * (The string you give here is acceptable for any mode;
-     * if it contains only digits, that is still an acceptable alphanumeric
-     * password.)
+     * Force a new password on the user.  This takes effect immediately.
+     * The given password must be sufficient for the
+     * current password quality and length constraints as returned by
+     * {@link #getPasswordQuality(ComponentName)} and
+     * {@link #getPasswordMinimumLength(ComponentName)}; if it does not meet
+     * these constraints, then it will be rejected and false returned.  Note
+     * that the password may be a stronger quality (containing alphanumeric
+     * characters when the requested quality is only numeric), in which case
+     * the currently active quality will be increased to match.
      * 
      * <p>The calling device admin must have requested
      * {@link DeviceAdminInfo#USES_POLICY_RESET_PASSWORD} to be able to call
@@ -531,10 +533,10 @@
     /**
      * @hide
      */
-    public void setActivePasswordState(int mode, int length) {
+    public void setActivePasswordState(int quality, int length) {
         if (mService != null) {
             try {
-                mService.setActivePasswordState(mode, length);
+                mService.setActivePasswordState(quality, length);
             } catch (RemoteException e) {
                 Log.w(TAG, "Failed talking with device policy service", e);
             }
diff --git a/core/java/android/app/IActivityManager.java b/core/java/android/app/IActivityManager.java
index 016d465..86f28bf 100644
--- a/core/java/android/app/IActivityManager.java
+++ b/core/java/android/app/IActivityManager.java
@@ -288,6 +288,8 @@
     public void overridePendingTransition(IBinder token, String packageName,
             int enterAnim, int exitAnim) throws RemoteException;
     
+    public boolean isUserAMonkey() throws RemoteException;
+    
     /*
      * Private non-Binder interfaces
      */
@@ -450,4 +452,5 @@
     int OVERRIDE_PENDING_TRANSITION_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+100;
     int HANDLE_APPLICATION_WTF_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+101;
     int KILL_BACKGROUND_PROCESSES_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+102;
+    int IS_USER_A_MONKEY_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+103;
 }
diff --git a/core/java/android/app/IDevicePolicyManager.aidl b/core/java/android/app/IDevicePolicyManager.aidl
index 8d804f9..ae5c4bf 100644
--- a/core/java/android/app/IDevicePolicyManager.aidl
+++ b/core/java/android/app/IDevicePolicyManager.aidl
@@ -25,8 +25,8 @@
  * {@hide}
  */
 interface IDevicePolicyManager {
-    void setPasswordMode(in ComponentName who, int mode);
-    int getPasswordMode(in ComponentName who);
+    void setPasswordQuality(in ComponentName who, int quality);
+    int getPasswordQuality(in ComponentName who);
     
     void setPasswordMinimumLength(in ComponentName who, int length);
     int getPasswordMinimumLength(in ComponentName who);
@@ -52,7 +52,7 @@
     void getRemoveWarning(in ComponentName policyReceiver, in RemoteCallback result);
     void removeActiveAdmin(in ComponentName policyReceiver);
     
-    void setActivePasswordState(int mode, int length);
+    void setActivePasswordState(int quality, int length);
     void reportFailedPasswordAttempt();
     void reportSuccessfulPasswordAttempt();
 }
diff --git a/core/java/android/app/Service.java b/core/java/android/app/Service.java
index c4e1877..8ec5bd4 100644
--- a/core/java/android/app/Service.java
+++ b/core/java/android/app/Service.java
@@ -292,8 +292,8 @@
      * callback in that case.  The <code>handleCommand</code> method is implemented by
      * you as appropriate:
      * 
-     * <pre>{@include development/samples/ApiDemos/src/com/example/android/apis/app/ForegroundService.java
-     *   start_compatibility}</pre>
+     * {@sample development/samples/ApiDemos/src/com/example/android/apis/app/ForegroundService.java
+     *   start_compatibility}
      * 
      * @param intent The Intent supplied to {@link android.content.Context#startService}, 
      * as given.  This may be null if the service is being restarted after
@@ -474,8 +474,8 @@
      * level 5, you can use the following model to call the the older {@link #setForeground}
      * or this modern method as appropriate:
      * 
-     * <pre>{@include development/samples/ApiDemos/src/com/example/android/apis/app/ForegroundService.java
-     *   foreground_compatibility}</pre>
+     * {@sample development/samples/ApiDemos/src/com/example/android/apis/app/ForegroundService.java
+     *   foreground_compatibility}
      * 
      * @param id The identifier for this notification as per
      * {@link NotificationManager#notify(int, Notification)
diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java
index d10c8f8..1e45f17 100644
--- a/core/java/android/content/pm/PackageManager.java
+++ b/core/java/android/content/pm/PackageManager.java
@@ -261,6 +261,13 @@
     public static final int INSTALL_ON_SDCARD = 0x00000008;
 
     /**
+     * Convenience flag parameter to indicate that this package has to be installed
+     * on internal flash.
+     * @hide
+     */
+    public static final int INSTALL_ON_INTERNAL_FLASH = 0x00000000;
+
+    /**
      * Flag parameter for
      * {@link #setComponentEnabledSetting(android.content.ComponentName, int, int)} to indicate
      * that you don't want to kill the app containing the component.  Be careful when you set this
@@ -605,89 +612,22 @@
     @SdkConstant(SdkConstantType.FEATURE)
     public static final String FEATURE_LIVE_WALLPAPER = "android.software.live_wallpaper";
 
-    // No-installation limit for internal flash: 10% or less space available
-    private static final double LOW_NAND_FLASH_TRESHOLD = 0.1;
-
-    // SD-to-internal app size threshold: currently set to 1 MB
-    private static final long INSTALL_ON_SD_THRESHOLD = (1024 * 1024);
-
-    private static final int INSTALL_ON_INTERNAL_FLASH = 0;
-
     /**
      * Determines best place to install an application: either SD or internal FLASH.
      * Tweak the algorithm for best results.
-     * @param tmpPackageFile APK file containing the application to install.
-     * @return <code>PKG_INSTALL_INTERNAL</code> if it is best to install package on internal
-     * storage, <code>PKG_INSTALL_ON_SD</code> if it is best to install package on SD card,
-     * and <code>PKG_CANNOT_FIT</code> if insufficient space to safely install the app.
-     * This response does not take into account the package's own flags.
+     * @param appInfo ApplicationInfo object og the package to install.
+     * Call utility method to obtain.
+     * @param packageURI URI identifying the package's APK file.
+     * @return <code>INSTALL_ON_INTERNAL_FLASH</code> if it is best to install package on internal
+     * storage, <code>INSTALL_ON_SDCARD</code> if it is best to install package on SD card,
+     * and <code>INSTALL_FAILED_INSUFFICIENT_STORAGE</code> if insufficient space to safely install
+     * the application. <code>INSTALL_PARSE_FAILED_NOT_APK</code> Is returned if any input
+     * parameter is <code>null</code>.
+     * This recommendation does take into account the package's own flags.
      * @hide
      */
-    public static int recommendAppInstallLocation(ApplicationInfo appInfo, Uri packageURI) {
-        // Initial implementation:
-        // Package size = code size + cache size + data size
-        // If code size > 1 MB, install on SD card.
-        // Else install on internal NAND flash, unless space on NAND is less than 5%
-        // 0 = install on internal FLASH
-        // 1 = install on SD card
-        // (-1) = insufficient space - package cannot be installed.
+    public abstract int recommendAppInstallLocation(ApplicationInfo appInfo, Uri packageURI);
 
-        if ((packageURI == null) || (appInfo == null)) {
-            return (-1);
-        }
-
-        StatFs internalFlashStats = new StatFs(Environment.getDataDirectory().getPath());
-        StatFs sdcardStats = new StatFs(Environment.getExternalStorageDirectory().getPath());
-
-        long totalInternalFlashSize = (long)internalFlashStats.getBlockCount() *
-                (long)internalFlashStats.getBlockSize();
-        long availInternalFlashSize = (long)internalFlashStats.getAvailableBlocks() *
-                (long)internalFlashStats.getBlockSize();
-        long availSDSize = (long)sdcardStats.getAvailableBlocks() *
-                (long)sdcardStats.getBlockSize();
-
-        double pctNandFree = (double)availInternalFlashSize / (double)totalInternalFlashSize;
-
-        final String archiveFilePath = packageURI.getPath();
-        File apkFile = new File(archiveFilePath);
-        long pkgLen = apkFile.length();
-
-        // Consider application flags preferences as well...
-        boolean installOnlyOnSD = ((appInfo.flags & PackageManager.INSTALL_ON_SDCARD) != 0);
-
-        // These are not very precise measures, but I guess it is hard to estimate sizes
-        // before installing the package.
-        // As a shortcut, I am assuming that the package fits on NAND flash if the available
-        // space is three times that of the APK size. For SD, we only worry about the APK size.
-        // Since packages are downloaded into SD, this might not even be necessary.
-        boolean fitsOnSD = (pkgLen < availSDSize) && ((2 * pkgLen) < availInternalFlashSize);
-        boolean fitsOnInternalFlash = ((pkgLen * 3) < availInternalFlashSize);
-
-        // Does not fit, recommend no installation.
-        if (!fitsOnSD && !fitsOnInternalFlash) {
-            return (-1);
-        }
-
-        if (pkgLen < (INSTALL_ON_SD_THRESHOLD) && fitsOnInternalFlash && !(installOnlyOnSD)) {
-            // recommend internal NAND likely
-            if (pctNandFree < LOW_NAND_FLASH_TRESHOLD) {
-                // Low space on NAND (<10%) - install on SD
-                return INSTALL_ON_SDCARD;
-            }
-            return INSTALL_ON_INTERNAL_FLASH;
-        } else {
-            if (fitsOnSD) {
-                // Recommend SD card
-                return INSTALL_ON_SDCARD;
-            } else if (fitsOnInternalFlash && (pctNandFree >= LOW_NAND_FLASH_TRESHOLD) &&
-                    !(installOnlyOnSD)) {
-                return INSTALL_ON_INTERNAL_FLASH;
-            } else {
-                return (-1);
-            }
-        }
-    }
-    
     /**
      * Retrieve overall information about an application package that is
      * installed on the system.
diff --git a/core/java/android/hardware/Camera.java b/core/java/android/hardware/Camera.java
index abb74cd..47c2cac 100644
--- a/core/java/android/hardware/Camera.java
+++ b/core/java/android/hardware/Camera.java
@@ -658,6 +658,25 @@
             width = w;
             height = h;
         }
+        /**
+         * Compares {@code obj} to this size.
+         *
+         * @param obj the object to compare this size with.
+         * @return {@code true} if the width and height of {@code obj} is the
+         *         same as those of this size. {@code false} otherwise.
+         */
+        @Override
+        public boolean equals(Object obj) {
+            if (!(obj instanceof Size)) {
+                return false;
+            }
+            Size s = (Size) obj;
+            return width == s.width && height == s.height;
+        }
+        @Override
+        public int hashCode() {
+            return width * 32713 + height;
+        }
         /** width of the picture */
         public int width;
         /** height of the picture */
@@ -685,6 +704,7 @@
         private static final String KEY_PREVIEW_FRAME_RATE = "preview-frame-rate";
         private static final String KEY_PICTURE_SIZE = "picture-size";
         private static final String KEY_PICTURE_FORMAT = "picture-format";
+        private static final String KEY_JPEG_THUMBNAIL_SIZE = "jpeg-thumbnail-size";
         private static final String KEY_JPEG_THUMBNAIL_WIDTH = "jpeg-thumbnail-width";
         private static final String KEY_JPEG_THUMBNAIL_HEIGHT = "jpeg-thumbnail-height";
         private static final String KEY_JPEG_THUMBNAIL_QUALITY = "jpeg-thumbnail-quality";
@@ -700,6 +720,9 @@
         private static final String KEY_SCENE_MODE = "scene-mode";
         private static final String KEY_FLASH_MODE = "flash-mode";
         private static final String KEY_FOCUS_MODE = "focus-mode";
+        private static final String KEY_FOCAL_LENGTH = "focal-length";
+        private static final String KEY_HORIZONTAL_VIEW_ANGLE = "horizontal-view-angle";
+        private static final String KEY_VERTICAL_VIEW_ANGLE = "vertical-view-angle";
         // Parameter key suffix for supported values.
         private static final String SUPPORTED_VALUES_SUFFIX = "-values";
 
@@ -954,7 +977,9 @@
         }
 
         /**
-         * Sets the dimensions for EXIF thumbnail in Jpeg picture.
+         * Sets the dimensions for EXIF thumbnail in Jpeg picture. If
+         * applications set both width and height to 0, EXIF will not contain
+         * thumbnail.
          *
          * @param width  the width of the thumbnail, in pixels
          * @param height the height of the thumbnail, in pixels
@@ -976,6 +1001,18 @@
         }
 
         /**
+         * Gets the supported jpeg thumbnail sizes.
+         *
+         * @return a List of Size object. This method will always return a list
+         *         with at least two elements. Size 0,0 (no thumbnail) is always
+         *         supported.
+         */
+        public List<Size> getSupportedJpegThumbnailSizes() {
+            String str = get(KEY_JPEG_THUMBNAIL_SIZE + SUPPORTED_VALUES_SUFFIX);
+            return splitSize(str);
+        }
+
+        /**
          * Sets the quality of the EXIF thumbnail in Jpeg picture.
          *
          * @param quality the JPEG quality of the EXIF thumbnail. The range is 1
@@ -1473,6 +1510,36 @@
         }
 
         /**
+         * Gets the focal length (in millimeter) of the camera.
+         *
+         * @return the focal length. This method will always return a valid
+         *         value.
+         */
+        public float getFocalLength() {
+            return Float.parseFloat(get(KEY_FOCAL_LENGTH));
+        }
+
+        /**
+         * Gets the horizontal angle of view in degrees.
+         *
+         * @return horizontal angle of view. This method will always return a
+         *         valid value.
+         */
+        public float getHorizontalViewAngle() {
+            return Float.parseFloat(get(KEY_HORIZONTAL_VIEW_ANGLE));
+        }
+
+        /**
+         * Gets the vertical angle of view in degrees.
+         *
+         * @return vertical angle of view. This method will always return a
+         *         valid value.
+         */
+        public float getVerticalViewAngle() {
+            return Float.parseFloat(get(KEY_VERTICAL_VIEW_ANGLE));
+        }
+
+        /**
          * Gets current zoom value. This also works when smooth zoom is in
          * progress.
          *
diff --git a/core/java/android/provider/ContactsContract.java b/core/java/android/provider/ContactsContract.java
index 16746d4..544e399 100644
--- a/core/java/android/provider/ContactsContract.java
+++ b/core/java/android/provider/ContactsContract.java
@@ -130,6 +130,57 @@
     public static final String REQUESTING_PACKAGE_PARAM_KEY = "requesting_package";
 
     /**
+     * @hide
+     */
+    public static final class Preferences {
+
+        /**
+         * A key in the {@link android.provider.Settings android.provider.Settings} provider
+         * that stores the preferred sorting order for contacts (by given name vs. by family name).
+         *
+         * @hide
+         */
+        public static final String SORT_ORDER = "android.contacts.SORT_ORDER";
+
+        /**
+         * The value for the SORT_ORDER key corresponding to sorting by given name first.
+         *
+         * @hide
+         */
+        public static final int SORT_ORDER_PRIMARY = 1;
+
+        /**
+         * The value for the SORT_ORDER key corresponding to sorting by family name first.
+         *
+         * @hide
+         */
+        public static final int SORT_ORDER_ALTERNATIVE = 2;
+
+        /**
+         * A key in the {@link android.provider.Settings android.provider.Settings} provider
+         * that stores the preferred display order for contacts (given name first vs. family
+         * name first).
+         *
+         * @hide
+         */
+        public static final String DISPLAY_ORDER = "android.contacts.DISPLAY_ORDER";
+
+        /**
+         * The value for the DISPLAY_ORDER key corresponding to showing the given name first.
+         *
+         * @hide
+         */
+        public static final int DISPLAY_ORDER_PRIMARY = 1;
+
+        /**
+         * The value for the DISPLAY_ORDER key corresponding to showing the family name first.
+         *
+         * @hide
+         */
+        public static final int DISPLAY_ORDER_ALTERNATIVE = 2;
+    }
+
+    /**
      * @hide should be removed when users are updated to refer to SyncState
      * @deprecated use SyncState instead
      */
@@ -551,8 +602,7 @@
         /**
          * Sort key based on the alternative representation of the full name,
          * {@link #DISPLAY_NAME_ALTERNATIVE}.  Thus for Western names,
-         * it is the one using the "family name first" format for
-         * Western names.
+         * it is the one using the "family name first" format.
          */
         public static final String SORT_KEY_ALTERNATIVE = "sort_key_alt";
     }
diff --git a/core/java/com/android/internal/widget/LockPatternUtils.java b/core/java/com/android/internal/widget/LockPatternUtils.java
index 6347146..f074b80 100644
--- a/core/java/com/android/internal/widget/LockPatternUtils.java
+++ b/core/java/com/android/internal/widget/LockPatternUtils.java
@@ -80,9 +80,10 @@
      * pin = digit-only password
      * password = alphanumeric password
      */
-    public static final int MODE_PATTERN = DevicePolicyManager.PASSWORD_MODE_SOMETHING;
-    public static final int MODE_PIN = DevicePolicyManager.PASSWORD_MODE_NUMERIC;
-    public static final int MODE_PASSWORD = DevicePolicyManager.PASSWORD_MODE_ALPHANUMERIC;
+    public static final int MODE_UNSPECIFIED = DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED;
+    public static final int MODE_PATTERN = DevicePolicyManager.PASSWORD_QUALITY_SOMETHING;
+    public static final int MODE_PIN = DevicePolicyManager.PASSWORD_QUALITY_NUMERIC;
+    public static final int MODE_PASSWORD = DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC;
 
     /**
      * The minimum number of dots the user must include in a wrong pattern
@@ -132,13 +133,13 @@
      * @return
      */
     public int getRequestedPasswordMode() {
-        int policyMode = mDevicePolicyManager.getPasswordMode(null);
+        int policyMode = mDevicePolicyManager.getPasswordQuality(null);
         switch (policyMode) {
-            case DevicePolicyManager.PASSWORD_MODE_ALPHANUMERIC:
+            case DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC:
                 return MODE_PASSWORD;
-            case DevicePolicyManager.PASSWORD_MODE_NUMERIC:
+            case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC:
                 return MODE_PIN;
-            case DevicePolicyManager.PASSWORD_MODE_UNSPECIFIED:
+            case DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED:
                 return MODE_PATTERN;
         }
         return MODE_PATTERN;
@@ -158,16 +159,16 @@
     }
 
     public void setActivePasswordState(int mode, int length) {
-        int policyMode = DevicePolicyManager.PASSWORD_MODE_UNSPECIFIED;
+        int policyMode = DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED;
         switch (mode) {
             case MODE_PATTERN:
-                policyMode = DevicePolicyManager.PASSWORD_MODE_UNSPECIFIED;
+                policyMode = DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED;
                 break;
             case MODE_PIN:
-                policyMode = DevicePolicyManager.PASSWORD_MODE_NUMERIC;
+                policyMode = DevicePolicyManager.PASSWORD_QUALITY_NUMERIC;
                 break;
             case MODE_PASSWORD:
-                policyMode = DevicePolicyManager.PASSWORD_MODE_ALPHANUMERIC;
+                policyMode = DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC;
                 break;
         }
         mDevicePolicyManager.setActivePasswordState(policyMode, length);
@@ -302,7 +303,7 @@
                 DevicePolicyManager dpm = (DevicePolicyManager)mContext.getSystemService(
                         Context.DEVICE_POLICY_SERVICE);
                 dpm.setActivePasswordState(
-                        DevicePolicyManager.PASSWORD_MODE_SOMETHING, pattern.size());
+                        DevicePolicyManager.PASSWORD_QUALITY_SOMETHING, pattern.size());
             }
         } catch (FileNotFoundException fnfe) {
             // Cant do much, unless we want to fail over to using the settings provider
@@ -314,7 +315,65 @@
     }
 
     /**
-     * Save a lock password.
+     * Compare the given password and mode, ensuring that the password meets
+     * the mode and returning the minimum mode needed for the given password.
+     * @param password The password to be used.
+     * @param reqMode The desired password mode.
+     * @return Returns {@link #MODE_UNSPECIFIED} if the password is not
+     * good enough for the given mode.  Otherwise, returns either the original
+     * reqMode or something better if that is needed for the given password.
+     */
+    static public int adjustPasswordMode(String password, int reqMode) {
+        boolean hasDigit = false;
+        boolean hasNonDigit = false;
+        final int len = password.length();
+        for (int i = 0; i < len; i++) {
+            if (Character.isDigit(password.charAt(i))) {
+                hasDigit = true;
+            } else {
+                hasNonDigit = true;
+            }
+        }
+        
+        // First check if it is sufficient.
+        switch (reqMode) {
+            case MODE_PASSWORD: {
+                if (!hasDigit || !hasNonDigit) {
+                    return MODE_UNSPECIFIED;
+                }
+            } break;
+            
+            case MODE_PIN:
+            case MODE_PATTERN: {
+                // Whatever we have is acceptable; we may need to promote the
+                // mode later.
+            } break;
+            
+            default:
+                // If it isn't a mode we specifically know, then fail fast.
+                Log.w(TAG, "adjustPasswordMode: unknown mode " + reqMode);
+                return MODE_UNSPECIFIED;
+        }
+        
+        // Do we need to promote?
+        if (hasNonDigit) {
+            if (reqMode < MODE_PASSWORD) {
+                reqMode = MODE_PASSWORD;
+            }
+        }
+        if (hasDigit) {
+            if (reqMode < MODE_PIN) {
+                reqMode = MODE_PIN;
+            }
+        }
+        
+        return reqMode;
+    }
+    
+    /**
+     * Save a lock password.  Does not ensure that the pattern is as good
+     * as the requested mode, but will adjust the mode to be as good as the
+     * pattern.
      * @param password The password to save
      */
     public void saveLockPassword(String password, int mode) {
@@ -331,9 +390,9 @@
             }
             raf.close();
             if (password != null) {
-                int textMode = TextUtils.isDigitsOnly(password) ? MODE_PIN : MODE_PASSWORD;
-                if (textMode > mode) {
-                    mode = textMode;
+                int finalMode = adjustPasswordMode(password, mode);
+                if (mode < finalMode) {
+                    mode = finalMode;
                 }
                 setLong(PASSWORD_TYPE_KEY, mode);
                 DevicePolicyManager dpm = (DevicePolicyManager)mContext.getSystemService(
diff --git a/core/java/com/android/internal/widget/SlidingTab.java b/core/java/com/android/internal/widget/SlidingTab.java
index eb6d1a6..fd38998 100644
--- a/core/java/com/android/internal/widget/SlidingTab.java
+++ b/core/java/com/android/internal/widget/SlidingTab.java
@@ -545,12 +545,22 @@
         return true;
     }
 
+    /**
+     * Reset the tabs to their original state and stop any existing animation.
+     * Animate them back into place if animate is true.
+     *
+     * @param animate
+     */
+    public void reset(boolean animate) {
+        mLeftSlider.reset(animate);
+        mRightSlider.reset(animate);
+    }
+
     @Override
     public void setVisibility(int visibility) {
         // Clear animations so sliders don't continue to animate when we show the widget again.
         if (visibility != getVisibility() && visibility == View.INVISIBLE) {
-            mLeftSlider.reset(false);
-            mRightSlider.reset(false);
+           reset(false);
         }
         super.setVisibility(visibility);
     }
diff --git a/core/jni/android_hardware_Camera.cpp b/core/jni/android_hardware_Camera.cpp
index 1a5987c..03107a4 100644
--- a/core/jni/android_hardware_Camera.cpp
+++ b/core/jni/android_hardware_Camera.cpp
@@ -168,7 +168,7 @@
                 }
 
                 if(mCallbackBuffers.isEmpty()) {
-                    LOGW("Out of buffers, clearing callback!");
+                    LOGV("Out of buffers, clearing callback!");
                     mCamera->setPreviewCallbackFlags(FRAME_CALLBACK_FLAG_NOOP);
                     mManualCameraCallbackSet = false;
 
diff --git a/core/tests/coretests/Android.mk b/core/tests/coretests/Android.mk
index 77c176f..1fb9852 100644
--- a/core/tests/coretests/Android.mk
+++ b/core/tests/coretests/Android.mk
@@ -5,10 +5,14 @@
 LOCAL_MODULE_TAGS := tests
 
 # Include all test java files.
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
+LOCAL_SRC_FILES := \
+	$(call all-java-files-under, src) \
+	src/android/os/IAidlTest.aidl
 
 LOCAL_JAVA_LIBRARIES := android.test.runner
 LOCAL_PACKAGE_NAME := FrameworksCoreTests
 
+LOCAL_CERTIFICATE := platform
+
 include $(BUILD_PACKAGE)
 
diff --git a/core/tests/coretests/AndroidManifest.xml b/core/tests/coretests/AndroidManifest.xml
index 02961f4..8d7e187 100644
--- a/core/tests/coretests/AndroidManifest.xml
+++ b/core/tests/coretests/AndroidManifest.xml
@@ -16,6 +16,46 @@
 
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
           package="com.android.frameworks.coretests">
+
+    <permission android:name="com.android.frameworks.coretests.permission.TEST_GRANTED"
+        android:protectionLevel="normal"
+            android:label="@string/permlab_testGranted"
+            android:description="@string/permdesc_testGranted">
+        <meta-data android:name="com.android.frameworks.coretests.string" android:value="foo" />
+        <meta-data android:name="com.android.frameworks.coretests.boolean" android:value="true" />
+        <meta-data android:name="com.android.frameworks.coretests.integer" android:value="100" />
+        <meta-data android:name="com.android.frameworks.coretests.color" android:value="#ff000000" />
+        <meta-data android:name="com.android.frameworks.coretests.float" android:value="100.1" />
+        <meta-data android:name="com.android.frameworks.coretests.reference" android:resource="@xml/metadata" />
+    </permission>
+    <permission android:name="com.android.frameworks.coretests.permission.TEST_DENIED"
+        android:protectionLevel="normal"
+            android:label="@string/permlab_testDenied"
+            android:description="@string/permdesc_testDenied" />
+
+    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
+    <uses-permission android:name="android.permission.BROADCAST_STICKY" />
+    <uses-permission android:name="android.permission.CLEAR_APP_CACHE" />
+    <uses-permission android:name="android.permission.CLEAR_APP_USER_DATA" />
+    <uses-permission android:name="android.permission.DELETE_CACHE_FILES" />
+    <uses-permission android:name="android.permission.GET_PACKAGE_SIZE" />
+    <uses-permission android:name="android.permission.INTERNET" />
+    <uses-permission android:name="android.permission.READ_CONTACTS" />
+    <uses-permission android:name="android.permission.READ_LOGS"/>
+    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
+    <uses-permission android:name="android.permission.READ_SMS"/>
+    <uses-permission android:name="android.permission.USE_CREDENTIALS" />
+    <uses-permission android:name="android.permission.WAKE_LOCK" />
+    <uses-permission android:name="android.permission.WRITE_CONTACTS" />
+    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
+    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
+    <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
+    <uses-permission android:name="android.permission.WRITE_SMS"/>
+    <uses-permission android:name="android.permission.TEST_GRANTED" />
+    <uses-permission android:name="com.google.android.googleapps.permission.ACCESS_GOOGLE_PASSWORD" />
+    <uses-permission android:name="com.google.android.googleapps.permission.GOOGLE_AUTH" />
+    <uses-permission android:name="com.google.android.googleapps.permission.GOOGLE_AUTH.ALL_SERVICES" />
+
     <uses-permission android:name="android.permission.RECEIVE_SMS"/>
     <uses-permission android:name="android.permission.INTERNET" />
     <uses-permission android:name="android.permission.READ_CONTACTS" />
@@ -28,12 +68,8 @@
     <!-- location test permissions -->
     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
     <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"/>
-    <uses-permission android:name="android.permission.WRITE_SETTINGS"/>
-    <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS"/>
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
-    
     <uses-permission android:name="android.permission.HARDWARE_TEST" />
-    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
     <uses-permission android:name="android.permission.ACCESSIBILITY_EVENT_VIEW_TYPES" />
     <uses-permission android:name="android.permission.ACCESSIBILITY_EVENT_TRANSITION_TYPES" />
     <uses-permission android:name="android.permission.ACCESSIBILITY_EVENT_NOTIFICATION_TYPES" />
@@ -975,6 +1011,187 @@
             </intent-filter>            
         </activity>
         
+
+
+        <!-- Activity-level metadata -->
+        <meta-data android:name="com.android.frameworks.coretests.isApp" android:value="true" />
+        <meta-data android:name="com.android.frameworks.coretests.string" android:value="foo" />
+        <meta-data android:name="com.android.frameworks.coretests.boolean" android:value="true" />
+        <meta-data android:name="com.android.frameworks.coretests.integer" android:value="100" />
+        <meta-data android:name="com.android.frameworks.coretests.color" android:value="#ff000000" />
+        <meta-data android:name="com.android.frameworks.coretests.float" android:value="100.1" />
+        <meta-data android:name="com.android.frameworks.coretests.reference"
+                   android:resource="@xml/metadata_app" />
+
+        <activity android:name="AndroidPerformanceTests" android:label="Android Performance Tests">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.UNIT_TEST" />
+            </intent-filter>
+        </activity>
+
+        <!-- Application components used for activity tests -->
+
+        <activity android:name="android.app.activity.TestedActivity"
+                android:process=":remoteActivity">
+        </activity>
+        <activity android:name="android.app.activity.LocalActivity" android:multiprocess="true">
+            <meta-data android:name="com.android.frameworks.coretests.string" android:value="foo" />
+            <meta-data android:name="com.android.frameworks.coretests.boolean" android:value="true" />
+            <meta-data android:name="com.android.frameworks.coretests.integer" android:value="100" />
+            <meta-data android:name="com.android.frameworks.coretests.color" android:value="#ff000000" />
+            <meta-data android:name="com.android.frameworks.coretests.float" android:value="100.1" />
+            <meta-data android:name="com.android.frameworks.coretests.reference" android:resource="@xml/metadata" />
+        </activity>
+        <activity android:name="android.app.activity.TestedScreen"
+                android:process=":remoteScreen">
+        </activity>
+        <activity android:name="android.app.activity.LocalScreen" android:multiprocess="true">
+        </activity>
+        <activity android:name="android.app.activity.ClearTop" android:multiprocess="true"
+                android:launchMode="singleTop">
+        </activity>
+        <activity android:name="android.app.activity.LocalDialog" android:multiprocess="true"
+                android:theme="@android:style/Theme.Dialog">
+        </activity>
+        <activity android:name="android.app.activity.SubActivityScreen">
+        </activity>
+        <activity android:name="android.app.activity.RemoteSubActivityScreen"
+                android:process=":remoteActivity">
+        </activity>
+        <activity android:name="android.app.activity.LaunchpadActivity" android:multiprocess="true">
+        </activity>
+        <activity android:name="android.app.activity.LaunchpadTabActivity" android:multiprocess="true">
+        </activity>
+
+        <receiver android:name="android.app.activity.AbortReceiver">
+            <intent-filter android:priority="1">
+                <action android:name="com.android.frameworks.coretests.activity.BROADCAST_ABORT" />
+            </intent-filter>
+        </receiver>
+        <receiver android:name="android.app.activity.LocalReceiver">
+            <intent-filter android:priority="-1">
+                <action android:name="com.android.frameworks.coretests.activity.BROADCAST_ABORT" />
+                <action android:name="com.android.frameworks.coretests.activity.BROADCAST_ALL" />
+                <action android:name="com.android.frameworks.coretests.activity.BROADCAST_REPEAT" />
+                <action android:name="com.android.frameworks.coretests.activity.BROADCAST_LOCAL" />
+                <action android:name="com.android.frameworks.coretests.activity.BROADCAST_FAIL_REGISTER" />
+                <action android:name="com.android.frameworks.coretests.activity.BROADCAST_FAIL_BIND" />
+            </intent-filter>
+            <meta-data android:name="com.android.frameworks.coretests.string" android:value="foo" />
+            <meta-data android:name="com.android.frameworks.coretests.boolean" android:value="true" />
+            <meta-data android:name="com.android.frameworks.coretests.integer" android:value="100" />
+            <meta-data android:name="com.android.frameworks.coretests.color" android:value="#ff000000" />
+            <meta-data android:name="com.android.frameworks.coretests.float" android:value="100.1" />
+            <meta-data android:name="com.android.frameworks.coretests.reference" android:resource="@xml/metadata" />
+        </receiver>
+        <receiver android:name="android.app.activity.ResultReceiver">
+            <intent-filter>
+                <action android:name="com.android.frameworks.coretests.activity.BROADCAST_RESULT" />
+            </intent-filter>
+        </receiver>
+        <receiver android:name="android.app.activity.LocalGrantedReceiver"
+                android:permission="com.android.frameworks.coretests.permission.TEST_GRANTED">
+            <intent-filter android:priority="-1">
+                <action android:name="com.android.frameworks.coretests.activity.BROADCAST_LOCAL_GRANTED" />
+            </intent-filter>
+        </receiver>
+        <receiver android:name="android.app.activity.LocalDeniedReceiver"
+                android:permission="com.android.frameworks.coretests.permission.TEST_DENIED">
+            <intent-filter android:priority="-1">
+                <action android:name="com.android.frameworks.coretests.activity.BROADCAST_LOCAL_DENIED" />
+            </intent-filter>
+        </receiver>
+        <receiver android:name="android.app.activity.RemoteReceiver"
+                android:process=":remoteReceiver">
+            <intent-filter android:priority="2">
+                <action android:name="com.android.frameworks.coretests.activity.BROADCAST_ABORT" />
+                <action android:name="com.android.frameworks.coretests.activity.BROADCAST_ALL" />
+                <action android:name="com.android.frameworks.coretests.activity.BROADCAST_REPEAT" />
+                <action android:name="com.android.frameworks.coretests.activity.BROADCAST_REMOTE" />
+            </intent-filter>
+        </receiver>
+        <receiver android:name="android.app.activity.RemoteGrantedReceiver"
+                android:permission="com.android.frameworks.coretests.permission.TEST_GRANTED">
+            <intent-filter android:priority="2">
+                <action android:name="com.android.frameworks.coretests.activity.BROADCAST_REMOTE_GRANTED" />
+            </intent-filter>
+        </receiver>
+        <receiver android:name="android.app.activity.RemoteDeniedReceiver"
+                android:permission="com.android.frameworks.coretests.permission.TEST_DENIED">
+            <intent-filter android:priority="2">
+                <action android:name="com.android.frameworks.coretests.activity.BROADCAST_REMOTE_DENIED" />
+            </intent-filter>
+        </receiver>
+        <service android:name="android.app.activity.LocalService">
+            <intent-filter>
+                <action android:name="com.android.frameworks.coretests.activity.SERVICE_LOCAL" />
+            </intent-filter>
+            <meta-data android:name="com.android.frameworks.coretests.string" android:value="foo" />
+            <meta-data android:name="com.android.frameworks.coretests.boolean" android:value="true" />
+            <meta-data android:name="com.android.frameworks.coretests.integer" android:value="100" />
+            <meta-data android:name="com.android.frameworks.coretests.color" android:value="#ff000000" />
+            <meta-data android:name="com.android.frameworks.coretests.float" android:value="100.1" />
+            <meta-data android:name="com.android.frameworks.coretests.reference" android:resource="@xml/metadata" />
+        </service>
+        <service android:name="android.app.activity.LocalDeniedService"
+                android:permission="com.android.frameworks.coretests.permission.TEST_DENIED">
+            <intent-filter>
+                <action android:name="com.android.frameworks.coretests.activity.SERVICE_LOCAL_DENIED" />
+            </intent-filter>
+        </service>
+        <service android:name="android.app.activity.LocalGrantedService"
+                android:permission="com.android.frameworks.coretests.permission.TEST_GRANTED">
+            <intent-filter>
+                <action android:name="com.android.frameworks.coretests.activity.SERVICE_LOCAL_GRANTED" />
+            </intent-filter>
+        </service>
+
+        <provider android:name="android.app.activity.LocalProvider"
+                android:authorities="com.android.frameworks.coretests.LocalProvider">
+            <meta-data android:name="com.android.frameworks.coretests.string" android:value="foo" />
+            <meta-data android:name="com.android.frameworks.coretests.boolean" android:value="true" />
+            <meta-data android:name="com.android.frameworks.coretests.integer" android:value="100" />
+            <meta-data android:name="com.android.frameworks.coretests.color" android:value="#ff000000" />
+            <meta-data android:name="com.android.frameworks.coretests.float" android:value="100.1" />
+            <meta-data android:name="com.android.frameworks.coretests.reference" android:resource="@xml/metadata" />
+        </provider>
+
+        <!-- Application components used for content tests -->
+        <provider android:name="android.content.MemoryFileProvider"
+                android:authorities="android.content.MemoryFileProvider"
+                android:process=":MemoryFileProvider">
+        </provider>
+
+        <!-- Application components used for os tests -->
+
+        <service android:name="android.os.MessengerService"
+                android:process=":messengerService">
+        </service>
+
+        <!-- Application components used for search manager tests -->
+
+        <activity android:name="android.app.activity.SearchableActivity"
+                android:label="Searchable Activity">
+            <intent-filter>
+                <action android:name="android.intent.action.SEARCH" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+            <meta-data android:name="android.app.searchable"
+                    android:resource="@xml/searchable" />
+        </activity>
+
+        <provider android:name="android.app.SuggestionProvider"
+                android:authorities="android.app.SuggestionProvider">
+        </provider>
+
+        <!-- Used to test IPC. -->
+        <service android:name="com.android.frameworks.coretests.binder.BinderTestService"
+                 android:process="binder.BinderTestService" />
+        <service android:name="com.android.frameworks.coretests.binder.BinderPerformanceService"
+                 android:process="binder.BinderPerformanceService" />
+        <service android:name="com.android.frameworks.coretests.binder.BinderVsMessagingService"
+                 android:process="binder.BinderVsMessagingService" />
     </application>
 
     <instrumentation
diff --git a/tests/AndroidTests/assets/text.txt b/core/tests/coretests/assets/text.txt
similarity index 100%
rename from tests/AndroidTests/assets/text.txt
rename to core/tests/coretests/assets/text.txt
diff --git a/tests/AndroidTests/res/layout/layout_five.xml b/core/tests/coretests/res/layout/layout_five.xml
similarity index 100%
rename from tests/AndroidTests/res/layout/layout_five.xml
rename to core/tests/coretests/res/layout/layout_five.xml
diff --git a/tests/AndroidTests/res/layout/layout_four.xml b/core/tests/coretests/res/layout/layout_four.xml
similarity index 100%
rename from tests/AndroidTests/res/layout/layout_four.xml
rename to core/tests/coretests/res/layout/layout_four.xml
diff --git a/tests/AndroidTests/res/layout/layout_one.xml b/core/tests/coretests/res/layout/layout_one.xml
similarity index 82%
rename from tests/AndroidTests/res/layout/layout_one.xml
rename to core/tests/coretests/res/layout/layout_one.xml
index c326b2b..6966246 100644
--- a/tests/AndroidTests/res/layout/layout_one.xml
+++ b/core/tests/coretests/res/layout/layout_one.xml
@@ -17,4 +17,4 @@
 ** limitations under the License.
 */
 -->
-<view xmlns:android="http://schemas.android.com/apk/res/android" class="com.android.unit_tests.InflateTest$ViewOne" android:id="@+id/viewOne" android:layout_width="match_parent" android:layout_height="match_parent"/>
+<view xmlns:android="http://schemas.android.com/apk/res/android" class="android.view.InflateTest$ViewOne" android:id="@+id/viewOne" android:layout_width="match_parent" android:layout_height="match_parent"/>
diff --git a/tests/AndroidTests/res/layout/layout_six.xml b/core/tests/coretests/res/layout/layout_six.xml
similarity index 100%
rename from tests/AndroidTests/res/layout/layout_six.xml
rename to core/tests/coretests/res/layout/layout_six.xml
diff --git a/tests/AndroidTests/res/layout/layout_tag.xml b/core/tests/coretests/res/layout/layout_tag.xml
similarity index 93%
rename from tests/AndroidTests/res/layout/layout_tag.xml
rename to core/tests/coretests/res/layout/layout_tag.xml
index 72874a6..7fb0489 100644
--- a/tests/AndroidTests/res/layout/layout_tag.xml
+++ b/core/tests/coretests/res/layout/layout_tag.xml
@@ -18,6 +18,6 @@
 */
 -->
 <view xmlns:android="http://schemas.android.com/apk/res/android"
-    class="com.android.unit_tests.InflateTest$ViewOne"
+    class="android.view.InflateTest$ViewOne"
     android:id="@+id/viewOne" android:tag="MyTag"
     android:layout_width="match_parent" android:layout_height="match_parent"/>
diff --git a/core/tests/coretests/res/layout/layout_three.xml b/core/tests/coretests/res/layout/layout_three.xml
new file mode 100644
index 0000000..7242fc8
--- /dev/null
+++ b/core/tests/coretests/res/layout/layout_three.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2006, 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:id="@+id/content" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent">
+	<view class="android.view.InflateTest$ViewOne" android:id="@+id/view1" android:layout_width="match_parent" android:layout_height="match_parent"/>
+	<view class="android.view.InflateTest$ViewOne" android:id="@+id/view2" android:layout_width="match_parent" android:layout_height="match_parent"/>
+	<view class="android.view.InflateTest$ViewOne" android:id="@+id/view3" android:layout_width="match_parent" android:layout_height="match_parent"/>
+	<view class="android.view.InflateTest$ViewOne" android:id="@+id/view4" android:layout_width="match_parent" android:layout_height="match_parent"/>
+	<view class="android.view.InflateTest$ViewOne" android:id="@+id/view5" android:layout_width="match_parent" android:layout_height="match_parent"/>
+	<view class="android.view.InflateTest$ViewOne" android:id="@+id/view6" android:layout_width="match_parent" android:layout_height="match_parent"/>
+</LinearLayout>
diff --git a/tests/AndroidTests/res/layout/layout_two.xml b/core/tests/coretests/res/layout/layout_two.xml
similarity index 84%
rename from tests/AndroidTests/res/layout/layout_two.xml
rename to core/tests/coretests/res/layout/layout_two.xml
index af14228..9fb7d3b 100644
--- a/tests/AndroidTests/res/layout/layout_two.xml
+++ b/core/tests/coretests/res/layout/layout_two.xml
@@ -18,6 +18,6 @@
 */
 -->
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/content" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent">
-	<view class="com.android.unit_tests.InflateTest$ViewOne" android:id="@+id/viewOne" android:layout_width="match_parent" android:layout_height="match_parent"/>
+	<view class="android.view.InflateTest$ViewOne" android:id="@+id/viewOne" android:layout_width="match_parent" android:layout_height="match_parent"/>
 </LinearLayout>
 
diff --git a/tests/AndroidTests/res/raw/medium.xml b/core/tests/coretests/res/raw/medium.xml
similarity index 100%
rename from tests/AndroidTests/res/raw/medium.xml
rename to core/tests/coretests/res/raw/medium.xml
diff --git a/tests/AndroidTests/res/raw/small.xml b/core/tests/coretests/res/raw/small.xml
similarity index 100%
rename from tests/AndroidTests/res/raw/small.xml
rename to core/tests/coretests/res/raw/small.xml
diff --git a/tests/AndroidTests/res/raw/text.txt b/core/tests/coretests/res/raw/text.txt
similarity index 100%
rename from tests/AndroidTests/res/raw/text.txt
rename to core/tests/coretests/res/raw/text.txt
diff --git a/tests/AndroidTests/res/raw/v21_backslash.vcf b/core/tests/coretests/res/raw/v21_backslash.vcf
similarity index 100%
rename from tests/AndroidTests/res/raw/v21_backslash.vcf
rename to core/tests/coretests/res/raw/v21_backslash.vcf
diff --git a/tests/AndroidTests/res/raw/v21_complicated.vcf b/core/tests/coretests/res/raw/v21_complicated.vcf
similarity index 100%
rename from tests/AndroidTests/res/raw/v21_complicated.vcf
rename to core/tests/coretests/res/raw/v21_complicated.vcf
diff --git a/tests/AndroidTests/res/raw/v21_invalid_comment_line.vcf b/core/tests/coretests/res/raw/v21_invalid_comment_line.vcf
similarity index 100%
rename from tests/AndroidTests/res/raw/v21_invalid_comment_line.vcf
rename to core/tests/coretests/res/raw/v21_invalid_comment_line.vcf
diff --git a/tests/AndroidTests/res/raw/v21_japanese_1.vcf b/core/tests/coretests/res/raw/v21_japanese_1.vcf
similarity index 100%
rename from tests/AndroidTests/res/raw/v21_japanese_1.vcf
rename to core/tests/coretests/res/raw/v21_japanese_1.vcf
diff --git a/tests/AndroidTests/res/raw/v21_japanese_2.vcf b/core/tests/coretests/res/raw/v21_japanese_2.vcf
similarity index 100%
rename from tests/AndroidTests/res/raw/v21_japanese_2.vcf
rename to core/tests/coretests/res/raw/v21_japanese_2.vcf
diff --git a/tests/AndroidTests/res/raw/v21_multiple_entry.vcf b/core/tests/coretests/res/raw/v21_multiple_entry.vcf
similarity index 100%
rename from tests/AndroidTests/res/raw/v21_multiple_entry.vcf
rename to core/tests/coretests/res/raw/v21_multiple_entry.vcf
diff --git a/tests/AndroidTests/res/raw/v21_org_before_title.vcf b/core/tests/coretests/res/raw/v21_org_before_title.vcf
similarity index 100%
rename from tests/AndroidTests/res/raw/v21_org_before_title.vcf
rename to core/tests/coretests/res/raw/v21_org_before_title.vcf
diff --git a/tests/AndroidTests/res/raw/v21_pref_handling.vcf b/core/tests/coretests/res/raw/v21_pref_handling.vcf
similarity index 100%
rename from tests/AndroidTests/res/raw/v21_pref_handling.vcf
rename to core/tests/coretests/res/raw/v21_pref_handling.vcf
diff --git a/tests/AndroidTests/res/raw/v21_simple_1.vcf b/core/tests/coretests/res/raw/v21_simple_1.vcf
similarity index 100%
rename from tests/AndroidTests/res/raw/v21_simple_1.vcf
rename to core/tests/coretests/res/raw/v21_simple_1.vcf
diff --git a/tests/AndroidTests/res/raw/v21_simple_2.vcf b/core/tests/coretests/res/raw/v21_simple_2.vcf
similarity index 100%
rename from tests/AndroidTests/res/raw/v21_simple_2.vcf
rename to core/tests/coretests/res/raw/v21_simple_2.vcf
diff --git a/tests/AndroidTests/res/raw/v21_simple_3.vcf b/core/tests/coretests/res/raw/v21_simple_3.vcf
similarity index 100%
rename from tests/AndroidTests/res/raw/v21_simple_3.vcf
rename to core/tests/coretests/res/raw/v21_simple_3.vcf
diff --git a/tests/AndroidTests/res/raw/v21_title_before_org.vcf b/core/tests/coretests/res/raw/v21_title_before_org.vcf
similarity index 100%
rename from tests/AndroidTests/res/raw/v21_title_before_org.vcf
rename to core/tests/coretests/res/raw/v21_title_before_org.vcf
diff --git a/tests/AndroidTests/res/raw/v21_winmo_65.vcf b/core/tests/coretests/res/raw/v21_winmo_65.vcf
similarity index 100%
rename from tests/AndroidTests/res/raw/v21_winmo_65.vcf
rename to core/tests/coretests/res/raw/v21_winmo_65.vcf
diff --git a/tests/AndroidTests/res/raw/v30_comma_separated.vcf b/core/tests/coretests/res/raw/v30_comma_separated.vcf
similarity index 100%
rename from tests/AndroidTests/res/raw/v30_comma_separated.vcf
rename to core/tests/coretests/res/raw/v30_comma_separated.vcf
diff --git a/tests/AndroidTests/res/raw/v30_simple.vcf b/core/tests/coretests/res/raw/v30_simple.vcf
similarity index 100%
rename from tests/AndroidTests/res/raw/v30_simple.vcf
rename to core/tests/coretests/res/raw/v30_simple.vcf
diff --git a/core/tests/coretests/res/values/strings.xml b/core/tests/coretests/res/values/strings.xml
index 05b57e0..807386a 100644
--- a/core/tests/coretests/res/values/strings.xml
+++ b/core/tests/coretests/res/values/strings.xml
@@ -100,4 +100,21 @@
     <string name="include_button">I was included!</string>
 
     <string name="view">View</string>
+
+    <string name="layout_five_text_text">S</string>
+    <string name="layout_four_text_text">S</string>
+    <string name="layout_six_text_text">S</string>
+
+    <string name="menu_test">test</string>
+    <string name="metadata_text">text</string>
+
+    <string name="permlab_testGranted">Test Granted</string>
+    <string name="permdesc_testGranted">Used for running unit tests, for
+        testing operations where we have the permission.</string>
+    <string name="permlab_testDenied">Test Denied</string>
+    <string name="permdesc_testDenied">Used for running unit tests, for
+        testing operations where we do not have the permission.</string>
+
+    <string name="searchable_label">SearchManager Test</string>
+    <string name="searchable_hint">A search hint</string>
 </resources>
diff --git a/tests/AndroidTests/res/xml/metadata.xml b/core/tests/coretests/res/xml/metadata.xml
similarity index 100%
rename from tests/AndroidTests/res/xml/metadata.xml
rename to core/tests/coretests/res/xml/metadata.xml
diff --git a/tests/AndroidTests/res/xml/metadata_app.xml b/core/tests/coretests/res/xml/metadata_app.xml
similarity index 100%
rename from tests/AndroidTests/res/xml/metadata_app.xml
rename to core/tests/coretests/res/xml/metadata_app.xml
diff --git a/tests/AndroidTests/res/xml/searchable.xml b/core/tests/coretests/res/xml/searchable.xml
similarity index 100%
rename from tests/AndroidTests/res/xml/searchable.xml
rename to core/tests/coretests/res/xml/searchable.xml
diff --git a/tests/AndroidTests/src/com/android/unit_tests/accounts/AccountManagerServiceTest.java b/core/tests/coretests/src/android/accounts/AccountManagerServiceTest.java
similarity index 98%
rename from tests/AndroidTests/src/com/android/unit_tests/accounts/AccountManagerServiceTest.java
rename to core/tests/coretests/src/android/accounts/AccountManagerServiceTest.java
index 1e4f161..394b9f2 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/accounts/AccountManagerServiceTest.java
+++ b/core/tests/coretests/src/android/accounts/AccountManagerServiceTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests.accounts;
+package android.accounts;
 
 import android.test.AndroidTestCase;
 import android.test.RenamingDelegatingContext;
@@ -175,4 +175,4 @@
 
         assertNull(ams.readAuthTokenFromDatabase(a12, "att2"));
     }
-}
\ No newline at end of file
+}
diff --git a/tests/AndroidTests/src/com/android/unit_tests/SearchManagerTest.java b/core/tests/coretests/src/android/app/SearchManagerTest.java
similarity index 95%
rename from tests/AndroidTests/src/com/android/unit_tests/SearchManagerTest.java
rename to core/tests/coretests/src/android/app/SearchManagerTest.java
index 6f6f55d..21ed4c5 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/SearchManagerTest.java
+++ b/core/tests/coretests/src/android/app/SearchManagerTest.java
@@ -14,9 +14,9 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests;
+package android.app;
 
-import com.android.unit_tests.activity.LocalActivity;
+import android.app.activity.LocalActivity;
 
 import android.app.Activity;
 import android.app.ISearchManager;
@@ -39,8 +39,8 @@
 public class SearchManagerTest extends ActivityInstrumentationTestCase2<LocalActivity> {
 
     private ComponentName SEARCHABLE_ACTIVITY =
-            new ComponentName("com.android.unit_tests",
-                    "com.android.unit_tests.SearchableActivity");
+            new ComponentName("com.android.frameworks.coretests",
+                    "android.app.activity.SearchableActivity");
 
     /*
      * Bug list of test ideas.
@@ -76,7 +76,7 @@
     Context mContext;
 
     public SearchManagerTest() {
-        super("com.android.unit_tests", LocalActivity.class);
+        super("com.android.frameworks.coretests", LocalActivity.class);
     }
 
     /**
diff --git a/tests/AndroidTests/src/com/android/unit_tests/SearchablesTest.java b/core/tests/coretests/src/android/app/SearchablesTest.java
similarity index 98%
rename from tests/AndroidTests/src/com/android/unit_tests/SearchablesTest.java
rename to core/tests/coretests/src/android/app/SearchablesTest.java
index 972559d..9b4520e 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/SearchablesTest.java
+++ b/core/tests/coretests/src/android/app/SearchablesTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests;
+package android.app;
 
 import android.app.SearchManager;
 import android.app.SearchableInfo;
@@ -108,8 +108,8 @@
 
         // confirm that we return null for non-searchy activities
         ComponentName nonActivity = new ComponentName(
-                            "com.android.unit_tests",
-                            "com.android.unit_tests.NO_SEARCH_ACTIVITY");
+                            "com.android.frameworks.coretests",
+                            "com.android.frameworks.coretests.activity.NO_SEARCH_ACTIVITY");
         SearchableInfo si = searchables.getSearchableInfo(nonActivity);
         assertNull(si);
     }
diff --git a/tests/AndroidTests/src/com/android/unit_tests/SuggestionProvider.java b/core/tests/coretests/src/android/app/SuggestionProvider.java
similarity index 98%
rename from tests/AndroidTests/src/com/android/unit_tests/SuggestionProvider.java
rename to core/tests/coretests/src/android/app/SuggestionProvider.java
index bc61e27..9fb7dcf 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/SuggestionProvider.java
+++ b/core/tests/coretests/src/android/app/SuggestionProvider.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests;
+package android.app;
 
 import android.app.SearchManager;
 import android.content.ContentProvider;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/activity/AbortReceiver.java b/core/tests/coretests/src/android/app/activity/AbortReceiver.java
similarity index 96%
rename from tests/AndroidTests/src/com/android/unit_tests/activity/AbortReceiver.java
rename to core/tests/coretests/src/android/app/activity/AbortReceiver.java
index d9d6101..fef1775 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/activity/AbortReceiver.java
+++ b/core/tests/coretests/src/android/app/activity/AbortReceiver.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests.activity;
+package android.app.activity;
 
 import android.content.Context;
 import android.content.Intent;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/activity/ActivityManagerTest.java b/core/tests/coretests/src/android/app/activity/ActivityManagerTest.java
similarity index 98%
rename from tests/AndroidTests/src/com/android/unit_tests/activity/ActivityManagerTest.java
rename to core/tests/coretests/src/android/app/activity/ActivityManagerTest.java
index ab91761..61d73bc 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/activity/ActivityManagerTest.java
+++ b/core/tests/coretests/src/android/app/activity/ActivityManagerTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests.activity;
+package android.app.activity;
 
 import android.app.ActivityManager;
 import android.content.Context;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/activity/ActivityTests.java b/core/tests/coretests/src/android/app/activity/ActivityTests.java
similarity index 96%
rename from tests/AndroidTests/src/com/android/unit_tests/activity/ActivityTests.java
rename to core/tests/coretests/src/android/app/activity/ActivityTests.java
index cffc60a..c57fe98 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/activity/ActivityTests.java
+++ b/core/tests/coretests/src/android/app/activity/ActivityTests.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests.activity;
+package android.app.activity;
 
 import junit.framework.TestSuite;
 
diff --git a/tests/AndroidTests/src/com/android/unit_tests/activity/ActivityTestsBase.java b/core/tests/coretests/src/android/app/activity/ActivityTestsBase.java
similarity index 96%
rename from tests/AndroidTests/src/com/android/unit_tests/activity/ActivityTestsBase.java
rename to core/tests/coretests/src/android/app/activity/ActivityTestsBase.java
index f960969..232abe2 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/activity/ActivityTestsBase.java
+++ b/core/tests/coretests/src/android/app/activity/ActivityTestsBase.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests.activity;
+package android.app.activity;
 
 import android.app.Activity;
 import android.content.Context;
@@ -25,9 +25,9 @@
 public class ActivityTestsBase extends AndroidTestCase 
         implements PerformanceTestCase, LaunchpadActivity.CallingTest {
     public static final String PERMISSION_GRANTED =
-            "com.android.unit_tests.permission.TEST_GRANTED";
+            "com.android.frameworks.coretests.permission.TEST_GRANTED";
     public static final String PERMISSION_DENIED =
-            "com.android.unit_tests.permission.TEST_DENIED";
+            "com.android.frameworks.coretests.permission.TEST_DENIED";
 
     protected Intent mIntent;
 
diff --git a/tests/AndroidTests/src/com/android/unit_tests/activity/BroadcastTest.java b/core/tests/coretests/src/android/app/activity/BroadcastTest.java
similarity index 93%
rename from tests/AndroidTests/src/com/android/unit_tests/activity/BroadcastTest.java
rename to core/tests/coretests/src/android/app/activity/BroadcastTest.java
index 7f6db3c..4b1f9fd 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/activity/BroadcastTest.java
+++ b/core/tests/coretests/src/android/app/activity/BroadcastTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests.activity;
+package android.app.activity;
 
 import android.app.Activity;
 import android.app.ActivityManagerNative;
@@ -36,35 +36,35 @@
     public static final int BROADCAST_TIMEOUT = 5 * 1000;
 
     public static final String BROADCAST_REGISTERED =
-            "com.android.unit_tests.activity.BROADCAST_REGISTERED";
+            "com.android.frameworks.coretests.activity.BROADCAST_REGISTERED";
     public static final String BROADCAST_LOCAL =
-            "com.android.unit_tests.activity.BROADCAST_LOCAL";
+            "com.android.frameworks.coretests.activity.BROADCAST_LOCAL";
     public static final String BROADCAST_LOCAL_GRANTED =
-            "com.android.unit_tests.activity.BROADCAST_LOCAL_GRANTED";
+            "com.android.frameworks.coretests.activity.BROADCAST_LOCAL_GRANTED";
     public static final String BROADCAST_LOCAL_DENIED =
-            "com.android.unit_tests.activity.BROADCAST_LOCAL_DENIED";
+            "com.android.frameworks.coretests.activity.BROADCAST_LOCAL_DENIED";
     public static final String BROADCAST_REMOTE =
-            "com.android.unit_tests.activity.BROADCAST_REMOTE";
+            "com.android.frameworks.coretests.activity.BROADCAST_REMOTE";
     public static final String BROADCAST_REMOTE_GRANTED =
-            "com.android.unit_tests.activity.BROADCAST_REMOTE_GRANTED";
+            "com.android.frameworks.coretests.activity.BROADCAST_REMOTE_GRANTED";
     public static final String BROADCAST_REMOTE_DENIED =
-            "com.android.unit_tests.activity.BROADCAST_REMOTE_DENIED";
+            "com.android.frameworks.coretests.activity.BROADCAST_REMOTE_DENIED";
     public static final String BROADCAST_ALL =
-            "com.android.unit_tests.activity.BROADCAST_ALL";
+            "com.android.frameworks.coretests.activity.BROADCAST_ALL";
     public static final String BROADCAST_MULTI =
-            "com.android.unit_tests.activity.BROADCAST_MULTI";
+            "com.android.frameworks.coretests.activity.BROADCAST_MULTI";
     public static final String BROADCAST_ABORT =
-            "com.android.unit_tests.activity.BROADCAST_ABORT";
+            "com.android.frameworks.coretests.activity.BROADCAST_ABORT";
 
     public static final String BROADCAST_STICKY1 =
-            "com.android.unit_tests.activity.BROADCAST_STICKY1";
+            "com.android.frameworks.coretests.activity.BROADCAST_STICKY1";
     public static final String BROADCAST_STICKY2 =
-            "com.android.unit_tests.activity.BROADCAST_STICKY2";
+            "com.android.frameworks.coretests.activity.BROADCAST_STICKY2";
 
     public static final String BROADCAST_FAIL_REGISTER =
-            "com.android.unit_tests.activity.BROADCAST_FAIL_REGISTER";
+            "com.android.frameworks.coretests.activity.BROADCAST_FAIL_REGISTER";
     public static final String BROADCAST_FAIL_BIND =
-            "com.android.unit_tests.activity.BROADCAST_FAIL_BIND";
+            "com.android.frameworks.coretests.activity.BROADCAST_FAIL_BIND";
 
     public static final String RECEIVER_REG = "receiver-reg";
     public static final String RECEIVER_LOCAL = "receiver-local";
@@ -276,7 +276,7 @@
             map.putString("foo", "you");
             map.putString("remove", "me");
             getContext().sendOrderedBroadcast(
-                    new Intent("com.android.unit_tests.activity.BROADCAST_RESULT"),
+                    new Intent("com.android.frameworks.coretests.activity.BROADCAST_RESULT"),
                     null, broadcastReceiver, null, 1, "foo", map);
             while (!broadcastReceiver.mHaveResult) {
                 try {
diff --git a/tests/AndroidTests/src/com/android/unit_tests/activity/ClearTop.java b/core/tests/coretests/src/android/app/activity/ClearTop.java
similarity index 97%
rename from tests/AndroidTests/src/com/android/unit_tests/activity/ClearTop.java
rename to core/tests/coretests/src/android/app/activity/ClearTop.java
index dd5274a..a5ee2ce 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/activity/ClearTop.java
+++ b/core/tests/coretests/src/android/app/activity/ClearTop.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests.activity;
+package android.app.activity;
 
 import android.app.Activity;
 import android.content.Intent;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/activity/IntentSenderTest.java b/core/tests/coretests/src/android/app/activity/IntentSenderTest.java
similarity index 98%
rename from tests/AndroidTests/src/com/android/unit_tests/activity/IntentSenderTest.java
rename to core/tests/coretests/src/android/app/activity/IntentSenderTest.java
index a30c1cb..3c30915 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/activity/IntentSenderTest.java
+++ b/core/tests/coretests/src/android/app/activity/IntentSenderTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests.activity;
+package android.app.activity;
 
 import android.app.Activity;
 import android.app.PendingIntent;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/activity/LaunchTest.java b/core/tests/coretests/src/android/app/activity/LaunchTest.java
similarity index 97%
rename from tests/AndroidTests/src/com/android/unit_tests/activity/LaunchTest.java
rename to core/tests/coretests/src/android/app/activity/LaunchTest.java
index 12b1b5d..5893fd0 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/activity/LaunchTest.java
+++ b/core/tests/coretests/src/android/app/activity/LaunchTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests.activity;
+package android.app.activity;
 
 import android.content.ComponentName;
 import android.test.suitebuilder.annotation.LargeTest;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/activity/LaunchpadActivity.java b/core/tests/coretests/src/android/app/activity/LaunchpadActivity.java
similarity index 93%
rename from tests/AndroidTests/src/com/android/unit_tests/activity/LaunchpadActivity.java
rename to core/tests/coretests/src/android/app/activity/LaunchpadActivity.java
index 06e7a84..7662456 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/activity/LaunchpadActivity.java
+++ b/core/tests/coretests/src/android/app/activity/LaunchpadActivity.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests.activity;
+package android.app.activity;
 
 import android.app.Activity;
 import android.content.BroadcastReceiver;
@@ -71,49 +71,49 @@
     }
 
     // Also used as the Binder interface descriptor string in these tests
-    public static final String LAUNCH = "com.android.unit_tests.activity.LAUNCH";
+    public static final String LAUNCH = "com.android.frameworks.coretests.activity.LAUNCH";
 
     public static final String FORWARD_RESULT =
-            "com.android.unit_tests.activity.FORWARD_RESULT";
+            "com.android.frameworks.coretests.activity.FORWARD_RESULT";
     public static final String RETURNED_RESULT =
-            "com.android.unit_tests.activity.RETURNED_RESULT";
+            "com.android.frameworks.coretests.activity.RETURNED_RESULT";
 
     public static final String BAD_PARCELABLE =
-            "com.android.unit_tests.activity.BAD_PARCELABLE";
+            "comcom.android.frameworks.coretests.activity.BAD_PARCELABLE";
 
     public static final int LAUNCHED_RESULT = 1;
     public static final int FORWARDED_RESULT = 2;
 
     public static final String LIFECYCLE_BASIC =
-            "com.android.unit_tests.activity.LIFECYCLE_BASIC";
+            "com.android.frameworks.coretests.activity.LIFECYCLE_BASIC";
     public static final String LIFECYCLE_SCREEN =
-            "com.android.unit_tests.activity.LIFECYCLE_SCREEN";
+            "com.android.frameworks.coretests.activity.LIFECYCLE_SCREEN";
     public static final String LIFECYCLE_DIALOG =
-            "com.android.unit_tests.activity.LIFECYCLE_DIALOG";
+            "com.android.frameworks.coretests.activity.LIFECYCLE_DIALOG";
     public static final String LIFECYCLE_FINISH_CREATE =
-            "com.android.unit_tests.activity.LIFECYCLE_FINISH_CREATE";
+            "com.android.frameworks.coretests.activity.LIFECYCLE_FINISH_CREATE";
     public static final String LIFECYCLE_FINISH_START =
-            "com.android.unit_tests.activity.LIFECYCLE_FINISH_START";
+            "com.android.frameworks.coretests.activity.LIFECYCLE_FINISH_START";
 
     public static final String BROADCAST_REGISTERED =
-            "com.android.unit_tests.activity.BROADCAST_REGISTERED";
+            "com.android.frameworks.coretests.activity.BROADCAST_REGISTERED";
     public static final String BROADCAST_LOCAL =
-            "com.android.unit_tests.activity.BROADCAST_LOCAL";
+            "com.android.frameworks.coretests.activity.BROADCAST_LOCAL";
     public static final String BROADCAST_REMOTE =
-            "com.android.unit_tests.activity.BROADCAST_REMOTE";
+            "com.android.frameworks.coretests.activity.BROADCAST_REMOTE";
     public static final String BROADCAST_ALL =
-            "com.android.unit_tests.activity.BROADCAST_ALL";
+            "com.android.frameworks.coretests.activity.BROADCAST_ALL";
     public static final String BROADCAST_REPEAT =
-        "com.android.unit_tests.activity.BROADCAST_REPEAT";
+        "com.android.frameworks.coretests.activity.BROADCAST_REPEAT";
     public static final String BROADCAST_MULTI =
-            "com.android.unit_tests.activity.BROADCAST_MULTI";
+            "com.android.frameworks.coretests.activity.BROADCAST_MULTI";
     public static final String BROADCAST_ABORT =
-            "com.android.unit_tests.activity.BROADCAST_ABORT";
+            "com.android.frameworks.coretests.activity.BROADCAST_ABORT";
 
     public static final String BROADCAST_STICKY1 =
-            "com.android.unit_tests.activity.BROADCAST_STICKY1";
+            "com.android.frameworks.coretests.activity.BROADCAST_STICKY1";
     public static final String BROADCAST_STICKY2 =
-            "com.android.unit_tests.activity.BROADCAST_STICKY2";
+            "com.android.frameworks.coretests.activity.BROADCAST_STICKY2";
 
     public static final String RECEIVER_REG = "receiver-reg";
     public static final String RECEIVER_LOCAL = "receiver-local";
diff --git a/tests/AndroidTests/src/com/android/unit_tests/activity/LaunchpadTabActivity.java b/core/tests/coretests/src/android/app/activity/LaunchpadTabActivity.java
similarity index 96%
rename from tests/AndroidTests/src/com/android/unit_tests/activity/LaunchpadTabActivity.java
rename to core/tests/coretests/src/android/app/activity/LaunchpadTabActivity.java
index 1e0e4a6..79b860f 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/activity/LaunchpadTabActivity.java
+++ b/core/tests/coretests/src/android/app/activity/LaunchpadTabActivity.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests.activity;
+package android.app.activity;
 
 import android.app.TabActivity;
 import android.content.ComponentName;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/activity/LifecycleTest.java b/core/tests/coretests/src/android/app/activity/LifecycleTest.java
similarity index 98%
rename from tests/AndroidTests/src/com/android/unit_tests/activity/LifecycleTest.java
rename to core/tests/coretests/src/android/app/activity/LifecycleTest.java
index 069b697..768a9a4 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/activity/LifecycleTest.java
+++ b/core/tests/coretests/src/android/app/activity/LifecycleTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests.activity;
+package android.app.activity;
 
 import android.content.ComponentName;
 import android.content.Intent;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/activity/LocalActivity.java b/core/tests/coretests/src/android/app/activity/LocalActivity.java
similarity index 95%
rename from tests/AndroidTests/src/com/android/unit_tests/activity/LocalActivity.java
rename to core/tests/coretests/src/android/app/activity/LocalActivity.java
index 3c107be..01f1fb6 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/activity/LocalActivity.java
+++ b/core/tests/coretests/src/android/app/activity/LocalActivity.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests.activity;
+package android.app.activity;
 
 import java.util.Map;
 
diff --git a/tests/AndroidTests/src/com/android/unit_tests/activity/LocalDeniedReceiver.java b/core/tests/coretests/src/android/app/activity/LocalDeniedReceiver.java
similarity index 96%
rename from tests/AndroidTests/src/com/android/unit_tests/activity/LocalDeniedReceiver.java
rename to core/tests/coretests/src/android/app/activity/LocalDeniedReceiver.java
index ac235c0..2120a1d 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/activity/LocalDeniedReceiver.java
+++ b/core/tests/coretests/src/android/app/activity/LocalDeniedReceiver.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests.activity;
+package android.app.activity;
 
 import android.content.BroadcastReceiver;
 import android.content.Context;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/activity/LocalDeniedService.java b/core/tests/coretests/src/android/app/activity/LocalDeniedService.java
similarity index 93%
rename from tests/AndroidTests/src/com/android/unit_tests/activity/LocalDeniedService.java
rename to core/tests/coretests/src/android/app/activity/LocalDeniedService.java
index 0473ea9..3bdac22 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/activity/LocalDeniedService.java
+++ b/core/tests/coretests/src/android/app/activity/LocalDeniedService.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests.activity;
+package android.app.activity;
 
 public class LocalDeniedService extends LocalService
 {
diff --git a/tests/AndroidTests/src/com/android/unit_tests/activity/LocalDialog.java b/core/tests/coretests/src/android/app/activity/LocalDialog.java
similarity index 95%
rename from tests/AndroidTests/src/com/android/unit_tests/activity/LocalDialog.java
rename to core/tests/coretests/src/android/app/activity/LocalDialog.java
index 3694375..c92fa43 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/activity/LocalDialog.java
+++ b/core/tests/coretests/src/android/app/activity/LocalDialog.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests.activity;
+package android.app.activity;
 
 import java.util.Map;
 
diff --git a/tests/AndroidTests/src/com/android/unit_tests/activity/LocalGrantedReceiver.java b/core/tests/coretests/src/android/app/activity/LocalGrantedReceiver.java
similarity index 96%
rename from tests/AndroidTests/src/com/android/unit_tests/activity/LocalGrantedReceiver.java
rename to core/tests/coretests/src/android/app/activity/LocalGrantedReceiver.java
index 48f5658..c9e6ab4 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/activity/LocalGrantedReceiver.java
+++ b/core/tests/coretests/src/android/app/activity/LocalGrantedReceiver.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests.activity;
+package android.app.activity;
 
 import android.content.BroadcastReceiver;
 import android.content.Context;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/activity/LocalGrantedService.java b/core/tests/coretests/src/android/app/activity/LocalGrantedService.java
similarity index 93%
rename from tests/AndroidTests/src/com/android/unit_tests/activity/LocalGrantedService.java
rename to core/tests/coretests/src/android/app/activity/LocalGrantedService.java
index 0dbcd00..7ab0fb4 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/activity/LocalGrantedService.java
+++ b/core/tests/coretests/src/android/app/activity/LocalGrantedService.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests.activity;
+package android.app.activity;
 
 public class LocalGrantedService extends LocalService
 {
diff --git a/tests/AndroidTests/src/com/android/unit_tests/activity/LocalProvider.java b/core/tests/coretests/src/android/app/activity/LocalProvider.java
similarity index 98%
rename from tests/AndroidTests/src/com/android/unit_tests/activity/LocalProvider.java
rename to core/tests/coretests/src/android/app/activity/LocalProvider.java
index a3375bd..085e622 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/activity/LocalProvider.java
+++ b/core/tests/coretests/src/android/app/activity/LocalProvider.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests.activity;
+package android.app.activity;
 
 import android.content.UriMatcher;
 import android.content.*;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/activity/LocalReceiver.java b/core/tests/coretests/src/android/app/activity/LocalReceiver.java
similarity index 98%
rename from tests/AndroidTests/src/com/android/unit_tests/activity/LocalReceiver.java
rename to core/tests/coretests/src/android/app/activity/LocalReceiver.java
index 019c5c0..bfd543f 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/activity/LocalReceiver.java
+++ b/core/tests/coretests/src/android/app/activity/LocalReceiver.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests.activity;
+package android.app.activity;
 
 import android.content.BroadcastReceiver;
 import android.content.ComponentName;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/activity/LocalScreen.java b/core/tests/coretests/src/android/app/activity/LocalScreen.java
similarity index 95%
rename from tests/AndroidTests/src/com/android/unit_tests/activity/LocalScreen.java
rename to core/tests/coretests/src/android/app/activity/LocalScreen.java
index ad65fcc..f7c8c33 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/activity/LocalScreen.java
+++ b/core/tests/coretests/src/android/app/activity/LocalScreen.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests.activity;
+package android.app.activity;
 
 import java.util.Map;
 
diff --git a/tests/AndroidTests/src/com/android/unit_tests/activity/LocalService.java b/core/tests/coretests/src/android/app/activity/LocalService.java
similarity index 98%
rename from tests/AndroidTests/src/com/android/unit_tests/activity/LocalService.java
rename to core/tests/coretests/src/android/app/activity/LocalService.java
index d79205d..c31ca4b 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/activity/LocalService.java
+++ b/core/tests/coretests/src/android/app/activity/LocalService.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests.activity;
+package android.app.activity;
 
 import android.app.Service;
 import android.content.Intent;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/activity/MetaDataTest.java b/core/tests/coretests/src/android/app/activity/MetaDataTest.java
similarity index 86%
rename from tests/AndroidTests/src/com/android/unit_tests/activity/MetaDataTest.java
rename to core/tests/coretests/src/android/app/activity/MetaDataTest.java
index 4660e29..214bc91 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/activity/MetaDataTest.java
+++ b/core/tests/coretests/src/android/app/activity/MetaDataTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests.activity;
+package android.app.activity;
 
 import android.content.ComponentName;
 import android.content.pm.ActivityInfo;
@@ -29,7 +29,7 @@
 import android.test.AndroidTestCase;
 import android.test.suitebuilder.annotation.MediumTest;
 import android.test.suitebuilder.annotation.SmallTest;
-import com.android.unit_tests.R;
+import com.android.frameworks.coretests.R;
 import org.xmlpull.v1.XmlPullParser;
 import org.xmlpull.v1.XmlPullParserException;
 
@@ -47,18 +47,18 @@
         Bundle md = ci.metaData;
         assertNotNull("No meta data found", md);
 
-        assertEquals("foo", md.getString("com.android.unit_tests.string"));
-        assertTrue(md.getBoolean("com.android.unit_tests.boolean"));
-        assertEquals(100, md.getInt("com.android.unit_tests.integer"));
-        assertEquals(0xff000000, md.getInt("com.android.unit_tests.color"));
+        assertEquals("foo", md.getString("com.android.frameworks.coretests.string"));
+        assertTrue(md.getBoolean("com.android.frameworks.coretests.boolean"));
+        assertEquals(100, md.getInt("com.android.frameworks.coretests.integer"));
+        assertEquals(0xff000000, md.getInt("com.android.frameworks.coretests.color"));
 
         assertEquals((double) 1001,
-                Math.floor(md.getFloat("com.android.unit_tests.float") * 10 + .5));
+                Math.floor(md.getFloat("com.android.frameworks.coretests.float") * 10 + .5));
 
-        assertEquals(R.xml.metadata, md.getInt("com.android.unit_tests.reference"));
+        assertEquals(R.xml.metadata, md.getInt("com.android.frameworks.coretests.reference"));
 
         XmlResourceParser xml = ci.loadXmlMetaData(mContext.getPackageManager(),
-                "com.android.unit_tests.reference");
+                "com.android.frameworks.coretests.reference");
         assertNotNull(xml);
 
         int type;
@@ -138,12 +138,12 @@
     public void testProviderWithData() throws Exception {
         ComponentName cn = new ComponentName(mContext, LocalProvider.class);
         ProviderInfo pi = mContext.getPackageManager().resolveContentProvider(
-                "com.android.unit_tests.LocalProvider",
+                "com.android.frameworks.coretests.LocalProvider",
                 PackageManager.GET_META_DATA);
         checkMetaData(cn, pi);
 
         pi = mContext.getPackageManager().resolveContentProvider(
-                "com.android.unit_tests.LocalProvider", 0);
+                "com.android.frameworks.coretests.LocalProvider", 0);
 
         assertNull("Meta data returned when not requested", pi.metaData);
     }
@@ -151,7 +151,7 @@
     @SmallTest
     public void testPermissionWithData() throws Exception {
         ComponentName cn = new ComponentName("foo",
-                "com.android.unit_tests.permission.TEST_GRANTED");
+                "com.android.frameworks.coretests.permission.TEST_GRANTED");
         PermissionInfo pi = mContext.getPackageManager().getPermissionInfo(
                 cn.getClassName(), PackageManager.GET_META_DATA);
         checkMetaData(cn, pi);
diff --git a/tests/AndroidTests/src/com/android/unit_tests/activity/RemoteDeniedReceiver.java b/core/tests/coretests/src/android/app/activity/RemoteDeniedReceiver.java
similarity index 96%
rename from tests/AndroidTests/src/com/android/unit_tests/activity/RemoteDeniedReceiver.java
rename to core/tests/coretests/src/android/app/activity/RemoteDeniedReceiver.java
index 7656580..7c89346 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/activity/RemoteDeniedReceiver.java
+++ b/core/tests/coretests/src/android/app/activity/RemoteDeniedReceiver.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests.activity;
+package android.app.activity;
 
 import android.content.BroadcastReceiver;
 import android.content.Context;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/activity/RemoteGrantedReceiver.java b/core/tests/coretests/src/android/app/activity/RemoteGrantedReceiver.java
similarity index 96%
rename from tests/AndroidTests/src/com/android/unit_tests/activity/RemoteGrantedReceiver.java
rename to core/tests/coretests/src/android/app/activity/RemoteGrantedReceiver.java
index 034aa1d..0eca8f7 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/activity/RemoteGrantedReceiver.java
+++ b/core/tests/coretests/src/android/app/activity/RemoteGrantedReceiver.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests.activity;
+package android.app.activity;
 
 import android.content.BroadcastReceiver;
 import android.content.Context;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/activity/RemoteReceiver.java b/core/tests/coretests/src/android/app/activity/RemoteReceiver.java
similarity index 97%
rename from tests/AndroidTests/src/com/android/unit_tests/activity/RemoteReceiver.java
rename to core/tests/coretests/src/android/app/activity/RemoteReceiver.java
index 818bffe..9608fc4 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/activity/RemoteReceiver.java
+++ b/core/tests/coretests/src/android/app/activity/RemoteReceiver.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests.activity;
+package android.app.activity;
 
 import android.content.Context;
 import android.content.Intent;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/activity/RemoteSubActivityScreen.java b/core/tests/coretests/src/android/app/activity/RemoteSubActivityScreen.java
similarity index 97%
rename from tests/AndroidTests/src/com/android/unit_tests/activity/RemoteSubActivityScreen.java
rename to core/tests/coretests/src/android/app/activity/RemoteSubActivityScreen.java
index e750ed6..e969d10 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/activity/RemoteSubActivityScreen.java
+++ b/core/tests/coretests/src/android/app/activity/RemoteSubActivityScreen.java
@@ -15,7 +15,7 @@
 ** limitations under the License.
 */
 
-package com.android.unit_tests.activity;
+package android.app.activity;
 
 import android.content.Intent;
 import android.os.Bundle;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/activity/ResultReceiver.java b/core/tests/coretests/src/android/app/activity/ResultReceiver.java
similarity index 96%
rename from tests/AndroidTests/src/com/android/unit_tests/activity/ResultReceiver.java
rename to core/tests/coretests/src/android/app/activity/ResultReceiver.java
index 4b5d468..f7daf2c 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/activity/ResultReceiver.java
+++ b/core/tests/coretests/src/android/app/activity/ResultReceiver.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests.activity;
+package android.app.activity;
 
 import android.content.Context;
 import android.content.Intent;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/SearchableActivity.java b/core/tests/coretests/src/android/app/activity/SearchableActivity.java
similarity index 95%
rename from tests/AndroidTests/src/com/android/unit_tests/SearchableActivity.java
rename to core/tests/coretests/src/android/app/activity/SearchableActivity.java
index 53f40e9..e238572 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/SearchableActivity.java
+++ b/core/tests/coretests/src/android/app/activity/SearchableActivity.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests;
+package android.app.activity;
 
 import android.app.Activity;
 import android.os.Bundle;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/activity/ServiceTest.java b/core/tests/coretests/src/android/app/activity/ServiceTest.java
similarity index 98%
rename from tests/AndroidTests/src/com/android/unit_tests/activity/ServiceTest.java
rename to core/tests/coretests/src/android/app/activity/ServiceTest.java
index 95f6e36..d3ae415 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/activity/ServiceTest.java
+++ b/core/tests/coretests/src/android/app/activity/ServiceTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests.activity;
+package android.app.activity;
 
 import android.content.ComponentName;
 import android.content.Context;
@@ -38,11 +38,11 @@
 public class ServiceTest extends ActivityTestsBase {
 
     public static final String SERVICE_LOCAL =
-            "com.android.unit_tests.activity.SERVICE_LOCAL";
+            "com.android.frameworks.coretests.activity.SERVICE_LOCAL";
     public static final String SERVICE_LOCAL_GRANTED =
-            "com.android.unit_tests.activity.SERVICE_LOCAL_GRANTED";
+            "com.android.frameworks.coretests.activity.SERVICE_LOCAL_GRANTED";
     public static final String SERVICE_LOCAL_DENIED =
-            "com.android.unit_tests.activity.SERVICE_LOCAL_DENIED";
+            "com.android.frameworks.coretests.activity.SERVICE_LOCAL_DENIED";
 
     public static final String REPORT_OBJ_NAME = "report";
 
diff --git a/tests/AndroidTests/src/com/android/unit_tests/activity/SetTimeZonePermissionsTest.java b/core/tests/coretests/src/android/app/activity/SetTimeZonePermissionsTest.java
similarity index 97%
rename from tests/AndroidTests/src/com/android/unit_tests/activity/SetTimeZonePermissionsTest.java
rename to core/tests/coretests/src/android/app/activity/SetTimeZonePermissionsTest.java
index 1fa7579..41b9547 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/activity/SetTimeZonePermissionsTest.java
+++ b/core/tests/coretests/src/android/app/activity/SetTimeZonePermissionsTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests.activity;
+package android.app.activity;
 
 import android.app.AlarmManager;
 import android.content.Context;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/activity/SubActivityScreen.java b/core/tests/coretests/src/android/app/activity/SubActivityScreen.java
similarity index 98%
rename from tests/AndroidTests/src/com/android/unit_tests/activity/SubActivityScreen.java
rename to core/tests/coretests/src/android/app/activity/SubActivityScreen.java
index 914b909..919c591 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/activity/SubActivityScreen.java
+++ b/core/tests/coretests/src/android/app/activity/SubActivityScreen.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests.activity;
+package android.app.activity;
 
 import android.app.Activity;
 import android.app.PendingIntent;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/activity/SubActivityTest.java b/core/tests/coretests/src/android/app/activity/SubActivityTest.java
similarity index 98%
rename from tests/AndroidTests/src/com/android/unit_tests/activity/SubActivityTest.java
rename to core/tests/coretests/src/android/app/activity/SubActivityTest.java
index ee02c98..35dde8a 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/activity/SubActivityTest.java
+++ b/core/tests/coretests/src/android/app/activity/SubActivityTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests.activity;
+package android.app.activity;
 
 import android.test.suitebuilder.annotation.Suppress;
 import android.content.ComponentName;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/activity/TestedActivity.java b/core/tests/coretests/src/android/app/activity/TestedActivity.java
similarity index 97%
rename from tests/AndroidTests/src/com/android/unit_tests/activity/TestedActivity.java
rename to core/tests/coretests/src/android/app/activity/TestedActivity.java
index ec407a9..3a1c15f 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/activity/TestedActivity.java
+++ b/core/tests/coretests/src/android/app/activity/TestedActivity.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests.activity;
+package android.app.activity;
 
 import android.app.Activity;
 import android.os.Handler;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/activity/TestedScreen.java b/core/tests/coretests/src/android/app/activity/TestedScreen.java
similarity index 98%
rename from tests/AndroidTests/src/com/android/unit_tests/activity/TestedScreen.java
rename to core/tests/coretests/src/android/app/activity/TestedScreen.java
index 4085aa9..1682d1a 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/activity/TestedScreen.java
+++ b/core/tests/coretests/src/android/app/activity/TestedScreen.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests.activity;
+package android.app.activity;
 
 import android.app.Activity;
 import android.content.Intent;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/content/AssetTest.java b/core/tests/coretests/src/android/content/AssetTest.java
similarity index 97%
rename from tests/AndroidTests/src/com/android/unit_tests/content/AssetTest.java
rename to core/tests/coretests/src/android/content/AssetTest.java
index f38d062..b66574c 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/content/AssetTest.java
+++ b/core/tests/coretests/src/android/content/AssetTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests.content;
+package android.content;
 
 import android.content.res.AssetManager;
 import android.test.AndroidTestCase;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/ContentQueryMapTest.java b/core/tests/coretests/src/android/content/ContentQueryMapTest.java
similarity index 98%
rename from tests/AndroidTests/src/com/android/unit_tests/ContentQueryMapTest.java
rename to core/tests/coretests/src/android/content/ContentQueryMapTest.java
index 241a1bf..d1b8c24 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/ContentQueryMapTest.java
+++ b/core/tests/coretests/src/android/content/ContentQueryMapTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests;
+package android.content;
 
 import android.content.ContentQueryMap;
 import android.content.ContentResolver;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/content/ContentTests.java b/core/tests/coretests/src/android/content/ContentTests.java
similarity index 95%
rename from tests/AndroidTests/src/com/android/unit_tests/content/ContentTests.java
rename to core/tests/coretests/src/android/content/ContentTests.java
index 636660f..a1299e3 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/content/ContentTests.java
+++ b/core/tests/coretests/src/android/content/ContentTests.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests.content;
+package android.content;
 
 import junit.framework.TestSuite;
 
diff --git a/tests/AndroidTests/src/com/android/unit_tests/content/MemoryFileProvider.java b/core/tests/coretests/src/android/content/MemoryFileProvider.java
similarity index 99%
rename from tests/AndroidTests/src/com/android/unit_tests/content/MemoryFileProvider.java
rename to core/tests/coretests/src/android/content/MemoryFileProvider.java
index b31ce18..c4bc767 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/content/MemoryFileProvider.java
+++ b/core/tests/coretests/src/android/content/MemoryFileProvider.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests.content;
+package android.content;
 
 import android.content.ContentProvider;
 import android.content.ContentValues;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/content/MemoryFileProviderTest.java b/core/tests/coretests/src/android/content/MemoryFileProviderTest.java
similarity index 89%
rename from tests/AndroidTests/src/com/android/unit_tests/content/MemoryFileProviderTest.java
rename to core/tests/coretests/src/android/content/MemoryFileProviderTest.java
index f88a9da..6708af6 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/content/MemoryFileProviderTest.java
+++ b/core/tests/coretests/src/android/content/MemoryFileProviderTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests.content;
+package android.content;
 
 import android.content.ContentResolver;
 import android.net.Uri;
@@ -34,7 +34,7 @@
     @MediumTest
     public void testRead() throws Exception {
         ContentResolver resolver = getContext().getContentResolver();
-        Uri uri = Uri.parse("content://com.android.unit_tests.content.MemoryFileProvider/data/1/blob");
+        Uri uri = Uri.parse("content://android.content.MemoryFileProvider/data/1/blob");
         byte[] buf = new byte[MemoryFileProvider.TEST_BLOB.length];
         InputStream in = resolver.openInputStream(uri);
         assertNotNull(in);
@@ -52,7 +52,7 @@
         // open enough file descriptors that we will crash something if we leak FDs
         // or address space
         for (int i = 0; i < 1025; i++) {
-            Uri uri = Uri.parse("content://com.android.unit_tests.content.MemoryFileProvider/huge");
+            Uri uri = Uri.parse("content://android.content.MemoryFileProvider/huge");
             InputStream in = resolver.openInputStream(uri);
             assertNotNull("Failed to open stream number " + i, in);
             assertEquals(1000000, in.skip(1000000));
@@ -68,7 +68,7 @@
     @MediumTest
     public void testFile() throws Exception {
         ContentResolver resolver = getContext().getContentResolver();
-        Uri uri = Uri.parse("content://com.android.unit_tests.content.MemoryFileProvider/file");
+        Uri uri = Uri.parse("content://android.content.MemoryFileProvider/file");
         byte[] buf = new byte[MemoryFileProvider.TEST_BLOB.length];
         InputStream in = resolver.openInputStream(uri);
         assertNotNull(in);
diff --git a/tests/AndroidTests/src/com/android/unit_tests/CursorWindowTest.java b/core/tests/coretests/src/android/database/CursorWindowTest.java
similarity index 98%
rename from tests/AndroidTests/src/com/android/unit_tests/CursorWindowTest.java
rename to core/tests/coretests/src/android/database/CursorWindowTest.java
index 0247355..07e75cb 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/CursorWindowTest.java
+++ b/core/tests/coretests/src/android/database/CursorWindowTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests;
+package android.database;
 
 import android.database.AbstractCursor;
 import android.test.suitebuilder.annotation.SmallTest;
diff --git a/core/tests/coretests/src/android/database/DatabaseCursorTest.java b/core/tests/coretests/src/android/database/DatabaseCursorTest.java
new file mode 100644
index 0000000..fad4349
--- /dev/null
+++ b/core/tests/coretests/src/android/database/DatabaseCursorTest.java
@@ -0,0 +1,630 @@
+/*
+ * Copyright (C) 2007 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.database;
+
+import android.content.ContentValues;
+import android.content.Context;
+import android.database.Cursor;
+import android.database.CursorIndexOutOfBoundsException;
+import android.database.DataSetObserver;
+import android.database.DatabaseUtils;
+import android.database.sqlite.SQLiteCursor;
+import android.database.sqlite.SQLiteCursorDriver;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteQuery;
+import android.database.sqlite.SQLiteStatement;
+import android.os.Looper;
+import android.test.AndroidTestCase;
+import android.test.PerformanceTestCase;
+import android.test.suitebuilder.annotation.LargeTest;
+import android.test.suitebuilder.annotation.MediumTest;
+import android.test.suitebuilder.annotation.SmallTest;
+import android.test.suitebuilder.annotation.Suppress;
+import android.util.Log;
+
+import java.io.File;
+import java.util.Arrays;
+import java.util.Random;
+
+import junit.framework.TestCase;
+
+public class DatabaseCursorTest extends AndroidTestCase implements PerformanceTestCase {
+
+    private static final String sString1 = "this is a test";
+    private static final String sString2 = "and yet another test";
+    private static final String sString3 = "this string is a little longer, but still a test";
+
+    private static final int CURRENT_DATABASE_VERSION = 42;
+    private SQLiteDatabase mDatabase;
+    private File mDatabaseFile;
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+	File dbDir = getContext().getDir("tests", Context.MODE_PRIVATE);
+	mDatabaseFile = new File(dbDir, "database_test.db");
+
+        if (mDatabaseFile.exists()) {
+            mDatabaseFile.delete();
+        }
+        mDatabase = SQLiteDatabase.openOrCreateDatabase(mDatabaseFile.getPath(), null);
+        assertNotNull(mDatabase);
+        mDatabase.setVersion(CURRENT_DATABASE_VERSION);
+    }
+
+    @Override
+    protected void tearDown() throws Exception {
+        mDatabase.close();
+        mDatabaseFile.delete();
+        super.tearDown();
+    }
+
+    public boolean isPerformanceOnly() {
+        return false;
+    }
+
+    // These test can only be run once.
+    public int startPerformance(Intermediates intermediates) {
+        return 1;
+    }
+
+    private void populateDefaultTable() {
+        mDatabase.execSQL("CREATE TABLE test (_id INTEGER PRIMARY KEY, data TEXT);");
+
+        mDatabase.execSQL("INSERT INTO test (data) VALUES ('" + sString1 + "');");
+        mDatabase.execSQL("INSERT INTO test (data) VALUES ('" + sString2 + "');");
+        mDatabase.execSQL("INSERT INTO test (data) VALUES ('" + sString3 + "');");
+    }
+
+    @MediumTest
+    public void testCursorUpdate() {
+        mDatabase.execSQL(
+            "CREATE TABLE test (_id INTEGER PRIMARY KEY, d INTEGER, s INTEGER);");
+        for(int i = 0; i < 20; i++) {
+            mDatabase.execSQL("INSERT INTO test (d, s) VALUES (" + i + 
+                "," + i%2 + ");");
+        }
+        
+        Cursor c = mDatabase.query("test", null, "s = 0", null, null, null, null);
+        int dCol = c.getColumnIndexOrThrow("d");
+        int sCol = c.getColumnIndexOrThrow("s");
+        
+        int count = 0;
+        while (c.moveToNext()) {
+            assertTrue(c.updateInt(dCol, 3));
+            count++;
+        }
+        assertEquals(10, count);
+        
+        assertTrue(c.commitUpdates());
+        
+        assertTrue(c.requery());
+        
+        count = 0;
+        while (c.moveToNext()) {
+            assertEquals(3, c.getInt(dCol));
+            count++;
+        }
+        
+        assertEquals(10, count);
+        assertTrue(c.moveToFirst());
+        assertTrue(c.deleteRow());
+        assertEquals(9, c.getCount());
+        c.close();
+    }
+    
+    @MediumTest
+    public void testBlob() throws Exception {
+        // create table
+        mDatabase.execSQL(
+            "CREATE TABLE test (_id INTEGER PRIMARY KEY, s TEXT, d REAL, l INTEGER, b BLOB);");
+        // insert blob
+        Object[] args = new Object[4];
+        
+        byte[] blob = new byte[1000];
+        byte value = 99;
+        Arrays.fill(blob, value);        
+        args[3] = blob;
+        
+        String s = new String("text");        
+        args[0] = s;
+        Double d = 99.9;
+        args[1] = d;
+        Long l = (long)1000;
+        args[2] = l;
+        
+        String sql = "INSERT INTO test (s, d, l, b) VALUES (?,?,?,?)";
+        mDatabase.execSQL(sql, args);
+        // use cursor to access blob
+        Cursor c = mDatabase.query("test", null, null, null, null, null, null);        
+        c.moveToNext();
+        ContentValues cv = new ContentValues();
+        DatabaseUtils.cursorRowToContentValues(c, cv);
+        
+        int bCol = c.getColumnIndexOrThrow("b");
+        int sCol = c.getColumnIndexOrThrow("s");
+        int dCol = c.getColumnIndexOrThrow("d");
+        int lCol = c.getColumnIndexOrThrow("l");
+        byte[] cBlob =  c.getBlob(bCol);
+        assertTrue(Arrays.equals(blob, cBlob));
+        assertEquals(s, c.getString(sCol));
+        assertEquals((double)d, c.getDouble(dCol));
+        assertEquals((long)l, c.getLong(lCol));
+        
+        // new byte[]
+        byte[] newblob = new byte[1000];
+        value = 98;
+        Arrays.fill(blob, value);        
+        
+        c.updateBlob(bCol, newblob);
+        cBlob =  c.getBlob(bCol);
+        assertTrue(Arrays.equals(newblob, cBlob));
+        
+        // commit
+        assertTrue(c.commitUpdates());
+        assertTrue(c.requery());
+        c.moveToNext();
+        cBlob =  c.getBlob(bCol);
+        assertTrue(Arrays.equals(newblob, cBlob));        
+        c.close();
+    }
+    
+    @MediumTest
+    public void testRealColumns() throws Exception {
+        mDatabase.execSQL("CREATE TABLE test (_id INTEGER PRIMARY KEY, data REAL);");
+        ContentValues values = new ContentValues();
+        values.put("data", 42.11);
+        long id = mDatabase.insert("test", "data", values);
+        assertTrue(id > 0);
+        Cursor c = mDatabase.rawQuery("SELECT data FROM test", null);
+        assertNotNull(c);
+        assertTrue(c.moveToFirst());
+        assertEquals(42.11, c.getDouble(0));
+        c.close();
+    }
+
+    @MediumTest
+    public void testCursor1() throws Exception {
+        populateDefaultTable();
+
+        Cursor c = mDatabase.query("test", null, null, null, null, null, null);
+
+        int dataColumn = c.getColumnIndexOrThrow("data");
+
+        // The cursor should ignore text before the last period when looking for a column. (This
+        // is a temporary hack in all implementations of getColumnIndex.)
+        int dataColumn2 = c.getColumnIndexOrThrow("junk.data");
+        assertEquals(dataColumn, dataColumn2);
+
+        assertSame(3, c.getCount());
+
+        assertTrue(c.isBeforeFirst());
+
+        try {
+            c.getInt(0);
+            fail("CursorIndexOutOfBoundsException expected");
+        } catch (CursorIndexOutOfBoundsException ex) {
+            // expected
+        }
+
+        c.moveToNext();
+        assertEquals(1, c.getInt(0));
+
+        String s = c.getString(dataColumn);
+        assertEquals(sString1, s);
+
+        c.moveToNext();
+        s = c.getString(dataColumn);
+        assertEquals(sString2, s);
+
+        c.moveToNext();
+        s = c.getString(dataColumn);
+        assertEquals(sString3, s);
+
+        c.moveToPosition(-1);
+        c.moveToNext();
+        s = c.getString(dataColumn);
+        assertEquals(sString1, s);
+
+        c.moveToPosition(2);
+        s = c.getString(dataColumn);
+        assertEquals(sString3, s);
+
+        int i;
+
+        for (c.moveToFirst(), i = 0; !c.isAfterLast(); c.moveToNext(), i++) {
+            c.getInt(0);
+        }
+
+        assertEquals(3, i);
+
+        try {
+            c.getInt(0);
+            fail("CursorIndexOutOfBoundsException expected");
+        } catch (CursorIndexOutOfBoundsException ex) {
+            // expected
+        }
+        c.close();
+    }
+
+    @MediumTest
+    public void testCursor2() throws Exception {
+        populateDefaultTable();
+
+        Cursor c = mDatabase.query("test", null, "_id > 1000", null, null, null, null);
+        assertEquals(0, c.getCount());
+        assertTrue(c.isBeforeFirst());
+
+        try {
+            c.getInt(0);
+            fail("CursorIndexOutOfBoundsException expected");
+        } catch (CursorIndexOutOfBoundsException ex) {
+            // expected
+        }
+
+        int i;
+        for (c.moveToFirst(), i = 0; !c.isAfterLast(); c.moveToNext(), i++) {
+            c.getInt(0);
+        }
+        assertEquals(0, i);
+        try {
+            c.getInt(0);
+            fail("CursorIndexOutOfBoundsException expected");
+        } catch (CursorIndexOutOfBoundsException ex) {
+            // expected
+        }
+        c.close();
+    }
+
+    @MediumTest
+    public void testLargeField() throws Exception {
+        mDatabase.execSQL("CREATE TABLE test (_id INTEGER PRIMARY KEY, data TEXT);");
+
+        StringBuilder sql = new StringBuilder(2100);
+        sql.append("INSERT INTO test (data) VALUES ('");
+        Random random = new Random(System.currentTimeMillis());
+        StringBuilder randomString = new StringBuilder(1979);
+        for (int i = 0; i < 1979; i++) {
+            randomString.append((random.nextInt() & 0xf) % 10);
+        }
+        sql.append(randomString);
+        sql.append("');");
+        mDatabase.execSQL(sql.toString());
+
+        Cursor c = mDatabase.query("test", null, null, null, null, null, null);
+        assertNotNull(c);
+        assertEquals(1, c.getCount());
+
+        assertTrue(c.moveToFirst());
+        assertEquals(0, c.getPosition());
+        String largeString = c.getString(c.getColumnIndexOrThrow("data"));
+        assertNotNull(largeString);
+        assertEquals(randomString.toString(), largeString);
+        c.close();
+    }
+
+    class TestObserver extends DataSetObserver {
+        int total;
+        SQLiteCursor c;
+        boolean quit = false;
+        public TestObserver(int total_, SQLiteCursor cursor) {
+            c = cursor;
+            total = total_;
+        }
+        
+        @Override
+        public void onChanged() {
+            int count = c.getCount();
+            if (total == count) {
+                int i = 0;
+                while (c.moveToNext()) {
+                    assertEquals(i, c.getInt(1));
+                    i++;
+                }
+                assertEquals(count, i);
+                quit = true;
+                Looper.myLooper().quit();
+            }
+        }
+
+        @Override
+        public void onInvalidated() {
+        }
+    }
+    
+    //@Large
+    @Suppress
+    public void testLoadingThreadDelayRegisterData() throws Exception {
+        mDatabase.execSQL("CREATE TABLE test (_id INTEGER PRIMARY KEY, data INT);");
+        
+        final int count = 505; 
+        String sql = "INSERT INTO test (data) VALUES (?);";
+        SQLiteStatement s = mDatabase.compileStatement(sql);
+        for (int i = 0; i < count; i++) {
+            s.bindLong(1, i);
+            s.execute();
+        }
+
+        int maxRead = 500;
+        int initialRead = 5;
+        SQLiteCursor c = (SQLiteCursor)mDatabase.rawQuery("select * from test;",
+                null, initialRead, maxRead);
+        
+        TestObserver observer = new TestObserver(count, c);
+        c.getCount();
+        c.registerDataSetObserver(observer);
+        if (!observer.quit) {
+            Looper.loop();
+        }
+        c.close();
+    }
+    
+    @LargeTest
+    public void testLoadingThread() throws Exception {
+        mDatabase.execSQL("CREATE TABLE test (_id INTEGER PRIMARY KEY, data INT);");
+        
+        final int count = 50000; 
+        String sql = "INSERT INTO test (data) VALUES (?);";
+        SQLiteStatement s = mDatabase.compileStatement(sql);
+        for (int i = 0; i < count; i++) {
+            s.bindLong(1, i);
+            s.execute();
+        }
+
+        int maxRead = 1000;
+        int initialRead = 5;
+        SQLiteCursor c = (SQLiteCursor)mDatabase.rawQuery("select * from test;",
+                null, initialRead, maxRead);
+        
+        TestObserver observer = new TestObserver(count, c);
+        c.registerDataSetObserver(observer);
+        c.getCount();
+        
+        Looper.loop();
+        c.close();
+    } 
+    
+    @LargeTest
+    public void testLoadingThreadClose() throws Exception {
+        mDatabase.execSQL("CREATE TABLE test (_id INTEGER PRIMARY KEY, data INT);");
+        
+        final int count = 1000; 
+        String sql = "INSERT INTO test (data) VALUES (?);";
+        SQLiteStatement s = mDatabase.compileStatement(sql);
+        for (int i = 0; i < count; i++) {
+            s.bindLong(1, i);
+            s.execute();
+        }
+
+        int maxRead = 11;
+        int initialRead = 5;
+        SQLiteCursor c = (SQLiteCursor)mDatabase.rawQuery("select * from test;",
+                null, initialRead, maxRead);
+        
+        TestObserver observer = new TestObserver(count, c);
+        c.registerDataSetObserver(observer);
+        c.getCount();       
+        c.close();
+    }
+    
+    @LargeTest
+    public void testLoadingThreadDeactivate() throws Exception {
+        mDatabase.execSQL("CREATE TABLE test (_id INTEGER PRIMARY KEY, data INT);");
+        
+        final int count = 1000; 
+        String sql = "INSERT INTO test (data) VALUES (?);";
+        SQLiteStatement s = mDatabase.compileStatement(sql);
+        for (int i = 0; i < count; i++) {
+            s.bindLong(1, i);
+            s.execute();
+        }
+
+        int maxRead = 11;
+        int initialRead = 5;
+        SQLiteCursor c = (SQLiteCursor)mDatabase.rawQuery("select * from test;",
+                null, initialRead, maxRead);
+        
+        TestObserver observer = new TestObserver(count, c);
+        c.registerDataSetObserver(observer);
+        c.getCount();       
+        c.deactivate();
+        c.close();
+    }
+    
+    @LargeTest
+    public void testManyRowsLong() throws Exception {
+        mDatabase.execSQL("CREATE TABLE test (_id INTEGER PRIMARY KEY, data INT);");
+        
+        final int count = 36799; 
+        for (int i = 0; i < count; i++) {
+            mDatabase.execSQL("INSERT INTO test (data) VALUES (" + i + ");");
+        }
+
+        Cursor c = mDatabase.query("test", new String[]{"data"}, null, null, null, null, null);
+        assertNotNull(c);
+
+        int i = 0;
+        while (c.moveToNext()) {
+            assertEquals(i, c.getInt(0));
+            i++;
+        }
+        assertEquals(count, i);
+        assertEquals(count, c.getCount());
+
+        Log.d("testManyRows", "count " + Integer.toString(i));
+        c.close();
+    }
+
+    @LargeTest
+    public void testManyRowsTxt() throws Exception {
+        mDatabase.execSQL("CREATE TABLE test (_id INTEGER PRIMARY KEY, data TEXT);");
+        StringBuilder sql = new StringBuilder(2100);
+        sql.append("INSERT INTO test (data) VALUES ('");
+        Random random = new Random(System.currentTimeMillis());
+        StringBuilder randomString = new StringBuilder(1979);
+        for (int i = 0; i < 1979; i++) {
+            randomString.append((random.nextInt() & 0xf) % 10);
+        }
+        sql.append(randomString);
+        sql.append("');");
+
+        // if cursor window size changed, adjust this value too  
+        final int count = 600; // more than two fillWindow needed
+        for (int i = 0; i < count; i++) {
+            mDatabase.execSQL(sql.toString());
+        }
+
+        Cursor c = mDatabase.query("test", new String[]{"data"}, null, null, null, null, null);
+        assertNotNull(c);
+
+        int i = 0;
+        while (c.moveToNext()) {
+            assertEquals(randomString.toString(), c.getString(0));
+            i++;
+        }
+        assertEquals(count, i);
+        assertEquals(count, c.getCount());
+        c.close();
+    }
+    
+    @LargeTest
+    public void testManyRowsTxtLong() throws Exception {
+        mDatabase.execSQL("CREATE TABLE test (_id INTEGER PRIMARY KEY, txt TEXT, data INT);");
+        
+        Random random = new Random(System.currentTimeMillis());
+        StringBuilder randomString = new StringBuilder(1979);
+        for (int i = 0; i < 1979; i++) {
+            randomString.append((random.nextInt() & 0xf) % 10);
+        }
+
+        // if cursor window size changed, adjust this value too  
+        final int count = 600;
+        for (int i = 0; i < count; i++) {
+            StringBuilder sql = new StringBuilder(2100);
+            sql.append("INSERT INTO test (txt, data) VALUES ('");
+            sql.append(randomString);
+            sql.append("','");
+            sql.append(i);
+            sql.append("');");
+            mDatabase.execSQL(sql.toString());
+        }
+
+        Cursor c = mDatabase.query("test", new String[]{"txt", "data"}, null, null, null, null, null);
+        assertNotNull(c);
+
+        int i = 0;
+        while (c.moveToNext()) {
+            assertEquals(randomString.toString(), c.getString(0));
+            assertEquals(i, c.getInt(1));
+            i++;
+        }
+        assertEquals(count, i);
+        assertEquals(count, c.getCount());
+        c.close();
+    }
+   
+    @MediumTest
+    public void testRequery() throws Exception {
+        populateDefaultTable();
+
+        Cursor c = mDatabase.rawQuery("SELECT * FROM test", null);
+        assertNotNull(c);
+        assertEquals(3, c.getCount());
+        c.deactivate();
+        c.requery();
+        assertEquals(3, c.getCount());
+        c.close();
+    }
+
+    @MediumTest
+    public void testRequeryWithSelection() throws Exception {
+        populateDefaultTable();
+
+        Cursor c = mDatabase.rawQuery("SELECT data FROM test WHERE data = '" + sString1 + "'",
+                null);
+        assertNotNull(c);
+        assertEquals(1, c.getCount());
+        assertTrue(c.moveToFirst());
+        assertEquals(sString1, c.getString(0));
+        c.deactivate();
+        c.requery();
+        assertEquals(1, c.getCount());
+        assertTrue(c.moveToFirst());
+        assertEquals(sString1, c.getString(0));
+        c.close();
+    }
+
+    @MediumTest
+    public void testRequeryWithSelectionArgs() throws Exception {
+        populateDefaultTable();
+
+        Cursor c = mDatabase.rawQuery("SELECT data FROM test WHERE data = ?",
+                new String[]{sString1});
+        assertNotNull(c);
+        assertEquals(1, c.getCount());
+        assertTrue(c.moveToFirst());
+        assertEquals(sString1, c.getString(0));
+        c.deactivate();
+        c.requery();
+        assertEquals(1, c.getCount());
+        assertTrue(c.moveToFirst());
+        assertEquals(sString1, c.getString(0));
+        c.close();
+    }
+
+    @MediumTest
+    public void testRequeryWithAlteredSelectionArgs() throws Exception {
+        /**
+         * Test the ability of a subclass of SQLiteCursor to change its query arguments.
+         */
+        populateDefaultTable();
+
+        SQLiteDatabase.CursorFactory factory = new SQLiteDatabase.CursorFactory() {
+            public Cursor newCursor(
+                    SQLiteDatabase db, SQLiteCursorDriver masterQuery, String editTable,
+                    SQLiteQuery query) {
+                return new SQLiteCursor(db, masterQuery, editTable, query) {
+                    @Override
+                    public boolean requery() {
+                        setSelectionArguments(new String[]{"2"});
+                        return super.requery();
+                    }
+                };
+            }
+        };
+        Cursor c = mDatabase.rawQueryWithFactory(
+                factory, "SELECT data FROM test WHERE _id <= ?", new String[]{"1"},
+                null);
+        assertNotNull(c);
+        assertEquals(1, c.getCount());
+        assertTrue(c.moveToFirst());
+        assertEquals(sString1, c.getString(0));
+
+        // Our hacked requery() changes the query arguments in the cursor.
+        c.requery();
+
+        assertEquals(2, c.getCount());
+        assertTrue(c.moveToFirst());
+        assertEquals(sString1, c.getString(0));
+        assertTrue(c.moveToNext());
+        assertEquals(sString2, c.getString(0));
+
+        // Test that setting query args on a deactivated cursor also works.
+        c.deactivate();
+        c.requery();
+    }
+}
diff --git a/tests/AndroidTests/src/com/android/unit_tests/DatabaseGeneralTest.java b/core/tests/coretests/src/android/database/DatabaseGeneralTest.java
similarity index 99%
rename from tests/AndroidTests/src/com/android/unit_tests/DatabaseGeneralTest.java
rename to core/tests/coretests/src/android/database/DatabaseGeneralTest.java
index d7dd601..ca650e0 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/DatabaseGeneralTest.java
+++ b/core/tests/coretests/src/android/database/DatabaseGeneralTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests;
+package android.database;
 
 import android.content.ContentValues;
 import android.content.Context;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/DatabaseLocaleTest.java b/core/tests/coretests/src/android/database/DatabaseLocaleTest.java
similarity index 98%
rename from tests/AndroidTests/src/com/android/unit_tests/DatabaseLocaleTest.java
rename to core/tests/coretests/src/android/database/DatabaseLocaleTest.java
index f07ca7c..b3282941 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/DatabaseLocaleTest.java
+++ b/core/tests/coretests/src/android/database/DatabaseLocaleTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests;
+package android.database;
 
 import android.database.sqlite.SQLiteDatabase;
 import android.database.Cursor;
@@ -126,4 +126,4 @@
             if (cursor != null) cursor.close();
         }
     }
-}
\ No newline at end of file
+}
diff --git a/tests/AndroidTests/src/com/android/unit_tests/DatabaseLockTest.java b/core/tests/coretests/src/android/database/DatabaseLockTest.java
similarity index 98%
rename from tests/AndroidTests/src/com/android/unit_tests/DatabaseLockTest.java
rename to core/tests/coretests/src/android/database/DatabaseLockTest.java
index 326f873..f7a9f8a 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/DatabaseLockTest.java
+++ b/core/tests/coretests/src/android/database/DatabaseLockTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests;
+package android.database;
 
 import android.app.Activity;
 import android.content.Context;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/DatabasePerformanceTests.java b/core/tests/coretests/src/android/database/DatabasePerformanceTests.java
similarity index 99%
rename from tests/AndroidTests/src/com/android/unit_tests/DatabasePerformanceTests.java
rename to core/tests/coretests/src/android/database/DatabasePerformanceTests.java
index 68ce5e1..b8ebcc4 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/DatabasePerformanceTests.java
+++ b/core/tests/coretests/src/android/database/DatabasePerformanceTests.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests;
+package android.database;
 
 import junit.framework.Assert;
 
diff --git a/core/tests/coretests/src/android/database/DatabaseStatementTest.java b/core/tests/coretests/src/android/database/DatabaseStatementTest.java
new file mode 100644
index 0000000..71dc3ae
--- /dev/null
+++ b/core/tests/coretests/src/android/database/DatabaseStatementTest.java
@@ -0,0 +1,324 @@
+/*
+ * Copyright (C) 2007 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.database;
+
+import android.content.Context;
+import android.database.Cursor;
+import android.database.sqlite.SQLiteConstraintException;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteDoneException;
+import android.database.sqlite.SQLiteStatement;
+import android.test.AndroidTestCase;
+import android.test.PerformanceTestCase;
+import android.test.suitebuilder.annotation.MediumTest;
+import android.test.suitebuilder.annotation.SmallTest;
+import junit.framework.TestCase;
+
+import java.io.File;
+
+public class DatabaseStatementTest extends AndroidTestCase implements PerformanceTestCase {
+
+    private static final String sString1 = "this is a test";
+    private static final String sString2 = "and yet another test";
+    private static final String sString3 = "this string is a little longer, but still a test";
+    
+    private static final int CURRENT_DATABASE_VERSION = 42;
+    private SQLiteDatabase mDatabase;
+    private File mDatabaseFile;
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+	File dbDir = getContext().getDir("tests", Context.MODE_PRIVATE);
+	mDatabaseFile = new File(dbDir, "database_test.db");
+
+        if (mDatabaseFile.exists()) {
+            mDatabaseFile.delete();
+        }
+        mDatabase = SQLiteDatabase.openOrCreateDatabase(mDatabaseFile.getPath(), null);
+        assertNotNull(mDatabase);
+        mDatabase.setVersion(CURRENT_DATABASE_VERSION);
+    }
+
+    @Override
+    protected void tearDown() throws Exception {
+        mDatabase.close();
+        mDatabaseFile.delete();
+        super.tearDown();
+    }
+
+    public boolean isPerformanceOnly() {
+        return false;
+    }
+
+    // These test can only be run once.
+    public int startPerformance(Intermediates intermediates) {
+        return 1;
+    }
+
+    private void populateDefaultTable() {
+        mDatabase.execSQL("CREATE TABLE test (_id INTEGER PRIMARY KEY, data TEXT);");
+
+        mDatabase.execSQL("INSERT INTO test (data) VALUES ('" + sString1 + "');");
+        mDatabase.execSQL("INSERT INTO test (data) VALUES ('" + sString2 + "');");
+        mDatabase.execSQL("INSERT INTO test (data) VALUES ('" + sString3 + "');");
+    }
+
+    @MediumTest
+    public void testExecuteStatement() throws Exception {
+        populateDefaultTable();
+        SQLiteStatement statement = mDatabase.compileStatement("DELETE FROM test");
+        statement.execute();
+
+        Cursor c = mDatabase.query("test", null, null, null, null, null, null);
+        assertEquals(0, c.getCount());
+        c.deactivate();
+        statement.close();
+    }
+
+    @MediumTest
+    public void testSimpleQuery() throws Exception {
+        mDatabase.execSQL("CREATE TABLE test (num INTEGER NOT NULL, str TEXT NOT NULL);");
+        mDatabase.execSQL("INSERT INTO test VALUES (1234, 'hello');");
+        SQLiteStatement statement1 =
+                mDatabase.compileStatement("SELECT num FROM test WHERE str = ?");
+        SQLiteStatement statement2 =
+                mDatabase.compileStatement("SELECT str FROM test WHERE num = ?");
+
+        try {
+            statement1.bindString(1, "hello");
+            long value = statement1.simpleQueryForLong();
+            assertEquals(1234, value);
+
+            statement1.bindString(1, "world");
+            statement1.simpleQueryForLong();
+            fail("shouldn't get here");
+        } catch (SQLiteDoneException e) {
+            // expected
+        }
+
+        try {
+            statement2.bindLong(1, 1234);
+            String value = statement1.simpleQueryForString();
+            assertEquals("hello", value);
+
+            statement2.bindLong(1, 5678);
+            statement1.simpleQueryForString();
+            fail("shouldn't get here");
+        } catch (SQLiteDoneException e) {
+            // expected
+        }
+
+        statement1.close();
+        statement2.close();
+    }
+
+    @MediumTest
+    public void testStatementLongBinding() throws Exception {
+        mDatabase.execSQL("CREATE TABLE test (num INTEGER);");
+        SQLiteStatement statement = mDatabase.compileStatement("INSERT INTO test (num) VALUES (?)");
+
+        for (int i = 0; i < 10; i++) {
+            statement.bindLong(1, i);
+            statement.execute();
+        }
+        statement.close();
+
+        Cursor c = mDatabase.query("test", null, null, null, null, null, null);
+        int numCol = c.getColumnIndexOrThrow("num");
+        c.moveToFirst();
+        for (long i = 0; i < 10; i++) {
+            long num = c.getLong(numCol);
+            assertEquals(i, num);
+            c.moveToNext();
+        }
+        c.close();
+    }
+
+    @MediumTest
+    public void testStatementStringBinding() throws Exception {
+        mDatabase.execSQL("CREATE TABLE test (num TEXT);");
+        SQLiteStatement statement = mDatabase.compileStatement("INSERT INTO test (num) VALUES (?)");
+
+        for (long i = 0; i < 10; i++) {
+            statement.bindString(1, Long.toHexString(i));
+            statement.execute();
+        }
+        statement.close();
+
+        Cursor c = mDatabase.query("test", null, null, null, null, null, null);
+        int numCol = c.getColumnIndexOrThrow("num");
+        c.moveToFirst();
+        for (long i = 0; i < 10; i++) {
+            String num = c.getString(numCol);
+            assertEquals(Long.toHexString(i), num);
+            c.moveToNext();
+        }
+        c.close();
+    }
+
+    @MediumTest
+    public void testStatementClearBindings() throws Exception {
+        mDatabase.execSQL("CREATE TABLE test (num INTEGER);");
+        SQLiteStatement statement = mDatabase.compileStatement("INSERT INTO test (num) VALUES (?)");
+
+        for (long i = 0; i < 10; i++) {
+            statement.bindLong(1, i);
+            statement.clearBindings();
+            statement.execute();
+        }
+        statement.close();
+
+        Cursor c = mDatabase.query("test", null, null, null, null, null, "ROWID");
+        int numCol = c.getColumnIndexOrThrow("num");
+        assertTrue(c.moveToFirst());
+        for (long i = 0; i < 10; i++) {
+            assertTrue(c.isNull(numCol));
+            c.moveToNext();
+        }
+        c.close();
+    }
+
+    @MediumTest
+    public void testSimpleStringBinding() throws Exception {
+        mDatabase.execSQL("CREATE TABLE test (num TEXT, value TEXT);");
+        String statement = "INSERT INTO test (num, value) VALUES (?,?)";
+
+        String[] args = new String[2];
+        for (int i = 0; i < 2; i++) {
+            args[i] = Integer.toHexString(i);
+        }
+
+        mDatabase.execSQL(statement, args);
+
+        Cursor c = mDatabase.query("test", null, null, null, null, null, null);
+        int numCol = c.getColumnIndexOrThrow("num");
+        int valCol = c.getColumnIndexOrThrow("value");
+        c.moveToFirst();
+        String num = c.getString(numCol);
+        assertEquals(Integer.toHexString(0), num);
+
+        String val = c.getString(valCol);
+        assertEquals(Integer.toHexString(1), val);
+        c.close();
+    }
+
+    @MediumTest
+    public void testStatementMultipleBindings() throws Exception {
+        mDatabase.execSQL("CREATE TABLE test (num INTEGER, str TEXT);");
+        SQLiteStatement statement =
+                mDatabase.compileStatement("INSERT INTO test (num, str) VALUES (?, ?)");
+
+        for (long i = 0; i < 10; i++) {
+            statement.bindLong(1, i);
+            statement.bindString(2, Long.toHexString(i));
+            statement.execute();
+        }
+        statement.close();
+
+        Cursor c = mDatabase.query("test", null, null, null, null, null, "ROWID");
+        int numCol = c.getColumnIndexOrThrow("num");
+        int strCol = c.getColumnIndexOrThrow("str");
+        assertTrue(c.moveToFirst());
+        for (long i = 0; i < 10; i++) {
+            long num = c.getLong(numCol);
+            String str = c.getString(strCol);
+            assertEquals(i, num);
+            assertEquals(Long.toHexString(i), str);
+            c.moveToNext();
+        }
+        c.close();
+    }
+
+    private static class StatementTestThread extends Thread {
+        private SQLiteDatabase mDatabase;
+        private SQLiteStatement mStatement;
+
+        public StatementTestThread(SQLiteDatabase db, SQLiteStatement statement) {
+            super();
+            mDatabase = db;
+            mStatement = statement;
+        }
+
+        @Override
+        public void run() {
+            mDatabase.beginTransaction();
+            for (long i = 0; i < 10; i++) {
+                mStatement.bindLong(1, i);
+                mStatement.bindString(2, Long.toHexString(i));
+                mStatement.execute();
+            }
+            mDatabase.setTransactionSuccessful();
+            mDatabase.endTransaction();
+
+            Cursor c = mDatabase.query("test", null, null, null, null, null, "ROWID");
+            int numCol = c.getColumnIndexOrThrow("num");
+            int strCol = c.getColumnIndexOrThrow("str");
+            assertTrue(c.moveToFirst());
+            for (long i = 0; i < 10; i++) {
+                long num = c.getLong(numCol);
+                String str = c.getString(strCol);
+                assertEquals(i, num);
+                assertEquals(Long.toHexString(i), str);
+                c.moveToNext();
+            }
+            c.close();
+        }
+    }
+
+    @MediumTest
+    public void testStatementMultiThreaded() throws Exception {
+        mDatabase.execSQL("CREATE TABLE test (num INTEGER, str TEXT);");
+        SQLiteStatement statement =
+                mDatabase.compileStatement("INSERT INTO test (num, str) VALUES (?, ?)");
+
+        StatementTestThread thread = new StatementTestThread(mDatabase, statement);
+        thread.start();
+        try {
+            thread.join();
+        } finally {
+            statement.close();
+        }
+    }
+
+    @MediumTest
+    public void testStatementConstraint() throws Exception {
+        mDatabase.execSQL("CREATE TABLE test (num INTEGER NOT NULL);");
+        SQLiteStatement statement = mDatabase.compileStatement("INSERT INTO test (num) VALUES (?)");
+
+        // Try to insert NULL, which violates the constraint
+        try {
+            statement.clearBindings();
+            statement.execute();
+            fail("expected exception not thrown");
+        } catch (SQLiteConstraintException e) {
+            // expected
+        }
+
+        // Make sure the statement can still be used
+        statement.bindLong(1, 1);
+        statement.execute();
+        statement.close();
+
+        Cursor c = mDatabase.query("test", null, null, null, null, null, null);
+        int numCol = c.getColumnIndexOrThrow("num");
+        c.moveToFirst();
+        long num = c.getLong(numCol);
+        assertEquals(1, num);
+        c.close();
+    }
+}
diff --git a/tests/AndroidTests/src/com/android/unit_tests/DatabaseStressTest.java b/core/tests/coretests/src/android/database/DatabaseStressTest.java
similarity index 98%
rename from tests/AndroidTests/src/com/android/unit_tests/DatabaseStressTest.java
rename to core/tests/coretests/src/android/database/DatabaseStressTest.java
index b110125..30e46e7 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/DatabaseStressTest.java
+++ b/core/tests/coretests/src/android/database/DatabaseStressTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests;
+package android.database;
 
 import android.content.Context;
 import android.database.sqlite.*;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/LocalSocketTest.java b/core/tests/coretests/src/android/net/LocalSocketTest.java
similarity index 95%
rename from tests/AndroidTests/src/com/android/unit_tests/LocalSocketTest.java
rename to core/tests/coretests/src/android/net/LocalSocketTest.java
index 0b8ec74..1349844 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/LocalSocketTest.java
+++ b/core/tests/coretests/src/android/net/LocalSocketTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests;
+package android.net;
 
 import android.net.Credentials;
 import android.net.LocalServerSocket;
@@ -35,11 +35,11 @@
         LocalSocket ls;
         LocalSocket ls1;
 
-        ss = new LocalServerSocket("com.android.unit_tests.LocalSocketTest");
+        ss = new LocalServerSocket("android.net.LocalSocketTest");
 
         ls = new LocalSocket();
 
-        ls.connect(new LocalSocketAddress("com.android.unit_tests.LocalSocketTest"));
+        ls.connect(new LocalSocketAddress("android.net.LocalSocketTest"));
 
         ls1 = ss.accept();
 
diff --git a/tests/AndroidTests/src/com/android/unit_tests/SSLTest.java b/core/tests/coretests/src/android/net/SSLTest.java
similarity index 97%
rename from tests/AndroidTests/src/com/android/unit_tests/SSLTest.java
rename to core/tests/coretests/src/android/net/SSLTest.java
index 9481180..810ed0d 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/SSLTest.java
+++ b/core/tests/coretests/src/android/net/SSLTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests;
+package android.net;
 
 import android.net.SSLCertificateSocketFactory;
 import android.test.suitebuilder.annotation.Suppress;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/UriMatcherTest.java b/core/tests/coretests/src/android/net/UriMatcherTest.java
similarity index 98%
rename from tests/AndroidTests/src/com/android/unit_tests/UriMatcherTest.java
rename to core/tests/coretests/src/android/net/UriMatcherTest.java
index ce3ea75..2872144 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/UriMatcherTest.java
+++ b/core/tests/coretests/src/android/net/UriMatcherTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests;
+package android.net;
 
 import android.content.UriMatcher;
 import android.net.Uri;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/UriTest.java b/core/tests/coretests/src/android/net/UriTest.java
similarity index 97%
rename from tests/AndroidTests/src/com/android/unit_tests/UriTest.java
rename to core/tests/coretests/src/android/net/UriTest.java
index 42066d9..ad71fcb 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/UriTest.java
+++ b/core/tests/coretests/src/android/net/UriTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests;
+package android.net;
 
 import android.net.Uri;
 import android.content.ContentUris;
@@ -52,15 +52,20 @@
 
     private void parcelAndUnparcel(Uri u) {
         Parcel p = Parcel.obtain();
-        Uri.writeToParcel(p, u);
-        p.setDataPosition(0);
-        assertEquals(u, Uri.CREATOR.createFromParcel(p));
+	try {
+		Uri.writeToParcel(p, u);
+		p.setDataPosition(0);
+		assertEquals(u, Uri.CREATOR.createFromParcel(p));
 
-        p.setDataPosition(0);
-        u = u.buildUpon().build();        
-        Uri.writeToParcel(p, u);
-        p.setDataPosition(0);
-        assertEquals(u, Uri.CREATOR.createFromParcel(p));
+		p.setDataPosition(0);
+		u = u.buildUpon().build();        
+		Uri.writeToParcel(p, u);
+		p.setDataPosition(0);
+		assertEquals(u, Uri.CREATOR.createFromParcel(p));
+	}
+	finally {
+		p.recycle();
+	}
     }
 
     @SmallTest
diff --git a/tests/AndroidTests/src/com/android/unit_tests/os/AidlTest.aidl b/core/tests/coretests/src/android/os/AidlTest.aidl
similarity index 94%
rename from tests/AndroidTests/src/com/android/unit_tests/os/AidlTest.aidl
rename to core/tests/coretests/src/android/os/AidlTest.aidl
index 62c75a5..6004f4b 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/os/AidlTest.aidl
+++ b/core/tests/coretests/src/android/os/AidlTest.aidl
@@ -15,6 +15,6 @@
 ** limitations under the License.
 */
 
-package com.android.unit_tests.os;
+package android.os;
 
 parcelable AidlTest.TestParcelable;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/os/AidlTest.java b/core/tests/coretests/src/android/os/AidlTest.java
similarity index 99%
rename from tests/AndroidTests/src/com/android/unit_tests/os/AidlTest.java
rename to core/tests/coretests/src/android/os/AidlTest.java
index 52e666d..bf11d56 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/os/AidlTest.java
+++ b/core/tests/coretests/src/android/os/AidlTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests.os;
+package android.os;
 
 import android.os.IInterface;
 import android.os.Parcel;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/os/BroadcasterTest.java b/core/tests/coretests/src/android/os/BroadcasterTest.java
similarity index 98%
rename from tests/AndroidTests/src/com/android/unit_tests/os/BroadcasterTest.java
rename to core/tests/coretests/src/android/os/BroadcasterTest.java
index 0df1653..551ea8d 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/os/BroadcasterTest.java
+++ b/core/tests/coretests/src/android/os/BroadcasterTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests.os;
+package android.os;
 
 import android.os.Broadcaster;
 import android.os.Handler;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/BuildTest.java b/core/tests/coretests/src/android/os/BuildTest.java
similarity index 98%
rename from tests/AndroidTests/src/com/android/unit_tests/BuildTest.java
rename to core/tests/coretests/src/android/os/BuildTest.java
index 88fa3cc..3758627 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/BuildTest.java
+++ b/core/tests/coretests/src/android/os/BuildTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests;
+package android.os;
 
 import android.os.Build;
 import android.test.suitebuilder.annotation.SmallTest;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/os/FileObserverTest.java b/core/tests/coretests/src/android/os/FileObserverTest.java
similarity index 98%
rename from tests/AndroidTests/src/com/android/unit_tests/os/FileObserverTest.java
rename to core/tests/coretests/src/android/os/FileObserverTest.java
index a9be5bd..ca4e0d6 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/os/FileObserverTest.java
+++ b/core/tests/coretests/src/android/os/FileObserverTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests.os;
+package android.os;
 
 import com.google.android.collect.Lists;
 import com.google.android.collect.Maps;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/os/FileUtilsTest.java b/core/tests/coretests/src/android/os/FileUtilsTest.java
similarity index 98%
rename from tests/AndroidTests/src/com/android/unit_tests/os/FileUtilsTest.java
rename to core/tests/coretests/src/android/os/FileUtilsTest.java
index f2c9293..f12cbe1 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/os/FileUtilsTest.java
+++ b/core/tests/coretests/src/android/os/FileUtilsTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests.os;
+package android.os;
 
 import android.content.Context;
 import android.os.FileUtils;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/os/HandlerTester.java b/core/tests/coretests/src/android/os/HandlerTester.java
similarity index 97%
rename from tests/AndroidTests/src/com/android/unit_tests/os/HandlerTester.java
rename to core/tests/coretests/src/android/os/HandlerTester.java
index 303245f..a216a0b 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/os/HandlerTester.java
+++ b/core/tests/coretests/src/android/os/HandlerTester.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests.os;
+package android.os;
 
 import android.os.Handler;
 import android.os.Looper;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/os/HandlerThreadTest.java b/core/tests/coretests/src/android/os/HandlerThreadTest.java
similarity index 98%
rename from tests/AndroidTests/src/com/android/unit_tests/os/HandlerThreadTest.java
rename to core/tests/coretests/src/android/os/HandlerThreadTest.java
index f2025c6..9772aa4 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/os/HandlerThreadTest.java
+++ b/core/tests/coretests/src/android/os/HandlerThreadTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests.os;
+package android.os;
 
 import junit.framework.TestCase;
 import android.os.Handler;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/os/HierarchicalStateMachineTest.java b/core/tests/coretests/src/android/os/HierarchicalStateMachineTest.java
similarity index 99%
rename from tests/AndroidTests/src/com/android/unit_tests/os/HierarchicalStateMachineTest.java
rename to core/tests/coretests/src/android/os/HierarchicalStateMachineTest.java
index c5ca5a7..6e50c7e 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/os/HierarchicalStateMachineTest.java
+++ b/core/tests/coretests/src/android/os/HierarchicalStateMachineTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests.os;
+package android.os;
 
 import junit.framework.TestCase;
 
diff --git a/tests/AndroidTests/src/com/android/unit_tests/os/IAidlTest.aidl b/core/tests/coretests/src/android/os/IAidlTest.aidl
similarity index 95%
rename from tests/AndroidTests/src/com/android/unit_tests/os/IAidlTest.aidl
rename to core/tests/coretests/src/android/os/IAidlTest.aidl
index 94c39ff..a09022e 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/os/IAidlTest.aidl
+++ b/core/tests/coretests/src/android/os/IAidlTest.aidl
@@ -15,9 +15,9 @@
 ** limitations under the License.
 */
 
-package com.android.unit_tests.os;
+package android.os;
 
-import com.android.unit_tests.os.AidlTest;
+import android.os.AidlTest;
 
 interface IAidlTest {
     int intMethod(int a);
diff --git a/tests/AndroidTests/src/com/android/unit_tests/os/IdleHandlerTest.java b/core/tests/coretests/src/android/os/IdleHandlerTest.java
similarity index 98%
rename from tests/AndroidTests/src/com/android/unit_tests/os/IdleHandlerTest.java
rename to core/tests/coretests/src/android/os/IdleHandlerTest.java
index fc3b007..6c0a862 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/os/IdleHandlerTest.java
+++ b/core/tests/coretests/src/android/os/IdleHandlerTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests.os;
+package android.os;
 
 import android.os.Handler;
 import android.os.Looper;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/os/MemoryFileTest.java b/core/tests/coretests/src/android/os/MemoryFileTest.java
similarity index 99%
rename from tests/AndroidTests/src/com/android/unit_tests/os/MemoryFileTest.java
rename to core/tests/coretests/src/android/os/MemoryFileTest.java
index 18b3d63..411bdaa 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/os/MemoryFileTest.java
+++ b/core/tests/coretests/src/android/os/MemoryFileTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests.os;
+package android.os;
 
 import android.os.MemoryFile;
 import android.test.AndroidTestCase;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/os/MessageQueueTest.java b/core/tests/coretests/src/android/os/MessageQueueTest.java
similarity index 98%
rename from tests/AndroidTests/src/com/android/unit_tests/os/MessageQueueTest.java
rename to core/tests/coretests/src/android/os/MessageQueueTest.java
index 155a247..b7c2d1f 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/os/MessageQueueTest.java
+++ b/core/tests/coretests/src/android/os/MessageQueueTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests.os;
+package android.os;
 
 import android.os.Handler;
 import android.os.Message;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/os/MessengerService.java b/core/tests/coretests/src/android/os/MessengerService.java
similarity index 97%
rename from tests/AndroidTests/src/com/android/unit_tests/os/MessengerService.java
rename to core/tests/coretests/src/android/os/MessengerService.java
index 9228a43f..f15e134 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/os/MessengerService.java
+++ b/core/tests/coretests/src/android/os/MessengerService.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests.os;
+package android.os;
 
 import android.app.Service;
 import android.content.Intent;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/os/MessengerTest.java b/core/tests/coretests/src/android/os/MessengerTest.java
similarity index 98%
rename from tests/AndroidTests/src/com/android/unit_tests/os/MessengerTest.java
rename to core/tests/coretests/src/android/os/MessengerTest.java
index 2a3e204d..473ffe2 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/os/MessengerTest.java
+++ b/core/tests/coretests/src/android/os/MessengerTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests.os;
+package android.os;
 
 import android.content.ComponentName;
 import android.content.Context;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/os/OsTests.java b/core/tests/coretests/src/android/os/OsTests.java
similarity index 89%
rename from tests/AndroidTests/src/com/android/unit_tests/os/OsTests.java
rename to core/tests/coretests/src/android/os/OsTests.java
index bf02509..582bf1a 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/os/OsTests.java
+++ b/core/tests/coretests/src/android/os/OsTests.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests.os;
+package android.os;
 
 import com.google.android.collect.Lists;
 import junit.framework.TestSuite;
@@ -30,10 +30,8 @@
         suite.addTestSuite(BroadcasterTest.class);
         suite.addTestSuite(FileObserverTest.class);
         suite.addTestSuite(IdleHandlerTest.class);
-        suite.addTestSuite(MemoryFileTest.class);
         suite.addTestSuite(MessageQueueTest.class);
         suite.addTestSuite(MessengerTest.class);
-        suite.addTestSuite(PowerManagerTest.class);
         suite.addTestSuite(SystemPropertiesTest.class);
 
         return suite;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/os/PerformanceCollectorTest.java b/core/tests/coretests/src/android/os/PerformanceCollectorTest.java
similarity index 99%
rename from tests/AndroidTests/src/com/android/unit_tests/os/PerformanceCollectorTest.java
rename to core/tests/coretests/src/android/os/PerformanceCollectorTest.java
index 25b6e0e..a382239 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/os/PerformanceCollectorTest.java
+++ b/core/tests/coretests/src/android/os/PerformanceCollectorTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests.os;
+package android.os;
 
 import android.os.Bundle;
 import android.os.Parcelable;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/os/PowerManagerTest.java b/core/tests/coretests/src/android/os/PowerManagerTest.java
similarity index 98%
rename from tests/AndroidTests/src/com/android/unit_tests/os/PowerManagerTest.java
rename to core/tests/coretests/src/android/os/PowerManagerTest.java
index 2f1a7389..e089b3e 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/os/PowerManagerTest.java
+++ b/core/tests/coretests/src/android/os/PowerManagerTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests.os;
+package android.os;
 
 import android.content.Context;
 import android.os.PowerManager;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/os/SystemPropertiesTest.java b/core/tests/coretests/src/android/os/SystemPropertiesTest.java
similarity index 93%
rename from tests/AndroidTests/src/com/android/unit_tests/os/SystemPropertiesTest.java
rename to core/tests/coretests/src/android/os/SystemPropertiesTest.java
index df08bb9..25868ce 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/os/SystemPropertiesTest.java
+++ b/core/tests/coretests/src/android/os/SystemPropertiesTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests.os;
+package android.os;
 
 import static junit.framework.Assert.assertEquals;
 import junit.framework.TestCase;
@@ -23,7 +23,7 @@
 import android.test.suitebuilder.annotation.SmallTest;
 
 public class SystemPropertiesTest extends TestCase {
-    private static final String KEY = "com.android.unit_tests";
+    private static final String KEY = "com.android.frameworks.coretests";
     @SmallTest
     public void testProperties() throws Exception {
         if (false) {
diff --git a/tests/AndroidTests/src/com/android/unit_tests/os/TestHandlerThread.java b/core/tests/coretests/src/android/os/TestHandlerThread.java
similarity index 98%
rename from tests/AndroidTests/src/com/android/unit_tests/os/TestHandlerThread.java
rename to core/tests/coretests/src/android/os/TestHandlerThread.java
index dba8dde..7e84af3 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/os/TestHandlerThread.java
+++ b/core/tests/coretests/src/android/os/TestHandlerThread.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests.os;
+package android.os;
 
 import android.os.Handler;
 import android.os.Looper;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/TraceTest.java b/core/tests/coretests/src/android/os/TraceTest.java
similarity index 98%
rename from tests/AndroidTests/src/com/android/unit_tests/TraceTest.java
rename to core/tests/coretests/src/android/os/TraceTest.java
index 6705080..7a788ee 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/TraceTest.java
+++ b/core/tests/coretests/src/android/os/TraceTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests;
+package android.os;
 
 import android.os.Debug;
 import android.test.AndroidTestCase;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/vcard/ContentValuesBuilder.java b/core/tests/coretests/src/android/pim/vcard/ContentValuesBuilder.java
similarity index 97%
rename from tests/AndroidTests/src/com/android/unit_tests/vcard/ContentValuesBuilder.java
rename to core/tests/coretests/src/android/pim/vcard/ContentValuesBuilder.java
index e99e4cb..b3c0773 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/vcard/ContentValuesBuilder.java
+++ b/core/tests/coretests/src/android/pim/vcard/ContentValuesBuilder.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests.vcard;
+package android.pim.vcard;
 
 import android.content.ContentValues;
 
diff --git a/tests/AndroidTests/src/com/android/unit_tests/vcard/ContentValuesVerifier.java b/core/tests/coretests/src/android/pim/vcard/ContentValuesVerifier.java
similarity index 98%
rename from tests/AndroidTests/src/com/android/unit_tests/vcard/ContentValuesVerifier.java
rename to core/tests/coretests/src/android/pim/vcard/ContentValuesVerifier.java
index 3fa6ae6..b9e9875 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/vcard/ContentValuesVerifier.java
+++ b/core/tests/coretests/src/android/pim/vcard/ContentValuesVerifier.java
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package com.android.unit_tests.vcard;
+package android.pim.vcard;
 
 import android.pim.vcard.VCardConfig;
 import android.pim.vcard.VCardEntry;
@@ -98,4 +98,4 @@
             elem.verifyResolver();
         }
     }
-}
\ No newline at end of file
+}
diff --git a/tests/AndroidTests/src/com/android/unit_tests/vcard/ContentValuesVerifierElem.java b/core/tests/coretests/src/android/pim/vcard/ContentValuesVerifierElem.java
similarity index 98%
rename from tests/AndroidTests/src/com/android/unit_tests/vcard/ContentValuesVerifierElem.java
rename to core/tests/coretests/src/android/pim/vcard/ContentValuesVerifierElem.java
index f511217..2edbb36 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/vcard/ContentValuesVerifierElem.java
+++ b/core/tests/coretests/src/android/pim/vcard/ContentValuesVerifierElem.java
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package com.android.unit_tests.vcard;
+package android.pim.vcard;
 
 import android.content.ContentValues;
 import android.pim.vcard.VCardConfig;
@@ -92,4 +92,4 @@
     public void onParsingEnd() {
         mHandler.onEnd();
     }
-}
\ No newline at end of file
+}
diff --git a/tests/AndroidTests/src/com/android/unit_tests/vcard/ExportTestResolver.java b/core/tests/coretests/src/android/pim/vcard/ExportTestResolver.java
similarity index 99%
rename from tests/AndroidTests/src/com/android/unit_tests/vcard/ExportTestResolver.java
rename to core/tests/coretests/src/android/pim/vcard/ExportTestResolver.java
index a76dfd8..1b3cdcc 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/vcard/ExportTestResolver.java
+++ b/core/tests/coretests/src/android/pim/vcard/ExportTestResolver.java
@@ -13,7 +13,7 @@
  * License for the specific language governing permissions and limitations under
  * the License.
  */
-package com.android.unit_tests.vcard;
+package android.pim.vcard;
 
 import android.content.ContentResolver;
 import android.content.ContentValues;
@@ -210,4 +210,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/tests/AndroidTests/src/com/android/unit_tests/vcard/ImportTestResolver.java b/core/tests/coretests/src/android/pim/vcard/ImportTestResolver.java
similarity index 99%
rename from tests/AndroidTests/src/com/android/unit_tests/vcard/ImportTestResolver.java
rename to core/tests/coretests/src/android/pim/vcard/ImportTestResolver.java
index a1e9d75..019b9e3 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/vcard/ImportTestResolver.java
+++ b/core/tests/coretests/src/android/pim/vcard/ImportTestResolver.java
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package com.android.unit_tests.vcard;
+package android.pim.vcard;
 
 import android.content.ContentProviderOperation;
 import android.content.ContentProviderResult;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/vcard/LineVerifier.java b/core/tests/coretests/src/android/pim/vcard/LineVerifier.java
similarity index 97%
rename from tests/AndroidTests/src/com/android/unit_tests/vcard/LineVerifier.java
rename to core/tests/coretests/src/android/pim/vcard/LineVerifier.java
index 27b95a6..cef15fd 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/vcard/LineVerifier.java
+++ b/core/tests/coretests/src/android/pim/vcard/LineVerifier.java
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package com.android.unit_tests.vcard;
+package android.pim.vcard;
 
 import android.content.Context;
 import android.pim.vcard.VCardComposer;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/vcard/LineVerifierElem.java b/core/tests/coretests/src/android/pim/vcard/LineVerifierElem.java
similarity index 98%
rename from tests/AndroidTests/src/com/android/unit_tests/vcard/LineVerifierElem.java
rename to core/tests/coretests/src/android/pim/vcard/LineVerifierElem.java
index fc478afcf..b23b29b 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/vcard/LineVerifierElem.java
+++ b/core/tests/coretests/src/android/pim/vcard/LineVerifierElem.java
@@ -13,7 +13,7 @@
  * License for the specific language governing permissions and limitations under
  * the License.
  */
-package com.android.unit_tests.vcard;
+package android.pim.vcard;
 
 import android.pim.vcard.VCardConfig;
 import android.text.TextUtils;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/vcard/PropertyNode.java b/core/tests/coretests/src/android/pim/vcard/PropertyNode.java
similarity index 98%
rename from tests/AndroidTests/src/com/android/unit_tests/vcard/PropertyNode.java
rename to core/tests/coretests/src/android/pim/vcard/PropertyNode.java
index 14a789a..2c1f6d2 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/vcard/PropertyNode.java
+++ b/core/tests/coretests/src/android/pim/vcard/PropertyNode.java
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package com.android.unit_tests.vcard;
+package android.pim.vcard;
 
 import android.content.ContentValues;
 import android.pim.vcard.VCardEntry;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/vcard/PropertyNodesVerifier.java b/core/tests/coretests/src/android/pim/vcard/PropertyNodesVerifier.java
similarity index 99%
rename from tests/AndroidTests/src/com/android/unit_tests/vcard/PropertyNodesVerifier.java
rename to core/tests/coretests/src/android/pim/vcard/PropertyNodesVerifier.java
index 0afad49..cfdd074 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/vcard/PropertyNodesVerifier.java
+++ b/core/tests/coretests/src/android/pim/vcard/PropertyNodesVerifier.java
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package com.android.unit_tests.vcard;
+package android.pim.vcard;
 
 import android.content.ContentValues;
 import android.pim.vcard.VCardConfig;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/vcard/VCardExporterTests.java b/core/tests/coretests/src/android/pim/vcard/VCardExporterTests.java
similarity index 99%
rename from tests/AndroidTests/src/com/android/unit_tests/vcard/VCardExporterTests.java
rename to core/tests/coretests/src/android/pim/vcard/VCardExporterTests.java
index e744a92..004a197 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/vcard/VCardExporterTests.java
+++ b/core/tests/coretests/src/android/pim/vcard/VCardExporterTests.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests.vcard;
+package android.pim.vcard;
 
 import android.content.ContentValues;
 import android.pim.vcard.VCardConfig;
@@ -31,7 +31,7 @@
 import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
 import android.provider.ContactsContract.CommonDataKinds.Website;
 
-import com.android.unit_tests.vcard.PropertyNodesVerifierElem.TypeSet;
+import android.pim.vcard.PropertyNodesVerifierElem.TypeSet;
 
 import java.util.Arrays;
 
diff --git a/tests/AndroidTests/src/com/android/unit_tests/vcard/VCardImporterTests.java b/core/tests/coretests/src/android/pim/vcard/VCardImporterTests.java
similarity index 99%
rename from tests/AndroidTests/src/com/android/unit_tests/vcard/VCardImporterTests.java
rename to core/tests/coretests/src/android/pim/vcard/VCardImporterTests.java
index 45d3e3c..21f2254 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/vcard/VCardImporterTests.java
+++ b/core/tests/coretests/src/android/pim/vcard/VCardImporterTests.java
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package com.android.unit_tests.vcard;
+package android.pim.vcard;
 
 import android.content.ContentValues;
 import android.pim.vcard.VCardConfig;
@@ -28,8 +28,8 @@
 import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
 import android.provider.ContactsContract.CommonDataKinds.Website;
 
-import com.android.unit_tests.R;
-import com.android.unit_tests.vcard.PropertyNodesVerifierElem.TypeSet;
+import com.android.frameworks.coretests.R;
+import android.pim.vcard.PropertyNodesVerifierElem.TypeSet;
 
 import java.util.Arrays;
 
diff --git a/tests/AndroidTests/src/com/android/unit_tests/vcard/VCardJapanizationTests.java b/core/tests/coretests/src/android/pim/vcard/VCardJapanizationTests.java
similarity index 99%
rename from tests/AndroidTests/src/com/android/unit_tests/vcard/VCardJapanizationTests.java
rename to core/tests/coretests/src/android/pim/vcard/VCardJapanizationTests.java
index eea98c6..5b60342 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/vcard/VCardJapanizationTests.java
+++ b/core/tests/coretests/src/android/pim/vcard/VCardJapanizationTests.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests.vcard;
+package android.pim.vcard;
 
 import android.content.ContentValues;
 import android.pim.vcard.VCardConfig;
@@ -24,7 +24,7 @@
 import android.provider.ContactsContract.CommonDataKinds.StructuredName;
 import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
 
-import com.android.unit_tests.vcard.PropertyNodesVerifierElem.TypeSet;
+import android.pim.vcard.PropertyNodesVerifierElem.TypeSet;
 
 import java.util.Arrays;
 
diff --git a/tests/AndroidTests/src/com/android/unit_tests/vcard/VCardTestsBase.java b/core/tests/coretests/src/android/pim/vcard/VCardTestsBase.java
similarity index 98%
rename from tests/AndroidTests/src/com/android/unit_tests/vcard/VCardTestsBase.java
rename to core/tests/coretests/src/android/pim/vcard/VCardTestsBase.java
index 2382b42..0857e0c 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/vcard/VCardTestsBase.java
+++ b/core/tests/coretests/src/android/pim/vcard/VCardTestsBase.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests.vcard;
+package android.pim.vcard;
 
 import android.content.ContentProvider;
 import android.content.ContentProviderOperation;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/vcard/VCardUtilsTests.java b/core/tests/coretests/src/android/pim/vcard/VCardUtilsTests.java
similarity index 98%
rename from tests/AndroidTests/src/com/android/unit_tests/vcard/VCardUtilsTests.java
rename to core/tests/coretests/src/android/pim/vcard/VCardUtilsTests.java
index 9f173af..59299f9 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/vcard/VCardUtilsTests.java
+++ b/core/tests/coretests/src/android/pim/vcard/VCardUtilsTests.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests.vcard;
+package android.pim.vcard;
 
 import android.pim.vcard.VCardUtils;
 
diff --git a/tests/AndroidTests/src/com/android/unit_tests/vcard/VCardVerifier.java b/core/tests/coretests/src/android/pim/vcard/VCardVerifier.java
similarity index 99%
rename from tests/AndroidTests/src/com/android/unit_tests/vcard/VCardVerifier.java
rename to core/tests/coretests/src/android/pim/vcard/VCardVerifier.java
index 4b97750..bfc3158 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/vcard/VCardVerifier.java
+++ b/core/tests/coretests/src/android/pim/vcard/VCardVerifier.java
@@ -13,7 +13,7 @@
  * License for the specific language governing permissions and limitations under
  * the License.
  */
-package com.android.unit_tests.vcard;
+package android.pim.vcard;
 
 import android.content.ContentProvider;
 import android.content.ContentResolver;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/vcard/VNode.java b/core/tests/coretests/src/android/pim/vcard/VNode.java
similarity index 95%
rename from tests/AndroidTests/src/com/android/unit_tests/vcard/VNode.java
rename to core/tests/coretests/src/android/pim/vcard/VNode.java
index 7587320..79f10dc 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/vcard/VNode.java
+++ b/core/tests/coretests/src/android/pim/vcard/VNode.java
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package com.android.unit_tests.vcard;
+package android.pim.vcard;
 
 import java.util.ArrayList;
 
diff --git a/tests/AndroidTests/src/com/android/unit_tests/vcard/VNodeBuilder.java b/core/tests/coretests/src/android/pim/vcard/VNodeBuilder.java
similarity index 99%
rename from tests/AndroidTests/src/com/android/unit_tests/vcard/VNodeBuilder.java
rename to core/tests/coretests/src/android/pim/vcard/VNodeBuilder.java
index 971fe0d..0e6c325 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/vcard/VNodeBuilder.java
+++ b/core/tests/coretests/src/android/pim/vcard/VNodeBuilder.java
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package com.android.unit_tests.vcard;
+package android.pim.vcard;
 
 import android.content.ContentValues;
 import android.pim.vcard.VCardInterpreter;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/SettingsProviderTest.java b/core/tests/coretests/src/android/provider/SettingsProviderTest.java
similarity index 98%
rename from tests/AndroidTests/src/com/android/unit_tests/SettingsProviderTest.java
rename to core/tests/coretests/src/android/provider/SettingsProviderTest.java
index 7d828ec..f82d79a 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/SettingsProviderTest.java
+++ b/core/tests/coretests/src/android/provider/SettingsProviderTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests;
+package android.provider;
 
 import android.content.ContentResolver;
 import android.content.ContentUris;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/SmsProviderTest.java b/core/tests/coretests/src/android/provider/SmsProviderTest.java
similarity index 98%
rename from tests/AndroidTests/src/com/android/unit_tests/SmsProviderTest.java
rename to core/tests/coretests/src/android/provider/SmsProviderTest.java
index 0e2f0c5..c8ed728 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/SmsProviderTest.java
+++ b/core/tests/coretests/src/android/provider/SmsProviderTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests;
+package android.provider;
 
 import android.content.ContentResolver;
 import android.content.ContentValues;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/SpannedTest.java b/core/tests/coretests/src/android/text/SpannedTest.java
similarity index 99%
rename from tests/AndroidTests/src/com/android/unit_tests/SpannedTest.java
rename to core/tests/coretests/src/android/text/SpannedTest.java
index 9e3f483..1c22cf9 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/SpannedTest.java
+++ b/core/tests/coretests/src/android/text/SpannedTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests;
+package android.text;
 
 import android.graphics.Typeface;
 import android.os.Parcel;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/TextLayoutTest.java b/core/tests/coretests/src/android/text/TextLayoutTest.java
similarity index 97%
rename from tests/AndroidTests/src/com/android/unit_tests/TextLayoutTest.java
rename to core/tests/coretests/src/android/text/TextLayoutTest.java
index 8cfcd5e..6cf3000 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/TextLayoutTest.java
+++ b/core/tests/coretests/src/android/text/TextLayoutTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests;
+package android.text;
 
 import android.test.suitebuilder.annotation.SmallTest;
 import android.text.DynamicLayout;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/TextUtilsTest.java b/core/tests/coretests/src/android/text/TextUtilsTest.java
similarity index 99%
rename from tests/AndroidTests/src/com/android/unit_tests/TextUtilsTest.java
rename to core/tests/coretests/src/android/text/TextUtilsTest.java
index b194896..5b427be 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/TextUtilsTest.java
+++ b/core/tests/coretests/src/android/text/TextUtilsTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests;
+package android.text;
 
 import android.graphics.Paint;
 import android.test.suitebuilder.annotation.LargeTest;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/TimeTest.java b/core/tests/coretests/src/android/text/format/TimeTest.java
similarity index 99%
rename from tests/AndroidTests/src/com/android/unit_tests/TimeTest.java
rename to core/tests/coretests/src/android/text/format/TimeTest.java
index 724ef6a..489f58b 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/TimeTest.java
+++ b/core/tests/coretests/src/android/text/format/TimeTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests;
+package android.text.format;
 
 import android.test.suitebuilder.annotation.SmallTest;
 import android.test.suitebuilder.annotation.Suppress;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/LogTest.java b/core/tests/coretests/src/android/util/LogTest.java
similarity index 99%
rename from tests/AndroidTests/src/com/android/unit_tests/LogTest.java
rename to core/tests/coretests/src/android/util/LogTest.java
index 786c4b9..41947d7 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/LogTest.java
+++ b/core/tests/coretests/src/android/util/LogTest.java
@@ -1,4 +1,4 @@
-package com.android.unit_tests;
+package android.util;
 
 import junit.framework.Assert;
 import junit.framework.TestCase;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/TimeUtilsTest.java b/core/tests/coretests/src/android/util/TimeUtilsTest.java
similarity index 99%
rename from tests/AndroidTests/src/com/android/unit_tests/TimeUtilsTest.java
rename to core/tests/coretests/src/android/util/TimeUtilsTest.java
index 6ba64fd..65a6078 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/TimeUtilsTest.java
+++ b/core/tests/coretests/src/android/util/TimeUtilsTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests;
+package android.util;
 
 import junit.framework.TestCase;
 
diff --git a/tests/AndroidTests/src/com/android/unit_tests/CreateViewTest.java b/core/tests/coretests/src/android/view/CreateViewTest.java
similarity index 98%
rename from tests/AndroidTests/src/com/android/unit_tests/CreateViewTest.java
rename to core/tests/coretests/src/android/view/CreateViewTest.java
index 0c57ac4..16656f6 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/CreateViewTest.java
+++ b/core/tests/coretests/src/android/view/CreateViewTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests;
+package android.view;
 
 import android.content.Context;
 import android.test.AndroidTestCase;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/InflateTest.java b/core/tests/coretests/src/android/view/InflateTest.java
similarity index 97%
rename from tests/AndroidTests/src/com/android/unit_tests/InflateTest.java
rename to core/tests/coretests/src/android/view/InflateTest.java
index d7c9d60..cb4f8e2 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/InflateTest.java
+++ b/core/tests/coretests/src/android/view/InflateTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests;
+package android.view;
 
 import android.content.Context;
 import android.content.res.Resources;
@@ -24,6 +24,7 @@
 import android.util.AttributeSet;
 import android.view.LayoutInflater;
 import android.view.View;
+import com.android.frameworks.coretests.R;
 
 import java.util.Map;
 
diff --git a/tests/AndroidTests/src/com/android/unit_tests/MenuTest.java b/core/tests/coretests/src/android/view/MenuTest.java
similarity index 98%
rename from tests/AndroidTests/src/com/android/unit_tests/MenuTest.java
rename to core/tests/coretests/src/android/view/MenuTest.java
index c436726..e8a8438 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/MenuTest.java
+++ b/core/tests/coretests/src/android/view/MenuTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests;
+package android.view;
 
 import com.android.internal.view.menu.MenuBuilder;
 
@@ -29,6 +29,8 @@
 import android.view.MenuItem;
 import android.view.SubMenu;
 
+import com.android.frameworks.coretests.R;
+
 public class MenuTest extends AndroidTestCase {
 
     private MenuBuilder mMenu;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/WebkitTest.java b/core/tests/coretests/src/android/webkit/WebkitTest.java
similarity index 97%
rename from tests/AndroidTests/src/com/android/unit_tests/WebkitTest.java
rename to core/tests/coretests/src/android/webkit/WebkitTest.java
index 4a0519e..17b4088 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/WebkitTest.java
+++ b/core/tests/coretests/src/android/webkit/WebkitTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests;
+package android.webkit;
 
 import android.test.AndroidTestCase;
 import android.text.format.DateFormat;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/LabelView.java b/core/tests/coretests/src/android/widget/LabelView.java
similarity index 98%
rename from tests/AndroidTests/src/com/android/unit_tests/LabelView.java
rename to core/tests/coretests/src/android/widget/LabelView.java
index ac29776..4661c01 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/LabelView.java
+++ b/core/tests/coretests/src/android/widget/LabelView.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests;
+package android.widget;
 
 import android.content.Context;
 import android.graphics.Canvas;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/TextViewPerformanceTest.java b/core/tests/coretests/src/android/widget/TextViewPerformanceTest.java
similarity index 98%
rename from tests/AndroidTests/src/com/android/unit_tests/TextViewPerformanceTest.java
rename to core/tests/coretests/src/android/widget/TextViewPerformanceTest.java
index 6fa8f4f..c25df7c 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/TextViewPerformanceTest.java
+++ b/core/tests/coretests/src/android/widget/TextViewPerformanceTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests;
+package android.widget;
 
 import android.content.Context;
 import android.graphics.Bitmap;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/TextViewTest.java b/core/tests/coretests/src/android/widget/TextViewTest.java
similarity index 97%
rename from tests/AndroidTests/src/com/android/unit_tests/TextViewTest.java
rename to core/tests/coretests/src/android/widget/TextViewTest.java
index 8e49118..d8d145c 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/TextViewTest.java
+++ b/core/tests/coretests/src/android/widget/TextViewTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests;
+package android.widget;
 
 import com.google.android.collect.Lists;
 import com.google.android.collect.Maps;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/BitwiseStreamsTest.java b/core/tests/coretests/src/com/android/internal/util/BitwiseStreamsTest.java
similarity index 98%
rename from tests/AndroidTests/src/com/android/unit_tests/BitwiseStreamsTest.java
rename to core/tests/coretests/src/com/android/internal/util/BitwiseStreamsTest.java
index c5562b3..a304b68 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/BitwiseStreamsTest.java
+++ b/core/tests/coretests/src/com/android/internal/util/BitwiseStreamsTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests;
+package com.android.internal.util;
 
 import com.android.internal.util.BitwiseInputStream;
 import com.android.internal.util.BitwiseOutputStream;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/CharSequencesTest.java b/core/tests/coretests/src/com/android/internal/util/CharSequencesTest.java
similarity index 97%
rename from tests/AndroidTests/src/com/android/unit_tests/CharSequencesTest.java
rename to core/tests/coretests/src/com/android/internal/util/CharSequencesTest.java
index 092f309..55d186c 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/CharSequencesTest.java
+++ b/core/tests/coretests/src/com/android/internal/util/CharSequencesTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests;
+package com.android.internal.util;
 
 import com.android.internal.util.CharSequences;
 import static com.android.internal.util.CharSequences.forAsciiBytes;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/ParentalControlTest.java b/core/tests/coretests/src/com/google/android/net/ParentalControlTest.java
similarity index 97%
rename from tests/AndroidTests/src/com/android/unit_tests/ParentalControlTest.java
rename to core/tests/coretests/src/com/google/android/net/ParentalControlTest.java
index d4d2a82..d8ffeab 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/ParentalControlTest.java
+++ b/core/tests/coretests/src/com/google/android/net/ParentalControlTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests;
+package com.google.android.net;
 
 import com.google.android.net.ParentalControl;
 import com.google.android.net.ParentalControlState;
diff --git a/graphics/tests/graphicstests/Android.mk b/graphics/tests/graphicstests/Android.mk
new file mode 100644
index 0000000..1845395
--- /dev/null
+++ b/graphics/tests/graphicstests/Android.mk
@@ -0,0 +1,14 @@
+LOCAL_PATH:= $(call my-dir)
+include $(CLEAR_VARS)
+
+# We only want this apk build for tests.
+LOCAL_MODULE_TAGS := tests
+
+# Include all test java files.
+LOCAL_SRC_FILES := $(call all-java-files-under, src)
+
+LOCAL_JAVA_LIBRARIES := android.test.runner
+LOCAL_PACKAGE_NAME := FrameworksGraphicsTests
+
+include $(BUILD_PACKAGE)
+
diff --git a/graphics/tests/graphicstests/AndroidManifest.xml b/graphics/tests/graphicstests/AndroidManifest.xml
new file mode 100644
index 0000000..5fb5959
--- /dev/null
+++ b/graphics/tests/graphicstests/AndroidManifest.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2008 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+  
+          http://www.apache.org/licenses/LICENSE-2.0
+  
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+          package="com.android.frameworks.graphicstests">
+    <uses-permission android:name="android.permission.RECEIVE_SMS"/>
+    <uses-permission android:name="android.permission.INTERNET" />
+    <uses-permission android:name="android.permission.READ_CONTACTS" />
+    <uses-permission android:name="android.permission.WRITE_CONTACTS" />
+    <uses-permission android:name="android.permission.WAKE_LOCK" />
+    <uses-permission android:name="android.permission.CHANGE_CONFIGURATION" />
+    <uses-permission android:name="android.permission.WRITE_APN_SETTINGS" />
+    <uses-permission android:name="android.permission.BROADCAST_STICKY" />
+
+ 
+    <application>
+        <uses-library android:name="android.test.runner" />
+    </application>
+
+    <instrumentation
+    	android:name="android.test.InstrumentationTestRunner"
+    	android:targetPackage="com.android.frameworks.graphicstests"
+    	android:label="Frameworks Graphics Tests" />
+</manifest>
diff --git a/tests/AndroidTests/res/drawable/test128x96.png b/graphics/tests/graphicstests/res/drawable/test128x96.png
similarity index 100%
rename from tests/AndroidTests/res/drawable/test128x96.png
rename to graphics/tests/graphicstests/res/drawable/test128x96.png
Binary files differ
diff --git a/tests/AndroidTests/res/drawable/test16x12.png b/graphics/tests/graphicstests/res/drawable/test16x12.png
similarity index 100%
rename from tests/AndroidTests/res/drawable/test16x12.png
rename to graphics/tests/graphicstests/res/drawable/test16x12.png
Binary files differ
diff --git a/tests/AndroidTests/res/drawable/test256x192.png b/graphics/tests/graphicstests/res/drawable/test256x192.png
similarity index 100%
rename from tests/AndroidTests/res/drawable/test256x192.png
rename to graphics/tests/graphicstests/res/drawable/test256x192.png
Binary files differ
diff --git a/tests/AndroidTests/res/drawable/test320x240.png b/graphics/tests/graphicstests/res/drawable/test320x240.png
similarity index 100%
rename from tests/AndroidTests/res/drawable/test320x240.png
rename to graphics/tests/graphicstests/res/drawable/test320x240.png
Binary files differ
diff --git a/tests/AndroidTests/res/drawable/test32x24.png b/graphics/tests/graphicstests/res/drawable/test32x24.png
similarity index 100%
rename from tests/AndroidTests/res/drawable/test32x24.png
rename to graphics/tests/graphicstests/res/drawable/test32x24.png
Binary files differ
diff --git a/tests/AndroidTests/res/drawable/test64x48.png b/graphics/tests/graphicstests/res/drawable/test64x48.png
similarity index 100%
rename from tests/AndroidTests/res/drawable/test64x48.png
rename to graphics/tests/graphicstests/res/drawable/test64x48.png
Binary files differ
diff --git a/tests/AndroidTests/src/com/android/unit_tests/graphics/BitmapTest.java b/graphics/tests/graphicstests/src/android/graphics/BitmapTest.java
similarity index 99%
rename from tests/AndroidTests/src/com/android/unit_tests/graphics/BitmapTest.java
rename to graphics/tests/graphicstests/src/android/graphics/BitmapTest.java
index e8001e34..6734bb7 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/graphics/BitmapTest.java
+++ b/graphics/tests/graphicstests/src/android/graphics/BitmapTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests.graphics;
+package android.graphics;
 
 import android.graphics.Bitmap;
 import android.graphics.Color;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/GraphicsPerformanceTests.java b/graphics/tests/graphicstests/src/android/graphics/GraphicsPerformanceTests.java
similarity index 98%
rename from tests/AndroidTests/src/com/android/unit_tests/GraphicsPerformanceTests.java
rename to graphics/tests/graphicstests/src/android/graphics/GraphicsPerformanceTests.java
index a6c5869..f60ac7b 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/GraphicsPerformanceTests.java
+++ b/graphics/tests/graphicstests/src/android/graphics/GraphicsPerformanceTests.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests;
+package android.graphics;
 
 import junit.framework.Assert;
 import android.content.Context;
@@ -28,6 +28,8 @@
 import android.test.suitebuilder.annotation.Suppress;
 import android.util.Log;
 
+import com.android.frameworks.graphicstests.R;
+
 /**
  * Graphics Performance Tests
  * 
diff --git a/tests/AndroidTests/src/com/android/unit_tests/graphics/GraphicsTests.java b/graphics/tests/graphicstests/src/android/graphics/GraphicsTests.java
similarity index 95%
rename from tests/AndroidTests/src/com/android/unit_tests/graphics/GraphicsTests.java
rename to graphics/tests/graphicstests/src/android/graphics/GraphicsTests.java
index a8b6b9a..8d01ea7 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/graphics/GraphicsTests.java
+++ b/graphics/tests/graphicstests/src/android/graphics/GraphicsTests.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests.graphics;
+package android.graphics;
 
 import junit.framework.TestSuite;
 
diff --git a/tests/AndroidTests/src/com/android/unit_tests/ThreadBitmapTest.java b/graphics/tests/graphicstests/src/android/graphics/ThreadBitmapTest.java
similarity index 96%
rename from tests/AndroidTests/src/com/android/unit_tests/ThreadBitmapTest.java
rename to graphics/tests/graphicstests/src/android/graphics/ThreadBitmapTest.java
index 220bc99e..84bdc56 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/ThreadBitmapTest.java
+++ b/graphics/tests/graphicstests/src/android/graphics/ThreadBitmapTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests;
+package android.graphics;
 
 import junit.framework.TestCase;
 import android.graphics.Bitmap;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/graphics/TypefaceTest.java b/graphics/tests/graphicstests/src/android/graphics/TypefaceTest.java
similarity index 98%
rename from tests/AndroidTests/src/com/android/unit_tests/graphics/TypefaceTest.java
rename to graphics/tests/graphicstests/src/android/graphics/TypefaceTest.java
index 5c40e6f..334fddf 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/graphics/TypefaceTest.java
+++ b/graphics/tests/graphicstests/src/android/graphics/TypefaceTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests.graphics;
+package android.graphics;
 
 import android.graphics.Paint;
 import android.graphics.Typeface;
diff --git a/include/ui/CameraParameters.h b/include/ui/CameraParameters.h
index cae0676..2c29bfb 100644
--- a/include/ui/CameraParameters.h
+++ b/include/ui/CameraParameters.h
@@ -34,8 +34,10 @@
 
     void set(const char *key, const char *value);
     void set(const char *key, int value);
+    void setFloat(const char *key, float value);
     const char *get(const char *key) const;
     int getInt(const char *key) const;
+    float getFloat(const char *key) const;
 
     /* preview-size=176x144 */
     void setPreviewSize(int width, int height);
@@ -176,6 +178,16 @@
     // Supported focus modes.
     // Example value: "auto,macro,fixed". Read only.
     static const char KEY_SUPPORTED_FOCUS_MODES[];
+    // Focal length in millimeter.
+    // Example value: "4.31". Read only.
+    static const char KEY_FOCAL_LENGTH[];
+    // Horizontal angle of view in degrees.
+    // Example value: "54.8". Read only.
+    static const char KEY_HORIZONTAL_VIEW_ANGLE[];
+    // Vertical angle of view in degrees.
+    // Example value: "42.5". Read only.
+    static const char KEY_VERTICAL_VIEW_ANGLE[];
+
 
         // Values for white balance settings.
     static const char WHITE_BALANCE_AUTO[];
diff --git a/libs/ui/CameraParameters.cpp b/libs/ui/CameraParameters.cpp
index a94f6b9..c4958a0 100644
--- a/libs/ui/CameraParameters.cpp
+++ b/libs/ui/CameraParameters.cpp
@@ -56,6 +56,9 @@
 const char CameraParameters::KEY_SUPPORTED_FLASH_MODES[] = "flash-mode-values";
 const char CameraParameters::KEY_FOCUS_MODE[] = "focus-mode";
 const char CameraParameters::KEY_SUPPORTED_FOCUS_MODES[] = "focus-mode-values";
+const char CameraParameters::KEY_FOCAL_LENGTH[] = "focal-length";
+const char CameraParameters::KEY_HORIZONTAL_VIEW_ANGLE[] = "horizontal-view-angle";
+const char CameraParameters::KEY_VERTICAL_VIEW_ANGLE[] = "vertical-view-angle";
 
 // Values for white balance settings.
 const char CameraParameters::WHITE_BALANCE_AUTO[] = "auto";
@@ -206,6 +209,13 @@
     set(key, str);
 }
 
+void CameraParameters::setFloat(const char *key, float value)
+{
+    char str[16];  // 14 should be enough. We overestimate to be safe.
+    snprintf(str, sizeof(str), "%g", value);
+    set(key, str);
+}
+
 const char *CameraParameters::get(const char *key) const
 {
     String8 v = mMap.valueFor(String8(key));
@@ -222,6 +232,13 @@
     return strtol(v, 0, 0);
 }
 
+float CameraParameters::getFloat(const char *key) const
+{
+    const char *v = get(key);
+    if (v == 0) return -1;
+    return strtof(v, 0);
+}
+
 static int parse_size(const char *str, int &width, int &height)
 {
     // Find the width.
diff --git a/tests/AndroidTests/src/com/android/unit_tests/GeocoderTest.java b/location/tests/locationtests/src/android/location/GeocoderTest.java
similarity index 98%
rename from tests/AndroidTests/src/com/android/unit_tests/GeocoderTest.java
rename to location/tests/locationtests/src/android/location/GeocoderTest.java
index e28a7dc..8a13a24 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/GeocoderTest.java
+++ b/location/tests/locationtests/src/android/location/GeocoderTest.java
@@ -1,4 +1,4 @@
-package com.android.unit_tests;
+package android.location;
 
 /*
  * Copyright (C) 2007 The Android Open Source Project
diff --git a/tests/AndroidTests/src/com/android/unit_tests/LocationManagerTest.java b/location/tests/locationtests/src/android/location/LocationManagerTest.java
similarity index 98%
rename from tests/AndroidTests/src/com/android/unit_tests/LocationManagerTest.java
rename to location/tests/locationtests/src/android/location/LocationManagerTest.java
index 47c7522..0b8e61d 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/LocationManagerTest.java
+++ b/location/tests/locationtests/src/android/location/LocationManagerTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests;
+package android.location;
 
 import android.content.Context;
 import android.location.Criteria;
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
index 979955c..015b487 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
@@ -71,7 +71,7 @@
     // database gets upgraded properly. At a minimum, please confirm that 'upgradeVersion'
     // is properly propagated through your change.  Not doing so will result in a loss of user
     // settings.
-    private static final int DATABASE_VERSION = 47;
+    private static final int DATABASE_VERSION = 48;
 
     private Context mContext;
 
@@ -595,8 +595,23 @@
            upgradeVersion = 47;
        }
 
+        
+        if (upgradeVersion == 47) {
+            /*
+             * The password mode constants have changed again; reset back to no
+             * password.
+             */
+            db.beginTransaction();
+            try {
+                db.execSQL("DELETE FROM system WHERE name='lockscreen.password_type';");
+                db.setTransactionSuccessful();
+            } finally {
+                db.endTransaction();
+            }
+           upgradeVersion = 48;
+       }
 
-        if (upgradeVersion != currentVersion) {
+       if (upgradeVersion != currentVersion) {
             Log.w(TAG, "Got stuck trying to upgrade from version " + upgradeVersion
                     + ", must wipe the settings provider");
             db.execSQL("DROP TABLE IF EXISTS system");
diff --git a/sax/tests/saxtests/Android.mk b/sax/tests/saxtests/Android.mk
new file mode 100644
index 0000000..836711b
--- /dev/null
+++ b/sax/tests/saxtests/Android.mk
@@ -0,0 +1,14 @@
+LOCAL_PATH:= $(call my-dir)
+include $(CLEAR_VARS)
+
+# We only want this apk build for tests.
+LOCAL_MODULE_TAGS := tests
+
+# Include all test java files.
+LOCAL_SRC_FILES := $(call all-java-files-under, src)
+
+LOCAL_JAVA_LIBRARIES := android.test.runner
+LOCAL_PACKAGE_NAME := FrameworksSaxTests
+
+include $(BUILD_PACKAGE)
+
diff --git a/sax/tests/saxtests/AndroidManifest.xml b/sax/tests/saxtests/AndroidManifest.xml
new file mode 100644
index 0000000..c66844d
--- /dev/null
+++ b/sax/tests/saxtests/AndroidManifest.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2008 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+  
+          http://www.apache.org/licenses/LICENSE-2.0
+  
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+          package="com.android.frameworks.saxtests">
+    <uses-permission android:name="android.permission.RECEIVE_SMS"/>
+    <uses-permission android:name="android.permission.INTERNET" />
+    <uses-permission android:name="android.permission.READ_CONTACTS" />
+    <uses-permission android:name="android.permission.WRITE_CONTACTS" />
+    <uses-permission android:name="android.permission.WAKE_LOCK" />
+    <uses-permission android:name="android.permission.CHANGE_CONFIGURATION" />
+    <uses-permission android:name="android.permission.WRITE_APN_SETTINGS" />
+    <uses-permission android:name="android.permission.BROADCAST_STICKY" />
+    
+    <application>
+        <uses-library android:name="android.test.runner" />
+    </application>
+
+    <instrumentation
+    	android:name="android.test.InstrumentationTestRunner"
+    	android:targetPackage="com.android.frameworks.saxtests"
+    	android:label="Frameworks Sax Tests" />
+</manifest>
diff --git a/tests/AndroidTests/res/raw/youtube.xml b/sax/tests/saxtests/res/raw/youtube.xml
similarity index 100%
rename from tests/AndroidTests/res/raw/youtube.xml
rename to sax/tests/saxtests/res/raw/youtube.xml
diff --git a/tests/AndroidTests/src/com/android/unit_tests/ExpatPerformanceTest.java b/sax/tests/saxtests/src/android/sax/ExpatPerformanceTest.java
similarity index 98%
rename from tests/AndroidTests/src/com/android/unit_tests/ExpatPerformanceTest.java
rename to sax/tests/saxtests/src/android/sax/ExpatPerformanceTest.java
index 0d51047..892c490 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/ExpatPerformanceTest.java
+++ b/sax/tests/saxtests/src/android/sax/ExpatPerformanceTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests;
+package android.sax;
 
 import android.test.AndroidTestCase;
 import android.test.suitebuilder.annotation.LargeTest;
@@ -31,6 +31,8 @@
 import java.io.IOException;
 import java.io.InputStream;
 
+import com.android.frameworks.saxtests.R;
+
 public class ExpatPerformanceTest extends AndroidTestCase {
 
     private static final String TAG = ExpatPerformanceTest.class.getSimpleName();
diff --git a/tests/AndroidTests/src/com/android/unit_tests/SafeSaxTest.java b/sax/tests/saxtests/src/android/sax/SafeSaxTest.java
similarity index 99%
rename from tests/AndroidTests/src/com/android/unit_tests/SafeSaxTest.java
rename to sax/tests/saxtests/src/android/sax/SafeSaxTest.java
index 8ccd26e..bee3938 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/SafeSaxTest.java
+++ b/sax/tests/saxtests/src/android/sax/SafeSaxTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests;
+package android.sax;
 
 import android.graphics.Bitmap;
 import android.sax.Element;
@@ -40,6 +40,8 @@
 import java.io.IOException;
 import java.io.InputStream;
 
+import com.android.frameworks.saxtests.R;
+
 public class SafeSaxTest extends AndroidTestCase {
 
     private static final String TAG = SafeSaxTest.class.getName();
diff --git a/services/java/com/android/server/DevicePolicyManagerService.java b/services/java/com/android/server/DevicePolicyManagerService.java
index 17a3ab8..e4ee4ae 100644
--- a/services/java/com/android/server/DevicePolicyManagerService.java
+++ b/services/java/com/android/server/DevicePolicyManagerService.java
@@ -64,7 +64,7 @@
 
     IPowerManager mIPowerManager;
     
-    int mActivePasswordMode = DevicePolicyManager.PASSWORD_MODE_UNSPECIFIED;
+    int mActivePasswordQuality = DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED;
     int mActivePasswordLength = 0;
     int mFailedPasswordAttempts = 0;
     
@@ -76,7 +76,7 @@
     static class ActiveAdmin {
         final DeviceAdminInfo info;
         
-        int passwordMode = DevicePolicyManager.PASSWORD_MODE_UNSPECIFIED;
+        int passwordQuality = DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED;
         int minimumPasswordLength = 0;
         long maximumTimeToUnlock = 0;
         int maximumFailedPasswordsForWipe = 0;
@@ -89,17 +89,17 @@
         
         void writeToXml(XmlSerializer out)
                 throws IllegalArgumentException, IllegalStateException, IOException {
-            if (passwordMode != DevicePolicyManager.PASSWORD_MODE_UNSPECIFIED) {
-                out.startTag(null, "password-mode");
-                out.attribute(null, "value", Integer.toString(passwordMode));
-                out.endTag(null, "password-mode");
+            if (passwordQuality != DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED) {
+                out.startTag(null, "password-quality");
+                out.attribute(null, "value", Integer.toString(passwordQuality));
+                out.endTag(null, "password-quality");
                 if (minimumPasswordLength > 0) {
                     out.startTag(null, "min-password-length");
                     out.attribute(null, "value", Integer.toString(minimumPasswordLength));
                     out.endTag(null, "mn-password-length");
                 }
             }
-            if (maximumTimeToUnlock != DevicePolicyManager.PASSWORD_MODE_UNSPECIFIED) {
+            if (maximumTimeToUnlock != DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED) {
                 out.startTag(null, "max-time-to-unlock");
                 out.attribute(null, "value", Long.toString(maximumTimeToUnlock));
                 out.endTag(null, "max-time-to-unlock");
@@ -121,8 +121,8 @@
                     continue;
                 }
                 String tag = parser.getName();
-                if ("password-mode".equals(tag)) {
-                    passwordMode = Integer.parseInt(
+                if ("password-quality".equals(tag)) {
+                    passwordQuality = Integer.parseInt(
                             parser.getAttributeValue(null, "value"));
                 } else if ("min-password-length".equals(tag)) {
                     minimumPasswordLength = Integer.parseInt(
@@ -435,34 +435,34 @@
         }
     }
     
-    public void setPasswordMode(ComponentName who, int mode) {
+    public void setPasswordQuality(ComponentName who, int mode) {
         synchronized (this) {
             if (who == null) {
                 throw new NullPointerException("ComponentName is null");
             }
             ActiveAdmin ap = getActiveAdminForCallerLocked(who,
                     DeviceAdminInfo.USES_POLICY_LIMIT_PASSWORD);
-            if (ap.passwordMode != mode) {
-                ap.passwordMode = mode;
+            if (ap.passwordQuality != mode) {
+                ap.passwordQuality = mode;
                 saveSettingsLocked();
             }
         }
     }
     
-    public int getPasswordMode(ComponentName who) {
+    public int getPasswordQuality(ComponentName who) {
         synchronized (this) {
-            int mode = DevicePolicyManager.PASSWORD_MODE_UNSPECIFIED;
+            int mode = DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED;
             
             if (who != null) {
                 ActiveAdmin admin = getActiveAdminUncheckedLocked(who);
-                return admin != null ? admin.passwordMode : mode;
+                return admin != null ? admin.passwordQuality : mode;
             }
             
             final int N = mAdminList.size();
             for  (int i=0; i<N; i++) {
                 ActiveAdmin admin = mAdminList.get(i);
-                if (mode < admin.passwordMode) {
-                    mode = admin.passwordMode;
+                if (mode < admin.passwordQuality) {
+                    mode = admin.passwordQuality;
                 }
             }
             return mode;
@@ -509,7 +509,7 @@
             // so try to retrieve it to check that the caller is one.
             getActiveAdminForCallerLocked(null,
                     DeviceAdminInfo.USES_POLICY_LIMIT_PASSWORD);
-            return mActivePasswordMode >= getPasswordMode(null)
+            return mActivePasswordQuality >= getPasswordQuality(null)
                     && mActivePasswordLength >= getPasswordMinimumLength(null);
         }
     }
@@ -563,14 +563,24 @@
     }
     
     public boolean resetPassword(String password) {
-        int mode;
+        int quality;
         synchronized (this) {
             // This API can only be called by an active device admin,
             // so try to retrieve it to check that the caller is one.
             getActiveAdminForCallerLocked(null,
                     DeviceAdminInfo.USES_POLICY_RESET_PASSWORD);
-            mode = getPasswordMode(null);
-            if (password.length() < getPasswordMinimumLength(null)) {
+            quality = getPasswordQuality(null);
+            if (quality != DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED) {
+                int adjQuality = LockPatternUtils.adjustPasswordMode(password, quality);
+                if (adjQuality == DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED) {
+                    Log.w(TAG, "resetPassword: password does not meet quality " + quality);
+                    return false;
+                }
+                quality = adjQuality;
+            }
+            int length = getPasswordMinimumLength(null);
+            if (password.length() < length) {
+                Log.w(TAG, "resetPassword: password does not meet length " + length);
                 return false;
             }
         }
@@ -580,7 +590,7 @@
         long ident = Binder.clearCallingIdentity();
         try {
             LockPatternUtils utils = new LockPatternUtils(mContext);
-            utils.saveLockPassword(password, mode);
+            utils.saveLockPassword(password, quality);
         } finally {
             Binder.restoreCallingIdentity(ident);
         }
@@ -709,16 +719,16 @@
         }
     }
     
-    public void setActivePasswordState(int mode, int length) {
+    public void setActivePasswordState(int quality, int length) {
         mContext.enforceCallingOrSelfPermission(
                 android.Manifest.permission.BIND_DEVICE_ADMIN, null);
         
         synchronized (this) {
-            if (mActivePasswordMode != mode || mActivePasswordLength != length
+            if (mActivePasswordQuality != quality || mActivePasswordLength != length
                     || mFailedPasswordAttempts != 0) {
                 long ident = Binder.clearCallingIdentity();
                 try {
-                    mActivePasswordMode = mode;
+                    mActivePasswordQuality = quality;
                     mActivePasswordLength = length;
                     if (mFailedPasswordAttempts != 0) {
                         mFailedPasswordAttempts = 0;
diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java
index c2c6e76..b723dcd 100644
--- a/services/java/com/android/server/am/ActivityManagerService.java
+++ b/services/java/com/android/server/am/ActivityManagerService.java
@@ -8081,6 +8081,14 @@
         }
     }
 
+    public boolean isUserAMonkey() {
+        // For now the fact that there is a controller implies
+        // we have a monkey.
+        synchronized (this) {
+            return mController != null;
+        }
+    }
+    
     public void registerActivityWatcher(IActivityWatcher watcher) {
         mWatchers.register(watcher);
     }
diff --git a/services/tests/servicestests/Android.mk b/services/tests/servicestests/Android.mk
new file mode 100644
index 0000000..2caccf7
--- /dev/null
+++ b/services/tests/servicestests/Android.mk
@@ -0,0 +1,15 @@
+LOCAL_PATH:= $(call my-dir)
+include $(CLEAR_VARS)
+
+# We only want this apk build for tests.
+LOCAL_MODULE_TAGS := tests
+
+# Include all test java files.
+LOCAL_SRC_FILES := $(call all-java-files-under, src)
+
+
+LOCAL_JAVA_LIBRARIES := android.test.runner services
+LOCAL_PACKAGE_NAME := FrameworksServicesTests
+
+include $(BUILD_PACKAGE)
+
diff --git a/services/tests/servicestests/AndroidManifest.xml b/services/tests/servicestests/AndroidManifest.xml
new file mode 100644
index 0000000..9856c6d
--- /dev/null
+++ b/services/tests/servicestests/AndroidManifest.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2008 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+  
+          http://www.apache.org/licenses/LICENSE-2.0
+  
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+          package="com.android.frameworks.servicestests">
+    <uses-permission android:name="android.permission.RECEIVE_SMS"/>
+    <uses-permission android:name="android.permission.INTERNET" />
+    <uses-permission android:name="android.permission.READ_CONTACTS" />
+    <uses-permission android:name="android.permission.WRITE_CONTACTS" />
+    <uses-permission android:name="android.permission.WAKE_LOCK" />
+    <uses-permission android:name="android.permission.CHANGE_CONFIGURATION" />
+    <uses-permission android:name="android.permission.WRITE_APN_SETTINGS" />
+    <uses-permission android:name="android.permission.BROADCAST_STICKY" />
+
+    
+    <application>
+        <uses-library android:name="android.test.runner" />
+    </application>
+
+    <instrumentation
+    	android:name="android.test.InstrumentationTestRunner"
+    	android:targetPackage="com.android.frameworks.servicestests"
+    	android:label="Frameworks Services Tests" />
+</manifest>
diff --git a/tests/AndroidTests/src/com/android/unit_tests/DropBoxTest.java b/services/tests/servicestests/src/com/android/server/DropBoxTest.java
similarity index 99%
rename from tests/AndroidTests/src/com/android/unit_tests/DropBoxTest.java
rename to services/tests/servicestests/src/com/android/server/DropBoxTest.java
index d20abd9..3842d45 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/DropBoxTest.java
+++ b/services/tests/servicestests/src/com/android/server/DropBoxTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests;
+package com.android.server;
 
 import android.content.ContentResolver;
 import android.content.Context;
diff --git a/telephony/tests/telephonytests/AndroidManifest.xml b/telephony/tests/telephonytests/AndroidManifest.xml
index 70aeebc..6a97423 100644
--- a/telephony/tests/telephonytests/AndroidManifest.xml
+++ b/telephony/tests/telephonytests/AndroidManifest.xml
@@ -33,4 +33,5 @@
         android:label="Frameworks Telephony Tests">
     </instrumentation>
     <uses-permission android:name="android.permission.READ_PHONE_STATE" />
+
 </manifest>
diff --git a/tests/AndroidTests/src/com/android/unit_tests/GsmSmsTest.java b/telephony/tests/telephonytests/src/com/android/internal/telephony/GsmSmsTest.java
similarity index 99%
rename from tests/AndroidTests/src/com/android/unit_tests/GsmSmsTest.java
rename to telephony/tests/telephonytests/src/com/android/internal/telephony/GsmSmsTest.java
index 8987d6b..3103fc1 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/GsmSmsTest.java
+++ b/telephony/tests/telephonytests/src/com/android/internal/telephony/GsmSmsTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests;
+package com.android.internal.telephony;
 
 import com.android.internal.telephony.GsmAlphabet;
 import com.android.internal.telephony.SmsHeader;
diff --git a/tests/AndroidTests/src/com/android/unit_tests/MccTableTest.java b/telephony/tests/telephonytests/src/com/android/internal/telephony/MccTableTest.java
similarity index 98%
rename from tests/AndroidTests/src/com/android/unit_tests/MccTableTest.java
rename to telephony/tests/telephonytests/src/com/android/internal/telephony/MccTableTest.java
index b2f1ded..1ea1285 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/MccTableTest.java
+++ b/telephony/tests/telephonytests/src/com/android/internal/telephony/MccTableTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests;
+package com.android.internal.telephony;
 
 import com.android.internal.telephony.MccTable;
 
diff --git a/telephony/tests/telephonytests/src/com/android/internal/telephony/NeighboringCellInfoTest.java b/telephony/tests/telephonytests/src/com/android/internal/telephony/NeighboringCellInfoTest.java
new file mode 100644
index 0000000..b63dc71
--- /dev/null
+++ b/telephony/tests/telephonytests/src/com/android/internal/telephony/NeighboringCellInfoTest.java
@@ -0,0 +1,79 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.internal.telephony;
+
+import android.os.Parcel;
+import android.test.AndroidTestCase;
+import android.telephony.NeighboringCellInfo;
+import android.test. suitebuilder.annotation.SmallTest;
+
+import static android.telephony.TelephonyManager.NETWORK_TYPE_UNKNOWN;
+import static android.telephony.TelephonyManager.NETWORK_TYPE_EDGE;
+import static android.telephony.TelephonyManager.NETWORK_TYPE_GPRS;
+import static android.telephony.TelephonyManager.NETWORK_TYPE_UMTS;
+
+public class NeighboringCellInfoTest extends AndroidTestCase {
+    @SmallTest
+    public void testConstructor() {
+        int rssi = 31;
+        NeighboringCellInfo nc;
+
+        nc = new NeighboringCellInfo(rssi, "FFFFFFF", NETWORK_TYPE_EDGE);
+        assertEquals(NETWORK_TYPE_EDGE, nc.getNetworkType());
+        assertEquals(rssi, nc.getRssi());
+        assertEquals(0xfff, nc.getLac());
+        assertEquals(0xffff, nc.getCid());
+        assertEquals(NeighboringCellInfo.UNKNOWN_CID, nc.getPsc());
+
+        nc = new NeighboringCellInfo(rssi, "1FF", NETWORK_TYPE_UMTS);
+        assertEquals(NETWORK_TYPE_UMTS, nc.getNetworkType());
+        assertEquals(rssi, nc.getRssi());
+        assertEquals(NeighboringCellInfo.UNKNOWN_CID, nc.getCid());
+        assertEquals(NeighboringCellInfo.UNKNOWN_CID, nc.getLac());
+        assertEquals(0x1ff, nc.getPsc());
+
+        nc = new NeighboringCellInfo(rssi, "1FF", NETWORK_TYPE_UNKNOWN);
+        assertEquals(NETWORK_TYPE_UNKNOWN, nc.getNetworkType());
+        assertEquals(rssi, nc.getRssi());
+        assertEquals(NeighboringCellInfo.UNKNOWN_CID, nc.getCid());
+        assertEquals(NeighboringCellInfo.UNKNOWN_CID, nc.getLac());
+        assertEquals(NeighboringCellInfo.UNKNOWN_CID, nc.getPsc());
+    }
+
+    @SmallTest
+    public void testParcel() {
+        int rssi = 20;
+
+        NeighboringCellInfo nc = new NeighboringCellInfo(rssi, "12345678", NETWORK_TYPE_GPRS);
+        assertEquals(NETWORK_TYPE_GPRS, nc.getNetworkType());
+        assertEquals(rssi, nc.getRssi());
+        assertEquals(0x1234, nc.getLac());
+        assertEquals(0x5678, nc.getCid());
+        assertEquals(NeighboringCellInfo.UNKNOWN_CID, nc.getPsc());
+
+        Parcel p = Parcel.obtain();
+        p.setDataPosition(0);
+        nc.writeToParcel(p, 0);
+
+        p.setDataPosition(0);
+        NeighboringCellInfo nw = new NeighboringCellInfo(p);
+        assertEquals(NETWORK_TYPE_GPRS, nw.getNetworkType());
+        assertEquals(rssi, nw.getRssi());
+        assertEquals(0x1234, nw.getLac());
+        assertEquals(0x5678, nw.getCid());
+        assertEquals(NeighboringCellInfo.UNKNOWN_CID, nw.getPsc());
+     }
+}
diff --git a/tests/AndroidTests/src/com/android/unit_tests/CdmaSmsTest.java b/telephony/tests/telephonytests/src/com/android/internal/telephony/cdma/sms/CdmaSmsTest.java
similarity index 99%
rename from tests/AndroidTests/src/com/android/unit_tests/CdmaSmsTest.java
rename to telephony/tests/telephonytests/src/com/android/internal/telephony/cdma/sms/CdmaSmsTest.java
index db47693..58e73e0 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/CdmaSmsTest.java
+++ b/telephony/tests/telephonytests/src/com/android/internal/telephony/cdma/sms/CdmaSmsTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests;
+package com.android.internal.telephony.cdma.sms;
 
 import android.telephony.TelephonyManager;
 
diff --git a/test-runner/android/test/mock/MockPackageManager.java b/test-runner/android/test/mock/MockPackageManager.java
index 2f313af..cbe0253 100644
--- a/test-runner/android/test/mock/MockPackageManager.java
+++ b/test-runner/android/test/mock/MockPackageManager.java
@@ -438,4 +438,12 @@
     public boolean isSafeMode() {
         throw new UnsupportedOperationException();
     }
+
+    /**
+     * @hide
+     */
+    @Override
+    public int recommendAppInstallLocation(ApplicationInfo appInfo, Uri packageURI) {
+        throw new UnsupportedOperationException();
+    }
 }
diff --git a/tests/AndroidTests/Android.mk b/tests/AndroidTests/Android.mk
index a81b779..bff8fba 100644
--- a/tests/AndroidTests/Android.mk
+++ b/tests/AndroidTests/Android.mk
@@ -11,8 +11,7 @@
 LOCAL_AAPT_FLAGS = -c xx_YY -c cs -c 160dpi -c 32dpi -c 240dpi
 
 LOCAL_SRC_FILES := \
-	$(call all-subdir-java-files) \
-	src/com/android/unit_tests/os/IAidlTest.aidl
+	$(call all-subdir-java-files)
 
 LOCAL_PACKAGE_NAME := AndroidTests
 LOCAL_CERTIFICATE := platform
diff --git a/tests/AndroidTests/AndroidManifest.xml b/tests/AndroidTests/AndroidManifest.xml
index e0d8f79..c2548b9 100644
--- a/tests/AndroidTests/AndroidManifest.xml
+++ b/tests/AndroidTests/AndroidManifest.xml
@@ -17,21 +17,6 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
         package="com.android.unit_tests"
         android:sharedUserId="com.android.uid.test">
-    <permission android:name="com.android.unit_tests.permission.TEST_GRANTED"
-        android:protectionLevel="normal"
-            android:label="@string/permlab_testGranted"
-            android:description="@string/permdesc_testGranted">
-        <meta-data android:name="com.android.unit_tests.string" android:value="foo" />
-        <meta-data android:name="com.android.unit_tests.boolean" android:value="true" />
-        <meta-data android:name="com.android.unit_tests.integer" android:value="100" />
-        <meta-data android:name="com.android.unit_tests.color" android:value="#ff000000" />
-        <meta-data android:name="com.android.unit_tests.float" android:value="100.1" />
-        <meta-data android:name="com.android.unit_tests.reference" android:resource="@xml/metadata" />
-    </permission>
-    <permission android:name="com.android.unit_tests.permission.TEST_DENIED"
-        android:protectionLevel="normal"
-            android:label="@string/permlab_testDenied"
-            android:description="@string/permdesc_testDenied" />
 
     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
     <uses-permission android:name="android.permission.BROADCAST_STICKY" />
@@ -39,19 +24,12 @@
     <uses-permission android:name="android.permission.CLEAR_APP_USER_DATA" />
     <uses-permission android:name="android.permission.DELETE_CACHE_FILES" />
     <uses-permission android:name="android.permission.GET_PACKAGE_SIZE" />
-    <uses-permission android:name="android.permission.INTERNET" />
-    <uses-permission android:name="android.permission.READ_CONTACTS" />
-    <uses-permission android:name="android.permission.READ_LOGS"/>
-    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
-    <uses-permission android:name="android.permission.READ_SMS"/>
-    <uses-permission android:name="android.permission.USE_CREDENTIALS" />
     <uses-permission android:name="android.permission.WAKE_LOCK" />
-    <uses-permission android:name="android.permission.WRITE_CONTACTS" />
-    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
     <uses-permission android:name="android.permission.WRITE_SETTINGS" />
-    <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
-    <uses-permission android:name="android.permission.WRITE_SMS"/>
     <uses-permission android:name="com.android.unit_tests.permission.TEST_GRANTED" />
+    <uses-permission android:name="com.google.android.googleapps.permission.ACCESS_GOOGLE_PASSWORD" />
+    <uses-permission android:name="com.google.android.googleapps.permission.GOOGLE_AUTH" />
+    <uses-permission android:name="com.google.android.googleapps.permission.GOOGLE_AUTH.ALL_SERVICES" />
 
     <!-- InstrumentationTestRunner for AndroidTests -->
     <instrumentation android:name="android.test.InstrumentationTestRunner"
@@ -60,17 +38,6 @@
 
     <application>
         <uses-library android:name="android.test.runner" />
-
-        <!-- Activity-level metadata -->
-        <meta-data android:name="com.android.unit_tests.isApp" android:value="true" />
-        <meta-data android:name="com.android.unit_tests.string" android:value="foo" />
-        <meta-data android:name="com.android.unit_tests.boolean" android:value="true" />
-        <meta-data android:name="com.android.unit_tests.integer" android:value="100" />
-        <meta-data android:name="com.android.unit_tests.color" android:value="#ff000000" />
-        <meta-data android:name="com.android.unit_tests.float" android:value="100.1" />
-        <meta-data android:name="com.android.unit_tests.reference"
-                   android:resource="@xml/metadata_app" />
-
         <activity android:name="AndroidPerformanceTests" android:label="Android Performance Tests">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
@@ -78,167 +45,5 @@
             </intent-filter>
         </activity>
 
-        <!-- Application components used for activity tests -->
-
-        <activity android:name=".activity.TestedActivity"
-                android:process=":remoteActivity">
-        </activity>
-        <activity android:name=".activity.LocalActivity" android:multiprocess="true">
-            <meta-data android:name="com.android.unit_tests.string" android:value="foo" />
-            <meta-data android:name="com.android.unit_tests.boolean" android:value="true" />
-            <meta-data android:name="com.android.unit_tests.integer" android:value="100" />
-            <meta-data android:name="com.android.unit_tests.color" android:value="#ff000000" />
-            <meta-data android:name="com.android.unit_tests.float" android:value="100.1" />
-            <meta-data android:name="com.android.unit_tests.reference" android:resource="@xml/metadata" />
-        </activity>
-        <activity android:name=".activity.TestedScreen"
-                android:process=":remoteScreen">
-        </activity>
-        <activity android:name=".activity.LocalScreen" android:multiprocess="true">
-        </activity>
-        <activity android:name=".activity.ClearTop" android:multiprocess="true"
-                android:launchMode="singleTop">
-        </activity>
-        <activity android:name=".activity.LocalDialog" android:multiprocess="true"
-                android:theme="@android:style/Theme.Dialog">
-        </activity>
-        <activity android:name=".activity.SubActivityScreen">
-        </activity>
-        <activity android:name=".activity.RemoteSubActivityScreen"
-                android:process=":remoteActivity">
-        </activity>
-        <activity android:name=".activity.LaunchpadActivity" android:multiprocess="true">
-        </activity>
-        <activity android:name=".activity.LaunchpadTabActivity" android:multiprocess="true">
-        </activity>
-
-        <receiver android:name=".activity.AbortReceiver">
-            <intent-filter android:priority="1">
-                <action android:name="com.android.unit_tests.activity.BROADCAST_ABORT" />
-            </intent-filter>
-        </receiver>
-        <receiver android:name=".activity.LocalReceiver">
-            <intent-filter android:priority="-1">
-                <action android:name="com.android.unit_tests.activity.BROADCAST_ABORT" />
-                <action android:name="com.android.unit_tests.activity.BROADCAST_ALL" />
-                <action android:name="com.android.unit_tests.activity.BROADCAST_REPEAT" />
-                <action android:name="com.android.unit_tests.activity.BROADCAST_LOCAL" />
-                <action android:name="com.android.unit_tests.activity.BROADCAST_FAIL_REGISTER" />
-                <action android:name="com.android.unit_tests.activity.BROADCAST_FAIL_BIND" />
-            </intent-filter>
-            <meta-data android:name="com.android.unit_tests.string" android:value="foo" />
-            <meta-data android:name="com.android.unit_tests.boolean" android:value="true" />
-            <meta-data android:name="com.android.unit_tests.integer" android:value="100" />
-            <meta-data android:name="com.android.unit_tests.color" android:value="#ff000000" />
-            <meta-data android:name="com.android.unit_tests.float" android:value="100.1" />
-            <meta-data android:name="com.android.unit_tests.reference" android:resource="@xml/metadata" />
-        </receiver>
-        <receiver android:name=".activity.ResultReceiver">
-            <intent-filter>
-                <action android:name="com.android.unit_tests.activity.BROADCAST_RESULT" />
-            </intent-filter>
-        </receiver>
-        <receiver android:name=".activity.LocalGrantedReceiver"
-                android:permission="com.android.unit_tests.permission.TEST_GRANTED">
-            <intent-filter android:priority="-1">
-                <action android:name="com.android.unit_tests.activity.BROADCAST_LOCAL_GRANTED" />
-            </intent-filter>
-        </receiver>
-        <receiver android:name=".activity.LocalDeniedReceiver"
-                android:permission="com.android.unit_tests.permission.TEST_DENIED">
-            <intent-filter android:priority="-1">
-                <action android:name="com.android.unit_tests.activity.BROADCAST_LOCAL_DENIED" />
-            </intent-filter>
-        </receiver>
-        <receiver android:name=".activity.RemoteReceiver"
-                android:process=":remoteReceiver">
-            <intent-filter android:priority="2">
-                <action android:name="com.android.unit_tests.activity.BROADCAST_ABORT" />
-                <action android:name="com.android.unit_tests.activity.BROADCAST_ALL" />
-                <action android:name="com.android.unit_tests.activity.BROADCAST_REPEAT" />
-                <action android:name="com.android.unit_tests.activity.BROADCAST_REMOTE" />
-            </intent-filter>
-        </receiver>
-        <receiver android:name=".activity.RemoteGrantedReceiver"
-                android:permission="com.android.unit_tests.permission.TEST_GRANTED">
-            <intent-filter android:priority="2">
-                <action android:name="com.android.unit_tests.activity.BROADCAST_REMOTE_GRANTED" />
-            </intent-filter>
-        </receiver>
-        <receiver android:name=".activity.RemoteDeniedReceiver"
-                android:permission="com.android.unit_tests.permission.TEST_DENIED">
-            <intent-filter android:priority="2">
-                <action android:name="com.android.unit_tests.activity.BROADCAST_REMOTE_DENIED" />
-            </intent-filter>
-        </receiver>
-        <service android:name=".activity.LocalService">
-            <intent-filter>
-                <action android:name="com.android.unit_tests.activity.SERVICE_LOCAL" />
-            </intent-filter>
-            <meta-data android:name="com.android.unit_tests.string" android:value="foo" />
-            <meta-data android:name="com.android.unit_tests.boolean" android:value="true" />
-            <meta-data android:name="com.android.unit_tests.integer" android:value="100" />
-            <meta-data android:name="com.android.unit_tests.color" android:value="#ff000000" />
-            <meta-data android:name="com.android.unit_tests.float" android:value="100.1" />
-            <meta-data android:name="com.android.unit_tests.reference" android:resource="@xml/metadata" />
-        </service>
-        <service android:name=".activity.LocalDeniedService"
-                android:permission="com.android.unit_tests.permission.TEST_DENIED">
-            <intent-filter>
-                <action android:name="com.android.unit_tests.activity.SERVICE_LOCAL_DENIED" />
-            </intent-filter>
-        </service>
-        <service android:name=".activity.LocalGrantedService"
-                android:permission="com.android.unit_tests.permission.TEST_GRANTED">
-            <intent-filter>
-                <action android:name="com.android.unit_tests.activity.SERVICE_LOCAL_GRANTED" />
-            </intent-filter>
-        </service>
-
-        <provider android:name=".activity.LocalProvider"
-                android:authorities="com.android.unit_tests.LocalProvider">
-            <meta-data android:name="com.android.unit_tests.string" android:value="foo" />
-            <meta-data android:name="com.android.unit_tests.boolean" android:value="true" />
-            <meta-data android:name="com.android.unit_tests.integer" android:value="100" />
-            <meta-data android:name="com.android.unit_tests.color" android:value="#ff000000" />
-            <meta-data android:name="com.android.unit_tests.float" android:value="100.1" />
-            <meta-data android:name="com.android.unit_tests.reference" android:resource="@xml/metadata" />
-        </provider>
-
-        <!-- Application components used for content tests -->
-        <provider android:name=".content.MemoryFileProvider"
-                android:authorities="com.android.unit_tests.content.MemoryFileProvider"
-                android:process=":MemoryFileProvider">
-        </provider>
-
-        <!-- Application components used for os tests -->
-
-        <service android:name=".os.MessengerService"
-                android:process=":messengerService">
-        </service>
-
-        <!-- Application components used for search manager tests -->
-
-        <activity android:name=".SearchableActivity"
-                android:label="Searchable Activity">
-            <intent-filter>
-                <action android:name="android.intent.action.SEARCH" />
-                <category android:name="android.intent.category.DEFAULT" />
-            </intent-filter>
-            <meta-data android:name="android.app.searchable"
-                    android:resource="@xml/searchable" />
-        </activity>
-
-        <provider android:name=".SuggestionProvider"
-                android:authorities="com.android.unit_tests.SuggestionProvider">
-        </provider>
-
-        <!-- Used to test IPC. -->
-        <service android:name=".binder.BinderTestService"
-                 android:process="binder.BinderTestService" />
-        <service android:name=".binder.BinderPerformanceService"
-                 android:process="binder.BinderPerformanceService" />
-        <service android:name=".binder.BinderVsMessagingService"
-                 android:process="binder.BinderVsMessagingService" />
     </application>
 </manifest>
diff --git a/tests/AndroidTests/res/layout/layout_three.xml b/tests/AndroidTests/res/layout/layout_three.xml
deleted file mode 100644
index 7b1ccc5..0000000
--- a/tests/AndroidTests/res/layout/layout_three.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-**
-** Copyright 2006, 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:id="@+id/content" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent">
-	<view class="com.android.unit_tests.InflateTest$ViewOne" android:id="@+id/view1" android:layout_width="match_parent" android:layout_height="match_parent"/>
-	<view class="com.android.unit_tests.InflateTest$ViewOne" android:id="@+id/view2" android:layout_width="match_parent" android:layout_height="match_parent"/>
-	<view class="com.android.unit_tests.InflateTest$ViewOne" android:id="@+id/view3" android:layout_width="match_parent" android:layout_height="match_parent"/>
-	<view class="com.android.unit_tests.InflateTest$ViewOne" android:id="@+id/view4" android:layout_width="match_parent" android:layout_height="match_parent"/>
-	<view class="com.android.unit_tests.InflateTest$ViewOne" android:id="@+id/view5" android:layout_width="match_parent" android:layout_height="match_parent"/>
-	<view class="com.android.unit_tests.InflateTest$ViewOne" android:id="@+id/view6" android:layout_width="match_parent" android:layout_height="match_parent"/>
-</LinearLayout>
diff --git a/tests/AndroidTests/res/values/strings.xml b/tests/AndroidTests/res/values/strings.xml
index 49d8ae7..e8b150a 100644
--- a/tests/AndroidTests/res/values/strings.xml
+++ b/tests/AndroidTests/res/values/strings.xml
@@ -8,25 +8,13 @@
           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,
+     distributed under the License is distributed on an "AS IS" BASI
      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.
 -->
 
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="permlab_testGranted">Test Granted</string>
-    <string name="permdesc_testGranted">Used for running unit tests, for
-        testing operations where we have the permission.</string>
-    <string name="permlab_testDenied">Test Denied</string>
-    <string name="permdesc_testDenied">Used for running unit tests, for
-        testing operations where we do not have the permission.</string>
-
-    <string name="layout_five_text_text">S</string>
-
-    <string name="layout_four_text_text">S</string>
-
-    <string name="layout_six_text_text">S</string>
 
     <string name="coerceIntegerToString">100</string>
     <string name="coerceBooleanToString">true</string>
@@ -41,17 +29,10 @@
     
     <string name="reference">here</string>
     
-    <string name="metadata_text">text</string>
-
-    <string name="menu_test">test</string>
-    
     <plurals name="plurals_test">
         <item quantity="one">A dog</item>
         <item quantity="other">Some dogs</item>
     </plurals>
     
-    <string name="searchable_label">SearchManager Test</string>
-    <string name="searchable_hint">A search hint</string>
-    
 <!--    <string name="layout_six_text_text">F</string> -->
 </resources>
diff --git a/tests/AndroidTests/src/com/android/unit_tests/AndroidPerformanceTests.java b/tests/AndroidTests/src/com/android/unit_tests/AndroidPerformanceTests.java
index b6a8594..795fe2b 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/AndroidPerformanceTests.java
+++ b/tests/AndroidTests/src/com/android/unit_tests/AndroidPerformanceTests.java
@@ -27,12 +27,8 @@
     public static class Suite {
         public static String[] children() {
             return new String[] {
-                DatabasePerformanceTests.class.getName(),
-                GraphicsPerformanceTests.class.getName(),
                 JavaPerformanceTests.class.getName(),
-                LogTest.PerformanceTest.class.getName(),
                 PerformanceTests.class.getName(),
-                TextViewPerformanceTest.class.getName(),
             };
         }
     }
diff --git a/tests/AndroidTests/src/com/android/unit_tests/DatabaseTests.java b/tests/AndroidTests/src/com/android/unit_tests/DatabaseTests.java
deleted file mode 100644
index a288c73..0000000
--- a/tests/AndroidTests/src/com/android/unit_tests/DatabaseTests.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.unit_tests;
-
-import junit.framework.TestSuite;
-
-public class DatabaseTests {
-    public static TestSuite suite() {
-        TestSuite suite = new TestSuite(DatabaseTests.class.getName());
-
-        suite.addTestSuite(DatabaseGeneralTest.class);
-        suite.addTestSuite(DatabaseLocaleTest.class);
-        suite.addTestSuite(CursorWindowTest.class);
-        suite.addTestSuite(DatabaseLockTest.class);
-
-        return suite;
-    }
-}
diff --git a/tests/FrameworkTest/AndroidManifest.xml b/tests/FrameworkTest/AndroidManifest.xml
index 3030c06..4db8952 100644
--- a/tests/FrameworkTest/AndroidManifest.xml
+++ b/tests/FrameworkTest/AndroidManifest.xml
@@ -41,934 +41,12 @@
             </intent-filter>
         </activity>
 
-        <activity android:name=".focus.DescendantFocusability" android:label="DescendantFocusability">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>            
-        </activity>
-
-        <activity android:name=".focus.FocusAfterRemoval" android:label="FocusAfterRemoval">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".focus.RequestFocus" android:label="RequestFocus">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />V
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".focus.ListOfButtons" android:label="ListOfButtons">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".focus.LinearLayoutGrid" android:label="LinearLayoutGrid">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>            
-        </activity>
-
-        <activity android:name=".focus.ListOfEditTexts" android:label="ListOfEditTexts">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>            
-        </activity>
-
-        <activity android:name=".focus.ListOfInternalSelectionViews" android:label="ListOfInternalSelectionViews">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>                        
-        </activity>
-
-        <activity android:name=".focus.ListWithFooterViewAndNewLabels" android:label="FocusListWithFooter">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>            
-        </activity>
-
-        <activity android:name=".focus.ListWithMailMessages" android:label="ListWithMailMessages">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".focus.HorizontalFocusSearch" android:label="HorizontalFocusSearch">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>            
-        </activity>
-
-        <activity android:name=".focus.VerticalFocusSearch" android:label="VerticalFocusSearch">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".focus.AdjacentVerticalRectLists" android:label="AdjacentVerticalRectLists">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".focus.GoneParentFocusedChild" android:label="GoneParentFocusedChild">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".layout.frame.FrameLayoutGravity" android:label="FrameLayoutGravity">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".layout.frame.FrameLayoutMargin" android:label="FrameLayoutMargin">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".layout.linear.BaselineAlignmentCenterGravity" android:label="BaselineAlignmentCenterGravity">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".layout.linear.BaselineButtons" android:label="BaselineButtons">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".layout.linear.FillInWrap" android:label="FillInWrap">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".layout.linear.BaselineAlignmentZeroWidthAndWeight" android:label="Baseline0WidthAndWeight">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".layout.linear.HorizontalOrientationVerticalAlignment" android:label="HorizontalOrientationVerticalAlignment">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".layout.linear.LLEditTextThenButton" android:label="LLEditTextThenButton">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>            
-        </activity>
-
-        <activity android:name=".layout.linear.LLOfButtons1" android:label="LLOfButtons1">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".layout.linear.LinearLayoutEditTexts" android:label="LinearLayoutEditTexts">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".layout.linear.LLOfButtons2" android:label="LLOfButtons2">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".layout.linear.LLOfTwoFocusableInTouchMode" android:label="LLOfTwoFocusableInTouchMode">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>            
-        </activity>
-
-        <activity android:name=".layout.linear.Weight" android:label="Weight">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".layout.linear.WeightSum" android:label="WeightSum">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".listview.AdjacentListsWithAdjacentISVsInside" android:label="AdjacentListsWithAdjacentISVsInside">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".listview.ListDividers" android:label="ListDividers">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".listview.ListViewHeight" android:label="ListViewHeight">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".layout.table.FixedWidth" android:label="CellFixedWidth">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".layout.table.Weight" android:label="CellWeight">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".layout.table.HorizontalGravity" android:label="CellHorizontalGravity">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".layout.table.VerticalGravity" android:label="CellVerticalGravity">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".layout.table.AddColumn" android:label="AddColumnInTable">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".layout.table.CellSpan" android:label="CellSpan">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".scroll.ButtonAboveTallInternalSelectionView" android:label="ButtonAboveTallInternalSelectionView">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".scroll.ButtonsWithTallTextViewInBetween" android:label="scrollButtonsWithTallTextViewInBetween">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".scroll.RequestRectangleVisible" android:label="ScrollToChildRect">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".scroll.RequestRectangleVisibleWithInternalScroll" android:label="ScrollToChildRectWithInternalScroll">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".scroll.ScrollViewButtonsAndLabels" android:label="ScrollViewButtonsAndLabels">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".scroll.ShortButtons" android:label="scrollShortButtons">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".scroll.TallTextAboveButton" android:label="scrollTallTextAboveButton">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".view.Include" android:label="IncludeTag">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".view.Merge" android:label="MergeTag">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".view.StubbedView" android:label="ViewStub">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".view.RunQueue" android:label="RunQueue">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".view.Visibility" android:label="Visibility">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".view.VisibilityCallback" android:label="VisibilityCallback">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".view.BigCache" android:label="BigCache">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".view.ZeroSized" android:label="ZeroSized">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".view.Disabled" android:label="Disabled">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".view.PopupWindowVisibility" android:label="PopupWindowVisibility">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-        
-        <activity android:name=".view.PreDrawListener" android:label="PreDrawListener">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".view.GlobalFocusChange" android:label="GlobalFocusChange">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".listview.ListSetSelection" android:label="ListSetSelection">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".listview.ListSimple" android:label="ListSimple">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".listview.ListFilter" android:label="ListFilter">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-        
-        <activity android:name=".listview.ListScrollListener" android:label="ListScrollListener">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".listview.ListThrasher" android:label="ListThrasher">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-        
-        <activity android:name=".listview.ListTakeFocusFromSide" android:label="ListTakeFocusFromSide">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-        
-        <activity android:name=".listview.ListBottomGravity" android:label="ListBottomGravity">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-        
-        <activity android:name=".listview.ListBottomGravityMany" android:label="ListBottomGravityMany">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-
-        <activity android:name=".listview.ListButtonsDiagonalAcrossItems" android:label="ListButtonsDiagonalAcrossItems">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".listview.ListTopGravity" android:label="ListTopGravity">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-        
-        <activity android:name=".listview.ListTopGravityMany" android:label="ListTopGravityMany">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-        
-        <activity android:name=".listview.ListEndingWithMultipleSeparators" android:label="ListEndingWithMultipleSeparators">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>                        
-        </activity>
-
-        <activity android:name=".listview.ListGetSelectedView" android:label="ListGetSelectedView">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".listview.ListInHorizontal" android:label="ListInHorizontal">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".listview.ListInVertical" android:label="ListInVertical">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".listview.ListInterleaveFocusables" android:label="ListInterleaveFocusables">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-             <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-         </intent-filter>
-        </activity>
-
-        <activity android:name=".listview.ListOfItemsShorterThanScreen" android:label="ListOfItemsShorterThanScreen">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>            
-        </activity>
-
-        <activity android:name=".listview.ListOfItemsTallerThanScreen" android:label="ListOfItemsTallerThanScreen">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>            
-        </activity>
-
-        <activity android:name=".listview.ListOfThinItems" android:label="ListOfThinItems">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>                        
-        </activity>
-
-        <activity android:name=".listview.ListOfShortTallShort" android:label="ListOfShortTallShort">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".listview.ListOfShortShortTallShortShort" android:label="ListOfShortShortTallShortShort">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>            
-        </activity>
-
-        <activity android:name=".listview.ListWithOffScreenNextSelectable" android:label="ListWithOffScreenNextSelectable">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>                                    
-        </activity>
-
-        <activity android:name=".listview.ListWithFirstScreenUnSelectable" android:label="ListWithFirstScreenUnSelectable">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-
-        <activity android:name=".listview.ListWithSeparators" android:label="ListWithSeparators">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>            
-        </activity>
-
-        <activity android:name=".listview.ListWithHeaders" android:label="ListWithHeaders">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".listview.ListWithEditTextHeader" android:label="ListWithEditTextHeader">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-
-        <activity android:name=".listview.ListWithNoFadingEdge" android:label="ListWithNoFadingEdge">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>            
-        </activity>
-
-        <activity android:name=".listview.ListWithScreenOfNoSelectables" android:label="ListWithScreenOfNoSelectables">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>            
-        </activity>
-
-        <activity android:name=".listview.ListItemFocusablesFarApart" android:label="ListItemFocusablesFarApart">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".listview.ListItemFocusableAboveUnfocusable" android:label="ListItemFocusableAboveUnfocusable">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".listview.ListItemFocusablesClose" android:label="ListItemFocusablesClose">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".listview.ListLastItemPartiallyVisible" android:label="ListLastItemPartiallyVisible">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>            
-        </activity>
-
-        <activity android:name=".listview.ListItemsExpandOnSelection" android:label="ListItemsExpandOnSelection">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>            
-        </activity>
-
-        <activity android:name=".listview.ListWithOnItemSelectedAction" android:label="ListWithOnItemSelectedAction">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>            
-        </activity>
-
-        <activity android:name=".listview.ListItemISVAndButton" android:label="ListItemISVAndButton">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".listview.ListOfTouchables" android:label="ListOfTouchables">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".listview.ListRecyclerProfiling" android:label="ListRecyclerProfiling">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".listview.ListHeterogeneous" android:label="ListHeterogeneous">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".listview.ListHorizontalFocusWithinItemWins" android:label="ListHorizontalFocusWithinItemWins">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>            
-        </activity>
-       
-	    <activity android:name=".listview.ListManagedCursor" android:label="ListManagedCursor">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-       
-	    <activity android:name=".listview.ListWithEmptyView" android:label="ListWithEmptyView">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-        
-        <activity android:name=".gridview.GridInHorizontal" android:label="GridInHorizontal">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-        
-        <activity android:name=".gridview.GridPadding" android:label="GridPadding">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".gridview.GridInVertical" android:label="GridInVertical">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".gridview.GridScrollListener" android:label="GridScrollListener">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-         <activity android:name=".gridview.GridThrasher" android:label="GridThrasher">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".gridview.GridSimple" android:label="GridSimple">
-           <intent-filter>
-               <action android:name="android.intent.action.MAIN" />
-               <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-           </intent-filter>
-       </activity>
-
-        <activity android:name=".gridview.GridDelete" android:label="GridDelete">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-         <activity android:name=".gridview.GridSetSelection" android:label="GridSetSelection">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".gridview.GridSetSelectionMany" android:label="GridSetSelectionMany">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".gridview.GridSetSelectionStackFromBottom" android:label="GridSetSelectionStackFromBottom">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".gridview.GridSetSelectionStackFromBottomMany" android:label="GridSetSelectionStackFromBottomMany">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".gridview.GridStackFromBottom" android:label="GridStackFromBottom">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".gridview.GridStackFromBottomMany" android:label="GridStackFromBottomMany">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".gridview.GridVerticalSpacing" android:label="GridVerticalSpacing">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-        
-        <activity android:name=".gridview.GridVerticalSpacingStackFromBottom" android:label="GridVerticalSpacingStackFromBottom">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-        
-        <activity android:name=".gridview.GridSingleColumn" android:label="GridSingleColumn">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-        
-        <activity android:name=".menus.ListContextMenu" android:label="ListContextMenu">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".view.ViewGroupChildren" android:label="ViewGroup Children">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".view.RemoteViewsActivity" android:label="RemoteViewsActicity">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".drawable.BitmapDrawable" android:label="BitmapDrawable">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".drawable.DrawableBgMinSize" android:label="DrawableBgMinSize">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".drawable.MutateDrawable" android:label="MutateDrawable">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".activity.TranslucentFancyActivity" android:label="TranslucentFancyActivity">
-           <intent-filter>
-               <action android:name="android.intent.action.MAIN" />
-               <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-           </intent-filter>
-       </activity>
-
-        <activity android:name=".view.Longpress" android:label="Longpress">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".expandablelistview.ExpandableListWithHeaders" android:label="ExpandableListWithHeaders">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".listview.ListWithDisappearingItemBug" android:label="ListWithDisappearingItemBug">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".menus.MenuWith1Item" android:label="MenuWith1Item">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".menus.MenuLayoutPortrait" android:label="MenuLayoutPortrait"
-                android:screenOrientation="portrait">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".menus.MenuLayoutLandscape" android:label="MenuLayoutLandscape"
-                android:screenOrientation="landscape">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".expandablelistview.InflatedExpandableListView" android:label="ExpandableListView Inflated">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".expandablelistview.ExpandableListSimple" android:label="ExpandableListSimple">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
         <activity android:name=".settings.RingtonePickerActivityLauncher" android:label="RingtonePickerActivityLauncher">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
                 <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
             </intent-filter>
         </activity>
-
-        <activity android:name=".settings.BrightnessLimit" android:label="BrightnessLimit">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-        
-        <activity android:name="android.widget.AutoCompleteTextViewSimple"
-                  android:label="AutoCompleteTextViewSimple">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
-        <service android:name=".accessibility.AccessibilityTestService">
-            <intent-filter>
-                <action android:name="android.accessibilityservice.AccessibilityService" />
-            </intent-filter>
-        </service>
-        
-        <activity android:name=".radiogroup.RadioGroupActivity" android:label="RadioGroupActivity">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>            
-        </activity>
         
 
     </application>
diff --git a/vpn/tests/vpntests/Android.mk b/vpn/tests/vpntests/Android.mk
new file mode 100644
index 0000000..a19fb56
--- /dev/null
+++ b/vpn/tests/vpntests/Android.mk
@@ -0,0 +1,14 @@
+LOCAL_PATH:= $(call my-dir)
+include $(CLEAR_VARS)
+
+# We only want this apk build for tests.
+LOCAL_MODULE_TAGS := tests
+
+# Include all test java files.
+LOCAL_SRC_FILES := $(call all-java-files-under, src)
+
+LOCAL_JAVA_LIBRARIES := android.test.runner
+LOCAL_PACKAGE_NAME := FrameworksVpnTests
+
+include $(BUILD_PACKAGE)
+
diff --git a/vpn/tests/vpntests/AndroidManifest.xml b/vpn/tests/vpntests/AndroidManifest.xml
new file mode 100644
index 0000000..d8405f6
--- /dev/null
+++ b/vpn/tests/vpntests/AndroidManifest.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2008 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+  
+          http://www.apache.org/licenses/LICENSE-2.0
+  
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+          package="com.android.frameworks.vpntests">
+    <uses-permission android:name="android.permission.RECEIVE_SMS"/>
+    <uses-permission android:name="android.permission.INTERNET" />
+    <uses-permission android:name="android.permission.READ_CONTACTS" />
+    <uses-permission android:name="android.permission.WRITE_CONTACTS" />
+    <uses-permission android:name="android.permission.WAKE_LOCK" />
+    <uses-permission android:name="android.permission.CHANGE_CONFIGURATION" />
+    <uses-permission android:name="android.permission.WRITE_APN_SETTINGS" />
+    <uses-permission android:name="android.permission.BROADCAST_STICKY" />
+    
+    <application>
+        <uses-library android:name="android.test.runner" />
+    </application>
+
+    <instrumentation
+    	android:name="android.test.InstrumentationTestRunner"
+    	android:targetPackage="com.android.frameworks.vpntests"
+    	android:label="Frameworks VPN Tests" />
+</manifest>
diff --git a/tests/AndroidTests/src/com/android/unit_tests/VpnTest.java b/vpn/tests/vpntests/src/android/net/vpn/VpnTest.java
similarity index 98%
rename from tests/AndroidTests/src/com/android/unit_tests/VpnTest.java
rename to vpn/tests/vpntests/src/android/net/vpn/VpnTest.java
index cb64293..46a57d3 100755
--- a/tests/AndroidTests/src/com/android/unit_tests/VpnTest.java
+++ b/vpn/tests/vpntests/src/android/net/vpn/VpnTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.unit_tests;
+package android.net.vpn;
 
 import android.content.BroadcastReceiver;
 import android.content.Context;