summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Android.mk2
-rw-r--r--api/current.xml87
-rw-r--r--camera/libcameraservice/CameraService.cpp87
-rw-r--r--camera/libcameraservice/CameraService.h6
-rw-r--r--core/java/android/appwidget/AppWidgetHostView.java3
-rw-r--r--core/java/android/os/IPowerManager.aidl3
-rw-r--r--core/java/android/provider/ContactsContract.java2
-rw-r--r--core/java/android/provider/Settings.java12
-rw-r--r--core/java/android/webkit/WebView.java14
-rw-r--r--core/jni/android_server_BluetoothEventLoop.cpp1
-rw-r--r--core/res/res/values/config.xml6
-rw-r--r--data/sounds/AudioPackage3.mk92
-rw-r--r--data/sounds/newwavelabs/BussaMove.oggbin0 -> 48968 bytes
-rw-r--r--data/sounds/newwavelabs/BussaMove.wavbin0 -> 864048 bytes
-rw-r--r--data/sounds/newwavelabs/CrayonRock.oggbin0 -> 37952 bytes
-rw-r--r--data/sounds/newwavelabs/CrayonRock.wavbin0 -> 627248 bytes
-rw-r--r--data/sounds/newwavelabs/DancinFool.oggbin0 -> 61434 bytes
-rw-r--r--data/sounds/newwavelabs/DancinFool.wavbin0 -> 1016108 bytes
-rw-r--r--data/sounds/newwavelabs/DonMessWivIt.oggbin0 -> 50545 bytes
-rw-r--r--data/sounds/newwavelabs/DonMessWivIt.wavbin0 -> 910496 bytes
-rw-r--r--data/sounds/newwavelabs/HalfwayHome.oggbin0 -> 68588 bytes
-rw-r--r--data/sounds/newwavelabs/HalfwayHome.wavbin0 -> 1254448 bytes
-rw-r--r--data/sounds/newwavelabs/Playa.oggbin0 -> 56616 bytes
-rw-r--r--data/sounds/newwavelabs/Playa.wavbin0 -> 1032632 bytes
-rw-r--r--data/sounds/newwavelabs/SilkyWay.oggbin0 -> 44186 bytes
-rw-r--r--data/sounds/newwavelabs/SilkyWay.wavbin0 -> 736324 bytes
-rw-r--r--docs/html/guide/developing/updating-sdk.jd108
-rw-r--r--docs/html/guide/guide_toc.cs1
-rw-r--r--docs/html/guide/topics/ui/dialogs.jd2
-rwxr-xr-xdocs/html/guide/tutorials/localization/index.jd61
-rwxr-xr-xdocs/html/images/hello_l10n/xml_file_wizard_shortcut.pngbin0 -> 9658 bytes
-rwxr-xr-xdocs/html/images/hello_l10n/xml_wizard1.pngbin0 -> 27897 bytes
-rwxr-xr-xdocs/html/images/hello_l10n/xml_wizard2.pngbin0 -> 3662 bytes
-rw-r--r--docs/html/sdk/2.0_r1/installing.jd389
-rw-r--r--docs/html/sdk/download.jd14
-rw-r--r--docs/html/sdk/index.jd100
-rw-r--r--docs/html/sdk/requirements.jd54
-rw-r--r--docs/html/sdk/sdk_toc.cs53
-rw-r--r--docs/html/sdk/updating-sdk.jd181
-rw-r--r--include/private/ui/RegionHelper.h15
-rw-r--r--libs/rs/rsContext.cpp30
-rw-r--r--libs/rs/rsContext.h3
-rw-r--r--libs/rs/rsProgram.h4
-rw-r--r--libs/rs/rsProgramRaster.cpp2
-rw-r--r--libs/ui/tests/region.cpp7
-rw-r--r--packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java26
-rwxr-xr-xservices/java/com/android/server/HardwareService.java2
-rw-r--r--services/java/com/android/server/KeyInputQueue.java9
-rw-r--r--services/java/com/android/server/PackageManagerService.java4
-rw-r--r--services/java/com/android/server/PowerManagerService.java172
-rw-r--r--services/java/com/android/server/status/StatusBarService.java28
-rw-r--r--telephony/java/com/android/internal/telephony/gsm/GsmMmiCode.java3
-rw-r--r--tests/DumpRenderTree/src/com/android/dumprendertree/FileFilter.java3
53 files changed, 1264 insertions, 322 deletions
diff --git a/Android.mk b/Android.mk
index 2e2fec1..49ee63d 100644
--- a/Android.mk
+++ b/Android.mk
@@ -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/api/current.xml b/api/current.xml
index e9f13ba..6148047 100644
--- a/api/current.xml
+++ b/api/current.xml
@@ -116568,6 +116568,8 @@
deprecated="not deprecated"
visibility="public"
>
+<implements name="android.provider.ContactsContract.SettingsColumns">
+</implements>
<field name="CONTENT_ITEM_TYPE"
type="java.lang.String"
transient="false"
@@ -116601,6 +116603,91 @@
>
</field>
</class>
+<interface name="ContactsContract.SettingsColumns"
+ abstract="true"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="protected"
+>
+<field name="ACCOUNT_NAME"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;account_name&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="ACCOUNT_TYPE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;account_type&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="ANY_UNSYNCED"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;any_unsynced&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="SHOULD_SYNC"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;should_sync&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="UNGROUPED_COUNT"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;summ_count&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="UNGROUPED_VISIBLE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;ungrouped_visible&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="UNGROUPED_WITH_PHONES"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;summ_phones&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+</interface>
<interface name="ContactsContract.StatusColumns"
abstract="true"
static="true"
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/ContactsContract.java b/core/java/android/provider/ContactsContract.java
index 48e0cd3..7904401 100644
--- a/core/java/android/provider/ContactsContract.java
+++ b/core/java/android/provider/ContactsContract.java
@@ -2117,7 +2117,7 @@ public final class ContactsContract {
public static final String RAW_CONTACT_ID2 = "raw_contact_id2";
}
- private interface SettingsColumns {
+ protected interface SettingsColumns {
/**
* The name of the account instance to which this row belongs.
* <P>Type: TEXT</P>
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/jni/android_server_BluetoothEventLoop.cpp b/core/jni/android_server_BluetoothEventLoop.cpp
index 62a50e5..d2e9454 100644
--- a/core/jni/android_server_BluetoothEventLoop.cpp
+++ b/core/jni/android_server_BluetoothEventLoop.cpp
@@ -735,7 +735,6 @@ static DBusHandlerResult event_filter(DBusConnection *conn, DBusMessage *msg,
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
}
- // STOPSHIP: Change to LOGV
LOGE("%s: Received signal %s:%s from %s", __FUNCTION__,
dbus_message_get_interface(msg), dbus_message_get_member(msg),
dbus_message_get_path(msg));
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/data/sounds/AudioPackage3.mk b/data/sounds/AudioPackage3.mk
new file mode 100644
index 0000000..f2f6212
--- /dev/null
+++ b/data/sounds/AudioPackage3.mk
@@ -0,0 +1,92 @@
+#
+# Audio Package 2
+#
+# Include this file in a product makefile to include these audio files
+#
+# This is a larger package of sounds than the 1.0 release for devices
+# that have larger internal flash.
+#
+
+LOCAL_PATH:= frameworks/base/data/sounds
+
+PRODUCT_COPY_FILES += \
+ $(LOCAL_PATH)/F1_MissedCall.ogg:system/media/audio/notifications/F1_MissedCall.ogg \
+ $(LOCAL_PATH)/F1_New_MMS.ogg:system/media/audio/notifications/F1_New_MMS.ogg \
+ $(LOCAL_PATH)/F1_New_SMS.ogg:system/media/audio/notifications/F1_New_SMS.ogg \
+ $(LOCAL_PATH)/Alarm_Buzzer.ogg:system/media/audio/alarms/Alarm_Buzzer.ogg \
+ $(LOCAL_PATH)/Alarm_Beep_01.ogg:system/media/audio/alarms/Alarm_Beep_01.ogg \
+ $(LOCAL_PATH)/Alarm_Beep_02.ogg:system/media/audio/alarms/Alarm_Beep_02.ogg \
+ $(LOCAL_PATH)/Alarm_Classic.ogg:system/media/audio/alarms/Alarm_Classic.ogg \
+ $(LOCAL_PATH)/Alarm_Beep_03.ogg:system/media/audio/alarms/Alarm_Beep_03.ogg \
+ $(LOCAL_PATH)/Alarm_Rooster_02.ogg:system/media/audio/alarms/Alarm_Rooster_02.ogg \
+ $(LOCAL_PATH)/Ring_Classic_02.ogg:system/media/audio/ringtones/Ring_Classic_02.ogg \
+ $(LOCAL_PATH)/Ring_Digital_02.ogg:system/media/audio/ringtones/Ring_Digital_02.ogg \
+ $(LOCAL_PATH)/Ring_Synth_04.ogg:system/media/audio/ringtones/Ring_Synth_04.ogg \
+ $(LOCAL_PATH)/Ring_Synth_02.ogg:system/media/audio/ringtones/Ring_Synth_02.ogg \
+ $(LOCAL_PATH)/newwavelabs/BeatPlucker.ogg:system/media/audio/ringtones/BeatPlucker.ogg \
+ $(LOCAL_PATH)/newwavelabs/BentleyDubs.ogg:system/media/audio/ringtones/BentleyDubs.ogg \
+ $(LOCAL_PATH)/newwavelabs/BirdLoop.ogg:system/media/audio/ringtones/BirdLoop.ogg \
+ $(LOCAL_PATH)/newwavelabs/CurveBall.ogg:system/media/audio/ringtones/CurveBall.ogg \
+ $(LOCAL_PATH)/newwavelabs/EtherShake.ogg:system/media/audio/ringtones/EtherShake.ogg \
+ $(LOCAL_PATH)/newwavelabs/Growl.ogg:system/media/audio/ringtones/Growl.ogg \
+ $(LOCAL_PATH)/newwavelabs/LoopyLounge.ogg:system/media/audio/ringtones/LoopyLounge.ogg \
+ $(LOCAL_PATH)/newwavelabs/LoveFlute.ogg:system/media/audio/ringtones/LoveFlute.ogg \
+ $(LOCAL_PATH)/newwavelabs/MidEvilJaunt.ogg:system/media/audio/ringtones/MidEvilJaunt.ogg \
+ $(LOCAL_PATH)/newwavelabs/MildlyAlarming.ogg:system/media/audio/ringtones/MildlyAlarming.ogg \
+ $(LOCAL_PATH)/newwavelabs/NewPlayer.ogg:system/media/audio/ringtones/NewPlayer.ogg \
+ $(LOCAL_PATH)/newwavelabs/Noises1.ogg:system/media/audio/ringtones/Noises1.ogg \
+ $(LOCAL_PATH)/newwavelabs/Noises2.ogg:system/media/audio/ringtones/Noises2.ogg \
+ $(LOCAL_PATH)/newwavelabs/Noises3.ogg:system/media/audio/ringtones/Noises3.ogg \
+ $(LOCAL_PATH)/newwavelabs/OrganDub.ogg:system/media/audio/ringtones/OrganDub.ogg \
+ $(LOCAL_PATH)/newwavelabs/Terminated.ogg:system/media/audio/ringtones/Terminated.ogg \
+ $(LOCAL_PATH)/newwavelabs/TwirlAway.ogg:system/media/audio/ringtones/TwirlAway.ogg \
+ $(LOCAL_PATH)/newwavelabs/World.ogg:system/media/audio/ringtones/World.ogg \
+ $(LOCAL_PATH)/newwavelabs/CaffeineSnake.ogg:system/media/audio/notifications/CaffeineSnake.ogg \
+ $(LOCAL_PATH)/newwavelabs/DearDeer.ogg:system/media/audio/notifications/DearDeer.ogg \
+ $(LOCAL_PATH)/newwavelabs/DontPanic.ogg:system/media/audio/notifications/DontPanic.ogg \
+ $(LOCAL_PATH)/newwavelabs/Highwire.ogg:system/media/audio/notifications/Highwire.ogg \
+ $(LOCAL_PATH)/newwavelabs/KzurbSonar.ogg:system/media/audio/notifications/KzurbSonar.ogg \
+ $(LOCAL_PATH)/newwavelabs/OnTheHunt.ogg:system/media/audio/notifications/OnTheHunt.ogg \
+ $(LOCAL_PATH)/newwavelabs/Voila.ogg:system/media/audio/notifications/Voila.ogg \
+ $(LOCAL_PATH)/notifications/Beat_Box_Android.ogg:system/media/audio/notifications/Beat_Box_Android.ogg \
+ $(LOCAL_PATH)/notifications/Heaven.ogg:system/media/audio/notifications/Heaven.ogg \
+ $(LOCAL_PATH)/notifications/TaDa.ogg:system/media/audio/notifications/TaDa.ogg \
+ $(LOCAL_PATH)/notifications/Tinkerbell.ogg:system/media/audio/notifications/Tinkerbell.ogg \
+ $(LOCAL_PATH)/effects/Effect_Tick.ogg:system/media/audio/ui/Effect_Tick.ogg \
+ $(LOCAL_PATH)/effects/KeypressStandard.ogg:system/media/audio/ui/KeypressStandard.ogg \
+ $(LOCAL_PATH)/effects/KeypressSpacebar.ogg:system/media/audio/ui/KeypressSpacebar.ogg \
+ $(LOCAL_PATH)/effects/KeypressDelete.ogg:system/media/audio/ui/KeypressDelete.ogg \
+ $(LOCAL_PATH)/effects/KeypressReturn.ogg:system/media/audio/ui/KeypressReturn.ogg \
+ $(LOCAL_PATH)/effects/VideoRecord.ogg:system/media/audio/ui/VideoRecord.ogg \
+ $(LOCAL_PATH)/effects/camera_click.ogg:system/media/audio/ui/camera_click.ogg \
+ $(LOCAL_PATH)/newwavelabs/Big_Easy.ogg:system/media/audio/ringtones/Big_Easy.ogg \
+ $(LOCAL_PATH)/newwavelabs/Bollywood.ogg:system/media/audio/ringtones/Bollywood.ogg \
+ $(LOCAL_PATH)/newwavelabs/Cairo.ogg:system/media/audio/ringtones/Cairo.ogg \
+ $(LOCAL_PATH)/newwavelabs/Calypso_Steel.ogg:system/media/audio/ringtones/Calypso_Steel.ogg \
+ $(LOCAL_PATH)/newwavelabs/Champagne_Edition.ogg:system/media/audio/ringtones/Champagne_Edition.ogg \
+ $(LOCAL_PATH)/newwavelabs/Club_Cubano.ogg:system/media/audio/ringtones/Club_Cubano.ogg \
+ $(LOCAL_PATH)/newwavelabs/Eastern_Sky.ogg:system/media/audio/ringtones/Eastern_Sky.ogg \
+ $(LOCAL_PATH)/newwavelabs/Funk_Yall.ogg:system/media/audio/ringtones/Funk_Yall.ogg \
+ $(LOCAL_PATH)/newwavelabs/Savannah.ogg:system/media/audio/ringtones/Savannah.ogg \
+ $(LOCAL_PATH)/newwavelabs/Gimme_Mo_Town.ogg:system/media/audio/ringtones/Gimme_Mo_Town.ogg \
+ $(LOCAL_PATH)/newwavelabs/Glacial_Groove.ogg:system/media/audio/ringtones/Glacial_Groove.ogg \
+ $(LOCAL_PATH)/newwavelabs/Seville.ogg:system/media/audio/ringtones/Seville.ogg \
+ $(LOCAL_PATH)/newwavelabs/No_Limits.ogg:system/media/audio/ringtones/No_Limits.ogg \
+ $(LOCAL_PATH)/newwavelabs/Paradise_Island.ogg:system/media/audio/ringtones/Paradise_Island.ogg \
+ $(LOCAL_PATH)/newwavelabs/Road_Trip.ogg:system/media/audio/ringtones/Road_Trip.ogg \
+ $(LOCAL_PATH)/newwavelabs/Shes_All_That.ogg:system/media/audio/ringtones/Shes_All_That.ogg \
+ $(LOCAL_PATH)/newwavelabs/Steppin_Out.ogg:system/media/audio/ringtones/Steppin_Out.ogg \
+ $(LOCAL_PATH)/newwavelabs/Third_Eye.ogg:system/media/audio/ringtones/Third_Eye.ogg \
+ $(LOCAL_PATH)/newwavelabs/Thunderfoot.ogg:system/media/audio/ringtones/Thunderfoot.ogg \
+ $(LOCAL_PATH)/newwavelabs/HalfwayHome.ogg:system/media/audio/ringtones/HalfwayHome.ogg \
+ $(LOCAL_PATH)/newwavelabs/CrayonRock.ogg:system/media/audio/ringtones/CrayonRock.ogg \
+ $(LOCAL_PATH)/newwavelabs/DancinFool.ogg:system/media/audio/ringtones/DancinFool.ogg \
+ $(LOCAL_PATH)/newwavelabs/BussaMove.ogg:system/media/audio/ringtones/BussaMove.ogg \
+ $(LOCAL_PATH)/newwavelabs/DonMessWivIt.ogg:system/media/audio/ringtones/DonMessWivIt.ogg \
+ $(LOCAL_PATH)/newwavelabs/SilkyWay.ogg:system/media/audio/ringtones/SilkyWay.ogg \
+ $(LOCAL_PATH)/newwavelabs/Playa.ogg:system/media/audio/ringtones/Playa.ogg \
+ $(LOCAL_PATH)/notifications/moonbeam.ogg:system/media/audio/notifications/moonbeam.ogg \
+ $(LOCAL_PATH)/notifications/pixiedust.ogg:system/media/audio/notifications/pixiedust.ogg \
+ $(LOCAL_PATH)/notifications/pizzicato.ogg:system/media/audio/notifications/pizzicato.ogg \
+ $(LOCAL_PATH)/notifications/tweeters.ogg:system/media/audio/notifications/tweeters.ogg
+
diff --git a/data/sounds/newwavelabs/BussaMove.ogg b/data/sounds/newwavelabs/BussaMove.ogg
new file mode 100644
index 0000000..7c9f7b5
--- /dev/null
+++ b/data/sounds/newwavelabs/BussaMove.ogg
Binary files differ
diff --git a/data/sounds/newwavelabs/BussaMove.wav b/data/sounds/newwavelabs/BussaMove.wav
new file mode 100644
index 0000000..a82d62b
--- /dev/null
+++ b/data/sounds/newwavelabs/BussaMove.wav
Binary files differ
diff --git a/data/sounds/newwavelabs/CrayonRock.ogg b/data/sounds/newwavelabs/CrayonRock.ogg
new file mode 100644
index 0000000..6827aa5
--- /dev/null
+++ b/data/sounds/newwavelabs/CrayonRock.ogg
Binary files differ
diff --git a/data/sounds/newwavelabs/CrayonRock.wav b/data/sounds/newwavelabs/CrayonRock.wav
new file mode 100644
index 0000000..ce42f38
--- /dev/null
+++ b/data/sounds/newwavelabs/CrayonRock.wav
Binary files differ
diff --git a/data/sounds/newwavelabs/DancinFool.ogg b/data/sounds/newwavelabs/DancinFool.ogg
new file mode 100644
index 0000000..39e3b8a
--- /dev/null
+++ b/data/sounds/newwavelabs/DancinFool.ogg
Binary files differ
diff --git a/data/sounds/newwavelabs/DancinFool.wav b/data/sounds/newwavelabs/DancinFool.wav
new file mode 100644
index 0000000..f5ef13f
--- /dev/null
+++ b/data/sounds/newwavelabs/DancinFool.wav
Binary files differ
diff --git a/data/sounds/newwavelabs/DonMessWivIt.ogg b/data/sounds/newwavelabs/DonMessWivIt.ogg
new file mode 100644
index 0000000..5b14ba5
--- /dev/null
+++ b/data/sounds/newwavelabs/DonMessWivIt.ogg
Binary files differ
diff --git a/data/sounds/newwavelabs/DonMessWivIt.wav b/data/sounds/newwavelabs/DonMessWivIt.wav
new file mode 100644
index 0000000..7d9e8af
--- /dev/null
+++ b/data/sounds/newwavelabs/DonMessWivIt.wav
Binary files differ
diff --git a/data/sounds/newwavelabs/HalfwayHome.ogg b/data/sounds/newwavelabs/HalfwayHome.ogg
new file mode 100644
index 0000000..4ece7ca
--- /dev/null
+++ b/data/sounds/newwavelabs/HalfwayHome.ogg
Binary files differ
diff --git a/data/sounds/newwavelabs/HalfwayHome.wav b/data/sounds/newwavelabs/HalfwayHome.wav
new file mode 100644
index 0000000..00dbacc
--- /dev/null
+++ b/data/sounds/newwavelabs/HalfwayHome.wav
Binary files differ
diff --git a/data/sounds/newwavelabs/Playa.ogg b/data/sounds/newwavelabs/Playa.ogg
new file mode 100644
index 0000000..747b699
--- /dev/null
+++ b/data/sounds/newwavelabs/Playa.ogg
Binary files differ
diff --git a/data/sounds/newwavelabs/Playa.wav b/data/sounds/newwavelabs/Playa.wav
new file mode 100644
index 0000000..6586613
--- /dev/null
+++ b/data/sounds/newwavelabs/Playa.wav
Binary files differ
diff --git a/data/sounds/newwavelabs/SilkyWay.ogg b/data/sounds/newwavelabs/SilkyWay.ogg
new file mode 100644
index 0000000..e5a38ec
--- /dev/null
+++ b/data/sounds/newwavelabs/SilkyWay.ogg
Binary files differ
diff --git a/data/sounds/newwavelabs/SilkyWay.wav b/data/sounds/newwavelabs/SilkyWay.wav
new file mode 100644
index 0000000..6becaac
--- /dev/null
+++ b/data/sounds/newwavelabs/SilkyWay.wav
Binary files differ
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>&lt;sdk_dir>/</em>platforms/</code> directory of your SDK;
-new add-ons are saved in the <code><em>&lt;sdk_dir>/</em>add-ons/</code>
-directory; and new documentation is saved in the existing
-<code><em>&lt;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/guide/tutorials/localization/index.jd b/docs/html/guide/tutorials/localization/index.jd
index 19f9eb3..d31eb10 100755
--- a/docs/html/guide/tutorials/localization/index.jd
+++ b/docs/html/guide/tutorials/localization/index.jd
@@ -76,7 +76,7 @@ subdirectories for the three most common types of resources: graphics
(<code>res/values/</code>). Most of the localization work you do later in this
tutorial will involve adding more subdirectories to the <code>res/</code>
directory.</p>
- <img src="../../../images/hello_l10n/plain_project.png" alt="plain project" width="194"
+ <img src="{@docRoot}images/hello_l10n/plain_project.png" alt="plain project" width="194"
height="229">
</li>
<li>Open the <code>res/layout/main.xml</code> file and replace it with the
@@ -192,7 +192,7 @@ within <code>res/values/strings.xml</code>. </li>
<p>The project structure now looks like this:</p>
- <img src="../../../images/hello_l10n/nonlocalized_project.png" alt="nonlocalized" width="394"
+ <img src="{@docRoot}images/hello_l10n/nonlocalized_project.png" alt="nonlocalized" width="394"
height="320">
<p class="note"><strong>Tip:</strong> If you will want to run the application on
@@ -215,9 +215,9 @@ should look something like this:</p>
<th scope="col">After clicking the flag, in any locale:</th>
</tr>
<tr>
- <td valign="top"><img src="../../../images/hello_l10n/nonlocalized_screenshot1.png"
+ <td valign="top"><img src="{@docRoot}images/hello_l10n/nonlocalized_screenshot1.png"
alt="nonlocalized" width="321" height="366"></td>
- <td><img src="../../../images/hello_l10n/nonlocalized_screenshot2.png" alt="nonlocalized2"
+ <td><img src="{@docRoot}images/hello_l10n/nonlocalized_screenshot2.png" alt="nonlocalized2"
width="321" height="366"></td>
</tr>
</table>
@@ -400,29 +400,34 @@ is not Germany. </li>
<h3 id="localize_strings">Localize the Strings</h3>
-<p>The application requires three more <code>strings.xml</code> files, one each
-for German, French, and Japanese. In this example, we will start by copying
-<code>res/values/strings.xml</code> into new
-<code>res/values-<em>&lt;qualifier&gt;</em>/strings.xml</code> files.</p>
-
-<p>Under the <code>res/</code> directory, create the three new directories and
-copy <code>res/values/strings.xml</code> into each of them. For example, using
-Eclipse you could do it like this:</p>
+<p>The application requires three more <code>strings.xml</code> files, one
+each for German, French, and Japanese. To create these resource files within
+Eclipse:</p>
<ol>
- <li>Right-click the <code>res/values/</code> folder and select Copy.</li>
- <li>Right-click on the <code>res/</code> folder and select Paste. Rename the
-folder <code>values-de </code>and click OK.<br>
- <img src="../../../images/hello_l10n/copy_res_files.png" alt="res_file_copy" width="557"
-height="181" style="margin:15px"></li>
- <li>Repeat steps 1 and 2 two more times, for <code>values-fr</code>, and
-<code>values-ja</code>. Now the project includes these new files, all still
-containing British English text strings: <br />
+<li>Select <strong>File</strong> &gt; <strong>New</strong> &gt; <strong>Android
+XML File</strong> to open the New Android XML File wizard. You can also open
+the wizard by clicking its icon in the toolbar:<br />
+<img src="{@docRoot}images/hello_l10n/xml_file_wizard_shortcut.png"
+alt="file_wizard_shortcut" width="297"
+height="90" style="margin:15px"></li>
+ <li>Select L10N for the Project field, and type <code>strings.xml</code> into
+the File field. In the left-hand list, select Language, then click the right arrow.<br>
+<img src="{@docRoot}images/hello_l10n/xml_wizard1.png" alt="res_file_copy" width="335"
+height="406" style="margin:15px"></li>
+ <li>Type <code>de</code> in the Language box and click Finish.<br>
+ <img src="{@docRoot}images/hello_l10n/xml_wizard2.png" alt="res_file_copy" width="306"
+height="179">
+<p>A new file, <code>res/values-de/strings.xml</code>, now appears among the project
+files.</p></li>
+<li>Repeat the steps twice more, for the language codes <code>fr</code> and
+ <code>ja</code>.
+Now the project includes these new skeleton files: <br />
<code>res/<strong>values-de</strong>/strings.xml</code><br />
<code>res/<strong>values-fr</strong>/strings.xml</code><br />
<code>res/<strong>values-ja</strong>/strings.xml</code><br />
</li>
- <li>Replace the strings in the three new files with localized text. To do
+ <li>Add localized text to the new files. To do
this, open the <code>res/values-<em>&lt;qualifier&gt;</em>/strings.xml</code> files and
replace the code as follows:</li>
</ol>
@@ -526,12 +531,12 @@ available in the Android system image. </p>
use the Custom Locale application, which is available in the Application
tab:</p>
-<p><img src="../../../images/hello_l10n/custom_locale_app.png" alt="custom locale app" width="163"
+<p><img src="{@docRoot}images/hello_l10n/custom_locale_app.png" alt="custom locale app" width="163"
height="158" style="margin-left:15px"></p>
<p>To switch to a new locale, long-press a locale name:</p>
-<p><img src="../../../images/hello_l10n/using_custom_locale.png" alt="using custom locale"
+<p><img src="{@docRoot}images/hello_l10n/using_custom_locale.png" alt="using custom locale"
width="512" height="299" style="margin-left:15px"></p>
<p>For a list of supported locales, see the
@@ -549,14 +554,14 @@ locale. Here are some of the results you should see:</p>
<tr>
<td>German / Germany
<br />Specifically supported by the Hello, L10N application.</td>
- <td><img src="../../../images/hello_l10n/german_screenshot.png" alt="custom locale app"
+ <td><img src="{@docRoot}images/hello_l10n/german_screenshot.png" alt="custom locale app"
width="321" height="175" align="right"
style="margin-left:10px;margin-right:20px"></td>
</tr>
<tr>
<td>French / Canada
<br />Specifically supported by the Hello, L10N application.</td>
- <td><img src="../../../images/hello_l10n/frenchCA_screenshot.png" alt="custom locale app"
+ <td><img src="{@docRoot}images/hello_l10n/frenchCA_screenshot.png" alt="custom locale app"
width="321" height="175" align="right"
style="margin-left:10px;margin-right:20px"></td>
</tr>
@@ -564,7 +569,7 @@ style="margin-left:10px;margin-right:20px"></td>
<td>German / Switzerland
<br />Only the language is specifically supported by
the Hello, L10N application.</td>
- <td><img src="../../../images/hello_l10n/germanCH_screenshot.png" alt="custom locale app"
+ <td><img src="{@docRoot}images/hello_l10n/germanCH_screenshot.png" alt="custom locale app"
width="321" height="175" align="right"
style="margin-left:10px;margin-right:20px">`</td>
</tr>
@@ -572,7 +577,7 @@ style="margin-left:10px;margin-right:20px">`</td>
<td>Japanese
<br />Specifically supported by the Hello, L10N application.
</td>
- <td><img src="../../../images/hello_l10n/japanese_screenshot.png" alt="custom locale app"
+ <td><img src="{@docRoot}images/hello_l10n/japanese_screenshot.png" alt="custom locale app"
width="321" height="220" align="right"
style="margin-left:10px;margin-right:20px">`</td>
</tr>
@@ -580,7 +585,7 @@ style="margin-left:10px;margin-right:20px">`</td>
<td>Romansh / Switzerland (custom locale <code>rm_CH</code>)
<br />Not specifically supported by the Hello, L10N
application, so the application uses the default resources.</td>
- <td><img src="../../../images/hello_l10n/romanshCH_screenshot.png" alt="custom locale app"
+ <td><img src="{@docRoot}images/hello_l10n/romanshCH_screenshot.png" alt="custom locale app"
width="321" height="175" align="right"
style="margin-left:10px;margin-right:20px"></td>
</tr>
diff --git a/docs/html/images/hello_l10n/xml_file_wizard_shortcut.png b/docs/html/images/hello_l10n/xml_file_wizard_shortcut.png
new file mode 100755
index 0000000..f72554d
--- /dev/null
+++ b/docs/html/images/hello_l10n/xml_file_wizard_shortcut.png
Binary files differ
diff --git a/docs/html/images/hello_l10n/xml_wizard1.png b/docs/html/images/hello_l10n/xml_wizard1.png
new file mode 100755
index 0000000..35dc09f
--- /dev/null
+++ b/docs/html/images/hello_l10n/xml_wizard1.png
Binary files differ
diff --git a/docs/html/images/hello_l10n/xml_wizard2.png b/docs/html/images/hello_l10n/xml_wizard2.png
new file mode 100755
index 0000000..6bcd28b
--- /dev/null
+++ b/docs/html/images/hello_l10n/xml_wizard2.png
Binary files differ
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 &mdash; the recommended path if you are new to
+Android &mdash; 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>&lt;platform</em>&gt;_<em>&lt;release&gt;</em></code>. </p>
+
+<p>Make a note of the name and location of the unpacked SDK directory on your system &mdash; 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>&lt;your_sdk_dir&gt;</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&mdash;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> &gt; <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> &gt; <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> &gt; <strong>Preferences...</strong> to open the Preferences
+ panel (Mac OS X: <strong>Eclipse</strong> &gt; <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>&lt;platform&gt;/</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;">&nbsp;</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>) &gt;
+<strong>Preferences</strong> &gt; <strong>General</strong> &gt; <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>&lt;sdk&gt;</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 &mdash;
+features, applications included, localizations, API changes, and so on &mdash;
+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%">&nbsp;</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>&lt;sdk&gt;</em>/platforms/<em>&lt;platform&gt;</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>&lt;sdk&gt;</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> &gt;<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>&lt;sdk>/</em>platforms/</code> directory of your SDK;
+new add-ons are saved in the <code><em>&lt;sdk>/</em>add-ons/</code>
+directory; and new documentation is saved in the existing
+<code><em>&lt;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> &gt; <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> &gt; <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/include/private/ui/RegionHelper.h b/include/private/ui/RegionHelper.h
index 926fddb..8d76533 100644
--- a/include/private/ui/RegionHelper.h
+++ b/include/private/ui/RegionHelper.h
@@ -86,7 +86,7 @@ public:
rasterizer(current);
}
}
- } while(!spannerInner.isDone());
+ } while(!spannerInner.isDone());
} while(!spanner.isDone());
}
@@ -220,18 +220,21 @@ private:
}
inline void prepare(int inside) {
- SpannerBase::lhs_head = lhs.rects->left + lhs.dx;
- SpannerBase::lhs_tail = lhs.rects->right + lhs.dx;
- SpannerBase::rhs_head = rhs.rects->left + rhs.dx;
- SpannerBase::rhs_tail = rhs.rects->right + rhs.dx;
if (inside == SpannerBase::lhs_before_rhs) {
+ SpannerBase::lhs_head = lhs.rects->left + lhs.dx;
+ SpannerBase::lhs_tail = lhs.rects->right + lhs.dx;
SpannerBase::rhs_head = max_value;
SpannerBase::rhs_tail = max_value;
} else if (inside == SpannerBase::lhs_after_rhs) {
SpannerBase::lhs_head = max_value;
SpannerBase::lhs_tail = max_value;
+ SpannerBase::rhs_head = rhs.rects->left + rhs.dx;
+ SpannerBase::rhs_tail = rhs.rects->right + rhs.dx;
} else {
- // use both spans
+ SpannerBase::lhs_head = lhs.rects->left + lhs.dx;
+ SpannerBase::lhs_tail = lhs.rects->right + lhs.dx;
+ SpannerBase::rhs_head = rhs.rects->left + rhs.dx;
+ SpannerBase::rhs_tail = rhs.rects->right + rhs.dx;
}
}
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/libs/ui/tests/region.cpp b/libs/ui/tests/region.cpp
index 0deb2ba..ef15de9 100644
--- a/libs/ui/tests/region.cpp
+++ b/libs/ui/tests/region.cpp
@@ -25,9 +25,16 @@ using namespace android;
int main()
{
+ Region empty;
Region reg0( Rect( 0, 0, 100, 100 ) );
Region reg1 = reg0;
Region reg2, reg3;
+
+ Region reg4 = empty | reg1;
+ Region reg5 = reg1 | empty;
+
+ reg4.dump("reg4");
+ reg5.dump("reg5");
reg0.dump("reg0");
reg1.dump("reg1");
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/KeyInputQueue.java b/services/java/com/android/server/KeyInputQueue.java
index 09591f4..5d65c71 100644
--- a/services/java/com/android/server/KeyInputQueue.java
+++ b/services/java/com/android/server/KeyInputQueue.java
@@ -721,11 +721,14 @@ public abstract class KeyInputQueue {
// virtual key area... but still
// propagate this to the previous
// data for comparisons.
+ int num = ms.mNextNumPointers;
+ if (num > InputDevice.MAX_POINTERS) {
+ num = InputDevice.MAX_POINTERS;
+ }
System.arraycopy(ms.mNextData, 0,
ms.mLastData, 0,
- ms.mNextNumPointers
- * MotionEvent.NUM_SAMPLE_DATA);
- ms.mLastNumPointers = ms.mNextNumPointers;
+ num * MotionEvent.NUM_SAMPLE_DATA);
+ ms.mLastNumPointers = num;
}
ms.finish();
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 = {