am 45550faa: Merge "Don\'t send non-existent system keys." into gingerbread

Merge commit '45550faad0f683d1393ea20144246ed43fc19899' into gingerbread-plus-aosp

* commit '45550faad0f683d1393ea20144246ed43fc19899':
  Don't send non-existent system keys.
diff --git a/apps/Development/src/com/android/development/PackageSummary.java b/apps/Development/src/com/android/development/PackageSummary.java
index 58ab0f7..d621d4e 100644
--- a/apps/Development/src/com/android/development/PackageSummary.java
+++ b/apps/Development/src/com/android/development/PackageSummary.java
@@ -251,7 +251,7 @@
     private final static void setItemText(Button item, PackageInfo pi,
                                           String className)
     {
-        item.setText(className.substring(pi.packageName.length()+1));
+        item.setText(className.substring(className.lastIndexOf('.')+1));
     }
 
     private final class ActivityOnClick implements View.OnClickListener
diff --git a/build/tools/make_windows_sdk.sh b/build/tools/make_windows_sdk.sh
index 7df662d..1154452 100755
--- a/build/tools/make_windows_sdk.sh
+++ b/build/tools/make_windows_sdk.sh
@@ -172,10 +172,10 @@
     mkdir -pv "$LIB"/x86_64
     cp -v prebuilt/windows-x86_64/swt/swt.jar  "$LIB"/x86_64/
 
-    # Copy the SDK Setup (aka sdklauncher) to the root of the SDK (it was copied in tools above)
+    # Copy the SDK Manager (aka sdklauncher) to the root of the SDK (it was copied in tools above)
     # and move it also in SDK/tools/lib (so that tools updates can update the root one too)
-    cp "$TOOLS/sdklauncher.exe" "$TEMP_SDK_DIR/SDK Setup.exe"
-    mv "$TOOLS/sdklauncher.exe" "$LIB/SDK Setup.exe"
+    cp "$TOOLS/sdklauncher.exe" "$TEMP_SDK_DIR/SDK Manager.exe"
+    mv "$TOOLS/sdklauncher.exe" "$LIB/SDK Manager.exe"
 
     # If you want the emulator NOTICE in the tools dir, uncomment the following line:
     # cp -v external/qemu/NOTICE "$TOOLS"/emulator_NOTICE.txt
@@ -184,15 +184,15 @@
     [[ -n $NEED_MGWZ ]] && cp -v $CYG_MGWZ_PATH "$TOOLS"/
 
     # Update a bunch of bat files
-    cp -v sdk/files/post_tools_install.bat            "$LIB"/
-    cp -v sdk/files/find_java.bat                     "$LIB"/
-    cp -v sdk/apkbuilder/etc/apkbuilder.bat           "$TOOLS"/
-    cp -v sdk/ddms/app/etc/ddms.bat                   "$TOOLS"/
-    cp -v sdk/traceview/etc/traceview.bat             "$TOOLS"/
-    cp -v sdk/hierarchyviewer/etc/hierarchyviewer.bat "$TOOLS"/
-    cp -v sdk/layoutopt/app/etc/layoutopt.bat         "$TOOLS"/
-    cp -v sdk/draw9patch/etc/draw9patch.bat           "$TOOLS"/
-    cp -v sdk/sdkmanager/app/etc/android.bat          "$TOOLS"/
+    cp -v sdk/files/post_tools_install.bat                 "$LIB"/
+    cp -v sdk/files/find_java.bat                          "$LIB"/
+    cp -v sdk/apkbuilder/etc/apkbuilder.bat                "$TOOLS"/
+    cp -v sdk/ddms/app/etc/ddms.bat                        "$TOOLS"/
+    cp -v sdk/traceview/etc/traceview.bat                  "$TOOLS"/
+    cp -v sdk/hierarchyviewer2/app/etc/hierarchyviewer.bat "$TOOLS"/
+    cp -v sdk/layoutopt/app/etc/layoutopt.bat              "$TOOLS"/
+    cp -v sdk/draw9patch/etc/draw9patch.bat                "$TOOLS"/
+    cp -v sdk/sdkmanager/app/etc/android.bat               "$TOOLS"/
 
     # Put the JetCreator tools, content and docs (not available in the linux SDK)
     JET="$TOOLS/Jet"
diff --git a/build/tools/patch_windows_sdk.sh b/build/tools/patch_windows_sdk.sh
index edc8541..3cc0875 100755
--- a/build/tools/patch_windows_sdk.sh
+++ b/build/tools/patch_windows_sdk.sh
@@ -15,8 +15,6 @@
     echo "Instead, found: ${PLATFORMS[@]}"
     exit 1
 fi
-THE_PLATFORM=${PLATFORMS[0]}
-PLATFORM_TOOLS=$THE_PLATFORM/tools
 
 # Package USB Driver
 if [[ -n "$USB_DRIVER_HOOK" ]]; then
@@ -25,6 +23,7 @@
 
 # Remove obsolete stuff from tools & platform
 TOOLS=$TEMP_SDK_DIR/tools
+PLATFORM_TOOLS=$TEMP_SDK_DIR/platform-tools
 LIB=$TEMP_SDK_DIR/tools/lib
 rm $V $TOOLS/{android,apkbuilder,ddms,dmtracedump,draw9patch,emulator,etc1tool}
 rm $V $TOOLS/{hierarchyviewer,hprof-conv,layoutopt,mksdcard,sqlite3,traceview,zipalign}
@@ -39,10 +38,10 @@
 mkdir -pv $LIB/x86_64
 cp $V ${TOPDIR}prebuilt/windows-x86_64/swt/swt.jar  $LIB/x86_64/
 
-# Copy the SDK Setup (aka sdklauncher) to the root of the SDK (it was copied in tools above)
+# Copy the SDK Manager (aka sdklauncher) to the root of the SDK (it was copied in tools above)
 # and move it also in SDK/tools/lib (so that tools updates can update the root one too)
-cp $TOOLS/sdklauncher.exe $TEMP_SDK_DIR/"SDK Setup.exe"
-mv $TOOLS/sdklauncher.exe $LIB/"SDK Setup.exe"
+cp $TOOLS/sdklauncher.exe $TEMP_SDK_DIR/"SDK Manager.exe"
+mv $TOOLS/sdklauncher.exe $LIB/"SDK Manager.exe"
 
 # Copy the emulator NOTICE in the tools dir
 cp $V ${TOPDIR}external/qemu/NOTICE $TOOLS/emulator_NOTICE.txt
@@ -51,15 +50,15 @@
 [[ -n $NEED_MGWZ ]] && cp $V $CYG_MGWZ_PATH $TOOLS/
 
 # Update a bunch of bat files
-cp $V ${TOPDIR}sdk/files/post_tools_install.bat            $LIB/
-cp $V ${TOPDIR}sdk/files/find_java.bat                     $LIB/
-cp $V ${TOPDIR}sdk/apkbuilder/etc/apkbuilder.bat           $TOOLS/
-cp $V ${TOPDIR}sdk/ddms/app/etc/ddms.bat                   $TOOLS/
-cp $V ${TOPDIR}sdk/traceview/etc/traceview.bat             $TOOLS/
-cp $V ${TOPDIR}sdk/hierarchyviewer/etc/hierarchyviewer.bat $TOOLS/
-cp $V ${TOPDIR}sdk/layoutopt/app/etc/layoutopt.bat         $TOOLS/
-cp $V ${TOPDIR}sdk/draw9patch/etc/draw9patch.bat           $TOOLS/
-cp $V ${TOPDIR}sdk/sdkmanager/app/etc/android.bat          $TOOLS/
+cp $V ${TOPDIR}sdk/files/post_tools_install.bat                 $LIB/
+cp $V ${TOPDIR}sdk/files/find_java.bat                          $LIB/
+cp $V ${TOPDIR}sdk/apkbuilder/etc/apkbuilder.bat                $TOOLS/
+cp $V ${TOPDIR}sdk/ddms/app/etc/ddms.bat                        $TOOLS/
+cp $V ${TOPDIR}sdk/traceview/etc/traceview.bat                  $TOOLS/
+cp $V ${TOPDIR}sdk/hierarchyviewer2/app/etc/hierarchyviewer.bat $TOOLS/
+cp $V ${TOPDIR}sdk/layoutopt/app/etc/layoutopt.bat              $TOOLS/
+cp $V ${TOPDIR}sdk/draw9patch/etc/draw9patch.bat                $TOOLS/
+cp $V ${TOPDIR}sdk/sdkmanager/app/etc/android.bat               $TOOLS/
 
 # Put the JetCreator tools, content and docs (not available in the linux SDK)
 JET=$TOOLS/Jet
diff --git a/cmds/monkey/src/com/android/commands/monkey/Monkey.java b/cmds/monkey/src/com/android/commands/monkey/Monkey.java
index 71fde13..3973f82 100644
--- a/cmds/monkey/src/com/android/commands/monkey/Monkey.java
+++ b/cmds/monkey/src/com/android/commands/monkey/Monkey.java
@@ -404,6 +404,8 @@
         // Set ro.monkey if it's not set yet.
         SystemProperties.set("ro.monkey", "true");
 
+        Process.setArgV0("com.android.commands.monkey");
+
         int resultCode = (new Monkey()).run(args);
         System.exit(resultCode);
     }
@@ -916,6 +918,9 @@
         int eventCounter = 0;
         int cycleCounter = 0;
 
+        boolean shouldReportAnrTraces = false;
+        boolean shouldReportDumpsysMemInfo = false;
+        boolean shouldAbort = false;
         boolean systemCrashed = false;
 
         // TO DO : The count should apply to each of the script file.
@@ -926,12 +931,12 @@
                     mRequestProcRank = false;
                 }
                 if (mRequestAnrTraces) {
-                    reportAnrTraces();
                     mRequestAnrTraces = false;
+                    shouldReportAnrTraces = true;
                 }
                 if (mRequestDumpsysMemInfo) {
-                    reportDumpsysMemInfo();
                     mRequestDumpsysMemInfo = false;
+                    shouldReportDumpsysMemInfo = true;
                 }
                 if (mMonitorNativeCrashes) {
                     // first time through, when eventCounter == 0, just set up
@@ -942,12 +947,29 @@
                     }
                 }
                 if (mAbort) {
-                    System.out.println("** Monkey aborted due to error.");
-                    System.out.println("Events injected: " + eventCounter);
-                    return eventCounter;
+                    shouldAbort = true;
                 }
             }
 
+            // Report ANR, dumpsys after releasing lock on this.
+            // This ensures the availability of the lock to Activity controller's appNotResponding
+            if (shouldReportAnrTraces) {
+               shouldReportAnrTraces = false;
+               reportAnrTraces();
+            }
+
+            if (shouldReportDumpsysMemInfo) {
+               shouldReportDumpsysMemInfo = false;
+               reportDumpsysMemInfo();
+            }
+
+            if (shouldAbort) {
+               shouldAbort = false;
+               System.out.println("** Monkey aborted due to error.");
+               System.out.println("Events injected: " + eventCounter);
+               return eventCounter;
+            }
+
             // In this debugging mode, we never send any events. This is
             // primarily here so you can manually test the package or category
             // limits, while manually exercising the system.
diff --git a/docs/howto_SDK_git_cygwin.txt b/docs/howto_SDK_git_cygwin.txt
deleted file mode 100644
index 622c592..0000000
--- a/docs/howto_SDK_git_cygwin.txt
+++ /dev/null
@@ -1,189 +0,0 @@
-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.
-
-
-Subject: How to get the android source code using Cygwin and Git
-Date:    2009/04/27
-Updated: 2009/05/21
-Updated: 2010/03/30
-
-
-Table of content:
-  1- Goals and Requirements
-  2- Getting the code, the simple way
-  3- SSH issues
-  4- Advanced Tricks
-
-
--------------------------
-1- Goals and Requirements
--------------------------
-
-This document explains how to checkout the Android source from the git
-repositories under Windows.
-
-As stated in development/docs/howto_build_SDK.txt, one can't build the whole
-Android source code under Windows. You can only build the SDK tools for
-Windows.
-
-There are a number of caveats in checking out the code from Git under Windows. 
-This document tries to explain them.
-
-First you will need to meet the following requirements:
-- You must have Cygwin installed. But wait! You CANNOT use the latest Cygwin 1.7.
-  Instead you MUST use the "legacy Cygwin 1.5" that you can find at this page:
-
-    http://cygwin.org/win-9x.html
-
-  Don't mind the page title, just grab setup-legacy.exe and it will works just fine
-  under XP or Vista.
-
-- You must install Cyginw using the "Unix / Binary" mode.
-  If you don't do that, git will fail to properly compute some SHA1 keys.
-
-- You need the "git" and "curl" packages to checkout the code.
-  If you plan to contribute, you might want to get "gitk" also.
-
-  Note: if you want to build the SDK, check the howto_build_SDK.txt file
-  for a list of extra required packages.
-  The short summary is that you need at least these:
-    autoconf, bison, curl, flex, gcc, g++, git, gnupg, make, mingw-zlib, python, unzip, zip
-  and you must avoid the "readline" package.
-
-
------------------------------------
-2- Getting the code, the simple way
------------------------------------
-
-Out of the box, "repo" and "git" will work just fine under Cygwin:
-
-  $ repo init -u git://android.git.kernel.org/platform/manifest.git
-  $ repo sync
-
-And you're done. You can build as explained in howto_build_SDK.txt and ignore
-the rest of this document.
-
-
--------------
-3- SSH issues
--------------
-
-If you maintain your own private repository using an SSH server, you might get
-some "mux/ssh" errors. In this case try this:
-
-  $ repo init -u ssh://my.private.ssh.repo/platform/manifest.git
-  $ export GIT_SSH=ssh
-  $ repo sync
-
-
-------------------
-4- Advanced Tricks
-------------------
-
-There is one remaining issue with the default repo/git options:
-
-If you plan on contributing, you will notice that even after a fresh "repo
-sync" some projects are marked as having modified files. This happens on the
-"bionic" and the "external/iptables" project. The issue is that they have files
-which have the same name yet differ only by their case-sensitivity. Since the
-Windows filesystem is not case-sensitive, this confuses Git.
-
-Solution: we can simply ignore these projects as they are not needed to build
-the Windows SDK.
-
-To do this you just need to create a file .repo/local_manifest.xml that
-provides a list of projects to ignore:
-
-<?xml version="1.0" encoding="UTF-8"?>
-<manifest>
-  <remove-project name="platform/external/iptables" />
-</manifest>
-
-The other thing we can do is tell git not to track the files that cause
-problems:
-
-  cd bionic
-  git update-index --assume-unchanged \
-    libc/kernel/common/linux/netfilter/xt_CONNMARK.h \
-    libc/kernel/common/linux/netfilter/xt_MARK.h \
-    libc/kernel/common/linux/netfilter_ipv6/ip6t_HL.h
-
-  cd external/tcpdump;
-  git update-index --assume-unchanged \
-    tests/print-X.new \
-    tests/print-XX.new
-
-
-Here's a script that takes care of all these details. It performs the repo
-init, creates the appropriate local_manifest.xml, does a repo sync as
-needed and tell git to ignore the offending files:
-
-------------
-#!/bin/bash
-
-set -e  # fail on errors
-
-URL=ssh://android-git.corp.google.com:29418/platform/manifest.git
-BRANCH=donut
-if [ "$1" == "-b" ]; then shift; BRANCH=$1; shift; fi
-
-# repo init if there's no .repo directory
-if [[ ! -d .repo ]]; then
-    repo init -u $URL -b $BRANCH
-fi
-
-# create a local_manifest to exclude projects that cause problems under Windows
-# due to the case-insenstivines of the file system.
-L=.repo/local_manifest.xml
-if [[ ! -f $L ]]; then
-
-    cat > $L <<EOF
-<?xml version="1.0" encoding="UTF-8"?>
-<manifest>
-<remove-project name="platform/external/iptables" />
-</manifest>
-EOF
-fi
-
-# sync using the native ssh client if necessary
-[[ $URL != ${URL/ssh/} ]] && export GIT_SSH=ssh
-repo sync $@
-
-
-# These files cause trouble too, we need to ignore them
-(cd bionic;
-git update-index --assume-unchanged \
-    libc/kernel/common/linux/netfilter/xt_CONNMARK.h \
-    libc/kernel/common/linux/netfilter/xt_MARK.h \
-    libc/kernel/common/linux/netfilter_ipv6/ip6t_HL.h
-)
-(cd external/tcpdump;
-git update-index --assume-unchanged \
-    tests/print-X.new \
-    tests/print-XX.new
-)
-------------
-
-Simply extract this to a "my_sync.sh" file and try the following:
-  $ mkdir android_src
-  $ cd android_src
-  $ chmod +x mysync.sh
-  $ ./mysync.sh
-
-
--end-
-
-
-
-
diff --git a/docs/howto_build_SDK.txt b/docs/howto_build_SDK.txt
deleted file mode 100644
index e09440b..0000000
--- a/docs/howto_build_SDK.txt
+++ /dev/null
@@ -1,305 +0,0 @@
-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.
-
-
-Subject: How to build an Android SDK & ADT Eclipse plugin.
-Date:    2009/03/27
-Updated: 2010/03/30
-
-
-Table of content:
-  0- License
-  1- Foreword
-  2- Building an SDK for MacOS and Linux
-  3- Building an SDK for Windows
-  4- Building an ADT plugin for Eclipse
-  5- Conclusion
-
-
-
-----------
-0- License
-----------
-
- 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.
-
-
-
------------
-1- Foreword
------------
-
-This document explains how to build the Android SDK and the ADT Eclipse plugin.
-
-It is designed for advanced users which are proficient with command-line
-operations and know how to setup the pre-required software.
-
-Basically it's not trivial yet when done right it's not that complicated.
-
-
-
---------------------------------------
-2- Building an SDK for MacOS and Linux
---------------------------------------
-
-First, setup your development environment and get the Android source code from
-git as explained here:
-
-  http://source.android.com/download
-
-For example for the cupcake branch:
-
-  $ mkdir ~/my-android-git
-  $ cd ~/my-android-git
-  $ repo init -u git://android.git.kernel.org/platform/manifest.git -b cupcake
-  $ repo sync
-
-Then once you have all the source, simply build the SDK using:
-
-  $ cd ~/my-android-git
-  $ . build/envsetup.sh
-  $ lunch sdk-eng
-  $ make sdk
-
-This will take a while, maybe between 20 minutes and several hours depending on
-your machine. After a while you'll see this in the output:
-
-  Package SDK: out/host/darwin-x86/sdk/android-sdk_eng.<build-id>_mac-x86.zip
-
-Some options:
-
-- Depending on your machine you can tell 'make' to build more things in
-  parallel, e.g. if you have a dual core, use "make -j4 sdk" to build faster.
-
-- You can define "BUILD_NUMBER" to control the build identifier that gets
-  incorporated in the resulting archive. The default is to use your username.
-  One suggestion is to include the date, e.g.:
-
-  $ export BUILD_NUMBER=${USER}-`date +%Y%m%d-%H%M%S`
-
-  There are certain characters you should avoid in the build number, typically
-  everything that might confuse 'make' or your shell. So for example avoid
-  punctuation and characters like $ & : / \ < > , and .
-
-
-
-------------------------------
-3- Building an SDK for Windows
-------------------------------
-
-A- SDK pre-requisite
---------------------
-
-First you need to build an SDK for MacOS and Linux. The Windows build works by
-updating an existing MacOS or Linux SDK zip file and replacing the unix
-binaries by Windows binaries.
-
-
-
-B- Cygwin pre-requisite & code checkout
----------------------------------------
-
-You must have Cygwin installed. But wait! You CANNOT use the latest Cygwin 1.7.
-Instead you MUST use the "legacy Cygwin 1.5" that you can find at this page:
-
-  http://cygwin.org/win-9x.html
-
-Don't mind the page title, just grab setup-legacy.exe and it will works just fine
-under XP or Vista.
-
-  
-Now configure it:
-- When installing Cygwin, set Default Text File Type to Unix/binary, not DOS/text.
-  This is really important, otherwise you will get errors when trying to
-  checkout code using git.
-- Packages that you must install or not:
-  - Required packages: autoconf, bison, curl, flex, gcc, g++, git, gnupg, make,
-                       mingw-zlib, python, zip, unzip.
-  - Suggested extra packages: diffutils, emacs, openssh, rsync, vim, wget.
-  - Packages that must not be installed: readline.
-
-Once you installed Cygwin properly, checkout the code from git as you did
-for MacOS or Linux. Make sure to get the same branch, and if possible keep
-it as close to the other one as possible:
-
-  $ mkdir ~/my-android-git
-  $ cd ~/my-android-git
-  $ repo init -u git://android.git.kernel.org/platform/manifest.git -b cupcake
-  $ repo sync
-
-
-
-C- Building the Windows SDK
----------------------------
-
-Now it's time to build that Windows SDK. You need:
-- The path to the MacOS or Linux SDK zip.
-- A directory where to place the final SDK. It will also hold some temporary
-  files.
-- The build number will be extracted from the SDK zip filename, but this will
-  only work if that build number has no underscores in it. It is suggested you
-  just define SDK_NUMBER (and not BUILD_NUMBER!) on the command line before
-  invoking the script.
-
-  Note that the "SDK number" is really a free identifier of your choice. It
-  doesn't need to be strictly a number. As always it is suggested you avoid
-  too much punctuation and special shell/make characters. Underscores cannot
-  be used.
-
-
-To summarize, the steps on the command line would be something like this:
-
-  $ mkdir ~/mysdk
-  $ export SDK_NUMBER=${USER}-`date +%Y%m%d-%H%M%S`
-  $ cd ~/my-android-git
-  $ development/build/tools/make_windows_sdk.sh /path/to/macos/or/linux/sdk.zip ~/mysdk
-
-This will take a while to build some Windows-specific binaries, including the
-emulator, unzip the previous zip, rename & replace things and rezip the final
-Windows SDK zip file. A typical build time should be around 5-10 minutes.
-
-
-
--------------------------------------
-4- Building an ADT plugin for Eclipse
--------------------------------------
-
-Requirements:
-- You can currently only build an ADT plugin for Eclipse under Linux.
-- You must have a working version of Eclipse 3.4 "ganymede" RCP installed.
-- You need X11 to run Eclipse at least once.
-- You need a lot of patience. The trick is to do the initial setup correctly
-  once, after it's a piece of cake.
-
-
-
-A- Pre-requisites
------------------
-
-Note for Ubuntu or Debian users: your apt repository probably only has Eclipse
-3.2 available and it's probably not suitable to build plugins in the first
-place. Forget that and install a working 3.4 manually as described below.
-
-- Visit http://www.eclipse.org/downloads/ to grab the
-  "Eclipse for RCP/Plug-in Developers (176 MB)" download for Linux.
-  32-bit and 64-bit versions are available, depending on your Linux installation.
-
-  Note: we've always used a 32-bit one, so use the 64-bit one at your own risk.
-
-  Note: Eclipse comes in various editions. Do yourself a favor and just stick
-  to the RCP for building this plugin. For example the J2EE contains too many
-  useless features that will get in the way, and the "Java" version lacks some
-  plugins you need to build other plugins. Please just use the RCP one.
-
-- Unpack "eclipse-rcp-ganymede-SR2-linux-gtk.tar.gz" in the directory of
-  your choice, e.g.:
-
-  $ mkdir ~/eclipse-3.4
-  $ cd ~/eclipse-3.4
-  $ tar xvzf eclipse-rcp-ganymede-SR2-linux-gtk.tar.gz
-
-  This will create an "eclipse" directory in the current directory.
-
-- Set ECLIPSE_HOME to that "eclipse" directory:
-
-  $ export ECLIPSE_HOME=~/eclipse-3.4/eclipse
-
-  Note: it is important you set ECLIPSE_HOME before starting the build.
-  Otherwise the build process will try to download and install its own Eclipse
-  installation in /buildroot, which is probably limited to root.
-
-- Now, before you can build anything, it is important that you start Eclipse
-  *manually* once using the same user that you will use to build later. That's
-  because your Eclipse installation is not finished: Eclipse must be run at
-  least once to create some files in ~/.eclipse/. So run Eclipse now:
-
-  $ ~/eclipse-3.4/eclipse/eclipse &
-
-  Wait for it load, create a workspace when requested and then simply quit
-  using the File > Quit menu. That's it. You won't need to run it manually
-  again.
-
-
-
-B- Building ADT
----------------
-
-Finally, you have Eclipse, it's installed and it created its own config files,
-so now you can build your ADT plugin. To do that you'll change directories to
-your git repository and invoke the build script by giving it a destination
-directory and an optional build number:
-
-  $ mkdir ~/mysdk
-  $ cd ~/my-android-git   # <-- this is where you did your "repo sync"
-  $ development/tools/eclipse/scripts/build_server.sh ~/mysdk $USER
-
-The first argument is the destination directory. It must be absolute. Do not
-give a relative destination directory such as "../mysdk". This will make the
-Eclipse build fail with a cryptic message:
-
-  BUILD SUCCESSFUL
-  Total time: 1 minute 5 seconds
-  **** Package in ../mysdk
-  Error: Build failed to produce ../mysdk/android-eclipse
-  Aborting
-
-The second argument is the build "number". The example used "$USER" but it
-really is a free identifier of your choice. It cannot contain spaces nor
-periods (dashes are ok.) If the build number is missing, a build timestamp will
-be used instead in the filename.
-
-The build should take something like 5-10 minutes.
-
-
-When the build succeeds, you'll see something like this at the end of the
-output:
-
-  ZIP of Update site available at ~/mysdk/android-eclipse-v200903272328.zip
-or
-  ZIP of Update site available at ~/mysdk/android-eclipse-<buildnumber>.zip
-
-When you load the plugin in Eclipse, its feature and plugin name will look like
-"com.android.ide.eclipse.adt_0.9.0.v200903272328-<buildnumber>.jar". The
-internal plugin ID is always composed of the package, the build timestamp and
-then your own build identifier (a.k.a. the "build number"), if provided. This
-means successive builds with the same build identifier are incremental and
-Eclipse will know how to update to more recent ones.
-
-
-
--------------
-5- Conclusion
--------------
-
-This completes the howto guide on building your own SDK and ADT plugin.
-Feedback is welcome on the public Android Open Source forums:
-  http://source.android.com/discuss
-
-If you are upgrading from a pre-cupcake to a cupcake or later SDK please read
-the accompanying document "howto_use_cupcake_sdk.txt".
-
--end-
-
diff --git a/docs/howto_use_cupcake_sdk.txt b/docs/howto_use_cupcake_sdk.txt
deleted file mode 100644
index b131230..0000000
--- a/docs/howto_use_cupcake_sdk.txt
+++ /dev/null
@@ -1,371 +0,0 @@
-Subject: How to build use a Cupcake Android SDK & ADT Eclipse plugin.
-Date:    2009/03/27
-
-
-Table of content:
-  0- License
-  1- Foreword
-  2- Installation steps
-  3- For Eclipse users
-  4- For Ant users
-  5- Targets, AVDs, Emulator changes
-  6- Conclusion
-
-
-
-----------
-0- License
-----------
-
- 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.
-
-
-
------------
-1- Foreword
------------
-
-This explains how to use the "new" SDK provided starting with cupcake.
-The new SDK has as a different structure than the pre-cupcake ones.
-
-This means:
-- The new SDK does not work with older Eclipse plugins (ADT 0.8)
-- The old SDKs (1.0 and 1.1) do NOT work with this Eclipse plugin (ADT 0.9)
-
-
-
-----------------------
-2- Installation steps
-----------------------
-
-First you will need to grab the zip of the SDK for your platform or build it
-yourself. Please refer to the accompanying document "howto_build_SDK.txt" if
-needed.
-
-Unzip the SDK somewhere. We'll call that directory "SDK" in command-line
-examples.
-
-Grab the new ADT Eclipse plugin zip file or build it yourself. Keep it
-somewhere (no need to unzip).
-
-
-
---------------------
-3- For Eclipse users
---------------------
-
-
-Below we'll explain how you can upgrade your Eclipse install to the new plugin.
-If you already have a working Eclipse installation with a pre-0.9 ADT,
-another suggestion is to simply install a new copy of Eclipse and create a
-new empty workspace. This is just a precaution. The update process should
-be otherwise harmless.
-
-
-
-A- Setting up Eclipse
----------------------
-
-- You must have Eclipse 3.3 or 3.4. Eclipse 3.2 is not longer supported.
-
-  There are many flavors, or "editions", of Eclipse. To develop, we'd recommend
-  the "Java" edition. The "RCP" one is totally suitable too. The J2EE one is
-  probably overkill.
-
-
-- If updating an existing Eclipse, use Help > Software Update and please
-  uninstall the two features of the previous ADT: the "editors" feature and the
-  ADT feature itself.
-
-  => If you don't you will get a conflict on editors when installing
-     the new one.
-
-- Using Help > Software Update, add a new "archived site", point it to the new
-  adt.zip (e.g. android-eclipse-<some-id>.zip), select the "Install" button at
-  the top right and restart eclipse as needed.
-
-- After it restarts, please use Window > Preferences > Android and select
-  the new SDK folder that you unzipped in paragraph 2.
-
-
-
-B- Updating older projects
---------------------------
-
-If you have pre-0.9 projects in your Eclipse workspace, or if you import them
-from your code repository, these projects will fail to build at first.
-
-First right-click on the project and select "Properties":
-
-- In the properties, open the Android panel and select the platform to use.
-  The SDK comes with a 1.5 platform. Select it and close the properties panel.
-- Do a clean build.
-
-
-The new plugin creates a "gen" folder in your project where it puts the R.java
-and all automatically generated AIDL java files. If you get an error such as:
-
-  "The type R is already defined"
-
-that means you must check to see if your old R.java or your old auto-generated
-AIDL Java files are still present in the "src" folder. If yes, remove them.
-
-Note: this does not apply to your own hand-crafted parcelable AIDL java files.
-
-Note: if you want to reuse the project with an older Eclipse ADT install,
-      simply remove the "gen" folder from the build path of the project.
-
-
-C- New Wizards
---------------
-
-The "New Android Project" wizard has been expanded to use the multi-platform
-capabilities of the new SDK.
-
-There is now a "New XML File" wizard that lets you create skeleton XML resource
-files for your Android projects. This makes it easier to create a new layout, a
-new strings file, etc.
-
-Both wizard are available via File > New... as well as new icons in the main
-icon bar. If you do not see the new icons, you may need to use Window > Reset
-Perspective on your Java perspective.
-
-
-Please see step 5 "Emulator changes" below for important details on how to run
-the emulator.
-
-
-
-----------------
-4- For Ant users
-----------------
-
-
-A- build.xml has changed
-------------------------
-
-You must re-create your build.xml file.
-
-First if you had customized your build.xml, make a copy of it:
-
-  $ cd my-project
-  $ cp build.xml build.xml.old
-
-
-Then use the new "android" tool to create a new build.xml:
-
-  $ SDK/tools/android update project --path /path/to/my-project
-
-or
-
-  $ cd my-project
-  $ SDK/tools/android update project --path .
-
-
-A "gen" folder will be created the first time you build and your R.java and
-your AIDL Java files will be generated in this "gen" folder. You MUST remove
-the old R.java and old auto-generated AIDL java files manually. (Note: this
-does not apply to your own hand-crafted parcelabe AIDL java files.)
-
-
-B- Where is activitycreator?
-----------------------------
-
-Note that the "activitycreator" tool has been replaced by the new "android"
-tool too. Example of how to create a new Ant project:
-
-  $ SDK/tools/android create project --path /path/to/my/project --name ProjectName
-      --package com.mycompany.myapp --activity MyActivityClass
-      --target 1 --mode activity
-
-
-Please see paragraph 5 below for important details on how to run the emulator
-and the meaning of that "--target 1" parameter.
-
-
-
-----------------------------------
-5- Targets, AVDs, Emulator changes
-----------------------------------
-
-This applies to BOTH Eclipse and Ant users.
-
-One major change with the emulator is that now you must pre-create an "Android
-Virtual Device" (a.k.a "AVD") before you run the emulator.
-
-
-
-A- What is an AVD and why do I need one?
-----------------------------------------
-
-What is an "AVD"? If you forget, just run:
-
-  $ SDK/tools/emulator -help-virtual-device
-
-  An Android Virtual Device (AVD) models a single virtual device running the
-  Android platform that has, at least, its own kernel, system image and data
-  partition.
-
-There is a lot more explanation given by the emulator. Please run the help
-command given above to read the rest.
-
-The bottom line is that you can create many emulator configurations, or "AVDs",
-each with their own system image and most important each with their own user
-data and SD card data. Then you tell Eclipse or the emulator which one to use
-to debug or run your applications.
-
-
-Note for Eclipse users: eventually there will be a user interface to do all of
-these operations. For right now, please use the command line interface.
-
-
-B- Listing targets and AVDs
----------------------------
-
-There is a new tool called "android" in the SDK that lets you know which
-"target" and AVDs you can use.
-
-A target is a specific version of Android that you can use. By default the SDK
-comes with an "Android 1.5" target, codenamed "cupcake". In the future there
-will be more versions of Android to use, e.g. "Android 2.0" or specific add-ons
-provided by hardware manufacturers. When you want to run an emulator, you need
-to specify a given flavor of Android: this is the "target".
-
-
-To learn about available targets in your SDK, use this command:
-
-  $ SDK/tools/android list targets
-
-This will give you an output such as:
-
-  Available Android targets:
-  [1] Android 1.5
-       API level: 3
-       Skins: HVGA (default), HVGA-L, HVGA-P, QVGA-L, QVGA-P
-
-Note the "[1]". Later you will need to reference this as "--target 1" on the
-command line.
-
-
-Similarly you can list the available AVDs:
-
-  $ SDK/tools/android list avds
-
-Which might output something as:
-
-  Available Android Virtual Devices:
-      Name: my_avd
-      Path: C:\Users\<username>\.android\avd\my_avd.avd
-    Target: Android 1.5 (API level 3)
-      Skin: 320x480
-    Sdcard: 16M
-
-
-
-C- Creating an AVD
-------------------
-
-To create a configuration:
-
-  $ SDK/tools/android create avd --name my_avd_name --target 1
-
-
-where "target 1" is the index of a target listed by "android list targets".
-
-The AVD name is purely an identifier used to refer to the AVD later.
-Since it is used as directory name, please avoid using shell or path specific
-characters.
-
-To learn the various options available when creating an AVD, simply type:
-
-  $ SDK/tools/android create avd
-
-The android tool will automatically print an explanation of required arguments.
-
-
-
-D- Invoking an AVD from the command-line
-----------------------------------------
-
-To use this AVD in the emulator from the command-line, type:
-
-  $ SDK/tools/emulator @my_avd_name
-
-
-For more options, please consult the emulator help:
-
-  $ SDK/tools/emulator -help-virtual-device
-
-
-
-E- Invoking an AVD from Eclipse
--------------------------------
-
-By default Android projects in Eclipse have an "automatic target" mode.
-In this mode, when a project is deployed in debug or run, it checks:
-- If there's one running device or emulator, this is used for deployment.
-- If there's more than one running device or emulator, a "device chooser" is
-  shown to let the user select which one to use.
-- If there are no running devices or emulators, ADT looks at available AVDs.
-  If one matches the project configuration (e.g. same API level), it is
-  automatically used.
-
-Alternatively you can edit the "launch configuration" on your Android project
-in Eclipse by selecting the menu Run > Run Configurations. In the "target" tab
-of the configuration, you can choose:
-
-- Manual or automatic targetting mode.
-
-  - Manual means to always present the device chooser.
-  - Automatic is the behavior explained above.
-
-- In automatic mode, which AVD is preferred. If none is selected, the first
-  suitable is used.
-
-
-F- AVD concurrency
-------------------
-
-You can no longer run several emulators at the same time on the same
-configuration.
-
-Before this used to put the second or more emulators in a transient read-only
-mode that would not save user data.
-
-Now you just need to create as many AVDs as you want to run emulators.
-
-For example if you are working on a client/server application for Android, you
-could create a "client" AVD and a "server" AVD then run them both at once. The
-emulator window will show you the AVD name so that you know which one is which.
-
-Example:
-
-  $ SDK/tools/android create avd --name client --target 1 --sdcard 16M --skin HVGA
-  $ SDK/tools/android create avd --name server --target 1 --sdcard 32M --skin HVGA-P
-  $ SDK/tools/emulator @server &
-  $ SDK/tools/emulator @client &
-
-
-
--------------
-6- Conclusion
--------------
-
-This completes the howto guide on how to use the new Cupcake SDK.
-Feedback is welcome on the public Android Open Source forums:
-  http://source.android.com/discuss
-
--end-
-
diff --git a/ide/eclipse/.classpath b/ide/eclipse/.classpath
index d535128..1994220 100644
--- a/ide/eclipse/.classpath
+++ b/ide/eclipse/.classpath
@@ -10,12 +10,14 @@
 	<classpathentry kind="src" path="packages/apps/Contacts/src"/>
 	<classpathentry kind="src" path="packages/apps/DeskClock/src"/>
 	<classpathentry kind="src" path="packages/apps/Email/src"/>
