diff options
28 files changed, 1029 insertions, 283 deletions
@@ -372,7 +372,7 @@ web_docs_sample_code_flags := \ ## SDK version identifiers used in the published docs # major[.minor] version for current SDK. (full releases only) -framework_docs_SDK_VERSION:=1.6 +framework_docs_SDK_VERSION:=2.0 # release version (ie "Release x") (full releases only) framework_docs_SDK_REL_ID:=1 # name of current SDK directory (full releases only) diff --git a/camera/libcameraservice/CameraService.cpp b/camera/libcameraservice/CameraService.cpp index b63e97f..6880144 100644 --- a/camera/libcameraservice/CameraService.cpp +++ b/camera/libcameraservice/CameraService.cpp @@ -309,7 +309,7 @@ status_t CameraService::Client::connect(const sp<ICameraClient>& client) oldClient = mCameraClient; // did the client actually change? - if (client->asBinder() == mCameraClient->asBinder()) { + if ((mCameraClient != NULL) && (client->asBinder() == mCameraClient->asBinder())) { LOGD("Connect to the same client"); return NO_ERROR; } @@ -878,7 +878,10 @@ void CameraService::Client::handleShutter() mSurface->unregisterBuffers(); } - mCameraClient->notifyCallback(CAMERA_MSG_SHUTTER, 0, 0); + sp<ICameraClient> c = mCameraClient; + if (c != NULL) { + c->notifyCallback(CAMERA_MSG_SHUTTER, 0, 0); + } mHardware->disableMsgType(CAMERA_MSG_SHUTTER); // It takes some time before yuvPicture callback to be called. @@ -932,31 +935,38 @@ void CameraService::Client::handlePreviewData(const sp<IMemory>& mem) } } - // Is the callback enabled or not? - if (!(mPreviewCallbackFlag & FRAME_CALLBACK_FLAG_ENABLE_MASK)) { + // local copy of the callback flags + int flags = mPreviewCallbackFlag; + + // is callback enabled? + if (!(flags & FRAME_CALLBACK_FLAG_ENABLE_MASK)) { // If the enable bit is off, the copy-out and one-shot bits are ignored LOGV("frame callback is diabled"); return; } - // Is the received frame copied out or not? - if (mPreviewCallbackFlag & FRAME_CALLBACK_FLAG_COPY_OUT_MASK) { - LOGV("frame is copied out"); - copyFrameAndPostCopiedFrame(heap, offset, size); - } else { - LOGV("frame is directly sent out without copying"); - mCameraClient->dataCallback(CAMERA_MSG_PREVIEW_FRAME, mem); - } + // hold a strong pointer to the client + sp<ICameraClient> c = mCameraClient; - // Is this is one-shot only? - if (mPreviewCallbackFlag & FRAME_CALLBACK_FLAG_ONE_SHOT_MASK) { - LOGV("One-shot only, thus clear the bits and disable frame callback"); + // clear callback flags if no client or one-shot mode + if ((c == NULL) || (mPreviewCallbackFlag & FRAME_CALLBACK_FLAG_ONE_SHOT_MASK)) { + LOGV("Disable preview callback"); mPreviewCallbackFlag &= ~(FRAME_CALLBACK_FLAG_ONE_SHOT_MASK | FRAME_CALLBACK_FLAG_COPY_OUT_MASK | FRAME_CALLBACK_FLAG_ENABLE_MASK); + // TODO: Shouldn't we use this API for non-overlay hardware as well? if (mUseOverlay) mHardware->disableMsgType(CAMERA_MSG_PREVIEW_FRAME); } + + // Is the received frame copied out or not? + if (flags & FRAME_CALLBACK_FLAG_COPY_OUT_MASK) { + LOGV("frame is copied"); + copyFrameAndPostCopiedFrame(c, heap, offset, size); + } else { + LOGV("frame is forwarded"); + c->dataCallback(CAMERA_MSG_PREVIEW_FRAME, mem); + } } // picture callback - postview image ready @@ -972,7 +982,10 @@ void CameraService::Client::handlePostview(const sp<IMemory>& mem) } #endif - mCameraClient->dataCallback(CAMERA_MSG_POSTVIEW_FRAME, mem); + sp<ICameraClient> c = mCameraClient; + if (c != NULL) { + c->dataCallback(CAMERA_MSG_POSTVIEW_FRAME, mem); + } mHardware->disableMsgType(CAMERA_MSG_POSTVIEW_FRAME); } @@ -997,7 +1010,10 @@ void CameraService::Client::handleRawPicture(const sp<IMemory>& mem) mSurface->postBuffer(offset); } - mCameraClient->dataCallback(CAMERA_MSG_RAW_IMAGE, mem); + sp<ICameraClient> c = mCameraClient; + if (c != NULL) { + c->dataCallback(CAMERA_MSG_RAW_IMAGE, mem); + } mHardware->disableMsgType(CAMERA_MSG_RAW_IMAGE); } @@ -1014,7 +1030,10 @@ void CameraService::Client::handleCompressedPicture(const sp<IMemory>& mem) } #endif - mCameraClient->dataCallback(CAMERA_MSG_COMPRESSED_IMAGE, mem); + sp<ICameraClient> c = mCameraClient; + if (c != NULL) { + c->dataCallback(CAMERA_MSG_COMPRESSED_IMAGE, mem); + } mHardware->disableMsgType(CAMERA_MSG_COMPRESSED_IMAGE); } @@ -1032,7 +1051,10 @@ void CameraService::Client::notifyCallback(int32_t msgType, int32_t ext1, int32_ client->handleShutter(); break; default: - client->mCameraClient->notifyCallback(msgType, ext1, ext2); + sp<ICameraClient> c = client->mCameraClient; + if (c != NULL) { + c->notifyCallback(msgType, ext1, ext2); + } break; } @@ -1053,10 +1075,13 @@ void CameraService::Client::dataCallback(int32_t msgType, const sp<IMemory>& dat return; } + sp<ICameraClient> c = client->mCameraClient; if (dataPtr == NULL) { LOGE("Null data returned in data callback"); - client->mCameraClient->notifyCallback(CAMERA_MSG_ERROR, UNKNOWN_ERROR, 0); - client->mCameraClient->dataCallback(msgType, NULL); + if (c != NULL) { + c->notifyCallback(CAMERA_MSG_ERROR, UNKNOWN_ERROR, 0); + c->dataCallback(msgType, NULL); + } return; } @@ -1074,7 +1099,9 @@ void CameraService::Client::dataCallback(int32_t msgType, const sp<IMemory>& dat client->handleCompressedPicture(dataPtr); break; default: - client->mCameraClient->dataCallback(msgType, dataPtr); + if (c != NULL) { + c->dataCallback(msgType, dataPtr); + } break; } @@ -1095,15 +1122,20 @@ void CameraService::Client::dataCallbackTimestamp(nsecs_t timestamp, int32_t msg if (client == 0) { return; } + sp<ICameraClient> c = client->mCameraClient; if (dataPtr == NULL) { LOGE("Null data returned in data with timestamp callback"); - client->mCameraClient->notifyCallback(CAMERA_MSG_ERROR, UNKNOWN_ERROR, 0); - client->mCameraClient->dataCallbackTimestamp(0, msgType, NULL); + if (c != NULL) { + c->notifyCallback(CAMERA_MSG_ERROR, UNKNOWN_ERROR, 0); + c->dataCallbackTimestamp(0, msgType, NULL); + } return; } - client->mCameraClient->dataCallbackTimestamp(timestamp, msgType, dataPtr); + if (c != NULL) { + c->dataCallbackTimestamp(timestamp, msgType, dataPtr); + } #if DEBUG_CLIENT_REFERENCES if (client->getStrongCount() == 1) { @@ -1161,7 +1193,8 @@ status_t CameraService::Client::sendCommand(int32_t cmd, int32_t arg1, int32_t a return mHardware->sendCommand(cmd, arg1, arg2); } -void CameraService::Client::copyFrameAndPostCopiedFrame(sp<IMemoryHeap> heap, size_t offset, size_t size) +void CameraService::Client::copyFrameAndPostCopiedFrame(const sp<ICameraClient>& client, + const sp<IMemoryHeap>& heap, size_t offset, size_t size) { LOGV("copyFrameAndPostCopiedFrame"); // It is necessary to copy out of pmem before sending this to @@ -1186,7 +1219,7 @@ void CameraService::Client::copyFrameAndPostCopiedFrame(sp<IMemoryHeap> heap, si LOGE("failed to allocate space for frame callback"); return; } - mCameraClient->dataCallback(CAMERA_MSG_PREVIEW_FRAME, frame); + client->dataCallback(CAMERA_MSG_PREVIEW_FRAME, frame); } status_t CameraService::dump(int fd, const Vector<String16>& args) diff --git a/camera/libcameraservice/CameraService.h b/camera/libcameraservice/CameraService.h index 2e3597f..2fcf839 100644 --- a/camera/libcameraservice/CameraService.h +++ b/camera/libcameraservice/CameraService.h @@ -23,10 +23,9 @@ #include <ui/CameraHardwareInterface.h> #include <ui/Camera.h> -class android::MemoryHeapBase; - namespace android { +class MemoryHeapBase; class MediaPlayer; // ---------------------------------------------------------------------------- @@ -151,7 +150,8 @@ private: void handleRawPicture(const sp<IMemory>&); void handleCompressedPicture(const sp<IMemory>&); - void copyFrameAndPostCopiedFrame(sp<IMemoryHeap> heap, size_t offset, size_t size); + void copyFrameAndPostCopiedFrame(const sp<ICameraClient>& client, + const sp<IMemoryHeap>& heap, size_t offset, size_t size); // camera operation mode enum camera_mode { diff --git a/core/java/android/appwidget/AppWidgetHostView.java b/core/java/android/appwidget/AppWidgetHostView.java index a4c141e..bb0cbe9 100644 --- a/core/java/android/appwidget/AppWidgetHostView.java +++ b/core/java/android/appwidget/AppWidgetHostView.java @@ -123,7 +123,8 @@ public class AppWidgetHostView extends FrameLayout { @Override protected void dispatchRestoreInstanceState(SparseArray<Parcelable> container) { - final ParcelableSparseArray jail = (ParcelableSparseArray) container.get(generateId()); + ParcelableSparseArray jail = (ParcelableSparseArray) container.get(generateId()); + if (jail == null) jail = new ParcelableSparseArray(); super.dispatchRestoreInstanceState(jail); } diff --git a/core/java/android/os/IPowerManager.aidl b/core/java/android/os/IPowerManager.aidl index 189335e..5ac543d 100644 --- a/core/java/android/os/IPowerManager.aidl +++ b/core/java/android/os/IPowerManager.aidl @@ -34,7 +34,4 @@ interface IPowerManager // sets the brightness of the backlights (screen, keyboard, button) 0-255 void setBacklightBrightness(int brightness); - - // enables or disables automatic brightness mode - void setAutoBrightness(boolean on); } diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index 8c9581d..cb3dc16 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -1081,6 +1081,18 @@ public final class Settings { public static final String SCREEN_BRIGHTNESS_MODE = "screen_brightness_mode"; /** + * SCREEN_BRIGHTNESS_MODE value for manual mode. + * @hide + */ + public static final int SCREEN_BRIGHTNESS_MODE_MANUAL = 0; + + /** + * SCREEN_BRIGHTNESS_MODE value for manual mode. + * @hide + */ + public static final int SCREEN_BRIGHTNESS_MODE_AUTOMATIC = 1; + + /** * Control whether the process CPU usage meter should be shown. */ public static final String SHOW_PROCESSES = "show_processes"; diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java index 4bc1a0e..eb09c66 100644 --- a/core/java/android/webkit/WebView.java +++ b/core/java/android/webkit/WebView.java @@ -2926,12 +2926,12 @@ public class WebView extends AbsoluteLayout animateScroll); if (mNativeClass == 0) return; - if (mShiftIsPressed) { + if (mShiftIsPressed && !animateZoom) { if (mTouchSelection) { nativeDrawSelectionRegion(canvas); } else { - nativeDrawSelection(canvas, mSelectX, mSelectY, - mExtendSelection); + nativeDrawSelection(canvas, mInvActualScale, getTitleHeight(), + mSelectX, mSelectY, mExtendSelection); } } else if (drawCursorRing) { if (mTouchMode == TOUCH_SHORTPRESS_START_MODE) { @@ -4065,6 +4065,9 @@ public class WebView extends AbsoluteLayout return true; } if (ev.getAction() == MotionEvent.ACTION_DOWN) { + if (mShiftIsPressed) { + return true; // discard press if copy in progress + } mTrackballDown = true; if (mNativeClass == 0) { return false; @@ -4093,6 +4096,7 @@ public class WebView extends AbsoluteLayout } else { mExtendSelection = true; } + return true; // discard press if copy in progress } if (DebugFlags.WEB_VIEW) { Log.v(LOGTAG, "onTrackballEvent up ev=" + ev @@ -5600,8 +5604,8 @@ public class WebView extends AbsoluteLayout private native void nativeDestroy(); private native void nativeDrawCursorRing(Canvas content); private native void nativeDrawMatches(Canvas canvas); - private native void nativeDrawSelection(Canvas content - , int x, int y, boolean extendSelection); + private native void nativeDrawSelection(Canvas content, float scale, + int offset, int x, int y, boolean extendSelection); private native void nativeDrawSelectionRegion(Canvas content); private native void nativeDumpDisplayTree(String urlOrNull); private native int nativeFindAll(String findLower, String findUpper); diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index c87a11c..45fcaa59 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -67,7 +67,11 @@ the slider can be opened (for example, in a pocket or purse). --> <bool name="config_bypass_keyguard_if_slider_open">true</bool> - <!-- Flag indicating whether the device supports automatic brightness mode. --> + <!-- Flag indicating whether the device supports automatic brightness mode in hardware. --> + <bool name="config_hardware_automatic_brightness_available">false</bool> + + <!-- Flag indicating whether the we should enable the automatic brightness in Settings. + Software implementation will be used if config_hardware_auto_brightness_available is not set --> <bool name="config_automatic_brightness_available">false</bool> <!-- XXXXXX END OF RESOURCES USING WRONG NAMING CONVENTION --> diff --git a/docs/html/guide/developing/updating-sdk.jd b/docs/html/guide/developing/updating-sdk.jd deleted file mode 100644 index f65eabb..0000000 --- a/docs/html/guide/developing/updating-sdk.jd +++ /dev/null @@ -1,108 +0,0 @@ -page.title=Updating Your SDK -@jd:body - - -<div id="qv-wrapper"> -<div id="qv"> -<h2>Quickview</h2> -<ul> - <li>Use the Android SDK and AVD Manager to - install individual Android platforms, add-ons, tools - and documentation.</li> - <li>Keep your SDK up-to-date without having to install new - SDK directories and update your Eclipse preferences or {@code PATH} - variable.</li> - <li>The Android SDK and AVD Manager is available only with the - Android 1.6 SDK or later.</li> -</ul> - -<h2>In this document</h2> -<ol> - <li><a href="#Install">Installing SDK Packages</a></li> - <li><a href="#Add">Adding SDK Package Sites</a></li> -</ol> -</div> -</div> - -<p>The <strong>Android SDK and AVD Manager</strong> lets you -update your Android SDK without a visit to the -Android Developers web site. Instead of downloading an entirely new SDK -that includes Android platforms, tools, and documentation, you can instead -install only the individual packages that you want.</p> - -<p>For example, when a new version of the Android platform is made available -for developing applications, use the SDK and AVD Manager to install the -platform into your existing SDK directory. You can then use the new platform -in your <a href="{@docRoot}guide/developing/tools/avd.html">AVDs</a> and -build your apps against it.</p> - -<p>The benefit to using this feature is that your SDK directory will -remain the same. You don't need to reset the SDK location in -your Eclipse preferences or modify your {@code PATH} environment variable, -because all new packages are installed into your existing SDK directory.</p> - - -<p>The SDK and AVD Manager can be opened in two ways:</p> -<ul> - <li>Execute the - <a href="{@docRoot}guide/developing/tools/othertools.html#android">{@code - android}</a> tool with no options, or</li> - <li>From Eclipse, select <strong>Window</strong> > <strong>Android - SDK and AVD Manager</strong>.</li> -</ul> - -<p>The screenshot below shows the Android SDK and AVD Manager -with the Available Packages open.</p> - -<img src="{@docRoot}images/sdk_manager_packages.png" alt="" /> - - -<h2 id="Install">Installing SDK Packages</h2> - -<p>When a new Android SDK platform, add-on, set of development tools or -documentation becomes available, you can quickly download and -install them into your existing Android SDK:</p> - -<ol> - <li>Select <strong>Available Packages</strong> in the left panel. - This will reveal all packages currently available for download.</li> - <li>Select the packages you'd like to install and click <strong>Install - Selected</strong>.</li> - <li>Verify and accept the packages you want and click <strong>Install - Accepted</strong>. The packages will now be installed into your existing - Android SDK directories.</li> -</ol> - -<p>New platforms are automatically saved into the -<code><em><sdk_dir>/</em>platforms/</code> directory of your SDK; -new add-ons are saved in the <code><em><sdk_dir>/</em>add-ons/</code> -directory; and new documentation is saved in the existing -<code><em><sdk_dir>/</em>docs/</code> directory (old docs are replaced).</p> - -<p class="note"><strong>Tip:</strong> -Use the "Display updates only" checkbox to show only the packages -you do not have.</p> - - -<h2 id="Add">Adding SDK Package Sites</h2> - -<p>By default, <strong>Available Packages</strong> only shows -the Google repository for Android SDK packages and Google API -add-ons. You can add additional sites that host -Android SDK add-ons, then download add-on packages from them.</p> - -<p>For example, a mobile carrier or hardware manufacturer may offer additional -API libraries that are supported by their own Android-powered devices. -In order for you to develop using their libraries, you may need to install an -Android SDK add-on. -If the carrier or manufacturer has hosted an add-on repository file on their -web site, add their site to the SDK and AVD Manager:</p> -<ol> - <li>Select <strong>Available Packages</strong> in the left panel.</li> - <li>Click <strong>Add Site</strong> and enter the URL of the -{@code repository.xml} file. Click <strong>OK</strong>.</li> -</ol> -<p>Any SDK packages available from the web site will now be listed and -available for you to install in your existing Android SDK.</p> - - diff --git a/docs/html/guide/guide_toc.cs b/docs/html/guide/guide_toc.cs index f6718e1..264fe54 100644 --- a/docs/html/guide/guide_toc.cs +++ b/docs/html/guide/guide_toc.cs @@ -239,7 +239,6 @@ <li><a href="<?cs var:toroot ?>guide/developing/debug-tasks.html"> <span class="en">Debugging Tasks</span> </a></li> - <li><a href="<?cs var:toroot ?>guide/developing/updating-sdk.html">Updating Your SDK</a></li> <li class="toggle-list"> <div><a href="<?cs var:toroot ?>guide/developing/tools/index.html"> <span class="en">Tools</span> diff --git a/docs/html/guide/topics/ui/dialogs.jd b/docs/html/guide/topics/ui/dialogs.jd index c0c0b1b..4e4ca14 100644 --- a/docs/html/guide/topics/ui/dialogs.jd +++ b/docs/html/guide/topics/ui/dialogs.jd @@ -624,7 +624,7 @@ AlertDialog.Builder builder; AlertDialog alertDialog; Context mContext = getApplicationContext(); -LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(LAYOUT_INFLATER); +LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(LAYOUT_INFLATER_SERVICE); View layout = inflater.inflate(R.layout.custom_dialog, (ViewGroup) findViewById(R.id.layout_root)); diff --git a/docs/html/sdk/2.0_r1/installing.jd b/docs/html/sdk/2.0_r1/installing.jd new file mode 100644 index 0000000..fd269dc --- /dev/null +++ b/docs/html/sdk/2.0_r1/installing.jd @@ -0,0 +1,389 @@ +page.title=Installing the Android 2.0 SDK +sdk.preview=0 + +@jd:body + +<div id="qv-wrapper"> +<div id="qv"> + + <h2>In this document</h2> + <ol> + <li><a href="#Preparing">Prepare for Installation</a></li> + <li><a href="#Installing">Install the SDK</a></li> + <li><a href="#InstallingADT">Install the ADT Plugin for Eclipse</a></li> + <li><a href="#sdkContents">SDK Contents</a></li> + <li><a href="#NextSteps">Next Steps</a></li> + <li><a href="#InstallationNotes">Installation Notes</a></li> + <li><a href="#Troubleshooting">Troubleshooting ADT Installation</a></li> + </ol> + +</div> +</div> + +<p>This page describes how to install the Android SDK and set up your +development environment for the first time.</p> + +<p>If you encounter any problems during installation, see the +<a href="#InstallationNotes">Installation Notes</a> at the bottom of +this page.</p> + +<h4>Updating?</h4> +<p>If you have already installed an earlier version +of the Android SDK, please instead read <a href="{@docRoot}sdk/updating-sdk.html">Updating Your SDK</a>. +</p> + + +<h2 id="Preparing">Prepare for Installation</h2> + +<p>Before you begin, take a moment to confirm that your development machine +meets the <a href="requirements.html">System Requirements</a>.</p> + +<p>If you will be developing in Eclipse with the Android Development +Tools (ADT) Plugin — the recommended path if you are new to +Android — make sure that you have a suitable version of Eclipse +installed on your computer (3.4 or newer is recommended). If you need +to install Eclipse, you can download it from this location: </p> + +<p style="margin-left:2em;"><a href= +"http://www.eclipse.org/downloads/">http://www.eclipse.org/downloads/</a></p> + +<p>A Java or RCP version of Eclipse is recommended. </p> + +<h2 id="Installing">Install the SDK</h2> + +<p>After downloading the Android SDK, unpack the Android SDK .zip archive +to a suitable location on your machine. By default, the SDK files are unpacked +into a directory named <code>android_sdk_<em><platform</em>>_<em><release></em></code>. </p> + +<p>Make a note of the name and location of the unpacked SDK directory on your system — you +will need to refer to the SDK directory later, when setting up the Android plugin or when +using the SDK tools.</p> + +<p>Optionally, you may want to add the location of the SDK's primary <code>tools</code> directory +to your system <code>PATH</code>. The primary <code>tools/</code> directory is located at the root of the +SDK folder. Adding <code>tools</code> to your path lets you run Android Debug Bridge (adb) and +the other command line <a href="{@docRoot}guide/developing/tools/index.html">tools</a> without +needing to supply the full path to the tools directory. </p> +<ul> + <li>On Linux, edit your <code>~/.bash_profile</code> or <code>~/.bashrc</code> file. Look + for a line that sets the PATH environment variable and add the + full path to the <code>tools/</code> directory to it. If you don't + see a line setting the path, you can add one:</li> + + <ul><code>export PATH=${PATH}:<em><your_sdk_dir></em>/tools</code></ul> + + <li>On a Mac OS X, look in your home directory for <code>.bash_profile</code> and + proceed as for Linux. You can create the <code>.bash_profile</code> if + you haven't already set one up on your machine. </li> + + <li>On Windows, right-click on My Computer, and select Properties. + Under the Advanced tab, hit the Environment Variables button, and in the + dialog that comes up, double-click on Path (under System Variables). Add the full path to the + <code>tools/</code> directory to the path. </li> + </ul> + +<p>Note that, if you update your SDK in the future, you +should remember to update your <code>PATH</code> settings to point to the new location, if different.</p> + +<p>If you will be using the Eclipse IDE as your development environment, +the next section describes how to install the Android Development Tools (ADT) plugin and set up Eclipse. +If you choose not to use Eclipse, you can +develop Android applications in an IDE of your choice and then compile, debug and deploy using +the tools included in the SDK (skip to <a href="#NextSteps">Next Steps</a>).</p> + + +<h2 id="InstallingADT">Install the ADT Plugin for Eclipse</h2> + +<p>Android offers a custom plugin for the Eclipse IDE, called Android +Development Tools (ADT), that is designed to give you a powerful, +integrated environment in which to build Android applications. It +extends the capabilites of Eclipse to let you quickly set up new Android +projects, create an application UI, add components based on the Android +Framework API, debug your applications using the Android SDK tools, and even export +signed (or unsigned) APKs in order to distribute your application.</p> + +<p>In general, using Eclipse with ADT is a highly recommended approach to +Android development and is the fastest way to get started. (If you prefer to +work in an IDE other than Eclipse, you do not need to install Eclipse or ADT, +instead, you can directly use the SDK tools to build and debug your +application—skip to <a href="#NextSteps">Next Steps</a>.)</p> + +<p>Once you have the Eclipse IDE installed, as described in <a +href="#Preparing">Preparing for Installation</a>, follow the steps below to +download the ADT plugin and install it in your respective Eclipse environment. +</p> + +<table style="font-size:100%"> +<tr><th>Eclipse 3.4 (Ganymede)</th><th>Eclipse 3.5 (Galileo)</th></tr> +<tr> +<td width="45%"> +<!-- 3.4 steps --> +<ol> + <li>Start Eclipse, then select <strong>Help</strong> > <strong>Software Updates...</strong>. + In the dialog that appears, click the <strong>Available Software</strong> tab. </li> + <li>Click <strong>Add Site...</strong> </li> + <li>In the Add Site dialog that appears, enter this URL in the "Location" field: + <pre style="margin-left:0">https://dl-ssl.google.com/android/eclipse/</pre> + <p>Note: If you have trouble aqcuiring the plugin, try using "http" in the Location URL, + instead of "https" (https is preferred for security reasons).</p> + <p>Click <strong>OK</strong>.</p></li> + <li>Back in the Available Software view, you should see the plugin listed by the URL, + with "Developer Tools" nested within it. Select the checkbox next to + Developer Tools and click <strong>Install...</strong></li> + <li>On the subsequent Install window, "Android DDMS" and "Android Development Tools" + should both be checked. Click <strong>Next</strong>. </li> + <li>Read and accept the license agreement, then click <strong>Finish</strong>.</li> + <li>Restart Eclipse. </li> +</ol> + +</td> +<td> +<!-- 3.5 steps --> +<ol> + <li>Start Eclipse, then select <strong>Help</strong> > <strong>Install + New Softare</strong>. </li> + <li>In the Available Software dialog, click <strong>Add...</strong>.</li> + <li>In the Add Site dialog that appears, enter a name for the remote site + (e.g., "Android Plugin") in the "Name" field. + <p>In the "Location" field, enter this URL:</p> + <pre>https://dl-ssl.google.com/android/eclipse/</pre> + <p>Note: If you have trouble aqcuiring the plugin, you can try + using "http" in the URL, instead of "https" (https is preferred for + security reasons).</p> + <p>Click <strong>OK</strong>.</p> + </li> + <li>Back in the Available Software view, you should now see "Developer + Tools" added to the list. Select the checkbox next to Developer Tools, + which will automatically select the nested tools Android DDMS and Android + Development Tools. + Click <strong>Next</strong>. </li> + <li>In the resulting Install Details dialog, the Android DDMS and Android + Development Tools features are listed. Click <strong>Next</strong> to + read and accept the license agreement and install any dependencies, + then click <strong>Finish</strong>. </li> + <li>Restart Eclipse. </li> + +</ol> +</td> +</tr> +</table> + +<p>Now modify your Eclipse preferences to point to the Android SDK directory:</p> +<ol> + <li>Select <strong>Window</strong> > <strong>Preferences...</strong> to open the Preferences + panel (Mac OS X: <strong>Eclipse</strong> > <strong>Preferences</strong>).</li> + <li>Select <strong>Android</strong> from the left panel. </li> + <li>For the <em>SDK Location</em> in the main panel, click <strong>Browse...</strong> and + locate your downloaded SDK directory. </li> + <li>Click <strong>Apply</strong>, then <strong>OK</strong>.</li> +</ol> + +<p>Done! If you haven't encountered any problems, then you're ready to +begin developing Android applications. See the +<a href="#NextSteps">Next Steps</a> section for suggestions on how to start. </p> + + +<h2 id="sdkContents">Contents of the SDK</h2> + +<p>Once you've downloaded and unpacked the SDK, open the SDK directory +and take a look at what's inside.</p> + +<p>The table below describes the SDK directory contents. </p> + +<table> +<tr> +<th colspan="3">Name</th><th>Description</th> +</tr> +<tr> +<td colspan="3"><code>add-ons/</code></td> +<td>Contains add-ons to the Android SDK development +environment, which let you develop against external libraries that are available on some +devices. </td> +</tr> +<tr> +<td colspan="3"><code>docs/</code></td> +<td>A full set of documentation in HTML format, including the Developer's Guide, +API Reference, and other information.</td> +</tr> +<tr> +<td colspan="3"><code>platforms/</code></td> +<td>Contains a set of Android platform versions that you can develop +applications against, each in a separate directory. </td> +</tr> +<tr> +<td style="width:2em;border-bottom-color:white;"></td> +<td colspan="2"><code><platform>/</code></td> +<td>Platform version directory, for example "Android 1.6". All platform version +directories contain a similar set of files and subdirectory structure.</td> +</tr> + +<tr> +<td style="width:2em;border-bottom-color:white;"> </td> +<td style="width:2em;border-bottom-color:white;"></td> +<td><code>data/</code></td> +<td>Storage area for default fonts and resource definitions.</td> +</tr> +<tr> +<td style="width:2em;border-bottom-color:white;"></td> +<td style="width:2em;border-bottom-color:white;"></td> +<td><code>images/</code></td> +<td>Storage area for default disk images, including the Android system image, +the default userdata image, the default ramdisk image, and more. The images +are used in emulator sessions.</td> +</tr> +<tr> +<td style="width:2em;border-bottom-color:white;"></td> +<td style="width:2em;border-bottom-color:white;"></td> +<td><code>samples/</code></td> +<td>Contains a wide variety of sample applications that you can load as projects +into your development environment, compile, and run on the emulator.</td> +</tr> +<tr> +<td style="width:2em;border-bottom-color:white;"></td> +<td style="width:2em;border-bottom-color:white;"></td> +<td><code>skins/</code></td> +<td>A set of emulator skins available for the platform version. Each skin is +designed for a specific screen resolution.</td> +</tr> +<tr> +<td style="width:2em;border-bottom-color:white;"></td> +<td style="width:2em;border-bottom-color:white;"></td> +<td><code>templates/</code></td> +<td>Storage area for file templates used by the SDK development tools.</td> +</tr> +<tr> +<td style="width:2em;border-bottom-color:white;"></td> +<td style="width:2em;border-bottom-color:white;"></td> +<td><code>tools/</code></td> +<td>Any development tools that are specific to the platform version.</td> +</tr> +<tr> +<td style="width:2em;"></td> +<td style="width:2em;"></td> +<td><code>android.jar</code></td> +<td>The Android library used when compiling applications against this platform +version.</td> +</tr> +<tr> +<td colspan="3"><code>tools/</code></td> +<td>Contains the set of development and profiling tools available to you, such +as the emulator, the <code>android</code> tool, adb, ddms, and more.</td> +</tr> +<tr> +<td colspan="3"><code>RELEASE_NOTES.html</code></td> +<td>A file that loads the local version of the SDK release notes, if +available.</td> +</tr> +<tr> +<td colspan="3"><code>documentation.html</code></td> +<td>A file that loads the entry page for the local Android SDK +documentation.</td> +</tr> + +</table> + +<h2 id="InstallationNotes">Installation Notes</h2> + +<h3>Ubuntu Linux Notes</h3> + +<ul> + <li>If you need help installing and configuring Java on your + development machine, you might find these resources helpful: + <ul> + <li><a href="https://help.ubuntu.com/community/Java">https://help.ubuntu.com/community/Java </a></li> + <li><a href="https://help.ubuntu.com/community/Java">https://help.ubuntu.com/community/JavaInstallation</a></li> + </ul> + </li> + <li>Here are the steps to install Java and Eclipse, prior to installing + the Android SDK and ADT Plugin. + <ol> + <li>If you are running a 64-bit distribution on your development + machine, you need to install the <code>ia32-libs</code> package using + <code>apt-get:</code>: + <pre>apt-get install ia32-libs</pre> + </li> + <li>Next, install Java: <pre>apt-get install sun-java6-bin</pre></li> + <li>The Ubuntu package manager does not currently offer an Eclipse 3.3 + version for download, so we recommend that you download Eclipse from + eclipse.org (<a + href="http://www.eclipse.org/downloads/">http://www.eclipse.org/ + downloads/</a>). A Java or RCP version of Eclipse is recommended.</li> + <li>Follow the steps given in previous sections to install the SDK + and the ADT plugin. </li> + </ol> + </li> +</ul> + +<h3>Other Linux Notes</h3> + +<ul> + <li>If JDK is already installed on your development computer, please + take a moment to make sure that it meets the version requirements listed + in the <a href="requirements.html">System Requirements</a>. + In particular, note that some Linux distributions may include JDK 1.4 or Gnu + Compiler for Java, both of which are not supported for Android development.</li> +</ul> + + +<h2 id="Troubleshooting">Troubleshooting ADT Installation</h2> + +<p> If you are having trouble downloading the ADT plugin after following the +steps above, here are some suggestions: </p> + +<ul> + <li>If Eclipse can not find the remote update site containing the ADT plugin, +try changing the remote site URL to use http, rather than https. That is, set +the Location for the remote site to: +<pre>http://dl-ssl.google.com/android/eclipse/</pre></li> +<li>If you are behind a firewall (such as a corporate firewall), make sure that +you have properly configured your proxy settings in Eclipse. In Eclipse 3.3/3.4, +you can configure proxy information from the main Eclipse menu in +<strong>Window</strong> (on Mac OS X, <strong>Eclipse</strong>) > +<strong>Preferences</strong> > <strong>General</strong> > <strong>Network +Connections</strong>.</li> +</ul> + +<p> If you are still unable to use Eclipse to download the ADT plugin as a +remote update site, you can download the ADT zip file to your local machine and +manually install it:</p> + +<ol> + <li><a href="http://developer.android.com/sdk/preview/index.html">Download the + ADT Plugin zip file</a> (do not unpack it).</li> + <li>Follow steps 1 and 2 in the <a href="#InstallingADT">default install + instructions</a> (above).</li> + <li>In the Add Site dialog, click <strong>Archive</strong>.</li> + <li>Browse and select the downloaded zip file.</li> + <li>In Eclipse 3.5 only, enter a name for the local update site (e.g., + "Android Plugin") in the "Name" field.</li> + <li>Click <strong>OK</strong>. + <li>Follow the remaining procedures as listed for + <a href="#InstallingADT">default installation</a> above, + starting from step 4.</li> +</ol> + +<p>To update your plugin once you've installed using the zip file, you will have +to follow these steps again instead of the default update instructions.</p> + +<h4>Other install errors</h4> + +<p>Note that there are features of ADT that require some optional +Eclipse components (for example, WST). If you encounter an error when +installing ADT, your Eclipse installion might not include these components. +For information about how to quickly add the necessary components to your +Eclipse installation, see the troubleshooting topic +<a href="{@docRoot}guide/appendix/faq/troubleshooting.html#installeclipsecomponents">ADT +Installation Error: "requires plug-in org.eclipse.wst.sse.ui"</a>.</p> + +<h4>For Linux users</h4> +<p>If you encounter this error when installing the ADT Plugin for Eclipse: +<pre> +An error occurred during provisioning. +Cannot connect to keystore. +JKS</pre> +<p> +...then your development machine lacks a suitable Java VM. Installing Sun +Java 6 will resolve this issue and you can then reinstall the ADT +Plugin.</p> + + diff --git a/docs/html/sdk/download.jd b/docs/html/sdk/download.jd index 1712ae6..76f1213 100644 --- a/docs/html/sdk/download.jd +++ b/docs/html/sdk/download.jd @@ -57,15 +57,11 @@ The License Agreement constitutes a contract between you and Google with respect <div class="special" id="next-steps" style="display:none"> <h2>Thank you for downloading the Android SDK!</h2> <p>Your download should be underway. If not, <a id="click-download">click here to start the download</a>.</p> - <p>If you are upgrading from a previously installed version of the Android SDK, see - <a href="upgrading.html" class="addVersionPath">Upgrading the SDK</a>.</p> - <p>If you are installing for the first time, read - <a href="installing.html" class="addVersionPath">Installing the Android SDK</a> to get your environment set up. - Once you have completed your installation, visit the <em>Dev Guide</em> tab and begin with the - <a href="/guide/tutorials/hello-world.html">Hello World</a> tutorial to create your first - Android application. From there, learn more about Android with the - <a href="/guide/topics/fundamentals.html">Application Fundamentals</a> documentation.</p> - <p>If you want to re-read the license agreement, it's available to you in the <em>SDK</em> tab.</p> + <p>To set up your Android development environment, please read the guide to + <a href="installing.html" class="addVersionPath">Installing the Android SDK</a>. + Once you have completed the installation, see the + <a href="/guide/index.html">Dev Guide</a> for documentation about + developing Android applications.</p> </div> <script type="text/javascript"> diff --git a/docs/html/sdk/index.jd b/docs/html/sdk/index.jd index 2ac7688..e82ed34 100644 --- a/docs/html/sdk/index.jd +++ b/docs/html/sdk/index.jd @@ -1,6 +1,104 @@ -sdk.redirect=true +page.title=Android 2.0 SDK, Release 1 +sdk.redirect=0 +sdk.version=2.0 + +sdk.date=October 2009 + +sdk.win_download=android-sdk-windows-2.0_r1.zip +sdk.win_bytes= +sdk.win_checksum= + +sdk.mac_download=android-sdk-mac_x86-2.0_r1.zip +sdk.mac_bytes= +sdk.mac_checksum= + +sdk.linux_download=android-sdk-linux_x86-2.0_r1.tgz +sdk.linux_bytes= +sdk.linux_checksum= + +adt.zip_download=ADT-0.9.4.zip +adt.zip_version=0.9.4 +adt.zip_bytes= +adt.zip_checksum= @jd:body +<p>For more information on this SDK release, read the +<a href="{@docRoot}sdk/RELEASENOTES.html">Release Notes</a>.</p> + +<p>For setup procedures, read the +<a href="{@docRoot}sdk/{@sdkCurrent}/installing.html">Installing</a> guide.</p> + +<h2>SDK Contents</h2> + +<h4>Development tools</h4> + +<p>The SDK includes a full set of tools for developing and debugging application +code and designing an application UI. You can read about the tools in the <a +href="{@docRoot}guide/developing/tools/index.html">Dev Guide</a> and access them +in the <code><em><sdk></em>/tools/</code> directory.</p> + +<h4 id="system_images">Android Platforms</h4> + +<p>This SDK includes only the Android {@sdkCurrentVersion} platform version for developing Android +applications. With this platform, both the fully compliant Android {@sdkCurrentVersion} library +and system image are provided. For more information about this platform version — +features, applications included, localizations, API changes, and so on — +see the <a href="{@docRoot}sdk/android-{@sdkCurrentVersion}.html">Android {@sdkCurrentVersion} +Version Notes</a>.</p> + +<p>Although only one platform version is included in the SDK, you do not need to +install a separate Android SDK for each platform version on which would like to develop +applications. Once you install the SDK from this page, you can easily install +additional Android platform versions using the Android SDK and AVD Manager. +For more information about adding platform versions to your SDK, +read <a href="{@docRoot}sdk/updating-sdk.html">Updating Your SDK</a>.</p> + + +<h4 id="system_images">SDK Add-Ons</h4> + +<p>An SDK add-on provides a development environment for an Android external +library or a customized (but fully compliant) Android system image. This SDK +includes the SDK add-ons listed below. The Android system API Level required by +each add-on is noted.</p> + +<table style="margin-right:1em;" width="80%"> +<tr> +<th><nobr>Add-On</nobr></th><th><nobr>API Level</nobr></th> +<th>Notes</th><th>Description</th> +</tr> +<tr> +<td width="5%"><nobr>Google APIs</nobr></td> +<td width="5%">5</td> +<td width="5%"> </td> +<td>Includes the com.google.android.maps external library, a compliant +Android 2.0 system image, a {@link android.location.Geocoder Geocoder} +backend service implementation, documentation, and sample code. </td> +</tr> +</table> + + +<h4 id="samples">Sample Code and Applications</h4> + +<p>You can look at a variety of sample applications in the <a +href="{@docRoot}guide/samples/index.html">Dev Guide</a> and access the sample +code itself in the <code><em><sdk></em>/platforms/<em><platform></em>/samples/</code> +directory of the SDK package. Note that each platform version includes its own set of +sample applications.</p> + + +<h4 id="documentation">Documentation</h4> + +<p>The SDK package includes a full set of local documentation. To view it, open +the <code><em><sdk></em>/documentation.html</code> file in a web browser. If you +are developing in an IDE such as Eclipse, you can also view the reference +documentation directly in the IDE by hovering over methods and class names.</p> + +<p>The most current documentation is always available on the Android Developers +site:</p> + +<p style="margin-left:2em;"><a +href="http://developer.android.com/index.html">http://developer.android.com/</a> +</p> diff --git a/docs/html/sdk/requirements.jd b/docs/html/sdk/requirements.jd new file mode 100644 index 0000000..97db36d --- /dev/null +++ b/docs/html/sdk/requirements.jd @@ -0,0 +1,54 @@ +page.title=System Requirements +@jd:body + +<p>The sections below describe the system and software requirements for developing +Android applications using the Android Development Tools, revision 3. </p> + +<h3>Supported Operating Systems</h3> +<ul> + <li>Windows XP (32-bit) or Vista (32- or 64-bit)</li> + <li>Mac OS X 10.4.8 or later (x86 only)</li> + <li>Linux (tested on Linux Ubuntu Hardy Heron) + <ul> + <li>64-bit distributions must be capable of running 32-bit applications. + For information about how to add support for 32-bit applications, see + the <a href="installing.html#InstallationNotes">Installation Notes</a>.</li> + </ul> + </li> +</ul> + +<h3>Supported Development Environments</h3> +<ul> + <li>Eclipse IDE + <ul> + <li><a href="http://www.eclipse.org/downloads/">Eclipse</a> 3.4 (Ganymede) or 3.5 (Galileo) + <ul> + <li>Note: Eclipse 3.3 has not been fully tested with ADT 0.9.3 and support can no longer be guaranteed. We suggest you upgrade to + Eclipse 3.4 or 3.5.</li> + <li>Recommended Eclipse IDE packages: Eclipse IDE for Java EE Developers, Eclipse IDE for Java Developers, Eclipse for RCP/Plug-in Developers</li> + <li>Eclipse <a href="http://www.eclipse.org/jdt">JDT</a> plugin (included in most Eclipse IDE packages) </li> + <li>Eclipse Classic IDE package is not supported.</li> + </ul> + </li> + <li><a href="http://java.sun.com/javase/downloads/index.jsp">JDK 5 or JDK 6</a> (JRE alone is not sufficient)</li> + <li><a href="installing.html#installingplugin">Android Development Tools plugin</a> (optional)</li> + <li><strong>Not</strong> compatible with Gnu Compiler for Java (gcj)</li> + </ul> + </li> + <li>Other development environments or IDEs + <ul> + <li><a href="http://java.sun.com/javase/downloads/index.jsp">JDK 5 or JDK 6</a> (JRE alone is not sufficient)</li> + <li><a href="http://ant.apache.org/">Apache Ant</a> 1.6.5 or later for Linux and Mac, 1.7 or later for Windows</li> + <li><strong>Not</strong> compatible with Gnu Compiler for Java (gcj)</li> + </ul> + </li> +</ul> + +<p class="note"><strong>Note:</strong> If JDK is already installed on your development computer, please take a moment to make sure that it meets the version requirements listed above. In +particular, note that some Linux distributions may include JDK 1.4 or Gnu Compiler for Java, both of which are not supported for Android development. </p> + +<h3>Hardware requirements</h3> +<ul> + <li>For the base SDK package, at least 600MB of available disk space. For each platform downloaded into the SDK, an additional 100MB is needed. </li> +</ul> + diff --git a/docs/html/sdk/sdk_toc.cs b/docs/html/sdk/sdk_toc.cs index 143a38d..b75fe9b 100644 --- a/docs/html/sdk/sdk_toc.cs +++ b/docs/html/sdk/sdk_toc.cs @@ -13,10 +13,7 @@ <span style="display:none" class="zh-TW">目前 SDK 發行版本</span> </h2> <ul> - <li><a href="<?cs var:toroot ?>sdk/<?cs - if:sdk.preview ?>preview<?cs - else ?><?cs var:sdk.current ?><?cs - /if ?>/index.html"> + <li><a href="<?cs var:toroot ?>sdk/index.html"> <span class="en">Download</span> <span style="display:none" class="de">Herunterladen</span> <span style="display:none" class="es">Descargar</span> @@ -26,10 +23,7 @@ <span style="display:none" class="zh-CN">下载</span> <span style="display:none" class="zh-TW">下載</span> </a></li> - <li><a href="<?cs var:toroot ?>sdk/<?cs - if:sdk.preview ?>preview<?cs - else ?><?cs var:sdk.current ?><?cs - /if ?>/installing.html"> + <li><a href="<?cs var:toroot ?>sdk/<?cs var:sdk.current ?>/installing.html"> <span class="en">Installing</span> <span style="display:none" class="de">Installieren</span> <span style="display:none" class="es">Instalación</span> @@ -39,14 +33,8 @@ <span style="display:none" class="zh-CN">安装</span> <span style="display:none" class="zh-TW">安裝</span> </a></li> - <li><a href="<?cs var:toroot ?>sdk/<?cs - if:sdk.preview ?>preview<?cs - else ?><?cs var:sdk.current ?><?cs - /if ?>/upgrading.html">Upgrading</a></li> - <li><a href="<?cs var:toroot ?>sdk/<?cs - if:sdk.preview ?>preview<?cs - else ?><?cs var:sdk.current ?><?cs - /if ?>/requirements.html">System Requirements</a></li> + <li><a href="<?cs var:toroot ?>sdk/updating-sdk.html">Updating Your SDK</a></li> + <li><a href="<?cs var:toroot ?>sdk/requirements.html">System Requirements</a></li> </ul><?cs else ?> <?cs # else "if NOT online" ... ?> <h2> @@ -55,10 +43,7 @@ /if ?> <?cs # end of "if/else online" ... ?> <ul> <li><a href="<?cs var:toroot ?>sdk/terms.html">SDK Terms and Conditions</a></li> - <li><a href="<?cs var:toroot ?><?cs - if:sdk.current == "preview" ?>sdk/preview/index.html<?cs - else ?>sdk/RELEASENOTES.html<?cs - /if ?>">SDK Release Notes</a></li> + <li><a href="<?cs var:toroot ?>sdk/RELEASENOTES.html">SDK Release Notes</a></li> </ul> </li><?cs if:android.whichdoc == "online" ?> @@ -74,11 +59,34 @@ <span style="display:none" class="zh-TW">系統影像版本資訊</span> </h2> <ul> + <li><a href="<?cs var:toroot ?>sdk/android-2.0.html">Android 2.0 Version Notes</a></li> <li><a href="<?cs var:toroot ?>sdk/android-1.6.html">Android 1.6 Version Notes</a></li> - <li><a href="<?cs var:toroot ?>sdk/android-1.5.html">Android 1.5 Version Notes</a></li> - <li><a href="<?cs var:toroot ?>sdk/android-1.1.html">Android 1.1 Version Notes</a></li> + <!-- <li class="toggle-list"><div><a href="#" onclick="toggle(this.parentNode.parentNode,true); return false;">More</a></div> + <ul> --> + <li><a href="<?cs var:toroot ?>sdk/android-1.5.html">Android 1.5 Version Notes</a></li> + <li><a href="<?cs var:toroot ?>sdk/android-1.1.html">Android 1.1 Version Notes</a></li> + <!-- </ul> --> + </li> </ul> </li> +<!-- + <li> + <h2> + <span class="en">Developer Tools</span> + <span style="display:none" class="de"></span> + <span style="display:none" class="es"></span> + <span style="display:none" class="fr"></span> + <span style="display:none" class="it"></span> + <span style="display:none" class="ja"></span> + <span style="display:none" class="zh-CN"></span> + <span style="display:none" class="zh-TW"></span> + </h2> + <ul> + <li><a href="<?cs var:toroot ?>sdk/tools.html">Tools Revision 3</a></li> + <li><a href="<?cs var:toroot ?>sdk/adt.html">"ADT Plugin for Eclipse, 0.9.4</a></li> + </ul> + </li> +--> <li> <h2>Native Development Tools</h2> <ul> @@ -97,6 +105,7 @@ <span style="display:none" class="zh-TW">較舊的 SDK 發行版本</span> </h2> <ul> + <li><a href="<?cs var:toroot ?>sdk/1.6_r1/index.html">Android 1.6 SDK, r1</a></li> <li><a href="<?cs var:toroot ?>sdk/1.5_r3/index.html">Android 1.5 SDK, r3</a></li> <li><a href="<?cs var:toroot ?>sdk/1.1_r1/index.html">Android 1.1 SDK, r1</a></li> <li><a href="<?cs var:toroot ?>sdk/1.0_r2/index.html">Android 1.0 SDK, r2</a></li> diff --git a/docs/html/sdk/updating-sdk.jd b/docs/html/sdk/updating-sdk.jd new file mode 100644 index 0000000..db1e8db --- /dev/null +++ b/docs/html/sdk/updating-sdk.jd @@ -0,0 +1,181 @@ +page.title=Updating Your SDK +@jd:body + + +<div id="qv-wrapper"> +<div id="qv"> +<h2>Quick view</h2> +<ul> + <li>Use the Android SDK and AVD Manager to + keep your SDK up-to-date without having to install new + SDK directories.</li> + <li>The Android SDK and AVD Manager is available only with the + Android 1.6 SDK or later.</li> + <li>The Eclipse ADT plugin may require an update when installing + new tools or system images.</li> +</ul> + +<h2>In this document</h2> +<ol> + <li><a href="#InstallingComponents">Installing SDK Components</a> + <ol> + <li><a href="#AddingSites">Adding New Sites</a></li> + </ol> + </li> + <li><a href="#UpdatingAdt">Updating the Eclipse ADT Plugin</a></li> +</ol> +</div> +</div> + + +<p>Updating your Android SDK is fast and easy. To perform an update, use the +<strong>Android SDK and AVD Manager</strong> +to install or update the individual SDK components that you need.</p> + +<p>It only takes a couple of clicks to install +individual versions of the Android platform, new development tools, new documentation, and +SDK add-ons. The new SDK components are automatically installed into your existing SDK +directory, so you don't need to update your development environment to specify a +new SDK location.</p> + +<p>Because each version of the Android platform can be installed as an individual component +of your SDK, you can customize your development environment to the Android platforms +you are targetting. Testing your app on multiple versions of +the platform is very important in order to successfully operate on as many devices as possible. +Be sure to install each version of the Android platform with which your app is compatible, then test +your apps on <a href="{@docRoot}guide/developing/tools/avd.html">AVDs</a> that run each platform.</p> + +<p>If you develop applications using Eclipse, you may also need to update +your ADT plugin when you update your development tools or in order to compile +against a new version of the platform. See the +<a href="{@docRoot}sdk/RELEASENOTES.html">SDK Release Notes</a> for ADT compatibility.</p> + + + +<h2 id="InstallingComponents">Installing SDK Components</h2> + +<p>Use the Android SDK and AVD Manager to install new SDK components. +To launch the SDK and AVD Manager:</p> +<ul> + <li>Execute the <a + href="{@docRoot}guide/developing/tools/othertools.html#android">{@code android}</a> tool + command with no options.</li> + <li>Or from Eclipse, select <strong>Window</strong> ><strong>Android SDK and AVD + Manager</strong>.</li> +</ul> + +<img src="{@docRoot}images/sdk_manager_packages.png" alt="" style="float:right" /> + +<p>When a new platform version, add-on, set of development tools or +documentation becomes available, you can quickly +install them into your existing Android SDK:</p> + +<ol> + <li>Select <strong>Available Components</strong> in the left panel. + This will reveal all components currently available for download.</li> + <li>Select the components you'd like to install and click <strong>Install + Selected</strong>.</li> + <li>Verify and accept the components you want and click <strong>Install + Accepted</strong>. The components will now be installed into your existing + Android SDK directories.</li> +</ol> + +<p>New platforms are automatically saved into the +<code><em><sdk>/</em>platforms/</code> directory of your SDK; +new add-ons are saved in the <code><em><sdk>/</em>add-ons/</code> +directory; and new documentation is saved in the existing +<code><em><sdk>/</em>docs/</code> directory (old docs are replaced).</p> + +<p class="note"><strong>Tip:</strong> +Use the "Display updates only" checkbox to show only the components +you do not have.</p> + + +<h3 id="AddingSites">Adding New Sites</h3> + +<p>By default, <strong>Available Components</strong> only shows +the Google repository for Android SDK components and Google API +add-ons. You can add additional sites that host +Android SDK add-ons, then download SDK add-ons from them.</p> + +<p>For example, a mobile carrier or hardware manufacturer may offer additional +API libraries that are supported by their own Android-powered devices. +In order to develop using their libraries, you must install their +Android SDK add-on. +If the carrier or manufacturer has hosted an add-on repository file on their +web site, add their site to the SDK and AVD Manager:</p> +<ol> + <li>Select <strong>Available Components</strong> in the left panel.</li> + <li>Click <strong>Add Site</strong> and enter the URL of the +{@code repository.xml} file. Click <strong>OK</strong>.</li> +</ol> +<p>Any SDK components available from the site will now be listed under +<strong>Available Components</strong>.</p> + + + + + +<h2 id="UpdatingAdt">Updating the Eclipse ADT Plugin</h2> + +<p>You may need to update your ADT plugin depending on what version of the +development tools you are using and what version of the Android platform you are +compiling against. It's easy to update your plugin through Eclipse and we +recommend that you stay up-to-date in order to avoid any problems.</p> + +<p>With the latest version of ADT, you can still compile existing applications against +previous versions of the Android platform. However, the latest ADT may +not work with a previous version of the development tools. See the +Android development tools release notes for compatibility information.</p> + +<p>To update ADT, follow the procedure below for your respective version of Eclipse.</p> + +<table style="font-size:100%"> +<tr><th>Eclipse 3.4 (Ganymede)</th><th>Eclipse 3.5 (Galileo)</th></tr> +<tr> +<td width="50%"> +<!-- 3.4 steps --> +<ol> + <li>Select <strong>Help</strong> > <strong>Software Updates</strong>.</li> + <li>Select the <strong>Available Software</strong> tab.</li> + <li>Select the checkboxes next to Android DDMS and Android Developer Tools, + then click <strong>Update</strong>.</li> + <li>In the resulting Available Updates dialog, ensure that both Android DDMS + and Android Development Tools are selected, then click + <strong>Next</strong>.</li> + <li>Read and accept the license agreement and then click <strong>Finish</strong>. + This will download and install the latest version of Android DDMS and + Android Development Tools.</li> + <li>Restart Eclipse.</li> +</ol> +</td> +<td> +<!-- 3.5 steps --> +<ol> + <li>Select <strong>Help</strong> > <strong>Check for Updates</strong>. </li> + <li>In the resulting Available Updates dialog, locate the Android DDMS and + Android Development Tools features in the list and ensure that the checkboxes + next to them are selected. Click <strong>Next</strong>. + <p>If the Available Updates dialog does not list Android DDMS and Android + Development tools, make sure that you have set up a remote update site + for them, as described in + <a href="installing.html#InstallingADT">Installing the ADT Plugin</a>. + </p></li> + <li>In the Update Details dialog, click <strong>Next</strong>.</li> + <li>Read and accept the license agreement and then click <strong>Finish</strong>. + This will download and install the latest version of Android DDMS and + Android Development Tools.</li> + <li>Restart Eclipse.</li> +</ol> +</td> +</tr> +</table> + +<p>If you encounter problems with this update procedure, try performing a fresh +installation. Fully remove your existing ADT Plugin as described in <a +href="{@docRoot}sdk/1.5_r3/upgrading.html#uninstallAdt">Uninstall your previous +ADT plugin</a> and then follow the guide to <a +href="{@docRoot}sdk/{@sdkCurrent}/installing.html#InstallingADT">Installing the ADT Plugin for +Eclipse</a>.</p> + + diff --git a/libs/rs/rsContext.cpp b/libs/rs/rsContext.cpp index 195ea6f..cc39dac 100644 --- a/libs/rs/rsContext.cpp +++ b/libs/rs/rsContext.cpp @@ -29,6 +29,8 @@ using namespace android; using namespace android::renderscript; pthread_key_t Context::gThreadTLSKey = 0; +uint32_t Context::gThreadTLSKeyCount = 0; +pthread_mutex_t Context::gInitMutex = PTHREAD_MUTEX_INITIALIZER; void Context::initEGL() { @@ -57,6 +59,7 @@ void Context::initEGL() configAttribsPtr[0] = EGL_NONE; rsAssert(configAttribsPtr < (configAttribs + (sizeof(configAttribs) / sizeof(EGLint)))); + LOGV("initEGL start"); mEGL.mDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY); eglInitialize(mEGL.mDisplay, &mEGL.mMajorVersion, &mEGL.mMinorVersion); @@ -144,6 +147,12 @@ bool Context::runRootScript() } mStateFragmentStore.mLast.clear(); bool ret = runScript(mRootScript.get(), 0); + + GLenum err = glGetError(); + if (err != GL_NO_ERROR) { + LOGE("Pending GL Error, 0x%x", err); + } + return ret; } @@ -293,6 +302,8 @@ void * Context::threadProc(void *vrsc) Context::Context(Device *dev, Surface *sur, bool useDepth) { + pthread_mutex_lock(&gInitMutex); + dev->addContext(this); mDev = dev; mRunning = false; @@ -304,16 +315,18 @@ Context::Context(Device *dev, Surface *sur, bool useDepth) int status; pthread_attr_t threadAttr; - if (!gThreadTLSKey) { + if (!gThreadTLSKeyCount) { status = pthread_key_create(&gThreadTLSKey, NULL); if (status) { LOGE("Failed to init thread tls key."); + pthread_mutex_unlock(&gInitMutex); return; } - } else { - // HACK: workaround gl hang on start - exit(-1); } + gThreadTLSKeyCount++; + pthread_mutex_unlock(&gInitMutex); + + // Global init done at this point. status = pthread_attr_init(&threadAttr); if (status) { @@ -355,10 +368,16 @@ Context::~Context() int status = pthread_join(mThreadId, &res); objDestroyOOBRun(); + // Global structure cleanup. + pthread_mutex_lock(&gInitMutex); if (mDev) { mDev->removeContext(this); - pthread_key_delete(gThreadTLSKey); + --gThreadTLSKeyCount; + if (!gThreadTLSKeyCount) { + pthread_key_delete(gThreadTLSKey); + } } + pthread_mutex_unlock(&gInitMutex); objDestroyOOBDestroy(); } @@ -419,6 +438,7 @@ void Context::setVertex(ProgramVertex *pv) } else { mVertex.set(pv); } + mVertex->forceDirty(); } void Context::assignName(ObjectBase *obj, const char *name, uint32_t len) diff --git a/libs/rs/rsContext.h b/libs/rs/rsContext.h index 3570e10..0dd90ed 100644 --- a/libs/rs/rsContext.h +++ b/libs/rs/rsContext.h @@ -53,6 +53,9 @@ public: ~Context(); static pthread_key_t gThreadTLSKey; + static uint32_t gThreadTLSKeyCount; + static pthread_mutex_t gInitMutex; + struct ScriptTLSStruct { Context * mContext; Script * mScript; diff --git a/libs/rs/rsProgram.h b/libs/rs/rsProgram.h index 26b78dd..57c654f 100644 --- a/libs/rs/rsProgram.h +++ b/libs/rs/rsProgram.h @@ -44,6 +44,10 @@ protected: ObjectBaseRef<Allocation> mConstants; mutable bool mDirty; + + +public: + void forceDirty() {mDirty = true;} }; diff --git a/libs/rs/rsProgramRaster.cpp b/libs/rs/rsProgramRaster.cpp index fcf6824..51ae7cf 100644 --- a/libs/rs/rsProgramRaster.cpp +++ b/libs/rs/rsProgramRaster.cpp @@ -74,7 +74,7 @@ void ProgramRaster::setupGL(const Context *rsc, ProgramRasterState *state) if (mLineSmooth) { glEnable(GL_LINE_SMOOTH); } else { - glEnable(GL_LINE_SMOOTH); + glDisable(GL_LINE_SMOOTH); } if (rsc->checkVersion1_1()) { diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java index 3b91a38..153a5ea 100644 --- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java +++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java @@ -45,7 +45,6 @@ public class SettingsHelper { private boolean mSilent; private boolean mVibrate; - private boolean mHasAutoBrightness; public SettingsHelper(Context context) { mContext = context; @@ -54,9 +53,6 @@ public class SettingsHelper { mContentService = ContentResolver.getContentService(); mPowerManager = IPowerManager.Stub.asInterface( ServiceManager.getService("power")); - - mHasAutoBrightness = context.getResources().getBoolean( - com.android.internal.R.bool.config_automatic_brightness_available); } /** @@ -71,18 +67,6 @@ public class SettingsHelper { public boolean restoreValue(String name, String value) { if (Settings.System.SCREEN_BRIGHTNESS.equals(name)) { setBrightness(Integer.parseInt(value)); - } else if (Settings.System.SCREEN_BRIGHTNESS_MODE.equals(name)) { - if (mHasAutoBrightness) { - // When setting auto-brightness, must reset the brightness afterwards - try { - int curBrightness = Settings.System.getInt(mContext.getContentResolver(), - Settings.System.SCREEN_BRIGHTNESS); - setAutoBrightness(Integer.parseInt(value) != 0); - setBrightness(curBrightness); - } catch (Settings.SettingNotFoundException e) { - // no brightness setting at all? weird. skip this then. - } - } } else if (Settings.System.SOUND_EFFECTS_ENABLED.equals(name)) { setSoundEffects(Integer.parseInt(value) == 1); } else if (Settings.Secure.LOCATION_PROVIDERS_ALLOWED.equals(name)) { @@ -92,16 +76,6 @@ public class SettingsHelper { return true; } - private void setAutoBrightness(boolean value) { - if (mPowerManager != null) { - try { - mPowerManager.setAutoBrightness(value); - } catch (RemoteException e) { - // unable to reach the power manager; skip - } - } - } - private void setGpsLocation(String value) { final String GPS = LocationManager.GPS_PROVIDER; boolean enabled = diff --git a/services/java/com/android/server/HardwareService.java b/services/java/com/android/server/HardwareService.java index 29c13e0..7c56a30 100755 --- a/services/java/com/android/server/HardwareService.java +++ b/services/java/com/android/server/HardwareService.java @@ -133,7 +133,7 @@ public class HardwareService extends IHardwareService.Stub { context.registerReceiver(mIntentReceiver, filter); mAutoBrightnessAvailable = context.getResources().getBoolean( - com.android.internal.R.bool.config_automatic_brightness_available); + com.android.internal.R.bool.config_hardware_automatic_brightness_available); } protected void finalize() throws Throwable { diff --git a/services/java/com/android/server/PackageManagerService.java b/services/java/com/android/server/PackageManagerService.java index 6289d4f..66e7ecd 100644 --- a/services/java/com/android/server/PackageManagerService.java +++ b/services/java/com/android/server/PackageManagerService.java @@ -872,6 +872,10 @@ class PackageManagerService extends IPackageManager.Stub { } PackageInfo generatePackageInfo(PackageParser.Package p, int flags) { + if ((flags & PackageManager.GET_UNINSTALLED_PACKAGES) != 0) { + // The package has been uninstalled but has retained data and resources. + return PackageParser.generatePackageInfo(p, null, flags); + } final PackageSetting ps = (PackageSetting)p.mExtras; if (ps == null) { return null; diff --git a/services/java/com/android/server/PowerManagerService.java b/services/java/com/android/server/PowerManagerService.java index e1bea37..99e008c 100644 --- a/services/java/com/android/server/PowerManagerService.java +++ b/services/java/com/android/server/PowerManagerService.java @@ -53,6 +53,7 @@ import android.view.WindowManagerPolicy; import static android.provider.Settings.System.DIM_SCREEN; import static android.provider.Settings.System.SCREEN_BRIGHTNESS; import static android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE; +import static android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC; import static android.provider.Settings.System.SCREEN_OFF_TIMEOUT; import static android.provider.Settings.System.STAY_ON_WHILE_PLUGGED_IN; @@ -64,7 +65,7 @@ import java.util.Observable; import java.util.Observer; class PowerManagerService extends IPowerManager.Stub - implements LocalPowerManager, Watchdog.Monitor, SensorEventListener { + implements LocalPowerManager, Watchdog.Monitor { private static final String TAG = "PowerManagerService"; static final String PARTIAL_NAME = "PowerManagerService"; @@ -189,6 +190,9 @@ class PowerManagerService extends IPowerManager.Stub private BatteryService mBatteryService; private SensorManager mSensorManager; private Sensor mProximitySensor; + private Sensor mLightSensor; + private boolean mLightSensorEnabled; + private float mLightSensorValue = -1; private boolean mDimScreen = true; private long mNextTimeout; private volatile int mPokey = 0; @@ -199,6 +203,8 @@ class PowerManagerService extends IPowerManager.Stub private long mScreenOnStartTime; private boolean mPreventScreenOn; private int mScreenBrightnessOverride = -1; + private boolean mHasHardwareAutoBrightness; + private boolean mAutoBrightessEnabled; // Used when logging number and duration of touch-down cycles private long mTotalTouchDownTime; @@ -207,6 +213,7 @@ class PowerManagerService extends IPowerManager.Stub // could be either static or controllable at runtime private static final boolean mSpew = false; + private static final boolean mDebugLightSensor = false; /* static PrintStream mLog; @@ -344,6 +351,9 @@ class PowerManagerService extends IPowerManager.Stub // DIM_SCREEN //mDimScreen = getInt(DIM_SCREEN) != 0; + // SCREEN_BRIGHTNESS_MODE + setScreenBrightnessMode(getInt(SCREEN_BRIGHTNESS_MODE)); + // recalculate everything setScreenOffTimeoutsLocked(); } @@ -415,12 +425,17 @@ class PowerManagerService extends IPowerManager.Stub mScreenOffIntent = new Intent(Intent.ACTION_SCREEN_OFF); mScreenOffIntent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY); - ContentResolver resolver = mContext.getContentResolver(); + mHasHardwareAutoBrightness = mContext.getResources().getBoolean( + com.android.internal.R.bool.config_hardware_automatic_brightness_available); + + ContentResolver resolver = mContext.getContentResolver(); Cursor settingsCursor = resolver.query(Settings.System.CONTENT_URI, null, "(" + Settings.System.NAME + "=?) or (" + Settings.System.NAME + "=?) or (" + + Settings.System.NAME + "=?) or (" + Settings.System.NAME + "=?)", - new String[]{STAY_ON_WHILE_PLUGGED_IN, SCREEN_OFF_TIMEOUT, DIM_SCREEN}, + new String[]{STAY_ON_WHILE_PLUGGED_IN, SCREEN_OFF_TIMEOUT, DIM_SCREEN, + SCREEN_BRIGHTNESS_MODE}, null); mSettings = new ContentQueryMap(settingsCursor, Settings.System.NAME, true, mHandler); SettingsObserver settingsObserver = new SettingsObserver(); @@ -444,10 +459,6 @@ class PowerManagerService extends IPowerManager.Stub // turn everything on setPowerState(ALL_BRIGHT); - // set auto brightness mode to user setting - boolean brightnessMode = Settings.System.getInt(resolver, SCREEN_BRIGHTNESS_MODE, 1) != 0; - mHardware.setAutoBrightness_UNCHECKED(brightnessMode); - synchronized (mHandlerThread) { mInitComplete = true; mHandlerThread.notifyAll(); @@ -1164,7 +1175,7 @@ class PowerManagerService extends IPowerManager.Stub // Finally, set the flag that prevents the screen from turning on. // (Below, in setPowerState(), we'll check mPreventScreenOn and - // we *won't* call Power.setScreenState(true) if it's set.) + // we *won't* call setScreenStateLocked(true) if it's set.) mPreventScreenOn = true; } else { // (Re)enable the screen. @@ -1182,9 +1193,9 @@ class PowerManagerService extends IPowerManager.Stub Log.d(TAG, "preventScreenOn: turning on after a prior preventScreenOn(true)!"); } - int err = Power.setScreenState(true); + int err = setScreenStateLocked(true); if (err != 0) { - Log.w(TAG, "preventScreenOn: error from Power.setScreenState(): " + err); + Log.w(TAG, "preventScreenOn: error from setScreenStateLocked(): " + err); } } @@ -1239,6 +1250,14 @@ class PowerManagerService extends IPowerManager.Stub } }; + private int setScreenStateLocked(boolean on) { + int err = Power.setScreenState(on); + if (err == 0) { + enableLightSensor(on && mAutoBrightessEnabled); + } + return err; + } + private void setPowerState(int state) { setPowerState(state, false, false); @@ -1327,7 +1346,7 @@ class PowerManagerService extends IPowerManager.Stub reallyTurnScreenOn = false; } if (reallyTurnScreenOn) { - err = Power.setScreenState(true); + err = setScreenStateLocked(true); long identity = Binder.clearCallingIdentity(); try { mBatteryStats.noteScreenBrightness( @@ -1339,7 +1358,7 @@ class PowerManagerService extends IPowerManager.Stub Binder.restoreCallingIdentity(identity); } } else { - Power.setScreenState(false); + setScreenStateLocked(false); // But continue as if we really did turn the screen on... err = 0; } @@ -1384,7 +1403,7 @@ class PowerManagerService extends IPowerManager.Stub EventLog.writeEvent(LOG_POWER_SCREEN_STATE, 0, becauseOfUser ? 1 : 0, mTotalTouchDownTime, mTouchCycles); mLastTouchDown = 0; - int err = Power.setScreenState(false); + int err = setScreenStateLocked(false); if (mScreenOnStartTime != 0) { mScreenOnTime += SystemClock.elapsedRealtime() - mScreenOnStartTime; mScreenOnStartTime = 0; @@ -1802,6 +1821,14 @@ class PowerManagerService extends IPowerManager.Stub } } + private void lightSensorChangedLocked(float value) { + if (mDebugLightSensor) { + Log.d(TAG, "lightSensorChangedLocked " + value); + } + mLightSensorValue = value; + // more to do here + } + /** * The user requested that we go to sleep (probably with the power button). * This overrides all wake locks that are held. @@ -1885,6 +1912,18 @@ class PowerManagerService extends IPowerManager.Stub } } + private void setScreenBrightnessMode(int mode) { + mAutoBrightessEnabled = (mode == SCREEN_BRIGHTNESS_MODE_AUTOMATIC); + + if (mHasHardwareAutoBrightness) { + // When setting auto-brightness, must reset the brightness afterwards + mHardware.setAutoBrightness_UNCHECKED(mAutoBrightessEnabled); + setBacklightBrightness((int)mScreenBrightness.curValue); + } else { + enableLightSensor(screenIsOn() && mAutoBrightessEnabled); + } + } + /** Sets the screen off timeouts: * mKeylightDelay * mDimDelay @@ -2031,6 +2070,14 @@ class PowerManagerService extends IPowerManager.Stub } void systemReady() { + mSensorManager = new SensorManager(mHandlerThread.getLooper()); + mProximitySensor = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY); + // don't bother with the light sensor if auto brightness is handled in hardware + if (!mHasHardwareAutoBrightness) { + mLightSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT); + enableLightSensor(mAutoBrightessEnabled); + } + synchronized (mLocks) { Log.d(TAG, "system ready!"); mDoneBooting = true; @@ -2058,8 +2105,6 @@ class PowerManagerService extends IPowerManager.Stub | PowerManager.FULL_WAKE_LOCK | PowerManager.SCREEN_DIM_WAKE_LOCK; - // call getSensorManager() to make sure mProximitySensor is initialized - getSensorManager(); if (mProximitySensor != null) { result |= PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK; } @@ -2098,31 +2143,19 @@ class PowerManagerService extends IPowerManager.Stub } } - public void setAutoBrightness(boolean on) { - mContext.enforceCallingOrSelfPermission(android.Manifest.permission.DEVICE_POWER, null); - mHardware.setAutoBrightness_UNCHECKED(on); - } - - private SensorManager getSensorManager() { - if (mSensorManager == null) { - mSensorManager = new SensorManager(mHandlerThread.getLooper()); - mProximitySensor = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY); - } - return mSensorManager; - } - private void enableProximityLockLocked() { if (mSpew) { Log.d(TAG, "enableProximityLockLocked"); } - mSensorManager.registerListener(this, mProximitySensor, SensorManager.SENSOR_DELAY_NORMAL); + mSensorManager.registerListener(mProximityListener, mProximitySensor, + SensorManager.SENSOR_DELAY_NORMAL); } private void disableProximityLockLocked() { if (mSpew) { Log.d(TAG, "disableProximityLockLocked"); } - mSensorManager.unregisterListener(this); + mSensorManager.unregisterListener(mProximityListener); synchronized (mLocks) { if (mProximitySensorActive) { mProximitySensorActive = false; @@ -2131,32 +2164,65 @@ class PowerManagerService extends IPowerManager.Stub } } - public void onSensorChanged(SensorEvent event) { - long milliseconds = event.timestamp / 1000000; - synchronized (mLocks) { - float distance = event.values[0]; - // compare against getMaximumRange to support sensors that only return 0 or 1 - if (distance >= 0.0 && distance < PROXIMITY_THRESHOLD && - distance < mProximitySensor.getMaximumRange()) { - if (mSpew) { - Log.d(TAG, "onSensorChanged: proximity active, distance: " + distance); - } - goToSleepLocked(milliseconds); - mProximitySensorActive = true; + private void enableLightSensor(boolean enable) { + if (mDebugLightSensor) { + Log.d(TAG, "enableLightSensor " + enable); + } + if (mSensorManager != null && mLightSensorEnabled != enable) { + mLightSensorEnabled = enable; + if (enable) { + mSensorManager.registerListener(mLightListener, mLightSensor, + SensorManager.SENSOR_DELAY_NORMAL); } else { - // proximity sensor negative events trigger as user activity. - // temporarily set mUserActivityAllowed to true so this will work - // even when the keyguard is on. - if (mSpew) { - Log.d(TAG, "onSensorChanged: proximity inactive, distance: " + distance); - } - mProximitySensorActive = false; - forceUserActivityLocked(); + mSensorManager.unregisterListener(mLightListener); } } } - public void onAccuracyChanged(Sensor sensor, int accuracy) { - // ignore - } + SensorEventListener mProximityListener = new SensorEventListener() { + public void onSensorChanged(SensorEvent event) { + long milliseconds = event.timestamp / 1000000; + synchronized (mLocks) { + float distance = event.values[0]; + // compare against getMaximumRange to support sensors that only return 0 or 1 + if (distance >= 0.0 && distance < PROXIMITY_THRESHOLD && + distance < mProximitySensor.getMaximumRange()) { + if (mSpew) { + Log.d(TAG, "onSensorChanged: proximity active, distance: " + distance); + } + goToSleepLocked(milliseconds); + mProximitySensorActive = true; + } else { + // proximity sensor negative events trigger as user activity. + // temporarily set mUserActivityAllowed to true so this will work + // even when the keyguard is on. + if (mSpew) { + Log.d(TAG, "onSensorChanged: proximity inactive, distance: " + distance); + } + mProximitySensorActive = false; + forceUserActivityLocked(); + } + } + } + + public void onAccuracyChanged(Sensor sensor, int accuracy) { + // ignore + } + }; + + SensorEventListener mLightListener = new SensorEventListener() { + public void onSensorChanged(SensorEvent event) { + synchronized (mLocks) { + int value = (int)event.values[0]; + if (mDebugLightSensor) { + Log.d(TAG, "onSensorChanged: light value: " + value); + } + lightSensorChangedLocked(value); + } + } + + public void onAccuracyChanged(Sensor sensor, int accuracy) { + // ignore + } + }; } diff --git a/services/java/com/android/server/status/StatusBarService.java b/services/java/com/android/server/status/StatusBarService.java index fe761ea..59e9832 100644 --- a/services/java/com/android/server/status/StatusBarService.java +++ b/services/java/com/android/server/status/StatusBarService.java @@ -140,7 +140,7 @@ public class StatusBarService extends IStatusBar.Stub boolean down = event.getAction() == KeyEvent.ACTION_DOWN; switch (event.getKeyCode()) { case KeyEvent.KEYCODE_BACK: - if (down) { + if (!down) { StatusBarService.this.deactivate(); } return true; @@ -973,15 +973,24 @@ public class StatusBarService extends IStatusBar.Stub } void animateCollapse() { - if (SPEW) Log.d(TAG, "Animate collapse: expanded=" + mExpanded - + " expanded visible=" + mExpandedVisible); + if (SPEW) { + Log.d(TAG, "animateCollapse(): mExpanded=" + mExpanded + + " mExpandedVisible=" + mExpandedVisible + + " mAnimating=" + mAnimating + + " mAnimVel=" + mAnimVel); + } if (!mExpandedVisible) { return; } - prepareTracking(mDisplay.getHeight()-1); - performFling(mDisplay.getHeight()-1, -2000.0f, true); + if (mAnimating) { + return; + } + + int y = mDisplay.getHeight()-1; + prepareTracking(y); + performFling(y, -2000.0f, true); } void performExpand() { @@ -1096,7 +1105,7 @@ public class StatusBarService extends IStatusBar.Stub mTracking = true; mVelocityTracker = VelocityTracker.obtain(); boolean opening = !mExpanded; - if (!mExpanded) { + if (opening) { mAnimAccel = 2000.0f; mAnimVel = 200; mAnimY = mStatusBarView.getHeight(); @@ -1111,16 +1120,13 @@ public class StatusBarService extends IStatusBar.Stub mAnimating = true; mHandler.sendMessageAtTime(mHandler.obtainMessage(MSG_ANIMATE_REVEAL), mCurAnimationTime); + makeExpandedVisible(); } else { // it's open, close it? if (mAnimating) { mAnimating = false; mHandler.removeMessages(MSG_ANIMATE); } - } - if (opening) { - makeExpandedVisible(); - } else { updateExpandedViewPos(y + mViewDelta); } } @@ -1547,7 +1553,7 @@ public class StatusBarService extends IStatusBar.Stub void updateExpandedViewPos(int expandedPosition) { if (SPEW) { - Log.d(TAG, "updateExpandedViewPos before pos=" + expandedPosition + Log.d(TAG, "updateExpandedViewPos before expandedPosition=" + expandedPosition + " mTrackingParams.y=" + mTrackingParams.y + " mTrackingPosition=" + mTrackingPosition); } diff --git a/telephony/java/com/android/internal/telephony/gsm/GsmMmiCode.java b/telephony/java/com/android/internal/telephony/gsm/GsmMmiCode.java index 18e6375..bcbd127 100644 --- a/telephony/java/com/android/internal/telephony/gsm/GsmMmiCode.java +++ b/telephony/java/com/android/internal/telephony/gsm/GsmMmiCode.java @@ -595,7 +595,8 @@ public final class GsmMmiCode extends Handler implements MmiCode { } int isSettingUnconditionalVoice = - ((reason == CommandsInterface.CF_REASON_UNCONDITIONAL) && + (((reason == CommandsInterface.CF_REASON_UNCONDITIONAL) || + (reason == CommandsInterface.CF_REASON_ALL)) && (((serviceClass & CommandsInterface.SERVICE_CLASS_VOICE) != 0) || (serviceClass == CommandsInterface.SERVICE_CLASS_NONE))) ? 1 : 0; diff --git a/tests/DumpRenderTree/src/com/android/dumprendertree/FileFilter.java b/tests/DumpRenderTree/src/com/android/dumprendertree/FileFilter.java index 395e572..32219fa 100644 --- a/tests/DumpRenderTree/src/com/android/dumprendertree/FileFilter.java +++ b/tests/DumpRenderTree/src/com/android/dumprendertree/FileFilter.java @@ -79,8 +79,7 @@ public class FileFilter { "profiler", // profiler is not supported "svg", // svg is not supported "platform", // platform specific - "http", // requires local http(s) server - "fast/workers", + "http/wml", }; static final String [] ignoreTestList = { |