+	<classpathentry kind="src" path="packages/apps/Gallery3D/src"/>
 	<classpathentry kind="src" path="packages/apps/HTMLViewer/src"/>
 	<classpathentry kind="src" path="packages/apps/Launcher2/src"/>
 	<classpathentry kind="src" path="packages/apps/Mms/src"/>
 	<classpathentry kind="src" path="packages/apps/PackageInstaller/src"/>
 	<classpathentry kind="src" path="packages/apps/Phone/src"/>
 	<classpathentry kind="src" path="packages/apps/QuickSearchBox/src"/>
+	<classpathentry kind="src" path="packages/apps/Provision/src"/>
 	<classpathentry kind="src" path="packages/apps/Settings/src"/>
 	<classpathentry kind="src" path="packages/apps/SoundRecorder/src"/>
 	<classpathentry kind="src" path="packages/apps/Stk/src"/>
@@ -31,7 +33,6 @@
 	<classpathentry kind="src" path="frameworks/base/cmds/input/src"/>
 	<classpathentry kind="src" path="frameworks/base/cmds/pm/src"/>
 	<classpathentry kind="src" path="frameworks/base/cmds/svc/src"/>
-	<classpathentry kind="src" path="frameworks/base/common/java"/>
 	<classpathentry kind="src" path="frameworks/base/core/java"/>
 	<classpathentry kind="src" path="frameworks/base/core/config/sdk"/>
 	<classpathentry kind="src" path="frameworks/base/graphics/java"/>
@@ -49,6 +50,7 @@
 	<classpathentry kind="src" path="frameworks/base/voip/java"/>
 	<classpathentry kind="src" path="frameworks/base/vpn/java"/>
 	<classpathentry kind="src" path="frameworks/base/wifi/java"/>
+	<classpathentry kind="src" path="frameworks/ex/common/java"/>
 	<classpathentry kind="src" path="development/samples/ApiDemos/src"/>
 	<classpathentry kind="src" path="development/samples/ApiDemos/tests/src"/>
 	<classpathentry kind="src" path="development/samples/Compass/src"/>
@@ -92,8 +94,6 @@
 	<classpathentry kind="src" path="external/apache-http/src"/>
 	<classpathentry kind="src" path="external/bouncycastle/src/main/java"/>
 	<classpathentry kind="src" path="external/nist-sip/java"/>
-	<classpathentry kind="lib" path="out/target/common/obj/JAVA_LIBRARIES/google-common_intermediates/javalib.jar"/>
-	<classpathentry kind="lib" path="out/target/common/obj/JAVA_LIBRARIES/gsf-client_intermediates/javalib.jar"/>
 	<classpathentry kind="lib" path="out/target/common/obj/JAVA_LIBRARIES/guava_intermediates/javalib.jar"/>
 	<classpathentry kind="lib" path="packages/apps/Calculator/arity-2.1.2.jar"/>
 	<classpathentry kind="output" path="out/target/common/obj/JAVA_LIBRARIES/android_stubs_current_intermediates/classes"/>
diff --git a/pdk/README b/pdk/README
index d9f8996..0acb1eb 100644
--- a/pdk/README
+++ b/pdk/README
@@ -11,7 +11,7 @@
 
 If that doesn't work, go through the instructions on
 
-  http://source.android.com/download again.
+  http://source.android.com/source/download.html again.
 
 
 2) from the root
diff --git a/pdk/docs/source/git-repo.jd b/pdk/docs/source/git-repo.jd
index c5a75e2..8905780 100644
--- a/pdk/docs/source/git-repo.jd
+++ b/pdk/docs/source/git-repo.jd
@@ -288,14 +288,13 @@
  
 Getting started with the Android source code:
 <ul>
-  <li><a href="http://source.android.com/download">Get source</a></li> 
-  <li><a href="http://source.android.com/submit-patches/code-style-guide">Code Style Guide</a></li> 
+  <li><a href="http://source.android.com/source/download.html">Get source</a></li> 
+  <li><a href="http://source.android.com/source/code-style.html">Code Style Guide</a></li> 
 </ul> 
  
 Repo and Git resources:
 <ul>
-  <li><a href="http://source.android.com/download/using-repo#TOC-Git-and-Repo-cheatsheet">Git and Repo cheat sheet</a></li> 
-  <li><a href="http://source.android.com/download/using-repo">Using Repo and Git</a></li> 
+  <li><a href="http://source.android.com/source/git-repo.html">Using Repo and Git</a></li> 
   <li>The <a href="http://book.git-scm.com/">Git Community Book</a> maintained by Scott Chacon</li> 
   <li><a href="http://git.or.cz/gitwiki/FrontPage">GitWiki</a></li> 
   <li><a href="http://www.kernel.org/pub/software/scm/git/docs/">Git Manual Page</a></li> 
@@ -304,7 +303,7 @@
  
 Documentation on specific tasks:
 <ul>
-  <li><a href="http://source.android.com/documentation/building-for-dream">Building for an Android Developer Phone</a></li> 
+  <li><a href="http://source.android.com/source/building-dream.html">Building for an Android Developer Phone</a></li> 
 </ul> 
 -->
 
diff --git a/samples/ApiDemos/res/values/strings.xml b/samples/ApiDemos/res/values/strings.xml
index 1649a92..08be48e 100644
--- a/samples/ApiDemos/res/values/strings.xml
+++ b/samples/ApiDemos/res/values/strings.xml
@@ -515,7 +515,6 @@
     <string name="linear_layout_8_right">Right</string>
     <string name="linear_layout_10_from">From:</string>
     <string name="linear_layout_10_to">To:</string>
-    <string name="list_7_nothing">Nothing\u2026</string>
     <string name="radio_group_snack">Snack</string>
     <string name="radio_group_selection">"You have selected: "</string>
     <string name="radio_group_none">(none)</string>
@@ -939,8 +938,8 @@
     <!-- ============================ -->
 
     <string name="sms_warning">
-      WARNING: this demo can send actual text messages (one at a time), so be sure to
-      test with the Android emulator or have a text messaging plan with your carrier.
+        WARNING: this demo can send actual text messages (one at a time), so be sure to
+        test with the Android emulator or have a text messaging plan with your carrier.
     </string>
     <string name="sms_enable_receiver">Enable SMS broadcast receiver</string>
     <string name="sms_recipient_label">Recipient #</string>
@@ -950,4 +949,3 @@
     <string name="reply">Reply</string>
     <string name="dismiss">Dismiss</string>
 </resources>
-
diff --git a/samples/ApiDemos/src/com/example/android/apis/ApiDemos.java b/samples/ApiDemos/src/com/example/android/apis/ApiDemos.java
index 78b1fd7..39f24b6 100644
--- a/samples/ApiDemos/src/com/example/android/apis/ApiDemos.java
+++ b/samples/ApiDemos/src/com/example/android/apis/ApiDemos.java
@@ -52,8 +52,8 @@
         getListView().setTextFilterEnabled(true);
     }
 
-    protected List getData(String prefix) {
-        List<Map> myData = new ArrayList<Map>();
+    protected List<Map<String, Object>> getData(String prefix) {
+        List<Map<String, Object>> myData = new ArrayList<Map<String, Object>>();
 
         Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
         mainIntent.addCategory(Intent.CATEGORY_SAMPLE_CODE);
@@ -107,10 +107,11 @@
         return myData;
     }
 
-    private final static Comparator<Map> sDisplayNameComparator = new Comparator<Map>() {
+    private final static Comparator<Map<String, Object>> sDisplayNameComparator =
+        new Comparator<Map<String, Object>>() {
         private final Collator   collator = Collator.getInstance();
 
-        public int compare(Map map1, Map map2) {
+        public int compare(Map<String, Object> map1, Map<String, Object> map2) {
             return collator.compare(map1.get("title"), map2.get("title"));
         }
     };
@@ -128,7 +129,7 @@
         return result;
     }
 
-    protected void addItem(List<Map> data, String name, Intent intent) {
+    protected void addItem(List<Map<String, Object>> data, String name, Intent intent) {
         Map<String, Object> temp = new HashMap<String, Object>();
         temp.put("title", name);
         temp.put("intent", intent);
@@ -136,11 +137,11 @@
     }
 
     @Override
+    @SuppressWarnings("unchecked")
     protected void onListItemClick(ListView l, View v, int position, long id) {
-        Map map = (Map) l.getItemAtPosition(position);
+        Map<String, Object> map = (Map<String, Object>)l.getItemAtPosition(position);
 
         Intent intent = (Intent) map.get("intent");
         startActivity(intent);
     }
-
 }
diff --git a/samples/ApiDemos/src/com/example/android/apis/app/Animation.java b/samples/ApiDemos/src/com/example/android/apis/app/Animation.java
index 90831f5..5ba41c4 100644
--- a/samples/ApiDemos/src/com/example/android/apis/app/Animation.java
+++ b/samples/ApiDemos/src/com/example/android/apis/app/Animation.java
@@ -22,7 +22,6 @@
 import com.example.android.apis.view.Controls1;
 
 import android.app.Activity;
-import android.content.ComponentName;
 import android.content.Intent;
 import android.os.Bundle;
 import android.view.View;
diff --git a/samples/ApiDemos/src/com/example/android/apis/app/ContactsFilter.java b/samples/ApiDemos/src/com/example/android/apis/app/ContactsFilter.java
index bb843e5..d5b3deb 100644
--- a/samples/ApiDemos/src/com/example/android/apis/app/ContactsFilter.java
+++ b/samples/ApiDemos/src/com/example/android/apis/app/ContactsFilter.java
@@ -20,8 +20,6 @@
 // class is in a sub-package.
 import android.app.Activity;
 import android.content.ComponentName;
-import android.content.Context;
-import android.os.RemoteException;
 import android.os.Bundle;
 import android.view.View;
 import android.view.View.OnClickListener;
@@ -29,7 +27,6 @@
 
 import com.example.android.apis.R;
 
-
 /**
  * Front-end for launching {@link ContactsFilterInstrumentation} example
  * instrumentation class.
diff --git a/samples/ApiDemos/src/com/example/android/apis/app/ContactsFilterInstrumentation.java b/samples/ApiDemos/src/com/example/android/apis/app/ContactsFilterInstrumentation.java
index 04bb671..6895363 100644
--- a/samples/ApiDemos/src/com/example/android/apis/app/ContactsFilterInstrumentation.java
+++ b/samples/ApiDemos/src/com/example/android/apis/app/ContactsFilterInstrumentation.java
@@ -23,8 +23,6 @@
 import android.os.Bundle;
 import android.util.Log;
 
-import java.util.Map;
-
 /**
  * This is an example implementation of the {@link android.app.Instrumentation}
  * class, allowing you to run tests against application code.  The
diff --git a/samples/ApiDemos/src/com/example/android/apis/app/DefaultValues.java b/samples/ApiDemos/src/com/example/android/apis/app/DefaultValues.java
index 35bdf13..494a2ea 100644
--- a/samples/ApiDemos/src/com/example/android/apis/app/DefaultValues.java
+++ b/samples/ApiDemos/src/com/example/android/apis/app/DefaultValues.java
@@ -19,7 +19,6 @@
 import com.example.android.apis.ApiDemosApplication;
 import com.example.android.apis.R;
 
-import android.app.Application;
 import android.content.SharedPreferences;
 import android.os.Bundle;
 import android.preference.PreferenceActivity;
diff --git a/samples/ApiDemos/src/com/example/android/apis/app/ForegroundService.java b/samples/ApiDemos/src/com/example/android/apis/app/ForegroundService.java
index c7a2dfb..7e061ed 100644
--- a/samples/ApiDemos/src/com/example/android/apis/app/ForegroundService.java
+++ b/samples/ApiDemos/src/com/example/android/apis/app/ForegroundService.java
@@ -49,9 +49,9 @@
     static final String ACTION_BACKGROUND = "com.example.android.apis.BACKGROUND";
     
  // BEGIN_INCLUDE(foreground_compatibility)
-    private static final Class[] mStartForegroundSignature = new Class[] {
+    private static final Class<?>[] mStartForegroundSignature = new Class[] {
         int.class, Notification.class};
-    private static final Class[] mStopForegroundSignature = new Class[] {
+    private static final Class<?>[] mStopForegroundSignature = new Class[] {
         boolean.class};
     
     private NotificationManager mNM;
diff --git a/samples/ApiDemos/src/com/example/android/apis/app/LocalSample.java b/samples/ApiDemos/src/com/example/android/apis/app/LocalSample.java
index 1bb26e9..0e4b66e 100644
--- a/samples/ApiDemos/src/com/example/android/apis/app/LocalSample.java
+++ b/samples/ApiDemos/src/com/example/android/apis/app/LocalSample.java
@@ -20,8 +20,6 @@
 // class is in a sub-package.
 import android.app.Activity;
 import android.content.ComponentName;
-import android.content.Context;
-import android.os.RemoteException;
 import android.os.Bundle;
 import android.view.View;
 import android.view.View.OnClickListener;
@@ -29,7 +27,6 @@
 
 import com.example.android.apis.R;
 
-
 /**
  * Front-end for launching {@link LocalSampleInstrumentation} example
  * instrumentation class.
diff --git a/samples/ApiDemos/src/com/example/android/apis/app/LocalSampleInstrumentation.java b/samples/ApiDemos/src/com/example/android/apis/app/LocalSampleInstrumentation.java
index e0f6163..aabfec3 100644
--- a/samples/ApiDemos/src/com/example/android/apis/app/LocalSampleInstrumentation.java
+++ b/samples/ApiDemos/src/com/example/android/apis/app/LocalSampleInstrumentation.java
@@ -23,8 +23,6 @@
 import android.os.Bundle;
 import android.util.Log;
 
-import java.util.Map;
-
 /**
  * This is an example implementation of the {@link android.app.Instrumentation}
  * class demonstrating instrumentation against one of this application's sample
diff --git a/samples/ApiDemos/src/com/example/android/apis/app/LocalService.java b/samples/ApiDemos/src/com/example/android/apis/app/LocalService.java
index 859969c..0c7c108 100644
--- a/samples/ApiDemos/src/com/example/android/apis/app/LocalService.java
+++ b/samples/ApiDemos/src/com/example/android/apis/app/LocalService.java
@@ -45,6 +45,10 @@
 public class LocalService extends Service {
     private NotificationManager mNM;
 
+    // Unique Identification Number for the Notification.
+    // We use it on Notification start, and to cancel it.
+    private int NOTIFICATION = R.string.local_service_started;
+
     /**
      * Class for clients to access.  Because we know this service always
      * runs in the same process as its clients, we don't need to deal with
@@ -75,7 +79,7 @@
     @Override
     public void onDestroy() {
         // Cancel the persistent notification.
-        mNM.cancel(R.string.local_service_started);
+        mNM.cancel(NOTIFICATION);
 
         // Tell the user we stopped.
         Toast.makeText(this, R.string.local_service_stopped, Toast.LENGTH_SHORT).show();
@@ -110,8 +114,7 @@
                        text, contentIntent);
 
         // Send the notification.
-        // We use a layout id because it is a unique number.  We use it later to cancel.
-        mNM.notify(R.string.local_service_started, notification);
+        mNM.notify(NOTIFICATION, notification);
     }
 }
 //END_INCLUDE(service)
diff --git a/samples/ApiDemos/src/com/example/android/apis/app/NotificationDisplay.java b/samples/ApiDemos/src/com/example/android/apis/app/NotificationDisplay.java
index a6c20ea..25b5d56 100644
--- a/samples/ApiDemos/src/com/example/android/apis/app/NotificationDisplay.java
+++ b/samples/ApiDemos/src/com/example/android/apis/app/NotificationDisplay.java
@@ -24,14 +24,11 @@
 import android.app.NotificationManager;
 import android.content.Intent;
 import android.os.Bundle;
-import android.view.Gravity;
 import android.view.View;
 import android.view.WindowManager;
 import android.widget.ImageButton;
-import android.widget.LinearLayout;
 import android.widget.RelativeLayout;
 
-
 /**
  * Activity used by StatusBarNotification to show the notification to the user.
  */
diff --git a/samples/ApiDemos/src/com/example/android/apis/app/NotifyingController.java b/samples/ApiDemos/src/com/example/android/apis/app/NotifyingController.java
index a0de699..b8b4e3f 100644
--- a/samples/ApiDemos/src/com/example/android/apis/app/NotifyingController.java
+++ b/samples/ApiDemos/src/com/example/android/apis/app/NotifyingController.java
@@ -21,14 +21,12 @@
 import com.example.android.apis.R;
 
 import android.app.Activity;
-import android.content.ComponentName;
 import android.content.Intent;
 import android.os.Bundle;
 import android.view.View;
 import android.view.View.OnClickListener;
 import android.widget.Button;
 
-
 /**
  * Controller to start and stop a service. The serivce will update a status bar
  * notification every 5 seconds for a minute.
diff --git a/samples/ApiDemos/src/com/example/android/apis/app/NotifyingService.java b/samples/ApiDemos/src/com/example/android/apis/app/NotifyingService.java
index e580978..3b8139f 100644
--- a/samples/ApiDemos/src/com/example/android/apis/app/NotifyingService.java
+++ b/samples/ApiDemos/src/com/example/android/apis/app/NotifyingService.java
@@ -30,7 +30,6 @@
 import android.os.IBinder;
 import android.os.Parcel;
 import android.os.RemoteException;
-import android.widget.RemoteViews;
 
 /**
  * This is an example of service that will update its status bar balloon 
diff --git a/samples/ApiDemos/src/com/example/android/apis/app/PreferencesFromXml.java b/samples/ApiDemos/src/com/example/android/apis/app/PreferencesFromXml.java
index 23461c6..63bbac2 100644
--- a/samples/ApiDemos/src/com/example/android/apis/app/PreferencesFromXml.java
+++ b/samples/ApiDemos/src/com/example/android/apis/app/PreferencesFromXml.java
@@ -18,9 +18,7 @@
 
 import com.example.android.apis.R;
 
-import android.content.SharedPreferences;
 import android.os.Bundle;
-import android.preference.Preference;
 import android.preference.PreferenceActivity;
 
 public class PreferencesFromXml extends PreferenceActivity {
diff --git a/samples/ApiDemos/src/com/example/android/apis/app/QuickContactsDemo.java b/samples/ApiDemos/src/com/example/android/apis/app/QuickContactsDemo.java
index 1ee5742..004e568 100644
--- a/samples/ApiDemos/src/com/example/android/apis/app/QuickContactsDemo.java
+++ b/samples/ApiDemos/src/com/example/android/apis/app/QuickContactsDemo.java
@@ -75,8 +75,6 @@
         @Override
         public void bindView(View view, Context context, Cursor cursor) {
             final ContactListItemCache cache = (ContactListItemCache) view.getTag();
-            TextView nameView = cache.nameView;
-            QuickContactBadge photoView = cache.photoView;
             // Set the name
             cursor.copyStringToBuffer(SUMMARY_NAME_COLUMN_INDEX, cache.nameBuffer);
             int size = cache.nameBuffer.sizeCopied;
diff --git a/samples/ApiDemos/src/com/example/android/apis/app/ReceiveResult.java b/samples/ApiDemos/src/com/example/android/apis/app/ReceiveResult.java
index 4e248b9..22ae7f4 100644
--- a/samples/ApiDemos/src/com/example/android/apis/app/ReceiveResult.java
+++ b/samples/ApiDemos/src/com/example/android/apis/app/ReceiveResult.java
@@ -18,8 +18,6 @@
 
 // Need the following import to get access to the app resources, since this
 // class is in a sub-package.
-import java.util.Map;
-
 import com.example.android.apis.R;
 
 import android.app.Activity;
@@ -31,8 +29,6 @@
 import android.widget.Button;
 import android.widget.TextView;
 
-import java.util.Map;
-
 /**
  * Shows how an activity can send data to its launching activity when done.y.
  * <p>This can be used, for example, to implement a dialog alowing the user to
diff --git a/samples/ApiDemos/src/com/example/android/apis/app/RedirectGetter.java b/samples/ApiDemos/src/com/example/android/apis/app/RedirectGetter.java
index 982317c..c96e1bb 100644
--- a/samples/ApiDemos/src/com/example/android/apis/app/RedirectGetter.java
+++ b/samples/ApiDemos/src/com/example/android/apis/app/RedirectGetter.java
@@ -32,8 +32,11 @@
  */
 public class RedirectGetter extends Activity
 {
+    private String mTextPref;
+    private TextView mText;
+
     @Override
-	protected void onCreate(Bundle savedInstanceState)
+    protected void onCreate(Bundle savedInstanceState)
     {
         super.onCreate(savedInstanceState);
 
@@ -45,9 +48,12 @@
 
         // The text being set.
         mText = (TextView)findViewById(R.id.text);
+
+        // Display the stored values, or if not stored initialize with an empty String
+        loadPrefs();
     }
 
-    private final boolean loadPrefs()
+    private final void loadPrefs()
     {
         // Retrieve the current redirect values.
         // NOTE: because this preference is shared between multiple
@@ -58,10 +64,9 @@
         mTextPref = preferences.getString("text", null);
         if (mTextPref != null) {
             mText.setText(mTextPref);
-            return true;
+        } else {
+            mText.setText("");
         }
-
-        return false;
     }
 
     private OnClickListener mApplyListener = new OnClickListener()
@@ -79,8 +84,4 @@
             finish();
         }
     };
-
-    private String mTextPref;
-    TextView mText;
 }
-
diff --git a/samples/ApiDemos/src/com/example/android/apis/app/SetWallpaperActivity.java b/samples/ApiDemos/src/com/example/android/apis/app/SetWallpaperActivity.java
index 8630b1c..f3d4ffb 100644
--- a/samples/ApiDemos/src/com/example/android/apis/app/SetWallpaperActivity.java
+++ b/samples/ApiDemos/src/com/example/android/apis/app/SetWallpaperActivity.java
@@ -29,7 +29,6 @@
 import android.graphics.drawable.Drawable;
 import android.os.Bundle;
 import android.view.View;
-import android.view.WindowManager;
 import android.view.View.OnClickListener;
 import android.widget.Button;
 import android.widget.ImageView;
diff --git a/samples/ApiDemos/src/com/example/android/apis/app/WallpaperActivity.java b/samples/ApiDemos/src/com/example/android/apis/app/WallpaperActivity.java
index 8d7f5a1..7b5eea2 100644
--- a/samples/ApiDemos/src/com/example/android/apis/app/WallpaperActivity.java
+++ b/samples/ApiDemos/src/com/example/android/apis/app/WallpaperActivity.java
@@ -22,7 +22,6 @@
 
 import android.app.Activity;
 import android.os.Bundle;
-import android.view.WindowManager;
 
 /**
  * <h3>Wallpaper Activity</h3>
diff --git a/samples/ApiDemos/src/com/example/android/apis/graphics/AlphaBitmap.java b/samples/ApiDemos/src/com/example/android/apis/graphics/AlphaBitmap.java
index 8fff231..90d3450 100644
--- a/samples/ApiDemos/src/com/example/android/apis/graphics/AlphaBitmap.java
+++ b/samples/ApiDemos/src/com/example/android/apis/graphics/AlphaBitmap.java
@@ -18,15 +18,12 @@
 
 import com.example.android.apis.R;
 
-import android.app.Activity;
 import android.content.Context;
 import android.graphics.*;
 import android.os.Bundle;
-import android.view.KeyEvent;
 import android.view.*;
 
 import java.io.InputStream;
-import java.io.ByteArrayOutputStream;
 
 public class AlphaBitmap extends GraphicsActivity {
 
@@ -35,23 +32,23 @@
         super.onCreate(savedInstanceState);
         setContentView(new SampleView(this));
     }
-    
+
     private static class SampleView extends View {
         private Bitmap mBitmap;
         private Bitmap mBitmap2;
         private Bitmap mBitmap3;
         private Shader mShader;
-        
+
         private static void drawIntoBitmap(Bitmap bm) {
             float x = bm.getWidth();
             float y = bm.getHeight();
             Canvas c = new Canvas(bm);
             Paint p = new Paint();
             p.setAntiAlias(true);
-            
+
             p.setAlpha(0x80);
             c.drawCircle(x/2, y/2, x/2, p);
-            
+
             p.setAlpha(0x30);
             p.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC));
             p.setTextSize(60);
@@ -59,28 +56,28 @@
             Paint.FontMetrics fm = p.getFontMetrics();
             c.drawText("Alpha", x/2, (y-fm.ascent)/2, p);
         }
-        
+
         public SampleView(Context context) {
             super(context);
             setFocusable(true);
-            
+
             InputStream is = context.getResources().openRawResource(R.drawable.app_sample_code);
             mBitmap = BitmapFactory.decodeStream(is);
             mBitmap2 = mBitmap.extractAlpha();
             mBitmap3 = Bitmap.createBitmap(200, 200, Bitmap.Config.ALPHA_8);
             drawIntoBitmap(mBitmap3);
-            
+
             mShader = new LinearGradient(0, 0, 100, 70, new int[] {
                                          Color.RED, Color.GREEN, Color.BLUE },
                                          null, Shader.TileMode.MIRROR);
         }
-        
+
         @Override protected void onDraw(Canvas canvas) {
             canvas.drawColor(Color.WHITE);
 
             Paint p = new Paint();
             float y = 10;
-            
+
             p.setColor(Color.RED);
             canvas.drawBitmap(mBitmap, 10, y, p);
             y += mBitmap.getHeight() + 10;
diff --git a/samples/ApiDemos/src/com/example/android/apis/graphics/AnimateDrawable.java b/samples/ApiDemos/src/com/example/android/apis/graphics/AnimateDrawable.java
index 279b588..330924e 100644
--- a/samples/ApiDemos/src/com/example/android/apis/graphics/AnimateDrawable.java
+++ b/samples/ApiDemos/src/com/example/android/apis/graphics/AnimateDrawable.java
@@ -23,23 +23,23 @@
 import android.view.animation.Transformation;
 
 public class AnimateDrawable extends ProxyDrawable {
-    
+
     private Animation mAnimation;
     private Transformation mTransformation = new Transformation();
 
     public AnimateDrawable(Drawable target) {
         super(target);
     }
-    
+
     public AnimateDrawable(Drawable target, Animation animation) {
         super(target);
         mAnimation = animation;
     }
-    
+
     public Animation getAnimation() {
         return mAnimation;
     }
-    
+
     public void setAnimation(Animation anim) {
         mAnimation = anim;
     }
@@ -47,11 +47,11 @@
     public boolean hasStarted() {
         return mAnimation != null && mAnimation.hasStarted();
     }
-    
+
     public boolean hasEnded() {
         return mAnimation == null || mAnimation.hasEnded();
     }
-    
+
     @Override
     public void draw(Canvas canvas) {
         Drawable dr = getProxy();
@@ -69,4 +69,4 @@
         }
     }
 }
-    
+
diff --git a/samples/ApiDemos/src/com/example/android/apis/graphics/AnimateDrawables.java b/samples/ApiDemos/src/com/example/android/apis/graphics/AnimateDrawables.java
index 7c9473d..0398fbf 100644
--- a/samples/ApiDemos/src/com/example/android/apis/graphics/AnimateDrawables.java
+++ b/samples/ApiDemos/src/com/example/android/apis/graphics/AnimateDrawables.java
@@ -18,14 +18,14 @@
 
 import com.example.android.apis.R;
 
-import android.app.Activity;
 import android.content.Context;
-import android.graphics.*;
-import android.graphics.drawable.*;
-import android.view.animation.*;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.drawable.Drawable;
 import android.os.Bundle;
-import android.view.KeyEvent;
 import android.view.View;
+import android.view.animation.Animation;
+import android.view.animation.TranslateAnimation;
 
 public class AnimateDrawables extends GraphicsActivity {
 
@@ -34,7 +34,7 @@
         super.onCreate(savedInstanceState);
         setContentView(new SampleView(this));
     }
-    
+
     private static class SampleView extends View {
         private AnimateDrawable mDrawable;
 
@@ -45,17 +45,18 @@
 
             Drawable dr = context.getResources().getDrawable(R.drawable.beach);
             dr.setBounds(0, 0, dr.getIntrinsicWidth(), dr.getIntrinsicHeight());
-            
+
             Animation an = new TranslateAnimation(0, 100, 0, 200);
             an.setDuration(2000);
             an.setRepeatCount(-1);
             an.initialize(10, 10, 10, 10);
-            
+
             mDrawable = new AnimateDrawable(dr, an);
             an.startNow();
         }
-        
-        @Override protected void onDraw(Canvas canvas) {
+
+        @Override
+        protected void onDraw(Canvas canvas) {
             canvas.drawColor(Color.WHITE);
 
             mDrawable.draw(canvas);
diff --git a/samples/ApiDemos/src/com/example/android/apis/graphics/Arcs.java b/samples/ApiDemos/src/com/example/android/apis/graphics/Arcs.java
index ff8b38b..1bd07f9 100644
--- a/samples/ApiDemos/src/com/example/android/apis/graphics/Arcs.java
+++ b/samples/ApiDemos/src/com/example/android/apis/graphics/Arcs.java
@@ -20,7 +20,6 @@
 // class is in a sub-package.
 //import com.example.android.apis.R;
 
-import android.app.Activity;
 import android.content.Context;
 import android.graphics.*;
 import android.os.Bundle;
@@ -33,7 +32,7 @@
         super.onCreate(savedInstanceState);
         setContentView(new SampleView(this));
     }
-    
+
     private static class SampleView extends View {
         private Paint[] mPaints;
         private Paint mFramePaint;
@@ -43,27 +42,27 @@
         private float mStart;
         private float mSweep;
         private int mBigIndex;
-        
+
         private static final float SWEEP_INC = 2;
         private static final float START_INC = 15;
-        
+
         public SampleView(Context context) {
             super(context);
-            
+
             mPaints = new Paint[4];
             mUseCenters = new boolean[4];
             mOvals = new RectF[4];
-    
+
             mPaints[0] = new Paint();
             mPaints[0].setAntiAlias(true);
             mPaints[0].setStyle(Paint.Style.FILL);
             mPaints[0].setColor(0x88FF0000);
             mUseCenters[0] = false;
-            
+
             mPaints[1] = new Paint(mPaints[0]);
             mPaints[1].setColor(0x8800FF00);
             mUseCenters[1] = true;
-            
+
             mPaints[2] = new Paint(mPaints[0]);
             mPaints[2].setStyle(Paint.Style.STROKE);
             mPaints[2].setStrokeWidth(4);
@@ -73,36 +72,36 @@
             mPaints[3] = new Paint(mPaints[2]);
             mPaints[3].setColor(0x88888888);
             mUseCenters[3] = true;
-            
+
             mBigOval = new RectF(40, 10, 280, 250);
-            
+
             mOvals[0] = new RectF( 10, 270,  70, 330);
             mOvals[1] = new RectF( 90, 270, 150, 330);
             mOvals[2] = new RectF(170, 270, 230, 330);
             mOvals[3] = new RectF(250, 270, 310, 330);
-            
+
             mFramePaint = new Paint();
             mFramePaint.setAntiAlias(true);
             mFramePaint.setStyle(Paint.Style.STROKE);
             mFramePaint.setStrokeWidth(0);
         }
-        
+
         private void drawArcs(Canvas canvas, RectF oval, boolean useCenter,
                               Paint paint) {
             canvas.drawRect(oval, mFramePaint);
             canvas.drawArc(oval, mStart, mSweep, useCenter, paint);
         }
-        
+
         @Override protected void onDraw(Canvas canvas) {
             canvas.drawColor(Color.WHITE);
-            
+
             drawArcs(canvas, mBigOval, mUseCenters[mBigIndex],
                      mPaints[mBigIndex]);
-            
+
             for (int i = 0; i < 4; i++) {
                 drawArcs(canvas, mOvals[i], mUseCenters[i], mPaints[i]);
             }
-            
+
             mSweep += SWEEP_INC;
             if (mSweep > 360) {
                 mSweep -= 360;
diff --git a/samples/ApiDemos/src/com/example/android/apis/graphics/BitmapDecode.java b/samples/ApiDemos/src/com/example/android/apis/graphics/BitmapDecode.java
index 88f0c1d..6a8b542 100644
--- a/samples/ApiDemos/src/com/example/android/apis/graphics/BitmapDecode.java
+++ b/samples/ApiDemos/src/com/example/android/apis/graphics/BitmapDecode.java
@@ -18,36 +18,36 @@
 
 import com.example.android.apis.R;
 
-import android.app.Activity;
 import android.content.Context;
 import android.graphics.*;
 import android.graphics.drawable.*;
 import android.os.Bundle;
-import android.view.KeyEvent;
 import android.view.*;
 
-import java.io.IOException;
 import java.io.InputStream;
 import java.io.ByteArrayOutputStream;
 
 public class BitmapDecode extends GraphicsActivity {
-    
+
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(new SampleView(this));
     }
-    
+
     private static class SampleView extends View {
         private Bitmap mBitmap;
         private Bitmap mBitmap2;
         private Bitmap mBitmap3;
         private Bitmap mBitmap4;
         private Drawable mDrawable;
-        
+
         private Movie mMovie;
         private long mMovieStart;
-        
+
+        //Set to false to use decodeByteArray
+        private static final boolean DECODE_STREAM = true;
+
         private static byte[] streamToBytes(InputStream is) {
             ByteArrayOutputStream os = new ByteArrayOutputStream(1024);
             byte[] buffer = new byte[1024];
@@ -60,33 +60,33 @@
             }
             return os.toByteArray();
         }
-        
+
         public SampleView(Context context) {
             super(context);
             setFocusable(true);
-            
+
             java.io.InputStream is;
             is = context.getResources().openRawResource(R.drawable.beach);
-            
+
             BitmapFactory.Options opts = new BitmapFactory.Options();
             Bitmap bm;
-            
+
             opts.inJustDecodeBounds = true;
             bm = BitmapFactory.decodeStream(is, null, opts);
-            
+
             // now opts.outWidth and opts.outHeight are the dimension of the
             // bitmap, even though bm is null
-            
+
             opts.inJustDecodeBounds = false;    // this will request the bm
             opts.inSampleSize = 4;             // scaled down by 4
             bm = BitmapFactory.decodeStream(is, null, opts);
-            
+
             mBitmap = bm;
-            
+
             // decode an image with transparency
             is = context.getResources().openRawResource(R.drawable.frog);
             mBitmap2 = BitmapFactory.decodeStream(is);
-            
+
             // create a deep copy of it using getPixels() into different configs
             int w = mBitmap2.getWidth();
             int h = mBitmap2.getHeight();
@@ -96,32 +96,34 @@
                                            Bitmap.Config.ARGB_8888);
             mBitmap4 = Bitmap.createBitmap(pixels, 0, w, w, h,
                                            Bitmap.Config.ARGB_4444);
-            
+
             mDrawable = context.getResources().getDrawable(R.drawable.button);
             mDrawable.setBounds(150, 20, 300, 100);
-            
+
             is = context.getResources().openRawResource(R.drawable.animated_gif);
-            if (true) {
+
+            if (DECODE_STREAM) {
                 mMovie = Movie.decodeStream(is);
             } else {
                 byte[] array = streamToBytes(is);
                 mMovie = Movie.decodeByteArray(array, 0, array.length);
             }
         }
-        
-        @Override protected void onDraw(Canvas canvas) {
-            canvas.drawColor(0xFFCCCCCC);            
-            
+
+        @Override
+        protected void onDraw(Canvas canvas) {
+            canvas.drawColor(0xFFCCCCCC);
+
             Paint p = new Paint();
             p.setAntiAlias(true);
-            
+
             canvas.drawBitmap(mBitmap, 10, 10, null);
             canvas.drawBitmap(mBitmap2, 10, 170, null);
             canvas.drawBitmap(mBitmap3, 110, 170, null);
             canvas.drawBitmap(mBitmap4, 210, 170, null);
-            
+
             mDrawable.draw(canvas);
-            
+
             long now = android.os.SystemClock.uptimeMillis();
             if (mMovieStart == 0) {   // first time
                 mMovieStart = now;
@@ -140,4 +142,3 @@
         }
     }
 }
-
diff --git a/samples/ApiDemos/src/com/example/android/apis/graphics/BitmapMesh.java b/samples/ApiDemos/src/com/example/android/apis/graphics/BitmapMesh.java
index 4d48a1e..12c79ca 100644
--- a/samples/ApiDemos/src/com/example/android/apis/graphics/BitmapMesh.java
+++ b/samples/ApiDemos/src/com/example/android/apis/graphics/BitmapMesh.java
@@ -31,16 +31,16 @@
         super.onCreate(savedInstanceState);
         setContentView(new SampleView(this));
     }
-    
+
     private static class SampleView extends View {
         private static final int WIDTH = 20;
         private static final int HEIGHT = 20;
         private static final int COUNT = (WIDTH + 1) * (HEIGHT + 1);
-        
+
         private final Bitmap mBitmap;
         private final float[] mVerts = new float[COUNT*2];
         private final float[] mOrig = new float[COUNT*2];
-        
+
         private final Matrix mMatrix = new Matrix();
         private final Matrix mInverse = new Matrix();
 
@@ -55,7 +55,7 @@
 
             mBitmap = BitmapFactory.decodeResource(getResources(),
                                                      R.drawable.beach);
-            
+
             float w = mBitmap.getWidth();
             float h = mBitmap.getHeight();
             // construct our mesh
@@ -63,17 +63,17 @@
             for (int y = 0; y <= HEIGHT; y++) {
                 float fy = h * y / HEIGHT;
                 for (int x = 0; x <= WIDTH; x++) {
-                    float fx = w * x / WIDTH;                    
+                    float fx = w * x / WIDTH;
                     setXY(mVerts, index, fx, fy);
                     setXY(mOrig, index, fx, fy);
                     index += 1;
                 }
             }
-            
+
             mMatrix.setTranslate(10, 10);
             mMatrix.invert(mInverse);
         }
-        
+
         @Override protected void onDraw(Canvas canvas) {
             canvas.drawColor(0xFFCCCCCC);
 
@@ -81,7 +81,7 @@
             canvas.drawBitmapMesh(mBitmap, WIDTH, HEIGHT, mVerts, 0,
                                   null, 0, null);
         }
-        
+
         private void warp(float cx, float cy) {
             final float K = 10000;
             float[] src = mOrig;
@@ -94,7 +94,7 @@
                 float dd = dx*dx + dy*dy;
                 float d = FloatMath.sqrt(dd);
                 float pull = K / (dd + 0.000001f);
-                
+
                 pull /= (d + 0.000001f);
              //   android.util.Log.d("skia", "index " + i + " dist=" + d + " pull=" + pull);
 
@@ -114,7 +114,7 @@
         @Override public boolean onTouchEvent(MotionEvent event) {
             float[] pt = { event.getX(), event.getY() };
             mInverse.mapPoints(pt);
-            
+
             int x = (int)pt[0];
             int y = (int)pt[1];
             if (mLastWarpX != x || mLastWarpY != y) {
diff --git a/samples/ApiDemos/src/com/example/android/apis/graphics/BitmapPixels.java b/samples/ApiDemos/src/com/example/android/apis/graphics/BitmapPixels.java
index 88717bc..e9b2167 100644
--- a/samples/ApiDemos/src/com/example/android/apis/graphics/BitmapPixels.java
+++ b/samples/ApiDemos/src/com/example/android/apis/graphics/BitmapPixels.java
@@ -16,32 +16,26 @@
 
 package com.example.android.apis.graphics;
 
-import com.example.android.apis.R;
-
-import android.app.Activity;
 import android.content.Context;
 import android.graphics.*;
-import android.graphics.drawable.*;
 import android.os.Bundle;
-import android.view.KeyEvent;
 import android.view.*;
 
 import java.nio.IntBuffer;
 import java.nio.ShortBuffer;
 
 public class BitmapPixels extends GraphicsActivity {
-    
+
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(new SampleView(this));
     }
-    
+
     private static class SampleView extends View {
         private Bitmap mBitmap1;
         private Bitmap mBitmap2;
         private Bitmap mBitmap3;
-        private Bitmap mBitmap4;
 
         // access the red component from a premultiplied color
         private static int getR32(int c) { return (c >>  0) & 0xFF; }
@@ -67,7 +61,7 @@
         private static short pack4444(int r, int g, int b, int a) {
             return (short)((a << 0) | ( b << 4) | (g << 8) | (r << 12));
         }
-        
+
         private static int mul255(int c, int a) {
             int prod = c * a + 128;
             return (prod + (prod >> 8)) >> 8;
@@ -88,7 +82,7 @@
             // now pack it in the correct order
             return pack8888(r, g, b, a);
         }
-        
+
         private static void makeRamp(int from, int to, int n,
                                      int[] ramp8888, short[] ramp565,
                                      short[] ramp4444) {
@@ -113,7 +107,7 @@
                 a += da;
             }
         }
-        
+
         private static IntBuffer makeBuffer(int[] src, int n) {
             IntBuffer dst = IntBuffer.allocate(n*n);
             for (int i = 0; i < n; i++) {
@@ -122,7 +116,7 @@
             dst.rewind();
             return dst;
         }
-        
+
         private static ShortBuffer makeBuffer(short[] src, int n) {
             ShortBuffer dst = ShortBuffer.allocate(n*n);
             for (int i = 0; i < n; i++) {
@@ -131,31 +125,31 @@
             dst.rewind();
             return dst;
         }
-        
+
         public SampleView(Context context) {
             super(context);
             setFocusable(true);
-            
+
             final int N = 100;
             int[] data8888 = new int[N];
             short[] data565 = new short[N];
             short[] data4444 = new short[N];
-            
+
             makeRamp(premultiplyColor(Color.RED), premultiplyColor(Color.GREEN),
                      N, data8888, data565, data4444);
-            
+
             mBitmap1 = Bitmap.createBitmap(N, N, Bitmap.Config.ARGB_8888);
             mBitmap2 = Bitmap.createBitmap(N, N, Bitmap.Config.RGB_565);
             mBitmap3 = Bitmap.createBitmap(N, N, Bitmap.Config.ARGB_4444);
-            
+
             mBitmap1.copyPixelsFromBuffer(makeBuffer(data8888, N));
             mBitmap2.copyPixelsFromBuffer(makeBuffer(data565, N));
             mBitmap3.copyPixelsFromBuffer(makeBuffer(data4444, N));
         }
-        
+
         @Override protected void onDraw(Canvas canvas) {
-            canvas.drawColor(0xFFCCCCCC);            
-            
+            canvas.drawColor(0xFFCCCCCC);
+
             int y = 10;
             canvas.drawBitmap(mBitmap1, 10, y, null);
             y += mBitmap1.getHeight() + 10;
@@ -165,4 +159,3 @@
         }
     }
 }
-
diff --git a/samples/ApiDemos/src/com/example/android/apis/graphics/Clipping.java b/samples/ApiDemos/src/com/example/android/apis/graphics/Clipping.java
index cf83597..42f8be3 100644
--- a/samples/ApiDemos/src/com/example/android/apis/graphics/Clipping.java
+++ b/samples/ApiDemos/src/com/example/android/apis/graphics/Clipping.java
@@ -16,7 +16,6 @@
 
 package com.example.android.apis.graphics;
 
-import android.app.Activity;
 import android.content.Context;
 import android.graphics.*;
 import android.os.Bundle;
@@ -29,7 +28,7 @@
         super.onCreate(savedInstanceState);
         setContentView(new SampleView(this));
     }
-    
+
     private static class SampleView extends View {
         private Paint mPaint;
         private Path mPath;
@@ -37,46 +36,46 @@
         public SampleView(Context context) {
             super(context);
             setFocusable(true);
-            
+
             mPaint = new Paint();
             mPaint.setAntiAlias(true);
             mPaint.setStrokeWidth(6);
             mPaint.setTextSize(16);
             mPaint.setTextAlign(Paint.Align.RIGHT);
-            
+
             mPath = new Path();
         }
-        
+
         private void drawScene(Canvas canvas) {
             canvas.clipRect(0, 0, 100, 100);
-            
+
             canvas.drawColor(Color.WHITE);
-            
+
             mPaint.setColor(Color.RED);
             canvas.drawLine(0, 0, 100, 100, mPaint);
-            
+
             mPaint.setColor(Color.GREEN);
             canvas.drawCircle(30, 70, 30, mPaint);
-            
+
             mPaint.setColor(Color.BLUE);
             canvas.drawText("Clipping", 100, 30, mPaint);
         }
-        
+
         @Override protected void onDraw(Canvas canvas) {
-            canvas.drawColor(Color.GRAY);            
+            canvas.drawColor(Color.GRAY);
 
             canvas.save();
             canvas.translate(10, 10);
             drawScene(canvas);
             canvas.restore();
-            
+
             canvas.save();
             canvas.translate(160, 10);
             canvas.clipRect(10, 10, 90, 90);
             canvas.clipRect(30, 30, 70, 70, Region.Op.DIFFERENCE);
             drawScene(canvas);
             canvas.restore();
-            
+
             canvas.save();
             canvas.translate(10, 160);
             mPath.reset();
@@ -85,21 +84,21 @@
             canvas.clipPath(mPath, Region.Op.REPLACE);
             drawScene(canvas);
             canvas.restore();
-            
+
             canvas.save();
             canvas.translate(160, 160);
             canvas.clipRect(0, 0, 60, 60);
             canvas.clipRect(40, 40, 100, 100, Region.Op.UNION);
             drawScene(canvas);
             canvas.restore();
-            
+
             canvas.save();
             canvas.translate(10, 310);
             canvas.clipRect(0, 0, 60, 60);
             canvas.clipRect(40, 40, 100, 100, Region.Op.XOR);
             drawScene(canvas);
             canvas.restore();
-            
+
             canvas.save();
             canvas.translate(160, 310);
             canvas.clipRect(0, 0, 60, 60);
diff --git a/samples/ApiDemos/src/com/example/android/apis/graphics/ColorFilters.java b/samples/ApiDemos/src/com/example/android/apis/graphics/ColorFilters.java
index 92d18ba..8eb60b5 100644
--- a/samples/ApiDemos/src/com/example/android/apis/graphics/ColorFilters.java
+++ b/samples/ApiDemos/src/com/example/android/apis/graphics/ColorFilters.java
@@ -23,18 +23,17 @@
 import android.graphics.*;
 import android.graphics.drawable.*;
 import android.os.Bundle;
-import android.view.KeyEvent;
 import android.view.*;
 
 public class ColorFilters extends GraphicsActivity {
-    
+
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(new SampleView(this));
-        
+
     }
-    
+
     private static class SampleView extends View {
         private Activity mActivity;
         private Drawable mDrawable;
@@ -52,7 +51,7 @@
             int center = (r.top + r.bottom) >> 1;
             int h = curr.getIntrinsicHeight();
             int y = center - (h >> 1);
-            
+
             curr.setBounds(x, y, x + curr.getIntrinsicWidth(), y + h);
         }
 
@@ -61,7 +60,7 @@
             mActivity = activity;
             Context context = activity;
             setFocusable(true);
-            
+
             mDrawable = context.getResources().getDrawable(R.drawable.btn_default_normal);
             mDrawable.setBounds(0, 0, 150, 48);
             mDrawable.setDither(true);
@@ -84,13 +83,13 @@
             mPaint.setAntiAlias(true);
             mPaint.setTextSize(16);
             mPaint.setTextAlign(Paint.Align.CENTER);
-            
+
             mPaint2 = new Paint(mPaint);
             mPaint2.setAlpha(64);
-            
+
             Paint.FontMetrics fm = mPaint.getFontMetrics();
             mPaintTextOffset = (fm.descent + fm.ascent) * 0.5f;
-            
+
             mColors = new int[] {
                 0,
                 0xCC0000FF,
@@ -106,10 +105,10 @@
                 PorterDuff.Mode.MULTIPLY,
             };
             mModeIndex = 0;
-            
+
             updateTitle();
         }
-        
+
         private void swapPaintColors() {
             if (mPaint.getColor() == 0xFF000000) {
                 mPaint.setColor(0xFFFFFFFF);
@@ -120,11 +119,11 @@
             }
             mPaint2.setAlpha(64);
         }
-        
+
         private void updateTitle() {
             mActivity.setTitle(mModes[mModeIndex].toString());
         }
-        
+
         private void drawSample(Canvas canvas, ColorFilter filter) {
             Rect r = mDrawable.getBounds();
             float x = (r.left + r.right) * 0.5f;
@@ -134,15 +133,15 @@
             mDrawable.draw(canvas);
             canvas.drawText("Label", x+1, y+1, mPaint2);
             canvas.drawText("Label", x, y, mPaint);
-            
+
             for (Drawable dr : mDrawables) {
                 dr.setColorFilter(filter);
                 dr.draw(canvas);
             }
         }
-        
+
         @Override protected void onDraw(Canvas canvas) {
-            canvas.drawColor(0xFFCCCCCC);            
+            canvas.drawColor(0xFFCCCCCC);
 
             canvas.translate(8, 12);
             for (int color : mColors) {
@@ -160,8 +159,6 @@
 
         @Override
         public boolean onTouchEvent(MotionEvent event) {
-            float x = event.getX();
-            float y = event.getY();
             switch (event.getAction()) {
                 case MotionEvent.ACTION_DOWN:
                     break;
@@ -181,4 +178,3 @@
         }
     }
 }
-
diff --git a/samples/ApiDemos/src/com/example/android/apis/graphics/ColorMatrixSample.java b/samples/ApiDemos/src/com/example/android/apis/graphics/ColorMatrixSample.java
index 19a0f7f..f438e73 100644
--- a/samples/ApiDemos/src/com/example/android/apis/graphics/ColorMatrixSample.java
+++ b/samples/ApiDemos/src/com/example/android/apis/graphics/ColorMatrixSample.java
@@ -18,35 +18,31 @@
 
 import com.example.android.apis.R;
 
-import android.app.Activity;
 import android.content.Context;
 import android.graphics.*;
 import android.os.Bundle;
-import android.view.KeyEvent;
 import android.view.View;
 
 public class ColorMatrixSample extends GraphicsActivity {
-    
+
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(new SampleView(this));
     }
-    
+
     private static class SampleView extends View {
         private Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
-        private ColorMatrix mCM = new ColorMatrix();
         private Bitmap mBitmap;
-        private float mSaturation;
         private float mAngle;
-        
+
         public SampleView(Context context) {
             super(context);
-            
+
             mBitmap = BitmapFactory.decodeResource(context.getResources(),
                                                    R.drawable.balloons);
         }
-        
+
         private static void setTranslate(ColorMatrix cm, float dr, float dg,
                                          float db, float da) {
             cm.set(new float[] {
@@ -55,7 +51,7 @@
                    0, 0, 2, 0, db,
                    0, 0, 0, 1, da });
         }
-        
+
         private static void setContrast(ColorMatrix cm, float contrast) {
             float scale = contrast + 1.f;
                float translate = (-.5f * scale + .5f) * 255.f;
@@ -65,7 +61,7 @@
                    0, 0, scale, 0, translate,
                    0, 0, 0, 1, 0 });
         }
-        
+
         private static void setContrastTranslateOnly(ColorMatrix cm, float contrast) {
             float scale = contrast + 1.f;
                float translate = (-.5f * scale + .5f) * 255.f;
@@ -75,7 +71,7 @@
                    0, 0, 1, 0, translate,
                    0, 0, 0, 1, 0 });
         }
-        
+
         private static void setContrastScaleOnly(ColorMatrix cm, float contrast) {
             float scale = contrast + 1.f;
                float translate = (-.5f * scale + .5f) * 255.f;
@@ -85,40 +81,40 @@
                    0, 0, scale, 0, 0,
                    0, 0, 0, 1, 0 });
         }
-        
+
         @Override protected void onDraw(Canvas canvas) {
             Paint paint = mPaint;
             float x = 20;
             float y = 20;
-            
+
             canvas.drawColor(Color.WHITE);
-            
+
             paint.setColorFilter(null);
             canvas.drawBitmap(mBitmap, x, y, paint);
-            
+
             ColorMatrix cm = new ColorMatrix();
-            
+
             mAngle += 2;
             if (mAngle > 180) {
                 mAngle = 0;
             }
-            
+
             //convert our animated angle [-180...180] to a contrast value of [-1..1]
             float contrast = mAngle / 180.f;
-            
+
             setContrast(cm, contrast);
             paint.setColorFilter(new ColorMatrixColorFilter(cm));
             canvas.drawBitmap(mBitmap, x + mBitmap.getWidth() + 10, y, paint);
-            
+
             setContrastScaleOnly(cm, contrast);
             paint.setColorFilter(new ColorMatrixColorFilter(cm));
             canvas.drawBitmap(mBitmap, x, y + mBitmap.getHeight() + 10, paint);
-            
+
             setContrastTranslateOnly(cm, contrast);
             paint.setColorFilter(new ColorMatrixColorFilter(cm));
             canvas.drawBitmap(mBitmap, x, y + 2*(mBitmap.getHeight() + 10),
                               paint);
-            
+
             invalidate();
         }
     }
diff --git a/samples/ApiDemos/src/com/example/android/apis/graphics/ColorPickerDialog.java b/samples/ApiDemos/src/com/example/android/apis/graphics/ColorPickerDialog.java
index 7588180..1c7125f 100644
--- a/samples/ApiDemos/src/com/example/android/apis/graphics/ColorPickerDialog.java
+++ b/samples/ApiDemos/src/com/example/android/apis/graphics/ColorPickerDialog.java
@@ -37,7 +37,7 @@
         private Paint mCenterPaint;
         private final int[] mColors;
         private OnColorChangedListener mListener;
-        
+
         ColorPickerView(Context c, OnColorChangedListener l, int color) {
             super(c);
             mListener = l;
@@ -46,33 +46,33 @@
                 0xFFFFFF00, 0xFFFF0000
             };
             Shader s = new SweepGradient(0, 0, mColors, null);
-            
+
             mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
             mPaint.setShader(s);
             mPaint.setStyle(Paint.Style.STROKE);
             mPaint.setStrokeWidth(32);
-            
+
             mCenterPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
             mCenterPaint.setColor(color);
             mCenterPaint.setStrokeWidth(5);
         }
-        
+
         private boolean mTrackingCenter;
         private boolean mHighlightCenter;
 
-        @Override 
+        @Override
         protected void onDraw(Canvas canvas) {
             float r = CENTER_X - mPaint.getStrokeWidth()*0.5f;
-            
+
             canvas.translate(CENTER_X, CENTER_X);
-            
-            canvas.drawOval(new RectF(-r, -r, r, r), mPaint);            
+
+            canvas.drawOval(new RectF(-r, -r, r, r), mPaint);
             canvas.drawCircle(0, 0, CENTER_RADIUS, mCenterPaint);
-            
+
             if (mTrackingCenter) {
                 int c = mCenterPaint.getColor();
                 mCenterPaint.setStyle(Paint.Style.STROKE);
-                
+
                 if (mHighlightCenter) {
                     mCenterPaint.setAlpha(0xFF);
                 } else {
@@ -81,17 +81,17 @@
                 canvas.drawCircle(0, 0,
                                   CENTER_RADIUS + mCenterPaint.getStrokeWidth(),
                                   mCenterPaint);
-                
+
                 mCenterPaint.setStyle(Paint.Style.FILL);
                 mCenterPaint.setColor(c);
             }
         }
-        
+
         @Override
         protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
             setMeasuredDimension(CENTER_X*2, CENTER_Y*2);
         }
-        
+
         private static final int CENTER_X = 100;
         private static final int CENTER_Y = 100;
         private static final int CENTER_RADIUS = 32;
@@ -108,11 +108,11 @@
             }
             return n;
         }
-        
+
         private int ave(int s, int d, float p) {
             return s + java.lang.Math.round(p * (d - s));
         }
-        
+
         private int interpColor(int colors[], float unit) {
             if (unit <= 0) {
                 return colors[0];
@@ -120,7 +120,7 @@
             if (unit >= 1) {
                 return colors[colors.length - 1];
             }
-            
+
             float p = unit * (colors.length - 1);
             int i = (int)p;
             p -= i;
@@ -132,16 +132,16 @@
             int r = ave(Color.red(c0), Color.red(c1), p);
             int g = ave(Color.green(c0), Color.green(c1), p);
             int b = ave(Color.blue(c0), Color.blue(c1), p);
-            
+
             return Color.argb(a, r, g, b);
         }
-        
+
         private int rotateColor(int color, float rad) {
             float deg = rad * 180 / 3.1415927f;
             int r = Color.red(color);
             int g = Color.green(color);
             int b = Color.blue(color);
-            
+
             ColorMatrix cm = new ColorMatrix();
             ColorMatrix tmp = new ColorMatrix();
 
@@ -150,17 +150,17 @@
             cm.postConcat(tmp);
             tmp.setYUV2RGB();
             cm.postConcat(tmp);
-            
+
             final float[] a = cm.getArray();
 
             int ir = floatToByte(a[0] * r +  a[1] * g +  a[2] * b);
             int ig = floatToByte(a[5] * r +  a[6] * g +  a[7] * b);
             int ib = floatToByte(a[10] * r + a[11] * g + a[12] * b);
-            
+
             return Color.argb(Color.alpha(color), pinToByte(ir),
                               pinToByte(ig), pinToByte(ib));
         }
-        
+
         private static final float PI = 3.1415926f;
 
         @Override
@@ -168,7 +168,7 @@
             float x = event.getX() - CENTER_X;
             float y = event.getY() - CENTER_Y;
             boolean inCenter = java.lang.Math.sqrt(x*x + y*y) <= CENTER_RADIUS;
-            
+
             switch (event.getAction()) {
                 case MotionEvent.ACTION_DOWN:
                     mTrackingCenter = inCenter;
@@ -212,7 +212,7 @@
                              OnColorChangedListener listener,
                              int initialColor) {
         super(context);
-        
+
         mListener = listener;
         mInitialColor = initialColor;
     }
diff --git a/samples/ApiDemos/src/com/example/android/apis/graphics/Compass.java b/samples/ApiDemos/src/com/example/android/apis/graphics/Compass.java
index d3b0981..85471d9 100644
--- a/samples/ApiDemos/src/com/example/android/apis/graphics/Compass.java
+++ b/samples/ApiDemos/src/com/example/android/apis/graphics/Compass.java
@@ -35,10 +35,10 @@
     private Sensor mSensor;
     private SampleView mView;
     private float[] mValues;
-    
+
     private final SensorEventListener mListener = new SensorEventListener() {
         public void onSensorChanged(SensorEvent event) {
-            if (Config.LOGD) Log.d(TAG,
+            if (Config.DEBUG) Log.d(TAG,
                     "sensorChanged (" + event.values[0] + ", " + event.values[1] + ", " + event.values[2] + ")");
             mValues = event.values;
             if (mView != null) {
@@ -62,17 +62,17 @@
     @Override
     protected void onResume()
     {
-        if (Config.LOGD) Log.d(TAG, "onResume");
+        if (Config.DEBUG) Log.d(TAG, "onResume");
         super.onResume();
 
         mSensorManager.registerListener(mListener, mSensor,
                 SensorManager.SENSOR_DELAY_GAME);
     }
-    
+
     @Override
     protected void onStop()
     {
-        if (Config.LOGD) Log.d(TAG, "onStop");
+        if (Config.DEBUG) Log.d(TAG, "onStop");
         mSensorManager.unregisterListener(mListener);
         super.onStop();
     }
@@ -81,7 +81,6 @@
         private Paint   mPaint = new Paint();
         private Path    mPath = new Path();
         private boolean mAnimate;
-        private long    mNextTime;
 
         public SampleView(Context context) {
             super(context);
@@ -93,12 +92,12 @@
             mPath.lineTo(20, 60);
             mPath.close();
         }
-    
+
         @Override protected void onDraw(Canvas canvas) {
             Paint paint = mPaint;
 
             canvas.drawColor(Color.WHITE);
-            
+
             paint.setAntiAlias(true);
             paint.setColor(Color.BLACK);
             paint.setStyle(Paint.Style.FILL);
@@ -109,23 +108,24 @@
             int cy = h / 2;
 
             canvas.translate(cx, cy);
-            if (mValues != null) {            
+            if (mValues != null) {
                 canvas.rotate(-mValues[0]);
             }
             canvas.drawPath(mPath, mPaint);
         }
-    
+
         @Override
         protected void onAttachedToWindow() {
             mAnimate = true;
+            if (Config.DEBUG) Log.d(TAG, "onAttachedToWindow. mAnimate=" + mAnimate);
             super.onAttachedToWindow();
         }
-        
+
         @Override
         protected void onDetachedFromWindow() {
             mAnimate = false;
+            if (Config.DEBUG) Log.d(TAG, "onDetachedFromWindow. mAnimate=" + mAnimate);
             super.onDetachedFromWindow();
         }
     }
 }
-
diff --git a/samples/ApiDemos/src/com/example/android/apis/graphics/CreateBitmap.java b/samples/ApiDemos/src/com/example/android/apis/graphics/CreateBitmap.java
index e3e5d9a..61fe9d5 100644
--- a/samples/ApiDemos/src/com/example/android/apis/graphics/CreateBitmap.java
+++ b/samples/ApiDemos/src/com/example/android/apis/graphics/CreateBitmap.java
@@ -16,13 +16,9 @@
 
 package com.example.android.apis.graphics;
 
-import com.example.android.apis.R;
-
-import android.app.Activity;
 import android.content.Context;
 import android.graphics.*;
 import android.os.Bundle;
-import android.view.KeyEvent;
 import android.view.*;
 
 import java.io.ByteArrayOutputStream;
@@ -34,11 +30,11 @@
         super.onCreate(savedInstanceState);
         setContentView(new SampleView(this));
     }
-    
+
     private static final int WIDTH = 50;
     private static final int HEIGHT = 50;
     private static final int STRIDE = 64;   // must be >= WIDTH
-    
+
     private static int[] createColors() {
         int[] colors = new int[STRIDE * HEIGHT];
         for (int y = 0; y < HEIGHT; y++) {
@@ -52,18 +48,18 @@
         }
         return colors;
     }
-        
+
     private static class SampleView extends View {
         private Bitmap[] mBitmaps;
         private Bitmap[] mJPEG;
         private Bitmap[] mPNG;
         private int[]    mColors;
         private Paint    mPaint;
-        
+
         private static Bitmap codec(Bitmap src, Bitmap.CompressFormat format,
                                     int quality) {
             ByteArrayOutputStream os = new ByteArrayOutputStream();
-            src.compress(format, quality, os);            
+            src.compress(format, quality, os);
 
             byte[] array = os.toByteArray();
             return BitmapFactory.decodeByteArray(array, 0, array.length);
@@ -72,7 +68,7 @@
         public SampleView(Context context) {
             super(context);
             setFocusable(true);
-            
+
             mColors = createColors();
             int[] colors = mColors;
 
@@ -84,7 +80,7 @@
                                               Bitmap.Config.RGB_565);
             mBitmaps[2] = Bitmap.createBitmap(colors, 0, STRIDE, WIDTH, HEIGHT,
                                               Bitmap.Config.ARGB_4444);
-            
+
             // these three will have their colors set later
             mBitmaps[3] = Bitmap.createBitmap(WIDTH, HEIGHT,
                                               Bitmap.Config.ARGB_8888);
@@ -95,10 +91,10 @@
             for (int i = 3; i <= 5; i++) {
                 mBitmaps[i].setPixels(colors, 0, STRIDE, 0, 0, WIDTH, HEIGHT);
             }
-            
+
             mPaint = new Paint();
             mPaint.setDither(true);
-            
+
             // now encode/decode using JPEG and PNG
             mJPEG = new Bitmap[mBitmaps.length];
             mPNG = new Bitmap[mBitmaps.length];
@@ -107,7 +103,7 @@
                 mPNG[i] = codec(mBitmaps[i], Bitmap.CompressFormat.PNG, 0);
             }
         }
-        
+
         @Override protected void onDraw(Canvas canvas) {
             canvas.drawColor(Color.WHITE);
 
@@ -117,7 +113,7 @@
                 canvas.drawBitmap(mPNG[i], 160, 0, null);
                 canvas.translate(0, mBitmaps[i].getHeight());
             }
-            
+
             // draw the color array directly, w/o craeting a bitmap object
             canvas.drawBitmap(mColors, 0, STRIDE, 0, 0, WIDTH, HEIGHT,
                               true, null);
diff --git a/samples/ApiDemos/src/com/example/android/apis/graphics/Cube.java b/samples/ApiDemos/src/com/example/android/apis/graphics/Cube.java
index bb154eb..715e175 100644
--- a/samples/ApiDemos/src/com/example/android/apis/graphics/Cube.java
+++ b/samples/ApiDemos/src/com/example/android/apis/graphics/Cube.java
@@ -88,10 +88,10 @@
 
     public void draw(GL10 gl)
     {
-        gl.glFrontFace(gl.GL_CW);
-        gl.glVertexPointer(3, gl.GL_FIXED, 0, mVertexBuffer);
-        gl.glColorPointer(4, gl.GL_FIXED, 0, mColorBuffer);
-        gl.glDrawElements(gl.GL_TRIANGLES, 36, gl.GL_UNSIGNED_BYTE, mIndexBuffer);
+        gl.glFrontFace(GL10.GL_CW);
+        gl.glVertexPointer(3, GL10.GL_FIXED, 0, mVertexBuffer);
+        gl.glColorPointer(4, GL10.GL_FIXED, 0, mColorBuffer);
+        gl.glDrawElements(GL10.GL_TRIANGLES, 36, GL10.GL_UNSIGNED_BYTE, mIndexBuffer);
     }
 
     private IntBuffer   mVertexBuffer;
diff --git a/samples/ApiDemos/src/com/example/android/apis/graphics/CubeRenderer.java b/samples/ApiDemos/src/com/example/android/apis/graphics/CubeRenderer.java
index 0f15f91..ac0ae27 100644
--- a/samples/ApiDemos/src/com/example/android/apis/graphics/CubeRenderer.java
+++ b/samples/ApiDemos/src/com/example/android/apis/graphics/CubeRenderer.java
@@ -16,7 +16,6 @@
 
 package com.example.android.apis.graphics;
 
-import javax.microedition.khronos.egl.EGL10;
 import javax.microedition.khronos.egl.EGLConfig;
 import javax.microedition.khronos.opengles.GL10;
 
diff --git a/samples/ApiDemos/src/com/example/android/apis/graphics/DensityActivity.java b/samples/ApiDemos/src/com/example/android/apis/graphics/DensityActivity.java
index 8c5c93a..0288ad1 100644
--- a/samples/ApiDemos/src/com/example/android/apis/graphics/DensityActivity.java
+++ b/samples/ApiDemos/src/com/example/android/apis/graphics/DensityActivity.java
@@ -47,7 +47,7 @@
 
         final LayoutInflater li = (LayoutInflater)getSystemService(
                 LAYOUT_INFLATER_SERVICE);
-        
+
         this.setTitle(R.string.density_title);
         LinearLayout root = new LinearLayout(this);
         root.setOrientation(LinearLayout.VERTICAL);
@@ -76,11 +76,11 @@
         layout = (LinearLayout)li.inflate(R.layout.density_image_views, null);
         addLabelToRoot(root, "Inflated layout");
         addChildToRoot(root, layout);
-        
+
         layout = (LinearLayout)li.inflate(R.layout.density_styled_image_views, null);
         addLabelToRoot(root, "Inflated styled layout");
         addChildToRoot(root, layout);
-        
+
         layout = new LinearLayout(this);
         addCanvasBitmap(layout, R.drawable.logo120dpi, true);
         addCanvasBitmap(layout, R.drawable.logo160dpi, true);
diff --git a/samples/ApiDemos/src/com/example/android/apis/graphics/DrawPoints.java b/samples/ApiDemos/src/com/example/android/apis/graphics/DrawPoints.java
index cbe6373..21eba0d 100644
--- a/samples/ApiDemos/src/com/example/android/apis/graphics/DrawPoints.java
+++ b/samples/ApiDemos/src/com/example/android/apis/graphics/DrawPoints.java
@@ -16,7 +16,6 @@
 
 package com.example.android.apis.graphics;
 
-import android.app.Activity;
 import android.content.Context;
 import android.graphics.*;
 import android.os.Bundle;
@@ -29,7 +28,7 @@
         super.onCreate(savedInstanceState);
         setContentView(new SampleView(this));
     }
-    
+
     private static class SampleView extends View {
         private Paint   mPaint = new Paint();
         private float[] mPts;
@@ -38,11 +37,11 @@
         private static final int SEGS = 32;
         private static final int X = 0;
         private static final int Y = 1;
-        
+
         private void buildPoints() {
             final int ptCount = (SEGS + 1) * 2;
             mPts = new float[ptCount * 2];
-            
+
             float value = 0;
             final float delta = SIZE / SEGS;
             for (int i = 0; i <= SEGS; i++) {
@@ -53,16 +52,16 @@
                 value += delta;
             }
         }
-    
+
         public SampleView(Context context) {
             super(context);
-            
+
             buildPoints();
         }
-        
+
         @Override protected void onDraw(Canvas canvas) {
             Paint paint = mPaint;
-            
+
             canvas.translate(10, 10);
 
             canvas.drawColor(Color.WHITE);
@@ -70,7 +69,7 @@
             paint.setColor(Color.RED);
             paint.setStrokeWidth(0);
             canvas.drawLines(mPts, paint);
-            
+
             paint.setColor(Color.BLUE);
             paint.setStrokeWidth(3);
             canvas.drawPoints(mPts, paint);
diff --git a/samples/ApiDemos/src/com/example/android/apis/graphics/FingerPaint.java b/samples/ApiDemos/src/com/example/android/apis/graphics/FingerPaint.java
index 867da4c..fcfd28f 100644
--- a/samples/ApiDemos/src/com/example/android/apis/graphics/FingerPaint.java
+++ b/samples/ApiDemos/src/com/example/android/apis/graphics/FingerPaint.java
@@ -16,7 +16,6 @@
 
 package com.example.android.apis.graphics;
 
-import android.app.Activity;
 import android.content.Context;
 import android.graphics.*;
 import android.os.Bundle;
@@ -26,7 +25,7 @@
 import android.view.View;
 
 public class FingerPaint extends GraphicsActivity
-        implements ColorPickerDialog.OnColorChangedListener {    
+        implements ColorPickerDialog.OnColorChangedListener {
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
@@ -41,34 +40,34 @@
         mPaint.setStrokeJoin(Paint.Join.ROUND);
         mPaint.setStrokeCap(Paint.Cap.ROUND);
         mPaint.setStrokeWidth(12);
-        
+
         mEmboss = new EmbossMaskFilter(new float[] { 1, 1, 1 },
                                        0.4f, 6, 3.5f);
 
         mBlur = new BlurMaskFilter(8, BlurMaskFilter.Blur.NORMAL);
     }
-    
+
     private Paint       mPaint;
     private MaskFilter  mEmboss;
     private MaskFilter  mBlur;
-    
+
     public void colorChanged(int color) {
         mPaint.setColor(color);
     }
 
     public class MyView extends View {
-        
+
         private static final float MINP = 0.25f;
         private static final float MAXP = 0.75f;
-        
+
         private Bitmap  mBitmap;
         private Canvas  mCanvas;
         private Path    mPath;
         private Paint   mBitmapPaint;
-        
+
         public MyView(Context c) {
             super(c);
-            
+
             mBitmap = Bitmap.createBitmap(320, 480, Bitmap.Config.ARGB_8888);
             mCanvas = new Canvas(mBitmap);
             mPath = new Path();
@@ -79,19 +78,19 @@
         protected void onSizeChanged(int w, int h, int oldw, int oldh) {
             super.onSizeChanged(w, h, oldw, oldh);
         }
-        
+
         @Override
         protected void onDraw(Canvas canvas) {
             canvas.drawColor(0xFFAAAAAA);
-            
+
             canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);
-            
+
             canvas.drawPath(mPath, mPaint);
         }
-        
+
         private float mX, mY;
         private static final float TOUCH_TOLERANCE = 4;
-        
+
         private void touch_start(float x, float y) {
             mPath.reset();
             mPath.moveTo(x, y);
@@ -114,12 +113,12 @@
             // kill this so we don't double draw
             mPath.reset();
         }
-        
+
         @Override
         public boolean onTouchEvent(MotionEvent event) {
             float x = event.getX();
             float y = event.getY();
-            
+
             switch (event.getAction()) {
                 case MotionEvent.ACTION_DOWN:
                     touch_start(x, y);
@@ -137,7 +136,7 @@
             return true;
         }
     }
-    
+
     private static final int COLOR_MENU_ID = Menu.FIRST;
     private static final int EMBOSS_MENU_ID = Menu.FIRST + 1;
     private static final int BLUR_MENU_ID = Menu.FIRST + 2;
@@ -147,7 +146,7 @@
     @Override
     public boolean onCreateOptionsMenu(Menu menu) {
         super.onCreateOptionsMenu(menu);
-        
+
         menu.add(0, COLOR_MENU_ID, 0, "Color").setShortcut('3', 'c');
         menu.add(0, EMBOSS_MENU_ID, 0, "Emboss").setShortcut('4', 's');
         menu.add(0, BLUR_MENU_ID, 0, "Blur").setShortcut('5', 'z');
@@ -164,13 +163,13 @@
         *****/
         return true;
     }
-    
+
     @Override
     public boolean onPrepareOptionsMenu(Menu menu) {
         super.onPrepareOptionsMenu(menu);
         return true;
     }
-    
+
     @Override
     public boolean onOptionsItemSelected(MenuItem item) {
         mPaint.setXfermode(null);
diff --git a/samples/ApiDemos/src/com/example/android/apis/graphics/GradientDrawable1.java b/samples/ApiDemos/src/com/example/android/apis/graphics/GradientDrawable1.java
index eb6d47d..fa7a6b7 100644
--- a/samples/ApiDemos/src/com/example/android/apis/graphics/GradientDrawable1.java
+++ b/samples/ApiDemos/src/com/example/android/apis/graphics/GradientDrawable1.java
@@ -20,7 +20,6 @@
 // class is in a sub-package.
 import com.example.android.apis.R;
 
-import android.app.Activity;
 import android.os.Bundle;
 
 public class GradientDrawable1 extends GraphicsActivity {
diff --git a/samples/ApiDemos/src/com/example/android/apis/graphics/GraphicsActivity.java b/samples/ApiDemos/src/com/example/android/apis/graphics/GraphicsActivity.java
index 023c0d7..69682d4 100644
--- a/samples/ApiDemos/src/com/example/android/apis/graphics/GraphicsActivity.java
+++ b/samples/ApiDemos/src/com/example/android/apis/graphics/GraphicsActivity.java
@@ -20,9 +20,11 @@
 import android.os.Bundle;
 import android.view.View;
 import android.view.ViewGroup;
-import android.view.Window;
 
 class GraphicsActivity extends Activity {
+    // set to true to test Picture
+    private static final boolean TEST_PICTURE = false;
+
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -30,13 +32,12 @@
 
     @Override
     public void setContentView(View view) {
-        if (false) { // set to true to test Picture
+        if (TEST_PICTURE) {
             ViewGroup vg = new PictureLayout(this);
             vg.addView(view);
             view = vg;
         }
-        
+
         super.setContentView(view);
     }
-}
-
+}
\ No newline at end of file
diff --git a/samples/ApiDemos/src/com/example/android/apis/graphics/Layers.java b/samples/ApiDemos/src/com/example/android/apis/graphics/Layers.java
index d9f5db0..7e2a694 100644
--- a/samples/ApiDemos/src/com/example/android/apis/graphics/Layers.java
+++ b/samples/ApiDemos/src/com/example/android/apis/graphics/Layers.java
@@ -16,7 +16,6 @@
 
 package com.example.android.apis.graphics;
 
-import android.app.Activity;
 import android.content.Context;
 import android.graphics.*;
 import android.os.Bundle;
@@ -29,7 +28,7 @@
         super.onCreate(savedInstanceState);
         setContentView(new SampleView(this));
     }
-    
+
     private static class SampleView extends View {
         private static final int LAYER_FLAGS = Canvas.MATRIX_SAVE_FLAG |
                                             Canvas.CLIP_SAVE_FLAG |
@@ -42,23 +41,23 @@
         public SampleView(Context context) {
             super(context);
             setFocusable(true);
-            
+
             mPaint = new Paint();
             mPaint.setAntiAlias(true);
         }
-        
+
         @Override protected void onDraw(Canvas canvas) {
-            canvas.drawColor(Color.WHITE);            
-            
+            canvas.drawColor(Color.WHITE);
+
             canvas.translate(10, 10);
-            
+
             canvas.saveLayerAlpha(0, 0, 200, 200, 0x88, LAYER_FLAGS);
-            
+
             mPaint.setColor(Color.RED);
             canvas.drawCircle(75, 75, 75, mPaint);
             mPaint.setColor(Color.BLUE);
             canvas.drawCircle(125, 125, 75, mPaint);
-            
+
             canvas.restore();
         }
     }
diff --git a/samples/ApiDemos/src/com/example/android/apis/graphics/MeasureText.java b/samples/ApiDemos/src/com/example/android/apis/graphics/MeasureText.java
index e159efe..c2d433e 100644
--- a/samples/ApiDemos/src/com/example/android/apis/graphics/MeasureText.java
+++ b/samples/ApiDemos/src/com/example/android/apis/graphics/MeasureText.java
@@ -16,13 +16,9 @@
 
 package com.example.android.apis.graphics;
 
-import com.example.android.apis.R;
-
-import android.app.Activity;
 import android.content.Context;
 import android.graphics.*;
 import android.os.Bundle;
-import android.view.KeyEvent;
 import android.view.*;
 
 public class MeasureText extends GraphicsActivity {
@@ -32,11 +28,11 @@
         super.onCreate(savedInstanceState);
         setContentView(new SampleView(this));
     }
-    
+
     private static final int WIDTH = 50;
     private static final int HEIGHT = 50;
     private static final int STRIDE = 64;   // must be >= WIDTH
-    
+
     private static int[] createColors() {
         int[] colors = new int[STRIDE * HEIGHT];
         for (int y = 0; y < HEIGHT; y++) {
@@ -50,16 +46,16 @@
         }
         return colors;
     }
-    
+
     private static class SampleView extends View {
         private Paint   mPaint;
         private float   mOriginX = 10;
         private float   mOriginY = 80;
-        
+
         public SampleView(Context context) {
             super(context);
             setFocusable(true);
-            
+
             mPaint = new Paint();
             mPaint.setAntiAlias(true);
             mPaint.setStrokeWidth(5);
@@ -68,22 +64,22 @@
             mPaint.setTypeface(Typeface.create(Typeface.SERIF,
                                                Typeface.ITALIC));
         }
-        
+
         private void showText(Canvas canvas, String text, Paint.Align align) {
          //   mPaint.setTextAlign(align);
-            
+
             Rect    bounds = new Rect();
             float[] widths = new float[text.length()];
 
             int count = mPaint.getTextWidths(text, 0, text.length(), widths);
             float w = mPaint.measureText(text, 0, text.length());
             mPaint.getTextBounds(text, 0, text.length(), bounds);
-            
+
             mPaint.setColor(0xFF88FF88);
             canvas.drawRect(bounds, mPaint);
             mPaint.setColor(Color.BLACK);
             canvas.drawText(text, 0, 0, mPaint);
-            
+
             float[] pts = new float[2 + count*2];
             float x = 0;
             float y = 0;
@@ -100,12 +96,12 @@
             mPaint.setStrokeWidth(5);
             canvas.drawPoints(pts, 0, (count + 1) << 1, mPaint);
         }
-        
+
         @Override protected void onDraw(Canvas canvas) {
             canvas.drawColor(Color.WHITE);
-            
+
             canvas.translate(mOriginX, mOriginY);
-            
+
             showText(canvas, "Measure", Paint.Align.LEFT);
             canvas.translate(0, 80);
             showText(canvas, "wiggy!", Paint.Align.CENTER);
@@ -114,4 +110,3 @@
         }
     }
 }
-
diff --git a/samples/ApiDemos/src/com/example/android/apis/graphics/PathEffects.java b/samples/ApiDemos/src/com/example/android/apis/graphics/PathEffects.java
index 80ddf38..2894fa9 100644
--- a/samples/ApiDemos/src/com/example/android/apis/graphics/PathEffects.java
+++ b/samples/ApiDemos/src/com/example/android/apis/graphics/PathEffects.java
@@ -16,7 +16,6 @@
 
 package com.example.android.apis.graphics;
 
-import android.app.Activity;
 import android.content.Context;
 import android.graphics.*;
 import android.os.Bundle;
@@ -30,7 +29,7 @@
         super.onCreate(savedInstanceState);
         setContentView(new SampleView(this));
     }
-    
+
     private static class SampleView extends View {
         private Paint mPaint;
         private Path mPath;
@@ -41,7 +40,7 @@
         private static PathEffect makeDash(float phase) {
             return new DashPathEffect(new float[] { 15, 5, 8, 5 }, phase);
         }
-        
+
         private static void makeEffects(PathEffect[] e, float phase) {
             e[0] = null;     // no effect
             e[1] = new CornerPathEffect(10);
@@ -51,7 +50,7 @@
             e[4] = new ComposePathEffect(e[2], e[1]);
             e[5] = new ComposePathEffect(e[3], e[1]);
         }
-        
+
         public SampleView(Context context) {
             super(context);
             setFocusable(true);
@@ -60,23 +59,23 @@
             mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
             mPaint.setStyle(Paint.Style.STROKE);
             mPaint.setStrokeWidth(6);
-            
+
             mPath = makeFollowPath();
-            
+
             mEffects = new PathEffect[6];
-            
+
             mColors = new int[] { Color.BLACK, Color.RED, Color.BLUE,
                                   Color.GREEN, Color.MAGENTA, Color.BLACK
                                 };
         }
-        
+
         @Override protected void onDraw(Canvas canvas) {
             canvas.drawColor(Color.WHITE);
-            
+
             RectF bounds = new RectF();
             mPath.computeBounds(bounds, false);
             canvas.translate(10 - bounds.left, 10 - bounds.top);
-            
+
             makeEffects(mEffects, mPhase);
             mPhase += 1;
             invalidate();
@@ -88,7 +87,7 @@
                 canvas.translate(0, 28);
             }
         }
-        
+
         @Override public boolean onKeyDown(int keyCode, KeyEvent event) {
             switch (keyCode) {
                 case KeyEvent.KEYCODE_DPAD_CENTER:
@@ -106,7 +105,7 @@
             }
             return p;
         }
-        
+
         private static Path makePathDash() {
             Path p = new Path();
             p.moveTo(4, 0);
diff --git a/samples/ApiDemos/src/com/example/android/apis/graphics/PathFillTypes.java b/samples/ApiDemos/src/com/example/android/apis/graphics/PathFillTypes.java
index 78dba26..10cfc49 100644
--- a/samples/ApiDemos/src/com/example/android/apis/graphics/PathFillTypes.java
+++ b/samples/ApiDemos/src/com/example/android/apis/graphics/PathFillTypes.java
@@ -20,11 +20,9 @@
 // class is in a sub-package.
 //import com.example.android.apis.R;
 
-import android.app.Activity;
 import android.content.Context;
 import android.graphics.*;
 import android.os.Bundle;
-import android.view.KeyEvent;
 import android.view.View;
 
 public class PathFillTypes extends GraphicsActivity {
@@ -34,7 +32,7 @@
         super.onCreate(savedInstanceState);
         setContentView(new SampleView(this));
     }
-    
+
     private static class SampleView extends View {
         private Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
         private Path mPath;
@@ -48,7 +46,7 @@
             mPath.addCircle(40, 40, 45, Path.Direction.CCW);
             mPath.addCircle(80, 80, 45, Path.Direction.CCW);
         }
-        
+
         private void showPath(Canvas canvas, int x, int y, Path.FillType ft,
                               Paint paint) {
             canvas.save();
@@ -59,14 +57,14 @@
             canvas.drawPath(mPath, paint);
             canvas.restore();
         }
-        
+
         @Override protected void onDraw(Canvas canvas) {
             Paint paint = mPaint;
 
             canvas.drawColor(0xFFCCCCCC);
-            
+
             canvas.translate(20, 20);
-            
+
             paint.setAntiAlias(true);
 
             showPath(canvas, 0, 0, Path.FillType.WINDING, paint);
diff --git a/samples/ApiDemos/src/com/example/android/apis/graphics/Patterns.java b/samples/ApiDemos/src/com/example/android/apis/graphics/Patterns.java
index d2a51ff..6b6d8e1 100644
--- a/samples/ApiDemos/src/com/example/android/apis/graphics/Patterns.java
+++ b/samples/ApiDemos/src/com/example/android/apis/graphics/Patterns.java
@@ -16,11 +16,9 @@
 
 package com.example.android.apis.graphics;
 
-import android.app.Activity;
 import android.content.Context;
 import android.graphics.*;
 import android.os.Bundle;
-import android.view.KeyEvent;
 import android.view.MotionEvent;
 import android.view.*;
 
@@ -31,7 +29,7 @@
         super.onCreate(savedInstanceState);
         setContentView(new SampleView(this));
     }
-    
+
     private static Bitmap makeBitmap1() {
         Bitmap bm = Bitmap.createBitmap(40, 40, Bitmap.Config.RGB_565);
         Canvas c = new Canvas(bm);
@@ -41,7 +39,7 @@
         c.drawRect(5, 5, 35, 35, p);
         return bm;
     }
-    
+
     private static Bitmap makeBitmap2() {
         Bitmap bm = Bitmap.createBitmap(64, 64, Bitmap.Config.ARGB_8888);
         Canvas c = new Canvas(bm);
@@ -51,13 +49,13 @@
         c.drawCircle(32, 32, 27, p);
         return bm;
     }
-    
+
     private static class SampleView extends View {
         private final Shader mShader1;
         private final Shader mShader2;
         private final Paint mPaint;
         private final DrawFilter mFastDF;
-        
+
         private float mTouchStartX;
         private float mTouchStartY;
         private float mTouchCurrX;
@@ -72,25 +70,25 @@
             mFastDF = new PaintFlagsDrawFilter(Paint.FILTER_BITMAP_FLAG |
                                                Paint.DITHER_FLAG,
                                                0);
-    
+
             mShader1 = new BitmapShader(makeBitmap1(), Shader.TileMode.REPEAT,
                                         Shader.TileMode.REPEAT);
             mShader2 = new BitmapShader(makeBitmap2(), Shader.TileMode.REPEAT,
                                         Shader.TileMode.REPEAT);
-            
+
             Matrix m = new Matrix();
             m.setRotate(30);
             mShader2.setLocalMatrix(m);
-            
+
             mPaint = new Paint(Paint.FILTER_BITMAP_FLAG);
         }
-        
+
         @Override protected void onDraw(Canvas canvas) {
             canvas.setDrawFilter(mDF);
 
             mPaint.setShader(mShader1);
             canvas.drawPaint(mPaint);
-            
+
             canvas.translate(mTouchCurrX - mTouchStartX,
                              mTouchCurrY - mTouchStartY);
 
@@ -102,7 +100,7 @@
         public boolean onTouchEvent(MotionEvent event) {
             float x = event.getX();
             float y = event.getY();
-            
+
             switch (event.getAction()) {
                 case MotionEvent.ACTION_DOWN:
                     mTouchStartX = mTouchCurrX = x;
diff --git a/samples/ApiDemos/src/com/example/android/apis/graphics/PictureLayout.java b/samples/ApiDemos/src/com/example/android/apis/graphics/PictureLayout.java
index cfa3c29..c1d22a8 100644
--- a/samples/ApiDemos/src/com/example/android/apis/graphics/PictureLayout.java
+++ b/samples/ApiDemos/src/com/example/android/apis/graphics/PictureLayout.java
@@ -26,7 +26,6 @@
 import android.view.ViewGroup;
 import android.view.ViewParent;
 
-
 public class PictureLayout extends ViewGroup {
     private final Picture mPicture = new Picture();
 
@@ -36,7 +35,7 @@
 
     public PictureLayout(Context context, AttributeSet attrs) {
         super(context, attrs);
-    }    
+    }
 
     @Override
     public void addView(View child) {
@@ -105,7 +104,7 @@
         setMeasuredDimension(resolveSize(maxWidth, widthMeasureSpec),
                 resolveSize(maxHeight, heightMeasureSpec));
     }
-    
+
     private void drawPict(Canvas canvas, int x, int y, int w, int h,
                           float sx, float sy) {
         canvas.save();
@@ -121,10 +120,10 @@
     protected void dispatchDraw(Canvas canvas) {
         super.dispatchDraw(mPicture.beginRecording(getWidth(), getHeight()));
         mPicture.endRecording();
-        
+
         int x = getWidth()/2;
         int y = getHeight()/2;
-        
+
         if (false) {
             canvas.drawPicture(mPicture);
         } else {
diff --git a/samples/ApiDemos/src/com/example/android/apis/graphics/Pictures.java b/samples/ApiDemos/src/com/example/android/apis/graphics/Pictures.java
index 1bd0a8c..61842dd 100644
--- a/samples/ApiDemos/src/com/example/android/apis/graphics/Pictures.java
+++ b/samples/ApiDemos/src/com/example/android/apis/graphics/Pictures.java
@@ -16,13 +16,11 @@
 
 package com.example.android.apis.graphics;
 
-import android.app.Activity;
 import android.content.Context;
 import android.graphics.*;
 import android.graphics.drawable.Drawable;
 import android.graphics.drawable.PictureDrawable;
 import android.os.Bundle;
-import android.view.KeyEvent;
 import android.view.View;
 
 import java.io.*;
@@ -34,17 +32,17 @@
         super.onCreate(savedInstanceState);
         setContentView(new SampleView(this));
     }
-    
+
     private static class SampleView extends View {
         private Picture mPicture;
         private Drawable mDrawable;
 
         static void drawSomething(Canvas canvas) {
             Paint p = new Paint(Paint.ANTI_ALIAS_FLAG);
-            
+
             p.setColor(0x88FF0000);
             canvas.drawCircle(50, 50, 40, p);
-            
+
             p.setColor(Color.GREEN);
             p.setTextSize(30);
             canvas.drawText("Pictures", 60, 60, p);
@@ -58,20 +56,20 @@
             mPicture = new Picture();
             drawSomething(mPicture.beginRecording(200, 100));
             mPicture.endRecording();
-            
+
             mDrawable = new PictureDrawable(mPicture);
         }
-        
+
         @Override protected void onDraw(Canvas canvas) {
             canvas.drawColor(Color.WHITE);
 
             canvas.drawPicture(mPicture);
-            
+
             canvas.drawPicture(mPicture, new RectF(0, 100, getWidth(), 200));
-            
+
             mDrawable.setBounds(0, 200, getWidth(), 300);
             mDrawable.draw(canvas);
-            
+
             ByteArrayOutputStream os = new ByteArrayOutputStream();
             mPicture.writeToStream(os);
             InputStream is = new ByteArrayInputStream(os.toByteArray());
diff --git a/samples/ApiDemos/src/com/example/android/apis/graphics/PolyToPoly.java b/samples/ApiDemos/src/com/example/android/apis/graphics/PolyToPoly.java
index 15d92de..a1f1ed4 100644
--- a/samples/ApiDemos/src/com/example/android/apis/graphics/PolyToPoly.java
+++ b/samples/ApiDemos/src/com/example/android/apis/graphics/PolyToPoly.java
@@ -20,7 +20,6 @@
 // class is in a sub-package.
 //import com.example.android.apis.R;
 
-import android.app.Activity;
 import android.content.Context;
 import android.graphics.*;
 import android.os.Bundle;
@@ -33,7 +32,7 @@
         super.onCreate(savedInstanceState);
         setContentView(new SampleView(this));
     }
-    
+
     private static class SampleView extends View {
         private Paint   mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
         private Matrix  mMatrix = new Matrix();
@@ -43,13 +42,13 @@
             canvas.save();
             mMatrix.setPolyToPoly(src, 0, dst, 0, src.length >> 1);
             canvas.concat(mMatrix);
-            
+
             mPaint.setColor(Color.GRAY);
             mPaint.setStyle(Paint.Style.STROKE);
             canvas.drawRect(0, 0, 64, 64, mPaint);
             canvas.drawLine(0, 0, 64, 64, mPaint);
             canvas.drawLine(0, 64, 64, 0, mPaint);
-            
+
             mPaint.setColor(Color.RED);
             mPaint.setStyle(Paint.Style.FILL);
             // how to draw the text center on our square
@@ -58,7 +57,7 @@
             // centering in Y, we need to measure ascent/descent first
             float y = 64/2 - (mFontMetrics.ascent + mFontMetrics.descent)/2;
             canvas.drawText(src.length/2 + "", x, y, mPaint);
-            
+
             canvas.restore();
         }
 
@@ -72,10 +71,9 @@
             mPaint.setTextAlign(Paint.Align.CENTER);
             mFontMetrics = mPaint.getFontMetrics();
         }
-        
-        @Override protected void onDraw(Canvas canvas) {
-            Paint paint = mPaint;
 
+        @Override
+        protected void onDraw(Canvas canvas) {
             canvas.drawColor(Color.WHITE);
 
             canvas.save();
@@ -83,7 +81,7 @@
             // translate (1 point)
             doDraw(canvas, new float[] { 0, 0 }, new float[] { 5, 5 });
             canvas.restore();
-            
+
             canvas.save();
             canvas.translate(160, 10);
             // rotate/uniform-scale (2 points)
@@ -107,4 +105,3 @@
         }
     }
 }
-
diff --git a/samples/ApiDemos/src/com/example/android/apis/graphics/ProxyDrawable.java b/samples/ApiDemos/src/com/example/android/apis/graphics/ProxyDrawable.java
index d264134..635132e 100644
--- a/samples/ApiDemos/src/com/example/android/apis/graphics/ProxyDrawable.java
+++ b/samples/ApiDemos/src/com/example/android/apis/graphics/ProxyDrawable.java
@@ -22,18 +22,18 @@
 import android.graphics.drawable.Drawable;
 
 public class ProxyDrawable extends Drawable {
-    
+
     private Drawable mProxy;
     private boolean mMutated;
 
     public ProxyDrawable(Drawable target) {
         mProxy = target;
     }
-    
+
     public Drawable getProxy() {
         return mProxy;
     }
-    
+
     public void setProxy(Drawable proxy) {
         if (proxy != this) {
             mProxy = proxy;
@@ -46,43 +46,43 @@
             mProxy.draw(canvas);
         }
     }
-    
+
     @Override
     public int getIntrinsicWidth() {
         return mProxy != null ? mProxy.getIntrinsicWidth() : -1;
     }
-    
+
     @Override
     public int getIntrinsicHeight() {
         return mProxy != null ? mProxy.getIntrinsicHeight() : -1;
     }
-    
+
     @Override
     public int getOpacity() {
         return mProxy != null ? mProxy.getOpacity() : PixelFormat.TRANSPARENT;
     }
-    
+
     @Override
     public void setFilterBitmap(boolean filter) {
         if (mProxy != null) {
             mProxy.setFilterBitmap(filter);
         }
     }
-    
+
     @Override
     public void setDither(boolean dither) {
         if (mProxy != null) {
             mProxy.setDither(dither);
         }
     }
-    
+
     @Override
     public void setColorFilter(ColorFilter colorFilter) {
         if (mProxy != null) {
             mProxy.setColorFilter(colorFilter);
         }
     }
-    
+
     @Override
     public void setAlpha(int alpha) {
         if (mProxy != null) {
@@ -99,4 +99,4 @@
         return this;
     }
 }
-    
+
diff --git a/samples/ApiDemos/src/com/example/android/apis/graphics/Regions.java b/samples/ApiDemos/src/com/example/android/apis/graphics/Regions.java
index 833274b..fc0aa08 100644
--- a/samples/ApiDemos/src/com/example/android/apis/graphics/Regions.java
+++ b/samples/ApiDemos/src/com/example/android/apis/graphics/Regions.java
@@ -16,7 +16,6 @@
 
 package com.example.android.apis.graphics;
 
-import android.app.Activity;
 import android.content.Context;
 import android.graphics.*;
 import android.os.Bundle;
@@ -29,7 +28,7 @@
         super.onCreate(savedInstanceState);
         setContentView(new SampleView(this));
     }
-    
+
     private static class SampleView extends View {
         private final Paint mPaint = new Paint();
         private final Rect  mRect1 = new Rect();
@@ -38,11 +37,11 @@
         public SampleView(Context context) {
             super(context);
             setFocusable(true);
-            
+
             mPaint.setAntiAlias(true);
             mPaint.setTextSize(16);
             mPaint.setTextAlign(Paint.Align.CENTER);
-            
+
             mRect1.set(10, 10, 100, 80);
             mRect2.set(50, 50, 130, 110);
         }
@@ -55,25 +54,25 @@
             mPaint.setColor(Color.BLUE);
             mPaint.setAlpha(alpha);
             drawCentered(canvas, mRect2, mPaint);
-            
+
             // restore style
             mPaint.setStyle(Paint.Style.FILL);
         }
-        
+
         private void drawRgn(Canvas canvas, int color, String str, Region.Op op) {
             if (str != null) {
                 mPaint.setColor(Color.BLACK);
                 canvas.drawText(str, 80, 24, mPaint);
             }
-            
+
             Region rgn = new Region();
             rgn.set(mRect1);
             rgn.op(mRect2, op);
-            
+
             mPaint.setColor(color);
             RegionIterator iter = new RegionIterator(rgn);
             Rect r = new Rect();
-            
+
             canvas.translate(0, 30);
             mPaint.setColor(color);
             while (iter.next(r)) {
@@ -81,7 +80,7 @@
             }
             drawOriginalRects(canvas, 0x80);
         }
-        
+
         private static void drawCentered(Canvas c, Rect r, Paint p) {
             float inset = p.getStrokeWidth() * 0.5f;
             if (inset == 0) {   // catch hairlines
@@ -90,32 +89,33 @@
             c.drawRect(r.left + inset, r.top + inset,
                        r.right - inset, r.bottom - inset, p);
         }
-        
-        @Override protected void onDraw(Canvas canvas) {
-            canvas.drawColor(Color.GRAY);            
+
+        @Override
+        protected void onDraw(Canvas canvas) {
+            canvas.drawColor(Color.GRAY);
 
             canvas.save();
             canvas.translate(80, 5);
             drawOriginalRects(canvas, 0xFF);
             canvas.restore();
-            
+
             mPaint.setStyle(Paint.Style.FILL);
-            
+
             canvas.save();
             canvas.translate(0, 140);
             drawRgn(canvas, Color.RED, "Union", Region.Op.UNION);
             canvas.restore();
-            
+
             canvas.save();
             canvas.translate(0, 280);
             drawRgn(canvas, Color.BLUE, "Xor", Region.Op.XOR);
             canvas.restore();
-            
+
             canvas.save();
             canvas.translate(160, 140);
             drawRgn(canvas, Color.GREEN, "Difference", Region.Op.DIFFERENCE);
             canvas.restore();
-            
+
             canvas.save();
             canvas.translate(160, 280);
             drawRgn(canvas, Color.WHITE, "Intersect", Region.Op.INTERSECT);
diff --git a/samples/ApiDemos/src/com/example/android/apis/graphics/RoundRects.java b/samples/ApiDemos/src/com/example/android/apis/graphics/RoundRects.java
index b0ff035..74c2406 100644
--- a/samples/ApiDemos/src/com/example/android/apis/graphics/RoundRects.java
+++ b/samples/ApiDemos/src/com/example/android/apis/graphics/RoundRects.java
@@ -16,14 +16,10 @@
 
 package com.example.android.apis.graphics;
 
-import com.example.android.apis.R;
-
-import android.app.Activity;
 import android.content.Context;
 import android.graphics.*;
 import android.graphics.drawable.*;
 import android.os.Bundle;
-import android.view.KeyEvent;
 import android.view.*;
 
 public class RoundRects extends GraphicsActivity {
@@ -33,7 +29,7 @@
         super.onCreate(savedInstanceState);
         setContentView(new SampleView(this));
     }
-    
+
     private static class SampleView extends View {
         private Path    mPath;
         private Paint   mPaint;
@@ -47,73 +43,71 @@
             mPath = new Path();
             mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
             mRect = new Rect(0, 0, 120, 120);
-            
+
             mDrawable = new GradientDrawable(GradientDrawable.Orientation.TL_BR,
                                              new int[] { 0xFFFF0000, 0xFF00FF00,
                                                  0xFF0000FF });
             mDrawable.setShape(GradientDrawable.RECTANGLE);
             mDrawable.setGradientRadius((float)(Math.sqrt(2) * 60));
         }
-        
+
         static void setCornerRadii(GradientDrawable drawable, float r0,
                                    float r1, float r2, float r3) {
             drawable.setCornerRadii(new float[] { r0, r0, r1, r1,
                                                   r2, r2, r3, r3 });
         }
-        
+
         @Override protected void onDraw(Canvas canvas) {
-            
+
             mDrawable.setBounds(mRect);
 
             float r = 16;
-            
+
             canvas.save();
             canvas.translate(10, 10);
             mDrawable.setGradientType(GradientDrawable.LINEAR_GRADIENT);
             setCornerRadii(mDrawable, r, r, 0, 0);
             mDrawable.draw(canvas);
             canvas.restore();
-            
+
             canvas.save();
             canvas.translate(10 + mRect.width() + 10, 10);
             mDrawable.setGradientType(GradientDrawable.RADIAL_GRADIENT);
             setCornerRadii(mDrawable, 0, 0, r, r);
             mDrawable.draw(canvas);
             canvas.restore();
-            
+
             canvas.translate(0, mRect.height() + 10);
-    
+
             canvas.save();
             canvas.translate(10, 10);
             mDrawable.setGradientType(GradientDrawable.SWEEP_GRADIENT);
             setCornerRadii(mDrawable, 0, r, r, 0);
             mDrawable.draw(canvas);
             canvas.restore();
-            
+
             canvas.save();
             canvas.translate(10 + mRect.width() + 10, 10);
             mDrawable.setGradientType(GradientDrawable.LINEAR_GRADIENT);
             setCornerRadii(mDrawable, r, 0, 0, r);
             mDrawable.draw(canvas);
             canvas.restore();
-            
+
             canvas.translate(0, mRect.height() + 10);
-            
+
             canvas.save();
             canvas.translate(10, 10);
             mDrawable.setGradientType(GradientDrawable.RADIAL_GRADIENT);
             setCornerRadii(mDrawable, r, 0, r, 0);
             mDrawable.draw(canvas);
             canvas.restore();
-            
+
             canvas.save();
             canvas.translate(10 + mRect.width() + 10, 10);
             mDrawable.setGradientType(GradientDrawable.SWEEP_GRADIENT);
             setCornerRadii(mDrawable, 0, r, 0, r);
             mDrawable.draw(canvas);
             canvas.restore();
-            
         }
     }
 }
-
diff --git a/samples/ApiDemos/src/com/example/android/apis/graphics/ScaleToFit.java b/samples/ApiDemos/src/com/example/android/apis/graphics/ScaleToFit.java
index f55e55b..6ffdb5b 100644
--- a/samples/ApiDemos/src/com/example/android/apis/graphics/ScaleToFit.java
+++ b/samples/ApiDemos/src/com/example/android/apis/graphics/ScaleToFit.java
@@ -16,7 +16,6 @@
 
 package com.example.android.apis.graphics;
 
-import android.app.Activity;
 import android.content.Context;
 import android.graphics.*;
 import android.os.Bundle;
@@ -29,14 +28,14 @@
         super.onCreate(savedInstanceState);
         setContentView(new SampleView(this));
     }
-    
+
     private static class SampleView extends View {
         private final Paint   mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
         private final Paint   mHairPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
         private final Paint   mLabelPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
         private final Matrix  mMatrix = new Matrix();
         private final RectF   mSrcR = new RectF();
-        
+
         private static final Matrix.ScaleToFit[] sFits =
                 new Matrix.ScaleToFit[] {
             Matrix.ScaleToFit.FILL,
@@ -44,11 +43,11 @@
             Matrix.ScaleToFit.CENTER,
             Matrix.ScaleToFit.END
         };
-        
+
         private static final String[] sFitLabels = new String[] {
             "FILL", "START", "CENTER", "END"
         };
-        
+
         private static final int[] sSrcData = new int[] {
             80, 40, Color.RED,
             40, 80, Color.GREEN,
@@ -56,7 +55,7 @@
             80, 80, Color.BLACK
         };
         private static final int N = 4;
-        
+
         private static final int WIDTH = 52;
         private static final int HEIGHT = 52;
         private final RectF mDstR = new RectF(0, 0, WIDTH, HEIGHT);
@@ -67,34 +66,33 @@
             mHairPaint.setStyle(Paint.Style.STROKE);
             mLabelPaint.setTextSize(16);
         }
-        
+
         private void setSrcR(int index) {
             int w = sSrcData[index*3 + 0];
             int h = sSrcData[index*3 + 1];
             mSrcR.set(0, 0, w, h);
         }
-        
+
         private void drawSrcR(Canvas canvas, int index) {
             mPaint.setColor(sSrcData[index*3 + 2]);
             canvas.drawOval(mSrcR, mPaint);
         }
-        
+
         private void drawFit(Canvas canvas, int index, Matrix.ScaleToFit stf) {
             canvas.save();
-            
+
             setSrcR(index);
             mMatrix.setRectToRect(mSrcR, mDstR, stf);
             canvas.concat(mMatrix);
             drawSrcR(canvas, index);
-            
+
             canvas.restore();
-            
+
             canvas.drawRect(mDstR, mHairPaint);
         }
 
-        @Override protected void onDraw(Canvas canvas) {
-            Paint paint = mPaint;
-
+        @Override
+        protected void onDraw(Canvas canvas) {
             canvas.drawColor(Color.WHITE);
 
             canvas.translate(10, 10);
@@ -106,7 +104,7 @@
                 canvas.translate(mSrcR.width() + 15, 0);
             }
             canvas.restore();
-            
+
             canvas.translate(0, 100);
             for (int j = 0; j < sFits.length; j++) {
                 canvas.save();
@@ -121,4 +119,3 @@
         }
     }
 }
-
diff --git a/samples/ApiDemos/src/com/example/android/apis/graphics/SensorTest.java b/samples/ApiDemos/src/com/example/android/apis/graphics/SensorTest.java
index 87e0461..dc07a27 100644
--- a/samples/ApiDemos/src/com/example/android/apis/graphics/SensorTest.java
+++ b/samples/ApiDemos/src/com/example/android/apis/graphics/SensorTest.java
@@ -24,6 +24,7 @@
 import android.hardware.SensorManager;
 import android.os.Bundle;
 import android.util.Config;
+import android.util.Log;
 import android.view.View;
 
 public class SensorTest extends GraphicsActivity {
@@ -33,7 +34,7 @@
     private Sensor mSensor;
     private SampleView mView;
     private float[] mValues;
-    
+
     private static class RunAve {
         private final float[] mWeights;
         private final float mWeightScale;
@@ -43,7 +44,7 @@
 
         public RunAve(float[] weights) {
             mWeights = weights;
-            
+
             float sum = 0;
             for (int i = 0; i < weights.length; i++) {
                 sum += weights[i];
@@ -54,12 +55,12 @@
             mSamples = new float[mDepth];
             mCurr = 0;
         }
-        
+
         public void addSample(float value) {
             mSamples[mCurr] = value;
             mCurr = (mCurr + 1) % mDepth;
         }
-        
+
         public float computeAve() {
             final int depth = mDepth;
             int index = mCurr;
@@ -92,20 +93,20 @@
                 }
                 mPrev[i] = event.values[i];
             }
-            
+
             if (show) {
                 // only shows if we think the delta is big enough, in an attempt
                 // to detect "serious" moves left/right or up/down
-                android.util.Log.e(TAG, "sensorChanged " + event.sensor.getName() +
+                Log.e(TAG, "sensorChanged " + event.sensor.getName() +
                         " (" + event.values[0] + ", " + event.values[1] + ", " +
                         event.values[2] + ")" + " diff(" + diff[0] +
                         " " + diff[1] + " " + diff[2] + ")");
             }
-            
+
             long now = android.os.SystemClock.uptimeMillis();
             if (now - mLastGestureTime > 1000) {
                 mLastGestureTime = 0;
-                
+
                 float x = diff[0];
                 float y = diff[1];
                 boolean gestX = Math.abs(x) > 3;
@@ -114,15 +115,15 @@
                 if ((gestX || gestY) && !(gestX && gestY)) {
                     if (gestX) {
                         if (x < 0) {
-                            android.util.Log.e("test", "<<<<<<<< LEFT <<<<<<<<<<<<");
+                            Log.e("test", "<<<<<<<< LEFT <<<<<<<<<<<<");
                         } else {
-                            android.util.Log.e("test", ">>>>>>>>> RITE >>>>>>>>>>>");
+                            Log.e("test", ">>>>>>>>> RITE >>>>>>>>>>>");
                         }
                     } else {
                         if (y < -2) {
-                            android.util.Log.e("test", "<<<<<<<< UP <<<<<<<<<<<<");
+                            Log.e("test", "<<<<<<<< UP <<<<<<<<<<<<");
                         } else {
-                            android.util.Log.e("test", ">>>>>>>>> DOWN >>>>>>>>>>>");
+                            Log.e("test", ">>>>>>>>> DOWN >>>>>>>>>>>");
                         }
                     }
                     mLastGestureTime = now;
@@ -141,28 +142,27 @@
         mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
         mView = new SampleView(this);
         setContentView(mView);
-        if (Config.LOGD) android.util.Log.d(TAG, "create " + mSensorManager);
+        if (Config.DEBUG) Log.d(TAG, "create " + mSensorManager);
     }
 
     @Override
     protected void onResume() {
         super.onResume();
         mSensorManager.registerListener(mListener, mSensor, SensorManager.SENSOR_DELAY_FASTEST);
-        if (Config.LOGD) android.util.Log.d(TAG, "resume " + mSensorManager);
+        if (Config.DEBUG) Log.d(TAG, "resume " + mSensorManager);
     }
-    
+
     @Override
     protected void onStop() {
         mSensorManager.unregisterListener(mListener);
         super.onStop();
-        if (Config.LOGD) android.util.Log.d(TAG, "stop " + mSensorManager);
+        if (Config.DEBUG) Log.d(TAG, "stop " + mSensorManager);
     }
 
     private class SampleView extends View {
         private Paint   mPaint = new Paint();
         private Path    mPath = new Path();
         private boolean mAnimate;
-        private long    mNextTime;
 
         public SampleView(Context context) {
             super(context);
@@ -174,13 +174,13 @@
             mPath.lineTo(20, 60);
             mPath.close();
         }
-    
+
         @Override
         protected void onDraw(Canvas canvas) {
             Paint paint = mPaint;
 
             canvas.drawColor(Color.WHITE);
-            
+
             paint.setAntiAlias(true);
             paint.setColor(Color.BLACK);
             paint.setStyle(Paint.Style.FILL);
@@ -191,21 +191,23 @@
             int cy = h / 2;
 
             canvas.translate(cx, cy);
-            if (mValues != null) {            
+            if (mValues != null) {
                 canvas.rotate(-mValues[0]);
             }
             canvas.drawPath(mPath, mPaint);
         }
-    
+
         @Override
         protected void onAttachedToWindow() {
             mAnimate = true;
+            if (Config.DEBUG) Log.d(TAG, "onAttachedToWindow. mAnimate="+mAnimate);
             super.onAttachedToWindow();
         }
-        
+
         @Override
         protected void onDetachedFromWindow() {
             mAnimate = false;
+            if (Config.DEBUG) Log.d(TAG, "onAttachedToWindow. mAnimate="+mAnimate);
             super.onDetachedFromWindow();
         }
     }
diff --git a/samples/ApiDemos/src/com/example/android/apis/graphics/ShapeDrawable1.java b/samples/ApiDemos/src/com/example/android/apis/graphics/ShapeDrawable1.java
index 6d450bb..236f4fc 100644
--- a/samples/ApiDemos/src/com/example/android/apis/graphics/ShapeDrawable1.java
+++ b/samples/ApiDemos/src/com/example/android/apis/graphics/ShapeDrawable1.java
@@ -16,16 +16,12 @@
 
 package com.example.android.apis.graphics;
 
-import com.example.android.apis.R;
-
-import android.app.Activity;
 import android.content.Context;
 import android.graphics.*;
 import android.graphics.drawable.Drawable;
 import android.graphics.drawable.ShapeDrawable;
 import android.graphics.drawable.shapes.*;
 import android.os.Bundle;
-import android.view.KeyEvent;
 import android.view.*;
 
 public class ShapeDrawable1 extends GraphicsActivity {
@@ -35,49 +31,49 @@
         super.onCreate(savedInstanceState);
         setContentView(new SampleView(this));
     }
-    
+
     private static class SampleView extends View {
         private ShapeDrawable[] mDrawables;
-        
+
         private static Shader makeSweep() {
             return new SweepGradient(150, 25,
                 new int[] { 0xFFFF0000, 0xFF00FF00, 0xFF0000FF, 0xFFFF0000 },
                 null);
         }
-        
+
         private static Shader makeLinear() {
             return new LinearGradient(0, 0, 50, 50,
                               new int[] { 0xFFFF0000, 0xFF00FF00, 0xFF0000FF },
                               null, Shader.TileMode.MIRROR);
         }
-        
+
         private static Shader makeTiling() {
             int[] pixels = new int[] { 0xFFFF0000, 0xFF00FF00, 0xFF0000FF, 0};
             Bitmap bm = Bitmap.createBitmap(pixels, 2, 2,
                                             Bitmap.Config.ARGB_8888);
-            
+
             return new BitmapShader(bm, Shader.TileMode.REPEAT,
                                         Shader.TileMode.REPEAT);
         }
-        
+
         private static class MyShapeDrawable extends ShapeDrawable {
             private Paint mStrokePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
-            
+
             public MyShapeDrawable(Shape s) {
                 super(s);
                 mStrokePaint.setStyle(Paint.Style.STROKE);
             }
-            
+
             public Paint getStrokePaint() {
                 return mStrokePaint;
             }
-            
+
             @Override protected void onDraw(Shape s, Canvas c, Paint p) {
                 s.draw(c, p);
                 s.draw(c, mStrokePaint);
             }
         }
-        
+
         public SampleView(Context context) {
             super(context);
             setFocusable(true);
@@ -85,14 +81,14 @@
             float[] outerR = new float[] { 12, 12, 12, 12, 0, 0, 0, 0 };
             RectF   inset = new RectF(6, 6, 6, 6);
             float[] innerR = new float[] { 12, 12, 0, 0, 12, 12, 0, 0 };
-            
+
             Path path = new Path();
             path.moveTo(50, 0);
             path.lineTo(0, 50);
             path.lineTo(50, 100);
             path.lineTo(100, 50);
             path.close();
-            
+
             mDrawables = new ShapeDrawable[7];
             mDrawables[0] = new ShapeDrawable(new RectShape());
             mDrawables[1] = new ShapeDrawable(new OvalShape());
@@ -104,7 +100,7 @@
                                                                  innerR));
             mDrawables[5] = new ShapeDrawable(new PathShape(path, 100, 100));
             mDrawables[6] = new MyShapeDrawable(new ArcShape(45, -270));
-            
+
             mDrawables[0].getPaint().setColor(0xFFFF0000);
             mDrawables[1].getPaint().setColor(0xFF00FF00);
             mDrawables[2].getPaint().setColor(0xFF0000FF);
@@ -112,26 +108,26 @@
             mDrawables[4].getPaint().setShader(makeLinear());
             mDrawables[5].getPaint().setShader(makeTiling());
             mDrawables[6].getPaint().setColor(0x88FF8844);
-            
+
             PathEffect pe = new DiscretePathEffect(10, 4);
             PathEffect pe2 = new CornerPathEffect(4);
             mDrawables[3].getPaint().setPathEffect(
                                                 new ComposePathEffect(pe2, pe));
-        
+
             MyShapeDrawable msd = (MyShapeDrawable)mDrawables[6];
             msd.getStrokePaint().setStrokeWidth(4);
         }
-        
+
         @Override protected void onDraw(Canvas canvas) {
-            
+
             int x = 10;
             int y = 10;
             int width = 300;
             int height = 50;
-            
+
             for (Drawable dr : mDrawables) {
                 dr.setBounds(x, y, x + width, y + height);
-                dr.draw(canvas);                
+                dr.draw(canvas);
                 y += height + 5;
             }
         }
diff --git a/samples/ApiDemos/src/com/example/android/apis/graphics/Sweep.java b/samples/ApiDemos/src/com/example/android/apis/graphics/Sweep.java
index dc127fd..5da10cf 100644
--- a/samples/ApiDemos/src/com/example/android/apis/graphics/Sweep.java
+++ b/samples/ApiDemos/src/com/example/android/apis/graphics/Sweep.java
@@ -16,11 +16,6 @@
 
 package com.example.android.apis.graphics;
 
-// Need the following import to get access to the app resources, since this
-// class is in a sub-package.
-//import com.example.android.apis.R;
-
-import android.app.Activity;
 import android.content.Context;
 import android.graphics.*;
 import android.os.Bundle;
@@ -34,7 +29,7 @@
         super.onCreate(savedInstanceState);
         setContentView(new SampleView(this));
     }
-    
+
     private static class SampleView extends View {
         private Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
         private float mRotate;
@@ -55,7 +50,7 @@
                                                   Color.GREEN }, null);
             mPaint.setShader(mShader);
         }
-        
+
         @Override protected void onDraw(Canvas canvas) {
             Paint paint = mPaint;
             float x = 160;
diff --git a/samples/ApiDemos/src/com/example/android/apis/graphics/TextAlign.java b/samples/ApiDemos/src/com/example/android/apis/graphics/TextAlign.java
index 0576a7c..0ecba16 100644
--- a/samples/ApiDemos/src/com/example/android/apis/graphics/TextAlign.java
+++ b/samples/ApiDemos/src/com/example/android/apis/graphics/TextAlign.java
@@ -16,13 +16,9 @@
 
 package com.example.android.apis.graphics;
 
-import com.example.android.apis.R;
-
-import android.app.Activity;
 import android.content.Context;
 import android.graphics.*;
 import android.os.Bundle;
-import android.view.KeyEvent;
 import android.view.*;
 
 public class TextAlign extends GraphicsActivity {
@@ -32,27 +28,27 @@
         super.onCreate(savedInstanceState);
         setContentView(new SampleView(this));
     }
-    
+
     private static class SampleView extends View {
         private Paint   mPaint;
         private float   mX;
         private float[] mPos;
-        
+
         private Path    mPath;
         private Paint   mPathPaint;
-        
+
         private static final int DY = 30;
         private static final String TEXT_L = "Left";
         private static final String TEXT_C = "Center";
         private static final String TEXT_R = "Right";
         private static final String POSTEXT = "Positioned";
         private static final String TEXTONPATH = "Along a path";
-        
+
         private static void makePath(Path p) {
             p.moveTo(10, 0);
             p.cubicTo(100, -50, 200, 50, 300, 0);
         }
-        
+
         private float[] buildTextPositions(String text, float y, Paint paint) {
             float[] widths = new float[text.length()];
             // initially get the widths for each char
@@ -67,18 +63,18 @@
             }
             return pos;
         }
-        
+
         public SampleView(Context context) {
             super(context);
             setFocusable(true);
-            
+
             mPaint = new Paint();
             mPaint.setAntiAlias(true);
             mPaint.setTextSize(30);
             mPaint.setTypeface(Typeface.SERIF);
-            
+
             mPos = buildTextPositions(POSTEXT, 0, mPaint);
-            
+
             mPath = new Path();
             makePath(mPath);
 
@@ -87,7 +83,7 @@
             mPathPaint.setColor(0x800000FF);
             mPathPaint.setStyle(Paint.Style.STROKE);
         }
-        
+
         @Override protected void onDraw(Canvas canvas) {
             canvas.drawColor(Color.WHITE);
 
@@ -95,13 +91,13 @@
             float x = mX;
             float y = 0;
             float[] pos = mPos;
-            
+
             // draw the normal strings
 
             p.setColor(0x80FF0000);
             canvas.drawLine(x, y, x, y+DY*3, p);
             p.setColor(Color.BLACK);
-            
+
             canvas.translate(0, DY);
             p.setTextAlign(Paint.Align.LEFT);
             canvas.drawText(TEXT_L, x, y, p);
@@ -113,11 +109,11 @@
             canvas.translate(0, DY);
             p.setTextAlign(Paint.Align.RIGHT);
             canvas.drawText(TEXT_R, x, y, p);
-            
+
             canvas.translate(100, DY*2);
 
             // now draw the positioned strings
-    
+
             p.setColor(0xBB00FF00);
             for (int i = 0; i < pos.length/2; i++) {
                 canvas.drawLine(pos[i*2+0], pos[i*2+1]-DY,
@@ -127,17 +123,17 @@
 
             p.setTextAlign(Paint.Align.LEFT);
             canvas.drawPosText(POSTEXT, pos, p);
-            
+
             canvas.translate(0, DY);
             p.setTextAlign(Paint.Align.CENTER);
             canvas.drawPosText(POSTEXT, pos, p);
-            
+
             canvas.translate(0, DY);
             p.setTextAlign(Paint.Align.RIGHT);
             canvas.drawPosText(POSTEXT, pos, p);
-            
+
             // now draw the text on path
-            
+
             canvas.translate(-100, DY*2);
 
             canvas.drawPath(mPath, mPathPaint);
@@ -148,7 +144,7 @@
             canvas.drawPath(mPath, mPathPaint);
             p.setTextAlign(Paint.Align.CENTER);
             canvas.drawTextOnPath(TEXTONPATH, mPath, 0, 0, p);
-            
+
             canvas.translate(0, DY*1.5f);
             canvas.drawPath(mPath, mPathPaint);
             p.setTextAlign(Paint.Align.RIGHT);
diff --git a/samples/ApiDemos/src/com/example/android/apis/graphics/TouchPaint.java b/samples/ApiDemos/src/com/example/android/apis/graphics/TouchPaint.java
index 14e6c4f..9a3eb65 100644
--- a/samples/ApiDemos/src/com/example/android/apis/graphics/TouchPaint.java
+++ b/samples/ApiDemos/src/com/example/android/apis/graphics/TouchPaint.java
@@ -16,7 +16,6 @@
 
 package com.example.android.apis.graphics;
 
-import android.app.Activity;
 import android.content.Context;
 import android.graphics.Bitmap;
 import android.graphics.Canvas;
@@ -41,34 +40,34 @@
 public class TouchPaint extends GraphicsActivity {
     /** Used as a pulse to gradually fade the contents of the window. */
     private static final int FADE_MSG = 1;
-    
+
     /** Menu ID for the command to clear the window. */
     private static final int CLEAR_ID = Menu.FIRST;
     /** Menu ID for the command to toggle fading. */
     private static final int FADE_ID = Menu.FIRST+1;
-    
+
     /** How often to fade the contents of the window (in ms). */
     private static final int FADE_DELAY = 100;
-    
+
     /** The view responsible for drawing the window. */
     MyView mView;
     /** Is fading mode enabled? */
     boolean mFading;
-    
+
     @Override protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-        
+
         // Create and attach the view that is responsible for painting.
         mView = new MyView(this);
         setContentView(mView);
         mView.requestFocus();
-        
+
         // Restore the fading option if we are being thawed from a
         // previously saved state.  Note that we are not currently remembering
         // the contents of the bitmap.
         mFading = savedInstanceState != null ? savedInstanceState.getBoolean("fading", true) : true;
     }
-    
+
     @Override public boolean onCreateOptionsMenu(Menu menu) {
         menu.add(0, CLEAR_ID, 0, "Clear");
         menu.add(0, FADE_ID, 0, "Fade").setCheckable(true);
@@ -130,14 +129,14 @@
         mHandler.sendMessageDelayed(
                 mHandler.obtainMessage(FADE_MSG), FADE_DELAY);
     }
-    
+
     /**
      * Stop the pulse to fade the screen.
      */
     void stopFading() {
         mHandler.removeMessages(FADE_MSG);
     }
-    
+
     private Handler mHandler = new Handler() {
         @Override public void handleMessage(Message msg) {
             switch (msg.what) {
@@ -155,7 +154,7 @@
             }
         }
     };
-    
+
     public class MyView extends View {
         private static final int FADE_ALPHA = 0x06;
         private static final int MAX_FADE_STEPS = 256/FADE_ALPHA + 4;
@@ -169,7 +168,7 @@
         private float mCurX;
         private float mCurY;
         private int mFadeSteps = MAX_FADE_STEPS;
-        
+
         public MyView(Context c) {
             super(c);
             setFocusable(true);
@@ -189,7 +188,7 @@
                 mFadeSteps = MAX_FADE_STEPS;
             }
         }
-        
+
         public void fade() {
             if (mCanvas != null && mFadeSteps < MAX_FADE_STEPS) {
                 mCanvas.drawPaint(mFadePaint);
@@ -197,7 +196,7 @@
                 mFadeSteps++;
             }
         }
-        
+
         @Override protected void onSizeChanged(int w, int h, int oldw,
                 int oldh) {
             int curW = mBitmap != null ? mBitmap.getWidth() : 0;
@@ -205,10 +204,10 @@
             if (curW >= w && curH >= h) {
                 return;
             }
-            
+
             if (curW < w) curW = w;
             if (curH < h) curH = h;
-            
+
             Bitmap newBitmap = Bitmap.createBitmap(curW, curH,
                                                    Bitmap.Config.RGB_565);
             Canvas newCanvas = new Canvas();
@@ -220,7 +219,7 @@
             mCanvas = newCanvas;
             mFadeSteps = MAX_FADE_STEPS;
         }
-        
+
         @Override protected void onDraw(Canvas canvas) {
             if (mBitmap != null) {
                 canvas.drawBitmap(mBitmap, 0, 0, null);
@@ -246,7 +245,7 @@
             drawPoint(mCurX, mCurY, 1.0f, 16.0f);
             return true;
         }
-        
+
         @Override public boolean onTouchEvent(MotionEvent event) {
             int action = event.getActionMasked();
             if (action != MotionEvent.ACTION_UP && action != MotionEvent.ACTION_CANCEL) {
@@ -269,7 +268,7 @@
             }
             return true;
         }
-        
+
         private void drawPoint(float x, float y, float pressure, float width) {
             //Log.i("TouchPaint", "Drawing: " + x + "x" + y + " p="
             //        + pressure + " width=" + width);
diff --git a/samples/ApiDemos/src/com/example/android/apis/graphics/TouchRotateActivity.java b/samples/ApiDemos/src/com/example/android/apis/graphics/TouchRotateActivity.java
index c0f32a7..4133c04 100644
--- a/samples/ApiDemos/src/com/example/android/apis/graphics/TouchRotateActivity.java
+++ b/samples/ApiDemos/src/com/example/android/apis/graphics/TouchRotateActivity.java
@@ -16,7 +16,6 @@
 
 package com.example.android.apis.graphics;
 
-import javax.microedition.khronos.egl.EGL10;
 import javax.microedition.khronos.egl.EGLConfig;
 import javax.microedition.khronos.opengles.GL10;
 
diff --git a/samples/ApiDemos/src/com/example/android/apis/graphics/TriangleRenderer.java b/samples/ApiDemos/src/com/example/android/apis/graphics/TriangleRenderer.java
index ede6ef5..c41d173 100644
--- a/samples/ApiDemos/src/com/example/android/apis/graphics/TriangleRenderer.java
+++ b/samples/ApiDemos/src/com/example/android/apis/graphics/TriangleRenderer.java
@@ -23,7 +23,6 @@
 import java.nio.FloatBuffer;
 import java.nio.ShortBuffer;
 
-import javax.microedition.khronos.egl.EGL10;
 import javax.microedition.khronos.egl.EGLConfig;
 import javax.microedition.khronos.opengles.GL10;
 
diff --git a/samples/ApiDemos/src/com/example/android/apis/graphics/Typefaces.java b/samples/ApiDemos/src/com/example/android/apis/graphics/Typefaces.java
index aefc311..08facaa 100644
--- a/samples/ApiDemos/src/com/example/android/apis/graphics/Typefaces.java
+++ b/samples/ApiDemos/src/com/example/android/apis/graphics/Typefaces.java
@@ -16,7 +16,6 @@
 
 package com.example.android.apis.graphics;
 
-import android.app.Activity;
 import android.content.Context;
 import android.graphics.*;
 import android.os.Bundle;
@@ -29,20 +28,20 @@
         super.onCreate(savedInstanceState);
         setContentView(new SampleView(this));
     }
-    
+
     private static class SampleView extends View {
         private Paint    mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
         private Typeface mFace;
-        
+
         public SampleView(Context context) {
             super(context);
 
             mFace = Typeface.createFromAsset(getContext().getAssets(),
                                              "fonts/samplefont.ttf");
-            
+
             mPaint.setTextSize(64);
         }
-        
+
         @Override protected void onDraw(Canvas canvas) {
             canvas.drawColor(Color.WHITE);
 
diff --git a/samples/ApiDemos/src/com/example/android/apis/graphics/UnicodeChart.java b/samples/ApiDemos/src/com/example/android/apis/graphics/UnicodeChart.java
index 7ee99d0..0a2f630 100644
--- a/samples/ApiDemos/src/com/example/android/apis/graphics/UnicodeChart.java
+++ b/samples/ApiDemos/src/com/example/android/apis/graphics/UnicodeChart.java
@@ -16,7 +16,6 @@
 
 package com.example.android.apis.graphics;
 
-import android.app.Activity;
 import android.content.Context;
 import android.graphics.*;
 import android.os.Bundle;
@@ -29,20 +28,20 @@
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-        
+
         requestWindowFeature(Window.FEATURE_NO_TITLE);
-        
+
         setContentView(new SampleView(this));
     }
-    
+
     private static class SampleView extends View {
         private Paint mBigCharPaint;
         private Paint mLabelPaint;
         private final char[] mChars = new char[256];
         private final float[] mPos = new float[512];
-        
+
         private int mBase;
-        
+
         private static final int XMUL = 20;
         private static final int YMUL = 28;
         private static final int YBASE = 18;
@@ -51,49 +50,49 @@
             super(context);
             setFocusable(true);
             setFocusableInTouchMode(true);
-            
+
             mBigCharPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
             mBigCharPaint.setTextSize(15);
             mBigCharPaint.setTextAlign(Paint.Align.CENTER);
-            
+
             mLabelPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
             mLabelPaint.setTextSize(8);
             mLabelPaint.setTextAlign(Paint.Align.CENTER);
-            
+
             // the position array is the same for all charts
             float[] pos = mPos;
             int index = 0;
             for (int col = 0; col < 16; col++) {
-                final float x = col * 20 + 10;
+                final float x = col * XMUL + 10;
                 for (int row = 0; row < 16; row++) {
                     pos[index++] = x;
                     pos[index++] = row * YMUL + YBASE;
                 }
             }
         }
-        
+
         private float computeX(int index) {
-            return (index >> 4) * 20 + 10;
+            return (index >> 4) * XMUL + 10;
         }
 
         private float computeY(int index) {
             return (index & 0xF) * YMUL + YMUL;
         }
-        
+
         private void drawChart(Canvas canvas, int base) {
             char[] chars = mChars;
             for (int i = 0; i < 256; i++) {
                 int unichar = base + i;
                 chars[i] = (char)unichar;
-                
+
                 canvas.drawText(Integer.toHexString(unichar),
                                 computeX(i), computeY(i), mLabelPaint);
             }
             canvas.drawPosText(chars, 0, 256, mPos, mBigCharPaint);
         }
-        
+
         @Override protected void onDraw(Canvas canvas) {
-            canvas.drawColor(Color.WHITE);            
+            canvas.drawColor(Color.WHITE);
 
             canvas.translate(0, 1);
             drawChart(canvas, mBase * 256);
@@ -118,4 +117,3 @@
         }
     }
 }
-
diff --git a/samples/ApiDemos/src/com/example/android/apis/graphics/Vertices.java b/samples/ApiDemos/src/com/example/android/apis/graphics/Vertices.java
index 1e61906..ac1ab8a 100644
--- a/samples/ApiDemos/src/com/example/android/apis/graphics/Vertices.java
+++ b/samples/ApiDemos/src/com/example/android/apis/graphics/Vertices.java
@@ -18,17 +18,11 @@
 
 import com.example.android.apis.R;
 
-import android.app.Activity;
 import android.content.Context;
 import android.graphics.*;
-import android.graphics.drawable.*;
 import android.os.Bundle;
-import android.view.KeyEvent;
 import android.view.*;
 
-import java.io.IOException;
-import java.io.InputStream;
-
 public class Vertices extends GraphicsActivity {
 
     @Override
@@ -36,14 +30,13 @@
         super.onCreate(savedInstanceState);
         setContentView(new SampleView(this));
     }
-    
+
     private static class SampleView extends View {
         private final Paint mPaint = new Paint();
         private final float[] mVerts = new float[10];
         private final float[] mTexs = new float[10];
-        private final int[] mColors = new int[10];
         private final short[] mIndices = { 0, 1, 2, 3, 4, 1 };
-        
+
         private final Matrix mMatrix = new Matrix();
         private final Matrix mInverse = new Matrix();
 
@@ -61,7 +54,7 @@
             Shader s = new BitmapShader(bm, Shader.TileMode.CLAMP,
                                         Shader.TileMode.CLAMP);
             mPaint.setShader(s);
-            
+
             float w = bm.getWidth();
             float h = bm.getHeight();
             // construct our mesh
@@ -70,18 +63,18 @@
             setXY(mTexs, 2, w, 0);
             setXY(mTexs, 3, w, h);
             setXY(mTexs, 4, 0, h);
-            
+
             setXY(mVerts, 0, w/2, h/2);
             setXY(mVerts, 1, 0, 0);
             setXY(mVerts, 2, w, 0);
             setXY(mVerts, 3, w, h);
             setXY(mVerts, 4, 0, h);
-            
+
             mMatrix.setScale(0.8f, 0.8f);
             mMatrix.preTranslate(20, 20);
             mMatrix.invert(mInverse);
         }
-        
+
         @Override protected void onDraw(Canvas canvas) {
             canvas.drawColor(0xFFCCCCCC);
             canvas.save();
@@ -104,7 +97,7 @@
             invalidate();
             return true;
         }
-        
+
     }
 }
 
diff --git a/samples/ApiDemos/src/com/example/android/apis/graphics/Xfermodes.java b/samples/ApiDemos/src/com/example/android/apis/graphics/Xfermodes.java
index b9f8424..54e15e3 100644
--- a/samples/ApiDemos/src/com/example/android/apis/graphics/Xfermodes.java
+++ b/samples/ApiDemos/src/com/example/android/apis/graphics/Xfermodes.java
@@ -16,7 +16,6 @@
 
 package com.example.android.apis.graphics;
 
-import android.app.Activity;
 import android.content.Context;
 import android.graphics.Bitmap;
 import android.graphics.BitmapShader;
@@ -33,35 +32,35 @@
 import android.view.View;
 
 public class Xfermodes extends GraphicsActivity {
-    
+
     // create a bitmap with a circle, used for the "dst" image
     static Bitmap makeDst(int w, int h) {
         Bitmap bm = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
         Canvas c = new Canvas(bm);
         Paint p = new Paint(Paint.ANTI_ALIAS_FLAG);
-        
-        p.setColor(0xFFFFCC44);    
+
+        p.setColor(0xFFFFCC44);
         c.drawOval(new RectF(0, 0, w*3/4, h*3/4), p);
         return bm;
     }
-    
+
     // create a bitmap with a rect, used for the "src" image
     static Bitmap makeSrc(int w, int h) {
         Bitmap bm = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
         Canvas c = new Canvas(bm);
         Paint p = new Paint(Paint.ANTI_ALIAS_FLAG);
-        
+
         p.setColor(0xFF66AAFF);
         c.drawRect(w/3, h/3, w*19/20, h*19/20, p);
         return bm;
     }
-    
+
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(new SampleView(this));
     }
-    
+
     private static class SampleView extends View {
         private static final int W = 64;
         private static final int H = 64;
@@ -70,7 +69,7 @@
         private Bitmap mSrcB;
         private Bitmap mDstB;
         private Shader mBG;     // background checker-board pattern
-        
+
         private static final Xfermode[] sModes = {
             new PorterDuffXfermode(PorterDuff.Mode.CLEAR),
             new PorterDuffXfermode(PorterDuff.Mode.SRC),
@@ -89,20 +88,20 @@
             new PorterDuffXfermode(PorterDuff.Mode.MULTIPLY),
             new PorterDuffXfermode(PorterDuff.Mode.SCREEN)
         };
-        
+
         private static final String[] sLabels = {
             "Clear", "Src", "Dst", "SrcOver",
             "DstOver", "SrcIn", "DstIn", "SrcOut",
             "DstOut", "SrcATop", "DstATop", "Xor",
             "Darken", "Lighten", "Multiply", "Screen"
         };
-        
+
         public SampleView(Context context) {
             super(context);
-            
+
             mSrcB = makeSrc(W, H);
             mDstB = makeDst(W, H);
-            
+
             // make a ckeckerboard pattern
             Bitmap bm = Bitmap.createBitmap(new int[] { 0xFFFFFFFF, 0xFFCCCCCC,
                                             0xFFCCCCCC, 0xFFFFFFFF }, 2, 2,
@@ -114,18 +113,18 @@
             m.setScale(6, 6);
             mBG.setLocalMatrix(m);
         }
-        
+
         @Override protected void onDraw(Canvas canvas) {
             canvas.drawColor(Color.WHITE);
-            
+
             Paint labelP = new Paint(Paint.ANTI_ALIAS_FLAG);
             labelP.setTextAlign(Paint.Align.CENTER);
-            
+
             Paint paint = new Paint();
             paint.setFilterBitmap(false);
-            
+
             canvas.translate(15, 35);
-            
+
             int x = 0;
             int y = 0;
             for (int i = 0; i < sModes.length; i++) {
@@ -134,12 +133,12 @@
                 paint.setShader(null);
                 canvas.drawRect(x - 0.5f, y - 0.5f,
                                 x + W + 0.5f, y + H + 0.5f, paint);
-                
+
                 // draw the checker-board pattern
                 paint.setStyle(Paint.Style.FILL);
                 paint.setShader(mBG);
                 canvas.drawRect(x, y, x + W, y + H, paint);
-                
+
                 // draw the src/dst example into our offscreen bitmap
                 int sc = canvas.saveLayer(x, y, x + W, y + H, null,
                                           Canvas.MATRIX_SAVE_FLAG |
@@ -153,13 +152,13 @@
                 canvas.drawBitmap(mSrcB, 0, 0, paint);
                 paint.setXfermode(null);
                 canvas.restoreToCount(sc);
-                
+
                 // draw the label
                 canvas.drawText(sLabels[i],
                                 x + W/2, y - labelP.getTextSize()/2, labelP);
-                
+
                 x += W + 10;
-                
+
                 // wrap around when we've drawn enough for one row
                 if ((i % ROW_MAX) == ROW_MAX - 1) {
                     x = 0;
diff --git a/samples/ApiDemos/src/com/example/android/apis/view/Animation2.java b/samples/ApiDemos/src/com/example/android/apis/view/Animation2.java
index b2236aa..041794e 100644
--- a/samples/ApiDemos/src/com/example/android/apis/view/Animation2.java
+++ b/samples/ApiDemos/src/com/example/android/apis/view/Animation2.java
@@ -49,7 +49,7 @@
         s.setOnItemSelectedListener(this);
     }
 
-    public void onItemSelected(AdapterView parent, View v, int position, long id) {
+    public void onItemSelected(AdapterView<?> parent, View v, int position, long id) {
         switch (position) {
 
         case 0:
@@ -79,7 +79,7 @@
         }
     }
 
-    public void onNothingSelected(AdapterView parent) {
+    public void onNothingSelected(AdapterView<?> parent) {
     }
 
     private String[] mStrings = {
diff --git a/samples/ApiDemos/src/com/example/android/apis/view/Animation3.java b/samples/ApiDemos/src/com/example/android/apis/view/Animation3.java
index 11fc9ed..2cd7605 100644
--- a/samples/ApiDemos/src/com/example/android/apis/view/Animation3.java
+++ b/samples/ApiDemos/src/com/example/android/apis/view/Animation3.java
@@ -50,7 +50,7 @@
         s.setOnItemSelectedListener(this);
     }
 
-    public void onItemSelected(AdapterView parent, View v, int position, long id) {
+    public void onItemSelected(AdapterView<?> parent, View v, int position, long id) {
         final View target = findViewById(R.id.target);
         final View targetParent = (View) target.getParent();
 
@@ -96,6 +96,6 @@
         target.startAnimation(a);
     }
 
-    public void onNothingSelected(AdapterView parent) {
+    public void onNothingSelected(AdapterView<?> parent) {
     }
 }
\ No newline at end of file
diff --git a/samples/ApiDemos/src/com/example/android/apis/view/AutoComplete1.java b/samples/ApiDemos/src/com/example/android/apis/view/AutoComplete1.java
index f4274e5..bec4a5d 100644
--- a/samples/ApiDemos/src/com/example/android/apis/view/AutoComplete1.java
+++ b/samples/ApiDemos/src/com/example/android/apis/view/AutoComplete1.java
@@ -19,12 +19,9 @@
 import com.example.android.apis.R;
 
 import android.app.Activity;
-import android.widget.Spinner;
 import android.widget.ArrayAdapter;
 import android.widget.AutoCompleteTextView;
 import android.os.Bundle;
-import android.view.View;
-
 
 public class AutoComplete1 extends Activity {
 
diff --git a/samples/ApiDemos/src/com/example/android/apis/view/AutoComplete4.java b/samples/ApiDemos/src/com/example/android/apis/view/AutoComplete4.java
index c6fa08b..3d63a91 100644
--- a/samples/ApiDemos/src/com/example/android/apis/view/AutoComplete4.java
+++ b/samples/ApiDemos/src/com/example/android/apis/view/AutoComplete4.java
@@ -22,13 +22,15 @@
 import android.content.ContentResolver;
 import android.content.Context;
 import android.database.Cursor;
+import android.net.Uri;
 import android.os.Bundle;
-import android.provider.Contacts;
+import android.provider.ContactsContract.Contacts;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.AutoCompleteTextView;
 import android.widget.CursorAdapter;
+import android.widget.FilterQueryProvider;
 import android.widget.Filterable;
 import android.widget.TextView;
 
@@ -39,8 +41,9 @@
         setContentView(R.layout.autocomplete_4);
 
         ContentResolver content = getContentResolver();
-        Cursor cursor = content.query(Contacts.People.CONTENT_URI,
-                PEOPLE_PROJECTION, null, null, Contacts.People.DEFAULT_SORT_ORDER);
+        Cursor cursor = content.query(Contacts.CONTENT_URI,
+                CONTACT_PROJECTION, null, null, null);
+
         ContactListAdapter adapter = new ContactListAdapter(this, cursor);
 
         AutoCompleteTextView textView = (AutoCompleteTextView)
@@ -61,50 +64,40 @@
             final LayoutInflater inflater = LayoutInflater.from(context);
             final TextView view = (TextView) inflater.inflate(
                     android.R.layout.simple_dropdown_item_1line, parent, false);
-            view.setText(cursor.getString(5));
+            view.setText(cursor.getString(COLUMN_DISPLAY_NAME));
             return view;
         }
 
         @Override
         public void bindView(View view, Context context, Cursor cursor) {
-            ((TextView) view).setText(cursor.getString(5));
+            ((TextView) view).setText(cursor.getString(COLUMN_DISPLAY_NAME));
         }
 
         @Override
         public String convertToString(Cursor cursor) {
-            return cursor.getString(5);
+            return cursor.getString(COLUMN_DISPLAY_NAME);
         }
 
         @Override
         public Cursor runQueryOnBackgroundThread(CharSequence constraint) {
-            if (getFilterQueryProvider() != null) {
-                return getFilterQueryProvider().runQuery(constraint);
+            FilterQueryProvider filter = getFilterQueryProvider();
+            if (filter != null) {
+                return filter.runQuery(constraint);
             }
 
-            StringBuilder buffer = null;
-            String[] args = null;
-            if (constraint != null) {
-                buffer = new StringBuilder();
-                buffer.append("UPPER(");
-                buffer.append(Contacts.ContactMethods.NAME);
-                buffer.append(") GLOB ?");
-                args = new String[] { constraint.toString().toUpperCase() + "*" };
-            }
-
-            return mContent.query(Contacts.People.CONTENT_URI, PEOPLE_PROJECTION,
-                    buffer == null ? null : buffer.toString(), args,
-                    Contacts.People.DEFAULT_SORT_ORDER);
+            Uri uri = Uri.withAppendedPath(
+                    Contacts.CONTENT_FILTER_URI,
+                    Uri.encode(constraint.toString()));
+            return mContent.query(uri, CONTACT_PROJECTION, null, null, null);
         }
 
-        private ContentResolver mContent;        
+        private ContentResolver mContent;
     }
 
-    private static final String[] PEOPLE_PROJECTION = new String[] {
-        Contacts.People._ID,
-        Contacts.People.PRIMARY_PHONE_ID,
-        Contacts.People.TYPE,
-        Contacts.People.NUMBER,
-        Contacts.People.LABEL,
-        Contacts.People.NAME,
+    public static final String[] CONTACT_PROJECTION = new String[] {
+        Contacts._ID,
+        Contacts.DISPLAY_NAME
     };
-}
+
+    private static final int COLUMN_DISPLAY_NAME = 1;
+}
\ No newline at end of file
diff --git a/samples/ApiDemos/src/com/example/android/apis/view/AutoComplete5.java b/samples/ApiDemos/src/com/example/android/apis/view/AutoComplete5.java
index 7406da4..2009d8a 100644
--- a/samples/ApiDemos/src/com/example/android/apis/view/AutoComplete5.java
+++ b/samples/ApiDemos/src/com/example/android/apis/view/AutoComplete5.java
@@ -22,7 +22,7 @@
 import android.content.ContentResolver;
 import android.database.Cursor;
 import android.os.Bundle;
-import android.provider.Contacts;
+import android.provider.ContactsContract.Contacts;
 import android.widget.AutoCompleteTextView;
 
 public class AutoComplete5 extends Activity {
@@ -32,8 +32,8 @@
         setContentView(R.layout.autocomplete_5);
 
         ContentResolver content = getContentResolver();
-        Cursor cursor = content.query(Contacts.People.CONTENT_URI,
-                PEOPLE_PROJECTION, null, null, Contacts.People.DEFAULT_SORT_ORDER);
+        Cursor cursor = content.query(Contacts.CONTENT_URI,
+                AutoComplete4.CONTACT_PROJECTION, null, null, null);
         AutoComplete4.ContactListAdapter adapter =
                 new AutoComplete4.ContactListAdapter(this, cursor);
 
@@ -41,13 +41,4 @@
                 findViewById(R.id.edit);
         textView.setAdapter(adapter);
     }
-
-    private static final String[] PEOPLE_PROJECTION = new String[] {
-        Contacts.People._ID,
-        Contacts.People.PRIMARY_PHONE_ID,
-        Contacts.People.TYPE,
-        Contacts.People.NUMBER,
-        Contacts.People.LABEL,
-        Contacts.People.NAME
-    };
-}
+}
\ No newline at end of file
diff --git a/samples/ApiDemos/src/com/example/android/apis/view/AutoComplete6.java b/samples/ApiDemos/src/com/example/android/apis/view/AutoComplete6.java
index 3573bfb..2c28d65 100644
--- a/samples/ApiDemos/src/com/example/android/apis/view/AutoComplete6.java
+++ b/samples/ApiDemos/src/com/example/android/apis/view/AutoComplete6.java
@@ -19,12 +19,9 @@
 import com.example.android.apis.R;
 
 import android.app.Activity;
-import android.widget.Spinner;
 import android.widget.ArrayAdapter;
 import android.widget.MultiAutoCompleteTextView;
 import android.os.Bundle;
-import android.view.View;
-
 
 public class AutoComplete6 extends Activity {
 
diff --git a/samples/ApiDemos/src/com/example/android/apis/view/Buttons1.java b/samples/ApiDemos/src/com/example/android/apis/view/Buttons1.java
index e2f8cc8..a88ee30 100644
--- a/samples/ApiDemos/src/com/example/android/apis/view/Buttons1.java
+++ b/samples/ApiDemos/src/com/example/android/apis/view/Buttons1.java
@@ -22,9 +22,6 @@
 
 import android.app.Activity;
 import android.os.Bundle;
-import android.widget.Spinner;
-import android.widget.ArrayAdapter;
-
 
 /**
  * A gallery of the different styles of buttons.
diff --git a/samples/ApiDemos/src/com/example/android/apis/view/ExpandableList2.java b/samples/ApiDemos/src/com/example/android/apis/view/ExpandableList2.java
index 5784122..b6cce29 100644
--- a/samples/ApiDemos/src/com/example/android/apis/view/ExpandableList2.java
+++ b/samples/ApiDemos/src/com/example/android/apis/view/ExpandableList2.java
@@ -17,49 +17,49 @@
 package com.example.android.apis.view;
 
 import android.app.ExpandableListActivity;
-import android.content.ContentUris;
 import android.content.Context;
 import android.database.Cursor;
-import android.net.Uri;
 import android.os.Bundle;
-import android.provider.Contacts.People;
+import android.provider.ContactsContract.Contacts;
+import android.provider.ContactsContract.CommonDataKinds.Phone;
 import android.widget.ExpandableListAdapter;
 import android.widget.SimpleCursorTreeAdapter;
 
-
 /**
  * Demonstrates expandable lists backed by Cursors
  */
 public class ExpandableList2 extends ExpandableListActivity {
-    private int mGroupIdColumnIndex; 
-    
-    private String mPhoneNumberProjection[] = new String[] {
-            People.Phones._ID, People.Phones.NUMBER
+    private static final int COLUMN_CONTACT_ID = 0;
+
+    private static final String[] CONTACT_PROJECTION = new String[] {
+        Contacts._ID,
+        Contacts.DISPLAY_NAME
     };
 
-    
+    private static final String[] PHONE_PROJECTION = new String[] {
+        Phone._ID,
+        Phone.CONTACT_ID,
+        Phone.NUMBER
+    };
+
     private ExpandableListAdapter mAdapter;
-    
 
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
 
         // Query for people
-        Cursor groupCursor = managedQuery(People.CONTENT_URI,
-                new String[] {People._ID, People.NAME}, null, null, null);
-
-        // Cache the ID column index
-        mGroupIdColumnIndex = groupCursor.getColumnIndexOrThrow(People._ID);
+        Cursor groupCursor = managedQuery(Contacts.CONTENT_URI,
+                CONTACT_PROJECTION, null, null, null);
 
         // Set up our adapter
         mAdapter = new MyExpandableListAdapter(groupCursor,
                 this,
                 android.R.layout.simple_expandable_list_item_1,
                 android.R.layout.simple_expandable_list_item_1,
-                new String[] {People.NAME}, // Name for group layouts
+                new String[] {Contacts.DISPLAY_NAME}, // Name for group layouts
                 new int[] {android.R.id.text1},
-                new String[] {People.NUMBER}, // Number for child layouts
+                new String[] {Phone.NUMBER}, // Number for child layouts
                 new int[] {android.R.id.text1});
         setListAdapter(mAdapter);
     }
@@ -75,18 +75,13 @@
 
         @Override
         protected Cursor getChildrenCursor(Cursor groupCursor) {
-            // Given the group, we return a cursor for all the children within that group 
-
-            // Return a cursor that points to this contact's phone numbers
-            Uri.Builder builder = People.CONTENT_URI.buildUpon();
-            ContentUris.appendId(builder, groupCursor.getLong(mGroupIdColumnIndex));
-            builder.appendEncodedPath(People.Phones.CONTENT_DIRECTORY);
-            Uri phoneNumbersUri = builder.build();
-
+            int contactId = groupCursor.getInt(COLUMN_CONTACT_ID);
             // The returned Cursor MUST be managed by us, so we use Activity's helper
             // functionality to manage it for us.
-            return managedQuery(phoneNumbersUri, mPhoneNumberProjection, null, null, null);
+            return managedQuery(Phone.CONTENT_URI,
+                    PHONE_PROJECTION,
+                    Phone.CONTACT_ID + " = " + contactId,
+                    null, null);
         }
-
     }
-}
+}
\ No newline at end of file
diff --git a/samples/ApiDemos/src/com/example/android/apis/view/Focus1.java b/samples/ApiDemos/src/com/example/android/apis/view/Focus1.java
index 86f6ee7..c816b31 100644
--- a/samples/ApiDemos/src/com/example/android/apis/view/Focus1.java
+++ b/samples/ApiDemos/src/com/example/android/apis/view/Focus1.java
@@ -20,12 +20,10 @@
 
 import android.app.Activity;
 import android.os.Bundle;
-import android.view.View;
 import android.webkit.WebView;
 import android.widget.ListView;
 import android.widget.ArrayAdapter;
 
-
 /**
  * Demonstrates the use of non-focusable views.
  */
diff --git a/samples/ApiDemos/src/com/example/android/apis/view/Gallery1.java b/samples/ApiDemos/src/com/example/android/apis/view/Gallery1.java
index a539a5b..7aaaaef 100644
--- a/samples/ApiDemos/src/com/example/android/apis/view/Gallery1.java
+++ b/samples/ApiDemos/src/com/example/android/apis/view/Gallery1.java
@@ -49,7 +49,7 @@
         
         // Set a item click listener, and just Toast the clicked position
         g.setOnItemClickListener(new OnItemClickListener() {
-            public void onItemClick(AdapterView parent, View v, int position, long id) {
+            public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
                 Toast.makeText(Gallery1.this, "" + position, Toast.LENGTH_SHORT).show();
             }
         });
diff --git a/samples/ApiDemos/src/com/example/android/apis/view/Gallery2.java b/samples/ApiDemos/src/com/example/android/apis/view/Gallery2.java
index 2eea1ff..ed33451 100644
--- a/samples/ApiDemos/src/com/example/android/apis/view/Gallery2.java
+++ b/samples/ApiDemos/src/com/example/android/apis/view/Gallery2.java
@@ -17,9 +17,8 @@
 package com.example.android.apis.view;
 
 import android.app.Activity;
-import android.content.Context;
 import android.database.Cursor;
-import android.provider.Contacts.People;
+import android.provider.ContactsContract.Contacts;
 import android.os.Bundle;
 import android.widget.Gallery;
 import android.widget.SimpleCursorAdapter;
@@ -37,16 +36,17 @@
         setContentView(R.layout.gallery_2);
 
         // Get a cursor with all people
-        Cursor c = getContentResolver().query(People.CONTENT_URI, null, null, null, null);
+        Cursor c = getContentResolver().query(Contacts.CONTENT_URI,
+                CONTACT_PROJECTION, null, null, null);
         startManagingCursor(c);
-        
+
         SpinnerAdapter adapter = new SimpleCursorAdapter(this,
         // Use a template that displays a text view
                 android.R.layout.simple_gallery_item,
                 // Give the cursor to the list adatper
                 c,
                 // Map the NAME column in the people database to...
-                new String[] {People.NAME},
+                new String[] {Contacts.DISPLAY_NAME},
                 // The "text1" view defined in the XML template
                 new int[] { android.R.id.text1 });
 
@@ -54,4 +54,8 @@
         g.setAdapter(adapter);
     }
 
-}
+    private static final String[] CONTACT_PROJECTION = new String[] {
+        Contacts._ID,
+        Contacts.DISPLAY_NAME
+    };
+}
\ No newline at end of file
diff --git a/samples/ApiDemos/src/com/example/android/apis/view/ImageSwitcher1.java b/samples/ApiDemos/src/com/example/android/apis/view/ImageSwitcher1.java
index 66ef282..7f17c82 100644
--- a/samples/ApiDemos/src/com/example/android/apis/view/ImageSwitcher1.java
+++ b/samples/ApiDemos/src/com/example/android/apis/view/ImageSwitcher1.java
@@ -56,11 +56,11 @@
         g.setOnItemSelectedListener(this);
     }
 
-    public void onItemSelected(AdapterView parent, View v, int position, long id) {
+    public void onItemSelected(AdapterView<?> parent, View v, int position, long id) {
         mSwitcher.setImageResource(mImageIds[position]);
     }
 
-    public void onNothingSelected(AdapterView parent) {
+    public void onNothingSelected(AdapterView<?> parent) {
     }
 
     public View makeView() {
diff --git a/samples/ApiDemos/src/com/example/android/apis/view/List13.java b/samples/ApiDemos/src/com/example/android/apis/view/List13.java
index b3087be..68179ed 100644
--- a/samples/ApiDemos/src/com/example/android/apis/view/List13.java
+++ b/samples/ApiDemos/src/com/example/android/apis/view/List13.java
@@ -52,7 +52,6 @@
         private LayoutInflater mInflater;
         
         public SlowAdapter(Context context) {
-            mContext = context;
             mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
         }
 
@@ -114,11 +113,6 @@
 
             return text;
         }
-
-        /**
-         * Remember our context so we can use it when constructing views.
-         */
-        private Context mContext;
     }
     
     @Override
diff --git a/samples/ApiDemos/src/com/example/android/apis/view/List2.java b/samples/ApiDemos/src/com/example/android/apis/view/List2.java
index 4f37dd8..4dca2a7 100644
--- a/samples/ApiDemos/src/com/example/android/apis/view/List2.java
+++ b/samples/ApiDemos/src/com/example/android/apis/view/List2.java
@@ -18,34 +18,40 @@
 
 import android.app.ListActivity;
 import android.database.Cursor;
-import android.provider.Contacts.People;
+import android.provider.ContactsContract.Contacts;
 import android.os.Bundle;
 import android.widget.ListAdapter;
 import android.widget.SimpleCursorAdapter;
 
 /**
- * A list view example where the 
+ * A list view example where the
  * data comes from a cursor.
  */
 public class List2 extends ListActivity {
-    
+
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
 
         // Get a cursor with all people
-        Cursor c = getContentResolver().query(People.CONTENT_URI, null, null, null, null);
+        Cursor c = getContentResolver().query(Contacts.CONTENT_URI,
+                CONTACT_PROJECTION, null, null, null);
         startManagingCursor(c);
 
-        ListAdapter adapter = new SimpleCursorAdapter(this, 
+        ListAdapter adapter = new SimpleCursorAdapter(this,
                 // Use a template that displays a text view
-                android.R.layout.simple_list_item_1, 
+                android.R.layout.simple_list_item_1,
                 // Give the cursor to the list adatper
-                c, 
+                c,
                 // Map the NAME column in the people database to...
-                new String[] {People.NAME} ,
+                new String[] {Contacts.DISPLAY_NAME},
                 // The "text1" view defined in the XML template
-                new int[] {android.R.id.text1}); 
+                new int[] {android.R.id.text1});
         setListAdapter(adapter);
     }
-}
+
+    private static final String[] CONTACT_PROJECTION = new String[] {
+        Contacts._ID,
+        Contacts.DISPLAY_NAME
+    };
+}
\ No newline at end of file
diff --git a/samples/ApiDemos/src/com/example/android/apis/view/List3.java b/samples/ApiDemos/src/com/example/android/apis/view/List3.java
index 17e59f1..9c3b4b4 100644
--- a/samples/ApiDemos/src/com/example/android/apis/view/List3.java
+++ b/samples/ApiDemos/src/com/example/android/apis/view/List3.java
@@ -16,36 +16,69 @@
 
 package com.example.android.apis.view;
 
-
 import android.app.ListActivity;
 import android.database.Cursor;
 import android.os.Bundle;
-import android.provider.Contacts.Phones;
-import android.widget.ListAdapter;
+import android.provider.ContactsContract.CommonDataKinds.Phone;
+import android.view.View;
 import android.widget.SimpleCursorAdapter;
+import android.widget.TextView;
 
  /**
- * A list view example where the 
+ * A list view example where the
  * data comes from a cursor, and a
  * SimpleCursorListAdapter is used to map each item to a two-line
  * display.
  */
 public class List3 extends ListActivity {
-    
+
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
 
         // Get a cursor with all phones
-        Cursor c = getContentResolver().query(Phones.CONTENT_URI, null, null, null, null);
+        Cursor c = getContentResolver().query(Phone.CONTENT_URI,
+                PHONE_PROJECTION, null, null, null);
         startManagingCursor(c);
-        
+
         // Map Cursor columns to views defined in simple_list_item_2.xml
-        ListAdapter adapter = new SimpleCursorAdapter(this,
-                android.R.layout.simple_list_item_2, c, 
-                        new String[] { Phones.NAME, Phones.NUMBER }, 
+        SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
+                android.R.layout.simple_list_item_2, c,
+                        new String[] {
+                            Phone.TYPE,
+                            Phone.NUMBER
+                        },
                         new int[] { android.R.id.text1, android.R.id.text2 });
+        //Used to display a readable string for the phone type
+        adapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() {
+            public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
+                //Let the adapter handle the binding if the column is not TYPE
+                if (columnIndex != COLUMN_TYPE) {
+                    return false;
+                }
+                int type = cursor.getInt(COLUMN_TYPE);
+                String label = null;
+                //Custom type? Then get the custom label
+                if (type == Phone.TYPE_CUSTOM) {
+                    label = cursor.getString(COLUMN_LABEL);
+                }
+                //Get the readable string
+                String text = (String) Phone.getTypeLabel(getResources(), type, label);
+                //Set text
+                ((TextView) view).setText(text);
+                return true;
+            }
+        });
         setListAdapter(adapter);
     }
-  
-}
+
+    private static final String[] PHONE_PROJECTION = new String[] {
+        Phone._ID,
+        Phone.TYPE,
+        Phone.LABEL,
+        Phone.NUMBER
+    };
+
+    private static final int COLUMN_TYPE = 1;;
+    private static final int COLUMN_LABEL = 2;
+}
\ No newline at end of file
diff --git a/samples/ApiDemos/src/com/example/android/apis/view/List7.java b/samples/ApiDemos/src/com/example/android/apis/view/List7.java
index e773db6..ff5406f 100644
--- a/samples/ApiDemos/src/com/example/android/apis/view/List7.java
+++ b/samples/ApiDemos/src/com/example/android/apis/view/List7.java
@@ -16,12 +16,15 @@
 
 package com.example.android.apis.view;
 
+// Need the following import to get access to the app resources, since this
+// class is in a sub-package.
 import com.example.android.apis.R;
 
+
 import android.app.ListActivity;
 import android.database.Cursor;
+import android.provider.ContactsContract.CommonDataKinds.Phone;
 import android.os.Bundle;
-import android.provider.ContactsContract;
 import android.view.View;
 import android.widget.AdapterView;
 import android.widget.AdapterView.OnItemSelectedListener;
@@ -33,69 +36,64 @@
  * A list view example where the data comes from a cursor.
  */
 public class List7 extends ListActivity implements OnItemSelectedListener {
-    private static final String[] PROJECTION = new String[] {
-            ContactsContract.Contacts._ID,
-            ContactsContract.Contacts.DISPLAY_NAME,
-            ContactsContract.Contacts.HAS_PHONE_NUMBER,
-            ContactsContract.Contacts.LOOKUP_KEY
-    };
-
-    private int mIdColumnIndex;
-    private int mHasPhoneColumnIndex;
 
     private TextView mPhone;
 
+    private static final String[] PHONE_PROJECTION = new String[] {
+        Phone._ID,
+        Phone.TYPE,
+        Phone.LABEL,
+        Phone.NUMBER,
+        Phone.DISPLAY_NAME
+    };
+
+    private static final int COLUMN_PHONE_TYPE = 1;
+    private static final int COLUMN_PHONE_LABEL = 2;
+    private static final int COLUMN_PHONE_NUMBER = 3;
+
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-
         setContentView(R.layout.list_7);
-
         mPhone = (TextView) findViewById(R.id.phone);
         getListView().setOnItemSelectedListener(this);
 
-        // Get a cursor with all people
-        Cursor c = managedQuery(ContactsContract.Contacts.CONTENT_URI,
-                PROJECTION, null, null, null);
-        mIdColumnIndex = c.getColumnIndex(ContactsContract.Contacts._ID);
-        mHasPhoneColumnIndex = c.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER);
+        // Get a cursor with all numbers.
+        // This query will only return contacts with phone numbers
+        Cursor c = getContentResolver().query(Phone.CONTENT_URI,
+                PHONE_PROJECTION, Phone.NUMBER + " NOT NULL", null, null);
+        startManagingCursor(c);
 
         ListAdapter adapter = new SimpleCursorAdapter(this,
-                android.R.layout.simple_list_item_1, // Use a template
-                                                     // that displays a
-                                                     // text view
-                c, // Give the cursor to the list adapter
-                new String[] { ContactsContract.Contacts.DISPLAY_NAME }, // Map the NAME column in the
-                                                                         // people database to...
-                new int[] { android.R.id.text1 }); // The "text1" view defined in
-                                                   // the XML template
+                // Use a template that displays a text view
+                android.R.layout.simple_list_item_1,
+                // Give the cursor to the list adapter
+                c,
+                // Map the DISPLAY_NAME column to...
+                new String[] {Phone.DISPLAY_NAME},
+                // The "text1" view defined in the XML template
+                new int[] {android.R.id.text1});
         setListAdapter(adapter);
     }
 
-    public void onItemSelected(AdapterView parent, View v, int position, long id) {
+    public void onItemSelected(AdapterView<?> parent, View v, int position, long id) {
         if (position >= 0) {
-            final Cursor c = (Cursor) parent.getItemAtPosition(position);
-            if (c.getInt(mHasPhoneColumnIndex) > 0) {
-                final long contactId = c.getLong(mIdColumnIndex);
-                final Cursor phones = getContentResolver().query(
-                        ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
-                        new String[] { ContactsContract.CommonDataKinds.Phone.NUMBER },
-                        ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=" + contactId, null,
-                        ContactsContract.CommonDataKinds.Phone.IS_SUPER_PRIMARY + " DESC");
-
-                try {
-                    phones.moveToFirst();
-                    mPhone.setText(phones.getString(0));
-                } finally {
-                    phones.close();
-                }
-            } else {
-                mPhone.setText(R.string.list_7_nothing);                
+            //Get current cursor
+            Cursor c = (Cursor) parent.getItemAtPosition(position);
+            int type = c.getInt(COLUMN_PHONE_TYPE);
+            String phone = c.getString(COLUMN_PHONE_NUMBER);
+            String label = null;
+            //Custom type? Then get the custom label
+            if (type == Phone.TYPE_CUSTOM) {
+                label = c.getString(COLUMN_PHONE_LABEL);
             }
+            //Get the readable string
+            String numberType = (String) Phone.getTypeLabel(getResources(), type, label);
+            String text = numberType + ": " + phone;
+            mPhone.setText(text);
         }
     }
 
-    public void onNothingSelected(AdapterView parent) {
-        mPhone.setText(R.string.list_7_nothing);
+    public void onNothingSelected(AdapterView<?> parent) {
     }
 }
diff --git a/samples/ApiDemos/src/com/example/android/apis/view/List9.java b/samples/ApiDemos/src/com/example/android/apis/view/List9.java
index 15b3cc1..b2aea05 100644
--- a/samples/ApiDemos/src/com/example/android/apis/view/List9.java
+++ b/samples/ApiDemos/src/com/example/android/apis/view/List9.java
@@ -111,8 +111,8 @@
     
    
     
-    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
-        int lastItem = firstVisibleItem + visibleItemCount - 1;
+    public void onScroll(AbsListView view, int firstVisibleItem,
+            int visibleItemCount, int totalItemCount) {
         if (mReady) {
             char firstLetter = mStrings[firstVisibleItem].charAt(0);
             
@@ -120,8 +120,6 @@
 
                 mShowing = true;
                 mDialogText.setVisibility(View.VISIBLE);
-               
-
             }
             mDialogText.setText(((Character)firstLetter).toString());
             mHandler.removeCallbacks(mRemoveWindow);
@@ -316,5 +314,4 @@
             "Woodside Cabecou", "Xanadu", "Xynotyro", "Yarg Cornish",
             "Yarra Valley Pyramid", "Yorkshire Blue", "Zamorano",
             "Zanetti Grana Padano", "Zanetti Parmigiano Reggiano"};
-
 }
diff --git a/samples/ApiDemos/src/com/example/android/apis/view/RatingBar1.java b/samples/ApiDemos/src/com/example/android/apis/view/RatingBar1.java
index 97416d4..5fbf6dd 100644
--- a/samples/ApiDemos/src/com/example/android/apis/view/RatingBar1.java
+++ b/samples/ApiDemos/src/com/example/android/apis/view/RatingBar1.java
@@ -19,7 +19,6 @@
 import android.app.Activity;
 import android.os.Bundle;
 import android.widget.RatingBar;
-import android.widget.SeekBar;
 import android.widget.TextView;
 
 import com.example.android.apis.R;
diff --git a/samples/ApiDemos/src/com/example/android/apis/view/ScrollView2.java b/samples/ApiDemos/src/com/example/android/apis/view/ScrollView2.java
index 1af3c81..02fcd0e 100644
--- a/samples/ApiDemos/src/com/example/android/apis/view/ScrollView2.java
+++ b/samples/ApiDemos/src/com/example/android/apis/view/ScrollView2.java
@@ -24,7 +24,6 @@
 import android.widget.TextView;
 import android.widget.Button;
 
-
 /**
  * Demonstrates wrapping a layout in a ScrollView.
  *
diff --git a/samples/ApiDemos/src/com/example/android/apis/view/TableLayout10.java b/samples/ApiDemos/src/com/example/android/apis/view/TableLayout10.java
index f1f8f24..f904f84 100644
--- a/samples/ApiDemos/src/com/example/android/apis/view/TableLayout10.java
+++ b/samples/ApiDemos/src/com/example/android/apis/view/TableLayout10.java
@@ -19,15 +19,9 @@
 import com.example.android.apis.R;
 
 import android.app.Activity;
-import android.widget.TableLayout;
-import android.widget.Button;
 import android.os.Bundle;
-import android.view.View;
-
 
 public class TableLayout10 extends Activity {
-    private boolean mShrink;
-
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
diff --git a/samples/ApiDemos/src/com/example/android/apis/view/TableLayout11.java b/samples/ApiDemos/src/com/example/android/apis/view/TableLayout11.java
index 770238f..09b19a2 100644
--- a/samples/ApiDemos/src/com/example/android/apis/view/TableLayout11.java
+++ b/samples/ApiDemos/src/com/example/android/apis/view/TableLayout11.java
@@ -25,8 +25,6 @@
  * <p>This example shows how to use horizontal gravity in a table layout.</p>
  */
 public class TableLayout11 extends Activity {
-    private boolean mShrink;
-
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
diff --git a/samples/ApiDemos/src/com/example/android/apis/view/TableLayout12.java b/samples/ApiDemos/src/com/example/android/apis/view/TableLayout12.java
index 14cbd0d..f3fe850 100644
--- a/samples/ApiDemos/src/com/example/android/apis/view/TableLayout12.java
+++ b/samples/ApiDemos/src/com/example/android/apis/view/TableLayout12.java
@@ -25,8 +25,6 @@
  * <p>This example shows how to use cell spanning in a table layout.</p>
  */
 public class TableLayout12 extends Activity {
-    private boolean mShrink;
-
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
diff --git a/samples/ApiDemos/src/com/example/android/apis/view/Tabs1.java b/samples/ApiDemos/src/com/example/android/apis/view/Tabs1.java
index 455969e..39f7e9b 100644
--- a/samples/ApiDemos/src/com/example/android/apis/view/Tabs1.java
+++ b/samples/ApiDemos/src/com/example/android/apis/view/Tabs1.java
@@ -21,7 +21,6 @@
 import android.widget.TabHost;
 import android.widget.TabHost.TabSpec;
 import android.view.LayoutInflater;
-import android.view.View;
 
 import com.example.android.apis.R;
 
diff --git a/samples/GlobalTime/src/com/android/globaltime/GlobalTime.java b/samples/GlobalTime/src/com/android/globaltime/GlobalTime.java
index d96b644..e27ee56 100644
--- a/samples/GlobalTime/src/com/android/globaltime/GlobalTime.java
+++ b/samples/GlobalTime/src/com/android/globaltime/GlobalTime.java
@@ -898,7 +898,7 @@
 
         // The '2' key zooms out
         case KeyEvent.KEYCODE_2:
-            if (!mAlphaKeySet && !mDisplayWorldFlat) {
+            if (!mAlphaKeySet && !mDisplayWorldFlat && mInitialized) {
                 mGLView.zoom(-2);
                 handled = true;
             }
@@ -906,7 +906,7 @@
 
         // The '8' key zooms in
         case KeyEvent.KEYCODE_8:
-            if (!mAlphaKeySet && !mDisplayWorldFlat) {
+            if (!mAlphaKeySet && !mDisplayWorldFlat && mInitialized) {
                 mGLView.zoom(2);
                 handled = true;
             }
diff --git a/samples/LunarLander/src/com/example/android/lunarlander/LunarLander.java b/samples/LunarLander/src/com/example/android/lunarlander/LunarLander.java
index a4ffef5..15c5923 100644
--- a/samples/LunarLander/src/com/example/android/lunarlander/LunarLander.java
+++ b/samples/LunarLander/src/com/example/android/lunarlander/LunarLander.java
@@ -21,7 +21,6 @@
 import android.util.Log;
 import android.view.Menu;
 import android.view.MenuItem;
-import android.view.Window;
 import android.widget.TextView;
 
 import com.example.android.lunarlander.LunarView.LunarThread;
@@ -58,7 +57,7 @@
 
     /**
      * Invoked during init to give the Activity a chance to set up its Menu.
-     * 
+     *
      * @param menu the Menu to which entries may be added
      * @return true
      */
@@ -79,7 +78,7 @@
 
     /**
      * Invoked when the user selects an item from the Menu.
-     * 
+     *
      * @param item the Menu entry which was selected
      * @return true if the Menu item was legit (and we consumed it), false
      *         otherwise
@@ -116,7 +115,7 @@
 
     /**
      * Invoked when the Activity is created.
-     * 
+     *
      * @param savedInstanceState a Bundle containing state saved from a previous
      *        execution, or null if this is a new execution
      */
@@ -157,7 +156,7 @@
     /**
      * Notification that something is about to happen, to give the Activity a
      * chance to save state.
-     * 
+     *
      * @param outState a Bundle into which this Activity should save its state
      */
     @Override
diff --git a/samples/LunarLander/src/com/example/android/lunarlander/LunarView.java b/samples/LunarLander/src/com/example/android/lunarlander/LunarView.java
index c52c7ab..2a46147 100644
--- a/samples/LunarLander/src/com/example/android/lunarlander/LunarView.java
+++ b/samples/LunarLander/src/com/example/android/lunarlander/LunarView.java
@@ -37,7 +37,7 @@
 
 /**
  * View that draws, takes keystrokes, etc. for a simple LunarLander game.
- * 
+ *
  * Has a mode which RUNNING, PAUSED, etc. Has a x, y, dx, dy, ... capturing the
  * current ship physics. All x/y etc. are measured with (0,0) at the lower left.
  * updatePhysics() advances the physics based on realtime. draw() renders the
@@ -112,14 +112,14 @@
 
         /**
          * Current height of the surface/canvas.
-         * 
+         *
          * @see #setSurfaceSize
          */
         private int mCanvasHeight = 1;
 
         /**
          * Current width of the surface/canvas.
-         * 
+         *
          * @see #setSurfaceSize
          */
         private int mCanvasWidth = 1;
@@ -321,7 +321,7 @@
          * Restores game state from the indicated Bundle. Typically called when
          * the Activity is being restored after having been previously
          * destroyed.
-         * 
+         *
          * @param savedState Bundle containing the game state
          */
         public synchronized void restoreState(Bundle savedState) {
@@ -372,7 +372,7 @@
         /**
          * Dump game state to the provided Bundle. Typically called when the
          * Activity is being suspended.
-         * 
+         *
          * @return Bundle with this view's state
          */
         public Bundle saveState(Bundle map) {
@@ -400,7 +400,7 @@
 
         /**
          * Sets the current difficulty.
-         * 
+         *
          * @param difficulty
          */
         public void setDifficulty(int difficulty) {
@@ -423,7 +423,7 @@
          * Passing true allows the thread to run; passing false will shut it
          * down if it's already running. Calling start() after this was most
          * recently called with false will result in an immediate shutdown.
-         * 
+         *
          * @param b true to run, false to shut down
          */
         public void setRunning(boolean b) {
@@ -433,7 +433,7 @@
         /**
          * Sets the game mode. That is, whether we are running, paused, in the
          * failure state, in the victory state, etc.
-         * 
+         *
          * @see #setState(int, CharSequence)
          * @param mode one of the STATE_* constants
          */
@@ -446,7 +446,7 @@
         /**
          * Sets the game mode. That is, whether we are running, paused, in the
          * failure state, in the victory state, etc.
-         * 
+         *
          * @param mode one of the STATE_* constants
          * @param message string to add to screen or null
          */
@@ -509,7 +509,7 @@
                 mCanvasHeight = height;
 
                 // don't forget to resize the background image
-                mBackgroundImage = mBackgroundImage.createScaledBitmap(
+                mBackgroundImage = Bitmap.createScaledBitmap(
                         mBackgroundImage, width, height, true);
             }
         }
@@ -527,7 +527,7 @@
 
         /**
          * Handles a key-down event.
-         * 
+         *
          * @param keyCode the key that was pressed
          * @param msg the original event object
          * @return true
@@ -539,8 +539,6 @@
                 if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN) okStart = true;
                 if (keyCode == KeyEvent.KEYCODE_S) okStart = true;
 
-                boolean center = (keyCode == KeyEvent.KEYCODE_DPAD_UP);
-
                 if (okStart
                         && (mMode == STATE_READY || mMode == STATE_LOSE || mMode == STATE_WIN)) {
                     // ready-to-start -> start
@@ -579,7 +577,7 @@
 
         /**
          * Handles a key-up event.
-         * 
+         *
          * @param keyCode the key that was pressed
          * @param msg the original event object
          * @return true if the key was handled and consumed, or else false
@@ -807,7 +805,7 @@
 
     /**
      * Fetches the animation thread corresponding to this LunarView.
-     * 
+     *
      * @return the animation thread
      */
     public LunarThread getThread() {
diff --git a/testrunner/test_defs/test_walker.py b/testrunner/test_defs/test_walker.py
index 06c4e6d..4ef6923 100755
--- a/testrunner/test_defs/test_walker.py
+++ b/testrunner/test_defs/test_walker.py
@@ -116,7 +116,8 @@
     Args:
       path: absolute file system path to check
       tests: current list of found tests
-      build_path: the parent directory where Android.mk was found
+      build_path: the parent directory where Android.mk that builds sub-folders
+        was found
 
     Returns:
       updated list of tests
@@ -124,17 +125,31 @@
     if not os.path.isdir(path):
       return tests
     filenames = os.listdir(path)
-    # Try to build as much of original path as possible, so
-    # keep track of upper-most parent directory where Android.mk was found
-    # this is also necessary in case of overlapping tests
-    # ie if a test exists at 'foo' directory  and 'foo/sub', attempting to
-    # build both 'foo' and 'foo/sub' will fail.
-    if not build_path and filenames.count(android_mk.AndroidMK.FILENAME):
-      build_path = self._MakePathRelativeToBuild(path)
     if filenames.count(android_manifest.AndroidManifest.FILENAME):
       # found a manifest! now parse it to find the test definition(s)
       manifest = android_manifest.AndroidManifest(app_path=path)
-      tests.extend(self._CreateSuitesFromManifest(manifest, build_path))
+      if not build_path:
+        # haven't found a parent makefile which builds this dir. Use current
+        # dir as build path
+        tests.extend(self._CreateSuitesFromManifest(
+            manifest, self._MakePathRelativeToBuild(path)))
+      else:
+        tests.extend(self._CreateSuitesFromManifest(manifest, build_path))
+    # Try to build as much of original path as possible, so
+    # keep track of upper-most parent directory where Android.mk was found that
+    # has rule to build sub-directory makefiles
+    # this is also necessary in case of overlapping tests
+    # ie if a test exists at 'foo' directory  and 'foo/sub', attempting to
+    # build both 'foo' and 'foo/sub' will fail.
+    if filenames.count(android_mk.AndroidMK.FILENAME):
+      android_mk_parser = android_mk.AndroidMK(app_path=path)
+      if android_mk_parser.HasInclude('call all-makefiles-under,$(LOCAL_PATH)'):
+        # found rule to build sub-directories. The parent path can be used, 
+        # or if not set, use current path
+        if not build_path:
+          build_path = self._MakePathRelativeToBuild(path)
+      else:
+        build_path = None
     for filename in filenames:
       self._FindSubTests(os.path.join(path, filename), tests, build_path)
     return tests
diff --git a/tools/monkeyrunner/Android.mk b/tools/monkeyrunner/Android.mk
deleted file mode 100644
index d15c67e..0000000
--- a/tools/monkeyrunner/Android.mk
+++ /dev/null
@@ -1,18 +0,0 @@
-#
-# 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.
-#
-MONKEYRUNNER_LOCAL_DIR := $(call my-dir)
-include $(MONKEYRUNNER_LOCAL_DIR)/etc/Android.mk
-include $(MONKEYRUNNER_LOCAL_DIR)/src/Android.mk
diff --git a/tools/monkeyrunner/MODULE_LICENSE_APACHE2 b/tools/monkeyrunner/MODULE_LICENSE_APACHE2
deleted file mode 100644
index e69de29..0000000
--- a/tools/monkeyrunner/MODULE_LICENSE_APACHE2
+++ /dev/null
diff --git a/tools/monkeyrunner/NOTICE b/tools/monkeyrunner/NOTICE
deleted file mode 100644
index c5b1efa..0000000
--- a/tools/monkeyrunner/NOTICE
+++ /dev/null
@@ -1,190 +0,0 @@
-
-   Copyright (c) 2005-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.
-
-   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.
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
diff --git a/tools/monkeyrunner/etc/Android.mk b/tools/monkeyrunner/etc/Android.mk
deleted file mode 100644
index 2d757fd..0000000
--- a/tools/monkeyrunner/etc/Android.mk
+++ /dev/null
@@ -1,20 +0,0 @@
-#
-# 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.
-#
-LOCAL_PATH := $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_PREBUILT_EXECUTABLES := monkeyrunner
-include $(BUILD_HOST_PREBUILT)
diff --git a/tools/monkeyrunner/etc/manifest.txt b/tools/monkeyrunner/etc/manifest.txt
deleted file mode 100644
index 288be5f..0000000
--- a/tools/monkeyrunner/etc/manifest.txt
+++ /dev/null
@@ -1 +0,0 @@
-Main-Class: com.android.monkeyrunner.MonkeyRunner
diff --git a/tools/monkeyrunner/etc/monkeyrunner b/tools/monkeyrunner/etc/monkeyrunner
deleted file mode 100755
index 364be2a..0000000
--- a/tools/monkeyrunner/etc/monkeyrunner
+++ /dev/null
@@ -1,74 +0,0 @@
-#!/bin/sh
-# Copyright 2005-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.
-
-# Set up prog to be the path of this script, including following symlinks,
-# and set up progdir to be the fully-qualified pathname of its directory.
-prog="$0"
-while [ -h "${prog}" ]; do
-    newProg=`/bin/ls -ld "${prog}"`
-    newProg=`expr "${newProg}" : ".* -> \(.*\)$"`
-    if expr "x${newProg}" : 'x/' >/dev/null; then
-        prog="${newProg}"
-    else
-        progdir=`dirname "${prog}"`
-        prog="${progdir}/${newProg}"
-    fi
-done
-oldwd=`pwd`
-progdir=`dirname "${prog}"`
-cd "${progdir}"
-progdir=`pwd`
-prog="${progdir}"/`basename "${prog}"`
-cd "${oldwd}"
-
-jarfile=monkeyrunner.jar
-frameworkdir="$progdir"
-libdir="$progdir"
-if [ ! -r "$frameworkdir/$jarfile" ]
-then
-    frameworkdir=`dirname "$progdir"`/tools/lib
-    libdir=`dirname "$progdir"`/tools/lib
-fi
-if [ ! -r "$frameworkdir/$jarfile" ]
-then
-    frameworkdir=`dirname "$progdir"`/framework
-    libdir=`dirname "$progdir"`/lib
-fi
-if [ ! -r "$frameworkdir/$jarfile" ]
-then
-    echo `basename "$prog"`": can't find $jarfile"
-    exit 1
-fi
-
-
-# Check args.
-if [ debug = "$1" ]; then
-    # add this in for debugging
-    java_debug=-agentlib:jdwp=transport=dt_socket,server=y,address=8050,suspend=y
-    shift 1
-else
-    java_debug=
-fi
-
-if [ "$OSTYPE" = "cygwin" ] ; then
-    jarpath=`cygpath -w  "$frameworkdir/$jarfile"`
-    progdir=`cygpath -w  "$progdir"`
-else
-    jarpath="$frameworkdir/$jarfile"
-fi
-
-# need to use "java.ext.dirs" because "-jar" causes classpath to be ignored
-# might need more memory, e.g. -Xmx128M
-exec java -Xmx128M $os_opts $java_debug -Djava.ext.dirs="$frameworkdir" -Djava.library.path="$libdir" -Dcom.android.monkeyrunner.bindir="$progdir" -jar "$jarpath" "$@"
diff --git a/tools/monkeyrunner/src/Android.mk b/tools/monkeyrunner/src/Android.mk
deleted file mode 100644
index fb6b9c1..0000000
--- a/tools/monkeyrunner/src/Android.mk
+++ /dev/null
@@ -1,51 +0,0 @@
-#
-# 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.
-#
-LOCAL_PATH := $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(call all-subdir-java-files)
-
-LOCAL_JAR_MANIFEST := ../etc/manifest.txt
-LOCAL_JAVA_LIBRARIES := \
-	ddmlib \
-	jython \
-	xmlwriter
-
-
-LOCAL_MODULE := monkeyrunner
-
-include $(BUILD_HOST_JAVA_LIBRARY)
-
-# Build ext.jar
-# ============================================================
-
-ext_dirs := 	../../../../external/xmlwriter/src
-
-ext_src_files := $(call all-java-files-under,$(ext_dirs))
-
-# ====  the library  =========================================
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(ext_src_files)
-
-LOCAL_NO_STANDARD_LIBRARIES := true
-#LOCAL_JAVA_LIBRARIES := core
-#LOCAL_STATIC_JAVA_LIBRARIES := libgoogleclient
-
-LOCAL_MODULE := xmlwriter
-
-include $(BUILD_HOST_JAVA_LIBRARY)
-
diff --git a/tools/monkeyrunner/src/com/android/monkeyrunner/MonkeyRecorder.java b/tools/monkeyrunner/src/com/android/monkeyrunner/MonkeyRecorder.java
deleted file mode 100644
index f06eafd..0000000
--- a/tools/monkeyrunner/src/com/android/monkeyrunner/MonkeyRecorder.java
+++ /dev/null
@@ -1,299 +0,0 @@
-/*
- * 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.monkeyrunner;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.text.SimpleDateFormat;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipOutputStream;
-
-import org.jheer.XMLWriter;
-
-/**
- *  MonkeyRecorder is a host side class that records the output of scripts that are run. 
- *  It creates a unique directory, puts in an xml file that records each cmd and result.
- *  It stores every screenshot in this directory.
- *  When finished, it zips this all up.
- *
- *  Calling Sequence:
- *    mr = new MonkeyRecorder(scriptName);
- *    mr.startCommand();
- *    [mr.addAttribute(name, value);]
- *    ...
- *    [mr.addInput(cmd);]
- *    [mr.addResults(result, filename);]   // filename = "" if no screenshot
- *    mr.endCommand();
- *    mr.addComment(comment);
- *    mr.startCommand();
- *    ...
- *    mr.endCommand();
- *    ...
- *    mr.close();
- *
- *  With MonkeyRunner this should output an xml file, <script_name>-yyyyMMdd-HH:mm:ss.xml, into the
- *  directory out/<script_name>-yyyyMMdd-HH:mm:ss with the contents like:
- *
- *  <?xml version="1.0" encoding='UTF-8'?>
- *  <!-- Monkey Script Results -->
- *  <script_run script_name="filename" monkeyRunnerVersion="0.2">
- *    <!-- Device specific variables -->
- *    <device_var var_name="name" var_value="value" />
- *    <device_var name="build.display" value="opal-userdebug 1.6 DRC79 14207 test-keys"/>
- *    ...
- *    <!-- Script commands -->
- *    <command>
- *      dateTime="20090921-17:08:43"
- *      <input cmd="Pressing: menu"/>
- *      <response result="OK" dateTime="20090921-17:08:43"/>
- *    </command>
- *    ...
- *    <command>
- *      dateTime="20090921-17:09:44"
- *      <input cmd="grabscreen"/>
- *      <response result="OK" dateTime="20090921-17:09:45" screenshot="home_screen-20090921-17:09:45.png"/>
- *    </command>
- *    ...
- *  </script_run>
- *  
- *  And then zip it up with all the screenshots in the file: <script_name>-yyyyMMdd-HH:mm:ss.zip.
- */
- 
-public class MonkeyRecorder {
-
-  // xml file to store output results in
-  private static String mXmlFilename;
-  private static FileWriter mXmlFile;
-  private static XMLWriter mXmlWriter;
-  
-  // unique subdirectory to put results in (screenshots and xml file)
-  private static String mDirname;
-  private static List<String> mScreenShotNames = new ArrayList<String>();
-  
-  // where we store all the results for all the script runs
-  private static final String ROOT_DIR = "out";
-  
-  // for getting the date and time in now()
-  private static final SimpleDateFormat SIMPLE_DATE_TIME_FORMAT =
-      new SimpleDateFormat("yyyyMMdd-HH:mm:ss");
-  
-  /**
-   * Create a new MonkeyRecorder that records commands and zips up screenshots for submittal
-   * 
-   * @param scriptName filepath of the monkey script we are running
-   */
-  public MonkeyRecorder(String scriptName, String version) throws IOException {
-    // Create directory structure to store xml file, images and zips
-    File scriptFile = new File(scriptName);
-    scriptName = scriptFile.getName();  // Get rid of path
-    mDirname = ROOT_DIR + "/" + stripType(scriptName) + "-" + now();
-    new File(mDirname).mkdirs();
-    
-    // Initialize xml file
-    mXmlFilename = stampFilename(stripType(scriptName) + ".xml");
-    initXmlFile(scriptName, version);
-  }
-
-  // Get the current date and time in a simple string format (used for timestamping filenames)
-  private static String now() {
-    return SIMPLE_DATE_TIME_FORMAT.format(Calendar.getInstance().getTime());     
-  }
-  
-  /**
-   * Initialize the xml file writer
-   * 
-   * @param scriptName filename (not path) of the monkey script, stored as attribute in the xml file
-   * @param version of the monkey runner test system
-   */
-  private static void initXmlFile(String scriptName, String version) throws IOException {
-    String[] names = new String[] { "script_name", "monkeyRunnerVersion" };
-    String[] values = new String[] { scriptName, version };
-    mXmlFile = new FileWriter(mDirname + "/" + mXmlFilename);
-    mXmlWriter = new XMLWriter(mXmlFile);
-    mXmlWriter.begin();
-    mXmlWriter.comment("Monkey Script Results");
-    mXmlWriter.start("script_run", names, values, names.length);
-  }
-  
-  /**
-   * Add a comment to the xml file.
-   * 
-   * @param comment comment to add to the xml file
-   */
-  public static void addComment(String comment) throws IOException {
-    mXmlWriter.comment(comment);
-  }
-    
-  /**
-   * Begin writing a command xml element
-   */
-  public static void startCommand() throws IOException {
-    mXmlWriter.start("command", "dateTime", now());
-  }
-  
-  /**
-   * Write a command name attribute in a command xml element.  
-   * It's add as a sinlge script command could be multiple monkey commands.
-   * 
-   * @param cmd command sent to the monkey
-   */
-  public static void addInput(String cmd)  throws IOException {
-    String name = "cmd";
-    String value = cmd;
-    mXmlWriter.tag("input", name, value);
-  }
-  
-  /**
-   * Write a response xml element in a command.  
-   * Attributes include the monkey result, datetime, and possibly screenshot filename
-   * 
-   * @param result response of the monkey to the command
-   * @param filename filename of the screen shot (or other file to be included)
-   */
-  public static void addResult(String result, String filename) throws IOException {
-    int num_args = 2;
-    String[] names = new String[3];
-    String[] values = new String[3];
-    names[0] = "result";
-    values[0] = result;
-    names[1] = "dateTime";
-    values[1] = now();
-    if (filename.length() != 0) {
-      names[2] = "screenshot";
-      values[2] = stampFilename(filename); 
-      addScreenShot(filename);
-      num_args = 3;
-    }
-    mXmlWriter.tag("response", names, values, num_args); 
-  }
-  
-  /**
-   * Add an attribut to an open xml element. name="escaped_value"
-   * 
-   * @param name name of the attribute
-   * @param value value of the attribute
-   */
-  public static void addAttribute(String name, String value) throws IOException {
-    mXmlWriter.addAttribute(name, value);
-  }
-
-   /**
-   * Add an xml device variable element. name="escaped_value"
-   * 
-   * @param name name of the variable
-   * @param value value of the variable
-   */
-  public static void addDeviceVar(String name, String value) throws IOException {
-    String[] names = {"name", "value"};
-    String[] values = {name, value};
-    mXmlWriter.tag("device_var", names, values, names.length);
-  }
- 
-  /**
-   * Move the screenshot to storage and remember you did it so it can be zipped up later.
-   * 
-   * @param filename file name of the screenshot to be stored (Not path name)
-   */
-  private static void addScreenShot(String filename) {
-    File file = new File(filename);
-    String screenShotName = stampFilename(filename);
-    file.renameTo(new File(mDirname, screenShotName));
-    mScreenShotNames.add(screenShotName);
-  }
-
-  /**
-   * Finish writing a command xml element
-   */
-  public static void endCommand() throws IOException {
-    mXmlWriter.end();
-  }
-  
-  /**
-   * Add datetime in front of filetype (the stuff after and including the last infamous '.')
-   *
-   * @param filename path of file to be stamped
-   */
-  private static String stampFilename(String filename) {
-    // 
-    int typeIndex = filename.lastIndexOf('.');
-    if (typeIndex == -1) {
-      return filename + "-" + now();
-    }  
-    return filename.substring(0, typeIndex) + "-" + now() + filename.substring(typeIndex);
-  }
-  
-  /**
-   * Strip out the file type (the stuff after and including the last infamous '.')
-   *
-   * @param filename path of file to be stripped of type information
-   */
-   private static String stripType(String filename) {
-    // 
-    int typeIndex = filename.lastIndexOf('.');
-    if (typeIndex == -1)
-      return filename;
-    return filename.substring(0, typeIndex);
-  }
-
-  /**
-   * Close the monkeyRecorder by closing the xml file and zipping it up with the screenshots.
-   *
-   * @param filename path of file to be stripped of type information
-   */ 
-  public static void close() throws IOException {
-    // zip up xml file and screenshots into ROOT_DIR.
-    byte[] buf = new byte[1024];
-    String zipFileName = mXmlFilename + ".zip";
-    endCommand();
-    mXmlFile.close();
-    FileOutputStream zipFile = new FileOutputStream(ROOT_DIR + "/" + zipFileName);
-    ZipOutputStream out = new ZipOutputStream(zipFile);
-
-    // add the xml file
-    addFileToZip(out, mDirname + "/" + mXmlFilename, buf);
-    
-    // Add the screenshots
-    for (String filename : mScreenShotNames) {
-      addFileToZip(out, mDirname + "/" + filename, buf);
-    }
-    out.close();
-  }
-  
-  /**
-   * Helper function to zip up a file into an open zip archive.
-   *
-   * @param zip the stream of the zip archive
-   * @param filepath the filepath of the file to be added to the zip archive
-   * @param buf storage place to stage reads of file before zipping
-   */ 
-  private static void addFileToZip(ZipOutputStream zip, String filepath, byte[] buf) throws IOException {
-    FileInputStream in = new FileInputStream(filepath);
-    zip.putNextEntry(new ZipEntry(filepath));
-    int len;
-    while ((len = in.read(buf)) > 0) {
-      zip.write(buf, 0, len);
-    }
-    zip.closeEntry();
-    in.close();
-  }
-}
diff --git a/tools/monkeyrunner/src/com/android/monkeyrunner/MonkeyRunner.java b/tools/monkeyrunner/src/com/android/monkeyrunner/MonkeyRunner.java
deleted file mode 100644
index 4734ba1..0000000
--- a/tools/monkeyrunner/src/com/android/monkeyrunner/MonkeyRunner.java
+++ /dev/null
@@ -1,656 +0,0 @@
-/*
- * 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.monkeyrunner;
-
-import com.android.ddmlib.AndroidDebugBridge;
-import com.android.ddmlib.IDevice;
-import com.android.ddmlib.Log;
-import com.android.ddmlib.NullOutputReceiver;
-import com.android.ddmlib.RawImage;
-import com.android.ddmlib.Log.ILogOutput;
-import com.android.ddmlib.Log.LogLevel;
-
-import java.awt.image.BufferedImage;
-
-import java.io.BufferedReader;
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.OutputStreamWriter;
-import java.net.InetAddress;
-import java.net.Socket;
-import java.net.UnknownHostException;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import javax.imageio.ImageIO;
-
-/**
- *  MonkeyRunner is a host side application to control a monkey instance on a
- *  device. MonkeyRunner provides some useful helper functions to control the
- *  device as well as various other methods to help script tests. 
- */
-public class MonkeyRunner {
-
-  static String monkeyServer = "127.0.0.1";
-  static int monkeyPort = 1080;
-  static Socket monkeySocket = null;
-
-  static IDevice monkeyDevice;
-
-  static BufferedReader monkeyReader;
-  static BufferedWriter monkeyWriter;
-  static String monkeyResponse;
-
-  static MonkeyRecorder monkeyRecorder;
-
-  static String scriptName = null;
-  
-  // Obtain a suitable logger.
-  private static Logger logger = Logger.getLogger("com.android.monkeyrunner");
-
-  // delay between key events
-  final static int KEY_INPUT_DELAY = 1000;
-  
-  // version of monkey runner
-  final static String monkeyRunnerVersion = "0.4";
-
-  // TODO: interface cmd; class xml tags; fix logger; test class/script
-
-  public static void main(String[] args) throws IOException {
-
-    // haven't figure out how to get below INFO...bad parent.  Pass -v INFO to turn on logging 
-    logger.setLevel(Level.parse("WARNING"));  
-    processOptions(args);
-    
-    logger.info("initAdb");
-    initAdbConnection();
-    logger.info("openMonkeyConnection");
-    openMonkeyConnection();
-
-    logger.info("start_script");
-    start_script();
-    
-    logger.info("ScriptRunner.run");
-    ScriptRunner.run(scriptName);
-   
-    logger.info("end_script");
-    end_script();
-    logger.info("closeMonkeyConnection");
-    closeMonkeyConnection();  
-  }
-
-  /**
-   *  Initialize an adb session with a device connected to the host
-   * 
-   */
-  public static void initAdbConnection() {
-    String adbLocation = "adb";
-    boolean device = false;
-    boolean emulator = false;
-    String serial = null;
-
-    AndroidDebugBridge.init(false /* debugger support */);
-
-    try {
-      AndroidDebugBridge bridge = AndroidDebugBridge.createBridge(
-          adbLocation, true /* forceNewBridge */);
-
-      // we can't just ask for the device list right away, as the internal thread getting
-      // them from ADB may not be done getting the first list.
-      // Since we don't really want getDevices() to be blocking, we wait here manually.
-      int count = 0;
-      while (bridge.hasInitialDeviceList() == false) {
-        try {
-          Thread.sleep(100);
-          count++;
-        } catch (InterruptedException e) {
-          // pass
-        }
-
-        // let's not wait > 10 sec.
-        if (count > 100) {
-          System.err.println("Timeout getting device list!");
-          return;
-        }
-      }
-
-      // now get the devices
-      IDevice[] devices = bridge.getDevices();
-
-      if (devices.length == 0) {
-        printAndExit("No devices found!", true /* terminate */);
-      }
-
-      monkeyDevice = null;
-
-      if (emulator || device) {
-        for (IDevice d : devices) {
-          // this test works because emulator and device can't both be true at the same
-          // time.
-          if (d.isEmulator() == emulator) {
-            // if we already found a valid target, we print an error and return.
-            if (monkeyDevice != null) {
-              if (emulator) {
-                printAndExit("Error: more than one emulator launched!",
-                    true /* terminate */);
-              } else {
-                printAndExit("Error: more than one device connected!",true /* terminate */);
-              }
-            }
-            monkeyDevice = d;
-          }
-        }
-      } else if (serial != null) {
-        for (IDevice d : devices) {
-          if (serial.equals(d.getSerialNumber())) {
-            monkeyDevice = d;
-            break;
-          }
-        }
-      } else {
-        if (devices.length > 1) {
-          printAndExit("Error: more than one emulator or device available!",
-              true /* terminate */);
-        }
-        monkeyDevice = devices[0];
-      }
-
-      monkeyDevice.createForward(monkeyPort, monkeyPort);
-      String command = "monkey --port " + monkeyPort;
-      monkeyDevice.executeShellCommand(command, new NullOutputReceiver());
-
-    } catch(IOException e) {
-      e.printStackTrace();
-    }
-  }
-
-  /**
-   * Open a tcp session over adb with the device to communicate monkey commands
-   */
-  public static void openMonkeyConnection() {
-    try {
-      InetAddress addr = InetAddress.getByName(monkeyServer);
-      monkeySocket = new Socket(addr, monkeyPort);
-      monkeyWriter = new BufferedWriter(new OutputStreamWriter(monkeySocket.getOutputStream()));
-      monkeyReader = new BufferedReader(new InputStreamReader(monkeySocket.getInputStream()));
-    } catch (UnknownHostException e) {
-      e.printStackTrace();
-    } catch(IOException e) {
-      e.printStackTrace();
-    }
-  }
-  
-  /** 
-   * Close tcp session with the monkey on the device
-   * 
-   */
-  public static void closeMonkeyConnection() {
-    try {
-      monkeyReader.close();
-      monkeyWriter.close();
-      monkeySocket.close();
-      AndroidDebugBridge.terminate();
-    } catch(IOException e) {
-      e.printStackTrace();
-    }
-  }
-
-  /** 
-   * This is a house cleaning routine to run before starting a script. Puts
-   * the device in a known state and starts recording interesting info.
-   */
-  public static void start_script() throws IOException {
-    press("menu", false);
-    press("menu", false);
-    press("home", false);
-    
-    // Start recording the script output, might want md5 signature of file for completeness
-    monkeyRecorder = new MonkeyRecorder(scriptName, monkeyRunnerVersion);
-
-    // Record what device we are running on
-    addDeviceVars();
-    monkeyRecorder.addComment("Script commands");
-  }
-
-  /** 
-   * This is a house cleaning routine to run after finishing a script.
-   * Puts the monkey server in a known state and closes the recording.
-   */
-  public static void end_script() throws IOException {
-    String command = "done";
-    sendMonkeyEvent(command, false, false);
-    
-    // Stop the recording and zip up the results
-    monkeyRecorder.close();
-  }
-
-  /** This is a method for scripts to launch an activity on the device
-   * 
-   * @param name The name of the activity to launch 
-   */
-  public static void launch_activity(String name) throws IOException {
-    System.out.println("Launching: " + name);
-    recordCommand("Launching: " + name);
-    monkeyDevice.executeShellCommand("am start -a android.intent.action.MAIN -n " 
-        + name, new NullOutputReceiver());
-    // void return, so no response given, just close the command element in the xml file.
-    monkeyRecorder.endCommand();
-   }
-
-  /**
-   * Grabs the current state of the screen stores it as a png
-   * 
-   * @param tag filename or tag descriptor of the screenshot
-   */
-  public static void grabscreen(String tag) throws IOException {
-    tag += ".png";
-
-    try {
-      Thread.sleep(1000);
-      getDeviceImage(monkeyDevice, tag, false);
-    } catch (InterruptedException e) {
-    }
-  }
-
-  /**
-   * Sleeper method for script to call
-   * 
-   * @param msec msecs to sleep for
-   */
-  public static void sleep(int msec) throws IOException {
-    try {
-      recordCommand("sleep: " + msec);
-      Thread.sleep(msec);
-      recordResponse("OK");
-    } catch (InterruptedException e) {
-      e.printStackTrace();
-    }
-  }
-
-  /**
-   * Tap function for scripts to call at a particular x and y location
-   * 
-   * @param x x-coordinate
-   * @param y y-coordinate
-   */
-  public static boolean tap(int x, int y) throws IOException {
-    String command = "tap " + x + " " + y;
-    boolean result = sendMonkeyEvent(command);
-    return result;
-  }
-
-  /** 
-   * Press function for scripts to call on a particular button or key
-   * 
-   * @param key key to press
-   */
-  public static boolean press(String key) throws IOException {
-    return press(key, true);
-  }
-
-  /** 
-   * Press function for scripts to call on a particular button or key
-   * 
-   * @param key key to press
-   * @param print whether to send output to user
-   */
-  private static boolean press(String key, boolean print) throws IOException {
-    String command = "press " + key;
-    boolean result = sendMonkeyEvent(command, print, true);
-    return result;
-  }
-
-  /**
-   * dpad down function
-   */
-  public static boolean down() throws IOException {
-    return press("dpad_down");
-  }
-
-  /**
-   * dpad up function
-   */
-  public static boolean up() throws IOException {
-    return press("dpad_up");
-  }
-
-  /**
-   * Function to type text on the device
-   * 
-   * @param text text to type
-   */
-  public static boolean type(String text) throws IOException {
-    boolean result = false;
-    // text might have line ends, which signal new monkey command, so we have to eat and reissue
-    String[] lines = text.split("[\\r\\n]+");
-    for (String line: lines) {
-      result = sendMonkeyEvent("type " + line + "\n");
-    }
-    // return last result.  Should never fail..?
-    return result;
-  }
-  
-  /**
-   * Function to get a static variable from the device
-   * 
-   * @param name name of static variable to get
-   */
-  public static boolean getvar(String name) throws IOException {
-    return sendMonkeyEvent("getvar " + name + "\n");
-  }
-
-  /**
-   * Function to get the list of static variables from the device
-   */
-  public static boolean listvar() throws IOException {
-    return sendMonkeyEvent("listvar \n");
-  }
-
-  /**
-   * This function is the communication bridge between the host and the device.
-   * It sends monkey events and waits for responses over the adb tcp socket.
-   * This version if for all scripted events so that they get recorded and reported to user.
-   * 
-   * @param command the monkey command to send to the device
-   */
-  private static boolean sendMonkeyEvent(String command) throws IOException {
-    return sendMonkeyEvent(command, true, true);
-  }
-
-  /**
-   * This function allows the communication bridge between the host and the device
-   * to be invisible to the script for internal needs.
-   * It splits a command into monkey events and waits for responses for each over an adb tcp socket.
-   * Returns on an error, else continues and sets up last response.
-   * 
-   * @param command the monkey command to send to the device
-   * @param print whether to print out the responses to the user
-   * @param record whether to put the command in the xml file that stores test outputs
-   */
-  private static boolean sendMonkeyEvent(String command, Boolean print, Boolean record) throws IOException {
-    command = command.trim();
-    if (print)
-      System.out.println("MonkeyCommand: " + command);
-    if (record)
-      recordCommand(command);
-    logger.info("Monkey Command: " + command + ".");
-      
-    // send a single command and get the response
-    monkeyWriter.write(command + "\n");
-    monkeyWriter.flush();
-    monkeyResponse = monkeyReader.readLine();
-
-    if(monkeyResponse != null) {
-      // if a command returns with a response
-      if (print)
-        System.out.println("MonkeyServer: " + monkeyResponse);
-      if (record)
-        recordResponse(monkeyResponse);
-      logger.info("Monkey Response: " + monkeyResponse + ".");
-
-      // return on error
-      if (monkeyResponse.startsWith("ERROR"))
-        return false;
-
-      // return on ok
-      if(monkeyResponse.startsWith("OK"))
-        return true;
-
-      // return on something else?
-      return false;
-    }
-    // didn't get a response...
-    if (print)
-      System.out.println("MonkeyServer: ??no response");
-    if (record)
-      recordResponse("??no response");
-    logger.info("Monkey Response: ??no response.");
-
-    //return on no response
-    return false;
-  }
-
-  /**
-   * Record the command in the xml file
-   *
-   * @param command the command sent to the monkey server
-   */
-  private static void recordCommand(String command) throws IOException {
-    if (monkeyRecorder != null) {                       // don't record setup junk
-      monkeyRecorder.startCommand();
-      monkeyRecorder.addInput(command);
-    }
-  }
-  
-  /**
-   * Record the response in the xml file
-   *
-   * @param response the response sent by the monkey server
-   */
-  private static void recordResponse(String response) throws IOException {
-    recordResponse(response, "");
-  } 
-  
-  /**
-   * Record the response and the filename in the xml file, store the file (to be zipped up later)
-   *
-   * @param response the response sent by the monkey server
-   * @param filename the filename of a file to be time stamped, recorded in the xml file and stored
-   */
-  private static void recordResponse(String response, String filename) throws IOException {
-    if (monkeyRecorder != null) {                    // don't record setup junk
-      monkeyRecorder.addResult(response, filename);  // ignores file if filename empty
-      monkeyRecorder.endCommand();
-    }
-  }
-    
-  /**
-   * Add the device variables to the xml file in monkeyRecorder.
-   * The results get added as device_var tags in the script_run tag
-   */
-  private static void addDeviceVars() throws IOException {
-    monkeyRecorder.addComment("Device specific variables");
-    sendMonkeyEvent("listvar \n", false, false);
-    if (monkeyResponse.startsWith("OK:")) {
-      // peel off "OK:" string and get the individual var names  
-      String[] varNames = monkeyResponse.substring(3).split("\\s+");
-      // grab all the individual var values
-      for (String name: varNames) {
-        sendMonkeyEvent("getvar " + name, false, false);
-        if(monkeyResponse != null) {
-          if (monkeyResponse.startsWith("OK") ) {
-            if (monkeyResponse.length() > 2) {
-              monkeyRecorder.addDeviceVar(name, monkeyResponse.substring(3));
-            } else { 
-              // only got OK - good variable but no value
-              monkeyRecorder.addDeviceVar(name, "null");
-            }
-          } else { 
-            // error returned - couldn't get var value for name... include error return
-            monkeyRecorder.addDeviceVar(name, monkeyResponse);
-          }
-        } else { 
-          // no monkeyResponse - bad variable with no value
-          monkeyRecorder.addDeviceVar(name, "null");
-        }
-      }
-    } else {
-      // it's an error, can't find variable names...
-      monkeyRecorder.addAttribute("listvar", monkeyResponse);
-    }
-  }
-  
-  /**
-   * Process the command-line options
-   *
-   * @return Returns true if options were parsed with no apparent errors.
-   */
-  private static void processOptions(String[] args) {
-    // parse command line parameters.
-    int index = 0;
-
-    do {
-      String argument = args[index++];
-
-      if ("-s".equals(argument)) {
-        if(index == args.length) {
-          printUsageAndQuit("Missing Server after -s");
-        }
-
-        monkeyServer = args[index++];
-
-      } else if ("-p".equals(argument)) {
-        // quick check on the next argument.
-        if (index == args.length) {
-          printUsageAndQuit("Missing Server port after -p");
-        }
-
-        monkeyPort = Integer.parseInt(args[index++]);
-
-      } else if ("-v".equals(argument)) {
-        // quick check on the next argument.
-        if (index == args.length) {
-          printUsageAndQuit("Missing Log Level after -v");
-        }
-
-        Level level = Level.parse(args[index++]);
-        logger.setLevel(level);
-        level = logger.getLevel();
-        System.out.println("Log level set to: " + level + "(" + level.intValue() + ").");
-        System.out.println("Warning: Log levels below INFO(800) not working currently... parent issues");
-        
-      } else if (argument.startsWith("-")) {
-        // we have an unrecognized argument.
-        printUsageAndQuit("Unrecognized argument: " + argument + ".");
-
-        monkeyPort = Integer.parseInt(args[index++]);
-
-      } else {
-        // get the filepath of the script to run.  This will be the last undashed argument.
-        scriptName = argument;
-      }
-    } while (index < args.length);
-  }
-
-  /*
-   * Grab an image from an ADB-connected device.
-   */
-  private static void getDeviceImage(IDevice device, String filepath, boolean landscape)
-  throws IOException {
-    RawImage rawImage;
-    recordCommand("grabscreen");
-    System.out.println("Grabbing Screeshot: " + filepath + ".");
-
-    try {
-      rawImage = device.getScreenshot();
-    }
-    catch (IOException ioe) {
-      recordResponse("No frame buffer", "");
-      printAndExit("Unable to get frame buffer: " + ioe.getMessage(), true /* terminate */);
-      return;
-    }
-
-    // device/adb not available?
-    if (rawImage == null) {
-      recordResponse("No image", "");
-      return;
-    }
-    
-    assert rawImage.bpp == 16;
-
-    BufferedImage image;
-    
-    logger.info("Raw Image - height: " + rawImage.height + ", width: " + rawImage.width);
-
-    if (landscape) {
-      // convert raw data to an Image
-      image = new BufferedImage(rawImage.height, rawImage.width,
-          BufferedImage.TYPE_INT_ARGB);
-
-      byte[] buffer = rawImage.data;
-      int index = 0;
-      for (int y = 0 ; y < rawImage.height ; y++) {
-        for (int x = 0 ; x < rawImage.width ; x++) {
-
-          int value = buffer[index++] & 0x00FF;
-          value |= (buffer[index++] << 8) & 0x0FF00;
-
-          int r = ((value >> 11) & 0x01F) << 3;
-          int g = ((value >> 5) & 0x03F) << 2;
-          int b = ((value >> 0) & 0x01F) << 3;
-
-          value = 0xFF << 24 | r << 16 | g << 8 | b;
-
-          image.setRGB(y, rawImage.width - x - 1, value);
-        }
-      }
-    } else {
-      // convert raw data to an Image
-      image = new BufferedImage(rawImage.width, rawImage.height,
-          BufferedImage.TYPE_INT_ARGB);
-
-      byte[] buffer = rawImage.data;
-      int index = 0;
-      for (int y = 0 ; y < rawImage.height ; y++) {
-        for (int x = 0 ; x < rawImage.width ; x++) {
-
-          int value = buffer[index++] & 0x00FF;
-          value |= (buffer[index++] << 8) & 0x0FF00;
-
-          int r = ((value >> 11) & 0x01F) << 3;
-          int g = ((value >> 5) & 0x03F) << 2;
-          int b = ((value >> 0) & 0x01F) << 3;
-
-          value = 0xFF << 24 | r << 16 | g << 8 | b;
-
-          image.setRGB(x, y, value);
-        }
-      }
-    }
-
-    if (!ImageIO.write(image, "png", new File(filepath))) {
-      recordResponse("No png writer", "");
-      throw new IOException("Failed to find png writer");
-    }
-    recordResponse("OK", filepath);
-  }
-
-  private static void printUsageAndQuit(String message) {
-    // 80 cols marker:  01234567890123456789012345678901234567890123456789012345678901234567890123456789
-    System.out.println(message);
-    System.out.println("Usage: monkeyrunner [options] SCRIPT_FILE");
-    System.out.println("");
-    System.out.println("    -s      MonkeyServer IP Address.");
-    System.out.println("    -p      MonkeyServer TCP Port.");
-    System.out.println("    -v      MonkeyServer Logging level (ALL, FINEST, FINER, FINE, CONFIG, INFO, WARNING, SEVERE, OFF)");
-    System.out.println("");
-    System.out.println("");
-
-    System.exit(1);
-  }
-
-  private static void printAndExit(String message, boolean terminate) {
-    System.out.println(message);
-    if (terminate) {
-      AndroidDebugBridge.terminate();
-    }
-    System.exit(1);
-  }
-}
diff --git a/tools/monkeyrunner/src/com/android/monkeyrunner/ScriptRunner.java b/tools/monkeyrunner/src/com/android/monkeyrunner/ScriptRunner.java
deleted file mode 100644
index 6a4405b..0000000
--- a/tools/monkeyrunner/src/com/android/monkeyrunner/ScriptRunner.java
+++ /dev/null
@@ -1,96 +0,0 @@
-package com.android.monkeyrunner;
-
-import org.python.core.Py;
-import org.python.core.PyObject;
-import org.python.util.PythonInterpreter;
-import org.python.util.InteractiveConsole;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.FileInputStream;
-import java.lang.RuntimeException;
-import java.util.Properties;
-
-
-/**
- * Runs Jython based scripts.
- */
-public class ScriptRunner {
-
-  /** The "this" scope object for scripts. */
-  private final Object scope;
-  private final String variable;
-  
-  /** Private constructor. */
-  private ScriptRunner(Object scope, String variable) {
-    this.scope = scope;
-    this.variable = variable;
-  }
-  
-  /** Creates a new instance for the given scope object. */
-  public static ScriptRunner newInstance(Object scope, String variable) {
-    return new ScriptRunner(scope, variable);
-  }
-
-  /**
-   * Runs the specified Jython script. First runs the initialization script to
-   * preload the appropriate client library version.
-   */
-  public static void run(String scriptfilename) {
-    try {
-      initPython();
-      PythonInterpreter python = new PythonInterpreter();
-      
-      python.execfile(scriptfilename);
-    } catch(Exception e) {
-      e.printStackTrace();
-    }
-  }
-  
-
-  /** Initialize the python interpreter. */
-  private static void initPython() {
-    Properties props = new Properties();
-    // Default is 'message' which displays sys-package-mgr bloat
-    // Choose one of error,warning,message,comment,debug
-    props.setProperty("python.verbose", "error");
-    props.setProperty("python.path", System.getProperty("java.class.path"));
-    PythonInterpreter.initialize(System.getProperties(), props, new String[] {""});
-  }
-
-  /**
-   * Create and run a console using a new python interpreter for the test
-   * associated with this instance.
-   */
-  public void console() throws IOException {
-    initPython();
-    InteractiveConsole python = new InteractiveConsole();
-    initInterpreter(python, scope, variable);
-    python.interact();
-  }
-
-  /**
-   * Start an interactive python interpreter using the specified set of local
-   * variables. Use this to interrupt a running test script with a prompt:
-   * 
-   * @param locals
-   */
-  public static void console(PyObject locals) {
-    initPython();
-    InteractiveConsole python = new InteractiveConsole(locals);
-    python.interact();
-  }
-
-  /**
-   * Initialize a python interpreter.
-   * 
-   * @param python
-   * @param scope
-   * @throws IOException
-   */
-  public static void initInterpreter(PythonInterpreter python, Object scope, String variable) 
-      throws IOException {
-    // Store the current test case as the this variable
-    python.set(variable, scope);
-  }
-}