summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/animation/AnimatorSet.java7
-rw-r--r--core/java/android/animation/ObjectAnimator.java7
-rwxr-xr-xcore/java/android/animation/ValueAnimator.java7
-rw-r--r--core/java/android/animation/package.html10
-rw-r--r--core/java/android/app/SearchManager.java9
-rw-r--r--core/java/android/app/admin/DeviceAdminReceiver.java7
-rw-r--r--core/java/android/app/admin/DevicePolicyManager.java7
-rw-r--r--core/java/android/app/admin/package.html5
-rw-r--r--core/java/android/appwidget/AppWidgetManager.java6
-rwxr-xr-xcore/java/android/appwidget/AppWidgetProvider.java9
-rw-r--r--core/java/android/appwidget/package.html11
-rw-r--r--core/java/android/bluetooth/BluetoothAdapter.java6
-rw-r--r--core/java/android/bluetooth/BluetoothDevice.java6
-rw-r--r--core/java/android/bluetooth/BluetoothServerSocket.java6
-rw-r--r--core/java/android/bluetooth/BluetoothSocket.java6
-rw-r--r--core/java/android/bluetooth/package.html5
-rw-r--r--core/java/android/content/ClipData.java7
-rw-r--r--core/java/android/content/ClipDescription.java7
-rw-r--r--core/java/android/content/ClipboardManager.java7
-rw-r--r--core/java/android/content/SearchRecentSuggestionsProvider.java6
-rw-r--r--core/java/android/hardware/usb/UsbAccessory.java6
-rw-r--r--core/java/android/hardware/usb/UsbDevice.java6
-rw-r--r--core/java/android/hardware/usb/UsbInterface.java6
-rw-r--r--core/java/android/hardware/usb/UsbManager.java9
-rw-r--r--core/java/android/hardware/usb/package.html15
-rw-r--r--core/java/android/nfc/NfcAdapter.java6
-rw-r--r--core/java/android/nfc/NfcManager.java6
-rw-r--r--core/java/android/nfc/package.html9
-rw-r--r--core/java/android/provider/SearchRecentSuggestions.java7
-rw-r--r--core/java/android/provider/Settings.java15
-rw-r--r--core/java/android/test/package.html7
-rw-r--r--core/java/android/webkit/BrowserFrame.java7
-rw-r--r--core/java/android/widget/SearchView.java9
-rw-r--r--docs/html/guide/developing/debugging/debugging-log.jd13
-rw-r--r--docs/html/guide/developing/device.jd4
-rw-r--r--docs/html/guide/developing/tools/adb.jd6
-rw-r--r--docs/html/guide/topics/appwidgets/index.jd56
-rw-r--r--docs/html/index.jd2
-rw-r--r--docs/html/resources/dashboard/opengl.jd8
-rw-r--r--docs/html/resources/dashboard/platform-versions.jd28
-rw-r--r--docs/html/sdk/oem-usb.jd17
-rw-r--r--docs/html/sdk/win-usb.jd36
-rw-r--r--graphics/java/android/graphics/drawable/AnimationDrawable.java9
-rw-r--r--graphics/java/android/renderscript/Allocation.java5
-rw-r--r--graphics/java/android/renderscript/Element.java6
-rw-r--r--graphics/java/android/renderscript/RSSurfaceView.java6
-rw-r--r--graphics/java/android/renderscript/RenderScript.java9
-rw-r--r--graphics/java/android/renderscript/RenderScriptGL.java8
-rw-r--r--graphics/java/android/renderscript/Type.java5
-rw-r--r--graphics/java/android/renderscript/package.html23
-rw-r--r--location/java/android/location/LocationListener.java7
-rw-r--r--location/java/android/location/LocationManager.java7
-rw-r--r--location/java/android/location/package.html6
-rw-r--r--services/audioflinger/AudioFlinger.cpp10
-rw-r--r--services/audioflinger/AudioMixer.cpp17
-rw-r--r--services/audioflinger/AudioMixer.h3
-rw-r--r--services/audioflinger/AudioResampler.h1
-rw-r--r--telephony/java/com/android/internal/telephony/DataConnectionTracker.java9
-rw-r--r--telephony/java/com/android/internal/telephony/cat/AppInterface.java7
-rw-r--r--telephony/java/com/android/internal/telephony/cat/CatCmdMessage.java7
-rw-r--r--telephony/java/com/android/internal/telephony/cat/CatService.java77
-rw-r--r--telephony/java/com/android/internal/telephony/cat/CommandParams.java25
-rw-r--r--telephony/java/com/android/internal/telephony/cat/CommandParamsFactory.java45
-rw-r--r--telephony/java/com/android/internal/telephony/cdma/CdmaDataConnectionTracker.java29
-rw-r--r--telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java63
-rw-r--r--test-runner/src/android/test/ActivityInstrumentationTestCase2.java6
-rw-r--r--test-runner/src/android/test/InstrumentationTestRunner.java10
-rw-r--r--test-runner/src/android/test/ServiceTestCase.java6
-rw-r--r--test-runner/src/android/test/mock/MockContentResolver.java6
-rw-r--r--test-runner/src/android/test/mock/package.html7
-rw-r--r--voip/java/android/net/sip/SipAudioCall.java9
-rw-r--r--voip/java/android/net/sip/SipManager.java9
-rw-r--r--voip/java/android/net/sip/SipProfile.java7
-rw-r--r--voip/java/android/net/sip/package.html8
74 files changed, 696 insertions, 175 deletions
diff --git a/core/java/android/animation/AnimatorSet.java b/core/java/android/animation/AnimatorSet.java
index 0b68dd86b6c7..c5a4171687a1 100644
--- a/core/java/android/animation/AnimatorSet.java
+++ b/core/java/android/animation/AnimatorSet.java
@@ -39,6 +39,13 @@ import java.util.List;
* result in none of the affected animations being played. Because of this (and because
* circular dependencies do not make logical sense anyway), circular dependencies
* should be avoided, and the dependency flow of animations should only be in one direction.
+ *
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For more information about animating with {@code AnimatorSet}, read the
+ * <a href="{@docRoot}guide/topics/graphics/prop-animation.html#choreography">Property
+ * Animation</a> developer guide.</p>
+ * </div>
*/
public final class AnimatorSet extends Animator {
diff --git a/core/java/android/animation/ObjectAnimator.java b/core/java/android/animation/ObjectAnimator.java
index d2d66b662ba6..0372cb0d9cbe 100644
--- a/core/java/android/animation/ObjectAnimator.java
+++ b/core/java/android/animation/ObjectAnimator.java
@@ -29,6 +29,13 @@ import java.util.ArrayList;
* are then determined internally and the animation will call these functions as necessary to
* animate the property.
*
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For more information about animating with {@code ObjectAnimator}, read the
+ * <a href="{@docRoot}guide/topics/graphics/prop-animation.html#object-animator">Property
+ * Animation</a> developer guide.</p>
+ * </div>
+ *
* @see #setPropertyName(String)
*
*/
diff --git a/core/java/android/animation/ValueAnimator.java b/core/java/android/animation/ValueAnimator.java
index edd0fa339256..55e95b022501 100755
--- a/core/java/android/animation/ValueAnimator.java
+++ b/core/java/android/animation/ValueAnimator.java
@@ -38,6 +38,13 @@ import java.util.HashMap;
* {@link AccelerateDecelerateInterpolator} class, which accelerates into and decelerates
* out of an animation. This behavior can be changed by calling
* {@link ValueAnimator#setInterpolator(TimeInterpolator)}.</p>
+ *
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For more information about animating with {@code ValueAnimator}, read the
+ * <a href="{@docRoot}guide/topics/graphics/prop-animation.html#value-animator">Property
+ * Animation</a> developer guide.</p>
+ * </div>
*/
public class ValueAnimator extends Animator {
diff --git a/core/java/android/animation/package.html b/core/java/android/animation/package.html
index 92eeb20c96be..59178f7101fc 100644
--- a/core/java/android/animation/package.html
+++ b/core/java/android/animation/package.html
@@ -7,15 +7,15 @@ color values are supported by default. You can animate any other type by telling
to calculate the values for that given type with a custom {@link android.animation.TypeEvaluator}.
</p>
+<p>For more information, see the
+<a href="{@docRoot}guide/topics/graphics/animation.html">Animation</a> developer guide.</p>
+{@more}
+
<p>
You can set many different types of interpolators (contained in {@link android.view.animation}),
specify {@link android.animation.Keyframe keyframes}, or group animations to play sequentially
or simultaneously (with {@link android.animation.AnimatorSet}) to further control your animation
behaviors.</p>
-<p>
-For a guide on how to use the property animation system, see the
-<a href="{@docRoot}guide/topics/graphics/animation.html">Animation</a> developer guide.
-</p>
</body>
-</html>
+</html> \ No newline at end of file
diff --git a/core/java/android/app/SearchManager.java b/core/java/android/app/SearchManager.java
index 3aa159e71078..2ff45fb5ab1d 100644
--- a/core/java/android/app/SearchManager.java
+++ b/core/java/android/app/SearchManager.java
@@ -48,10 +48,11 @@ import java.util.List;
* {@link android.content.Context#getSystemService
* context.getSystemService(Context.SEARCH_SERVICE)}.
*
- * <div class="special">
- * <p>For a guide to using the search dialog and adding search
- * suggestions in your application, see the Dev Guide topic about <strong><a
- * href="{@docRoot}guide/topics/search/index.html">Search</a></strong>.</p>
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For more information about using the search dialog and adding search
+ * suggestions in your application, read the
+ * <a href="{@docRoot}guide/topics/search/index.html">Search</a> developer guide.</p>
* </div>
*/
public class SearchManager
diff --git a/core/java/android/app/admin/DeviceAdminReceiver.java b/core/java/android/app/admin/DeviceAdminReceiver.java
index 473aec60da84..43cd330c7dd4 100644
--- a/core/java/android/app/admin/DeviceAdminReceiver.java
+++ b/core/java/android/app/admin/DeviceAdminReceiver.java
@@ -49,6 +49,13 @@ import android.os.Bundle;
* A typical file would be:</p>
*
* {@sample development/samples/ApiDemos/res/xml/device_admin_sample.xml meta_data}
+ *
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For more information about device administration, read the
+ * <a href="{@docRoot}guide/topics/admin/device-admin.html">Device Administration</a>
+ * developer guide.</p>
+ * </div>
*/
public class DeviceAdminReceiver extends BroadcastReceiver {
private static String TAG = "DevicePolicy";
diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java
index c89396bc13e8..4ed07668160f 100644
--- a/core/java/android/app/admin/DevicePolicyManager.java
+++ b/core/java/android/app/admin/DevicePolicyManager.java
@@ -40,6 +40,13 @@ import java.util.List;
* Public interface for managing policies enforced on a device. Most clients
* of this class must have published a {@link DeviceAdminReceiver} that the user
* has currently enabled.
+ *
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For more information about managing policies for device adminstration, read the
+ * <a href="{@docRoot}guide/topics/admin/device-admin.html">Device Administration</a>
+ * developer guide.</p>
+ * </div>
*/
public class DevicePolicyManager {
private static String TAG = "DevicePolicyManager";
diff --git a/core/java/android/app/admin/package.html b/core/java/android/app/admin/package.html
index 1a81083919be..c363c253d9fe 100644
--- a/core/java/android/app/admin/package.html
+++ b/core/java/android/app/admin/package.html
@@ -4,8 +4,9 @@
security-aware applications that are useful in enterprise settings, in which IT professionals
require rich control over employee devices.</p>
-<p>For more information, see the <a
-href="{@docRoot}guide/topics/admin/device-admin.html">Device Administration</a> developer guide.</p>
+<p>For more information, see the
+<a href="{@docRoot}guide/topics/admin/device-admin.html">Device Administration</a>
+developer guide.</p>
{@more}
</BODY>
diff --git a/core/java/android/appwidget/AppWidgetManager.java b/core/java/android/appwidget/AppWidgetManager.java
index 09661a59334c..a7f77921c027 100644
--- a/core/java/android/appwidget/AppWidgetManager.java
+++ b/core/java/android/appwidget/AppWidgetManager.java
@@ -35,6 +35,12 @@ import java.util.WeakHashMap;
/**
* Updates AppWidget state; gets information about installed AppWidget providers and other
* AppWidget related state.
+ *
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For more information about creating app widgets, read the
+ * <a href="{@docRoot}guide/topics/appwidgets/index.html">App Widgets</a> developer guide.</p>
+ * </div>
*/
public class AppWidgetManager {
static final String TAG = "AppWidgetManager";
diff --git a/core/java/android/appwidget/AppWidgetProvider.java b/core/java/android/appwidget/AppWidgetProvider.java
index f1bbedef9024..00a5f0c78d02 100755
--- a/core/java/android/appwidget/AppWidgetProvider.java
+++ b/core/java/android/appwidget/AppWidgetProvider.java
@@ -31,8 +31,13 @@ import android.os.Bundle;
* <p>Extend this class and override one or more of the {@link #onUpdate}, {@link #onDeleted},
* {@link #onEnabled} or {@link #onDisabled} methods to implement your own AppWidget functionality.
* </p>
- * <p>For an example of how to write a AppWidget provider, see the
- * <a href="{@docRoot}guide/topics/appwidgets/index.html#Providers">AppWidgets</a> documentation.</p>
+ *
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For more information about how to write an app widget provider, read the
+ * <a href="{@docRoot}guide/topics/appwidgets/index.html#AppWidgetProvider">App Widgets</a>
+ * developer guide.</p>
+ * </div>
*/
public class AppWidgetProvider extends BroadcastReceiver {
/**
diff --git a/core/java/android/appwidget/package.html b/core/java/android/appwidget/package.html
index 19fd2f75400d..aa72da286fea 100644
--- a/core/java/android/appwidget/package.html
+++ b/core/java/android/appwidget/package.html
@@ -2,11 +2,11 @@
<p>Contains the components necessary to create "app widgets", which users can embed in other
applications (such as the home screen) to quickly access application data and services without
launching a new activity.</p>
-<p>For more information, see the
-<a href="{@docRoot}guide/topics/appwidgets/index.html">App Widgets</a>
-developer guide.</p>
+<p>For more information, see the
+<a href="{@docRoot}guide/topics/appwidgets/index.html">App Widgets</a> developer guide.</p>
{@more}
+
<p>The behavior of an app widget is published by an "app widget provider." An "app widget host" is
a component that can contain app widgets (such as the Home screen).</p>
@@ -24,9 +24,8 @@ details are left up to the widget hosts. For example, the home screen has one w
widgets, but the lock screen could also contain widgets, and it would have a different way of
adding, removing and otherwise managing widgets.</p>
-<p>The <a href="{@docRoot}guide/topics/appwidgets/index.html">App Widgets</a>
-developer guide shows you how to create an app widget provider. For information about implementing
-an app widget host, see the {@link android.appwidget.AppWidgetHost} class.</p>
+<p>For information about implementing an app widget host, see the {@link
+android.appwidget.AppWidgetHost} class.</p>
</body>
diff --git a/core/java/android/bluetooth/BluetoothAdapter.java b/core/java/android/bluetooth/BluetoothAdapter.java
index 5f5ba5041333..899816c4e1af 100644
--- a/core/java/android/bluetooth/BluetoothAdapter.java
+++ b/core/java/android/bluetooth/BluetoothAdapter.java
@@ -62,6 +62,12 @@ import java.util.UUID;
* permission and some also require the
* {@link android.Manifest.permission#BLUETOOTH_ADMIN} permission.
*
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For more information about using Bluetooth, read the
+ * <a href="{@docRoot}guide/topics/wireless/bluetooth.html">Bluetooth</a> developer guide.</p>
+ * </div>
+ *
* {@see BluetoothDevice}
* {@see BluetoothServerSocket}
*/
diff --git a/core/java/android/bluetooth/BluetoothDevice.java b/core/java/android/bluetooth/BluetoothDevice.java
index 03065218ee92..189e8fc24a66 100644
--- a/core/java/android/bluetooth/BluetoothDevice.java
+++ b/core/java/android/bluetooth/BluetoothDevice.java
@@ -54,6 +54,12 @@ import java.util.UUID;
* <p class="note"><strong>Note:</strong>
* Requires the {@link android.Manifest.permission#BLUETOOTH} permission.
*
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For more information about using Bluetooth, read the
+ * <a href="{@docRoot}guide/topics/wireless/bluetooth.html">Bluetooth</a> developer guide.</p>
+ * </div>
+ *
* {@see BluetoothAdapter}
* {@see BluetoothSocket}
*/
diff --git a/core/java/android/bluetooth/BluetoothServerSocket.java b/core/java/android/bluetooth/BluetoothServerSocket.java
index acce182189dc..4021f7b61aff 100644
--- a/core/java/android/bluetooth/BluetoothServerSocket.java
+++ b/core/java/android/bluetooth/BluetoothServerSocket.java
@@ -55,6 +55,12 @@ import java.io.IOException;
* <p class="note"><strong>Note:</strong>
* Requires the {@link android.Manifest.permission#BLUETOOTH} permission.
*
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For more information about using Bluetooth, read the
+ * <a href="{@docRoot}guide/topics/wireless/bluetooth.html">Bluetooth</a> developer guide.</p>
+ * </div>
+ *
* {@see BluetoothSocket}
*/
public final class BluetoothServerSocket implements Closeable {
diff --git a/core/java/android/bluetooth/BluetoothSocket.java b/core/java/android/bluetooth/BluetoothSocket.java
index 9a13c3eb070e..19d13ef34552 100644
--- a/core/java/android/bluetooth/BluetoothSocket.java
+++ b/core/java/android/bluetooth/BluetoothSocket.java
@@ -65,6 +65,12 @@ import java.util.concurrent.locks.ReentrantReadWriteLock;
* <p class="note"><strong>Note:</strong>
* Requires the {@link android.Manifest.permission#BLUETOOTH} permission.
*
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For more information about using Bluetooth, read the
+ * <a href="{@docRoot}guide/topics/wireless/bluetooth.html">Bluetooth</a> developer guide.</p>
+ * </div>
+ *
* {@see BluetoothServerSocket}
* {@see java.io.InputStream}
* {@see java.io.OutputStream}
diff --git a/core/java/android/bluetooth/package.html b/core/java/android/bluetooth/package.html
index 37505fd40479..81bf1cfe5d29 100644
--- a/core/java/android/bluetooth/package.html
+++ b/core/java/android/bluetooth/package.html
@@ -3,8 +3,8 @@
<p>Provides classes that manage Bluetooth functionality, such as scanning for
devices, connecting with devices, and managing data transfer between devices.</p>
-<p>For more information, see the <a
-href="{@docRoot}guide/topics/wireless/bluetooth.html">Bluetooth</a> developer guide.</p>
+<p>For more information, see the
+<a href="{@docRoot}guide/topics/wireless/bluetooth.html">Bluetooth</a> developer guide.</p>
{@more}
<p>The Bluetooth APIs let applications:</p>
@@ -26,5 +26,6 @@ permission.
<p class="note"><strong>Note:</strong>
Not all Android-powered devices provide Bluetooth functionality.</p>
+
</BODY>
</HTML>
diff --git a/core/java/android/content/ClipData.java b/core/java/android/content/ClipData.java
index d9c6b0748f31..a8b1bf47d624 100644
--- a/core/java/android/content/ClipData.java
+++ b/core/java/android/content/ClipData.java
@@ -50,6 +50,13 @@ import java.util.ArrayList;
* CharSequence of text, a single Intent object, or a Uri. See {@link Item}
* for more details.
*
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For more information about using the clipboard framework, read the
+ * <a href="{@docRoot}guide/topics/clipboard/copy-paste.html">Copy and Paste</a>
+ * developer guide.</p>
+ * </div>
+ *
* <a name="ImplementingPaste"></a>
* <h3>Implementing Paste or Drop</h3>
*
diff --git a/core/java/android/content/ClipDescription.java b/core/java/android/content/ClipDescription.java
index 0d9d8070be09..b5fa20cda7ff 100644
--- a/core/java/android/content/ClipDescription.java
+++ b/core/java/android/content/ClipDescription.java
@@ -26,6 +26,13 @@ import java.util.ArrayList;
* Meta-data describing the contents of a {@link ClipData}. Provides enough
* information to know if you can handle the ClipData, but not the data
* itself.
+ *
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For more information about using the clipboard framework, read the
+ * <a href="{@docRoot}guide/topics/clipboard/copy-paste.html">Copy and Paste</a>
+ * developer guide.</p>
+ * </div>
*/
public class ClipDescription implements Parcelable {
/**
diff --git a/core/java/android/content/ClipboardManager.java b/core/java/android/content/ClipboardManager.java
index a79f0602ad11..800d0d248005 100644
--- a/core/java/android/content/ClipboardManager.java
+++ b/core/java/android/content/ClipboardManager.java
@@ -40,6 +40,13 @@ import java.util.ArrayList;
* is expressed as a {@link ClipData} object, which defines the protocol
* for data exchange between applications.
*
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For more information about using the clipboard framework, read the
+ * <a href="{@docRoot}guide/topics/clipboard/copy-paste.html">Copy and Paste</a>
+ * developer guide.</p>
+ * </div>
+ *
* @see android.content.Context#getSystemService
*/
public class ClipboardManager extends android.text.ClipboardManager {
diff --git a/core/java/android/content/SearchRecentSuggestionsProvider.java b/core/java/android/content/SearchRecentSuggestionsProvider.java
index e1a8d21f9970..d6f7d97367a7 100644
--- a/core/java/android/content/SearchRecentSuggestionsProvider.java
+++ b/core/java/android/content/SearchRecentSuggestionsProvider.java
@@ -61,6 +61,12 @@ import android.util.Log;
* for future searches by calling {@link android.provider.SearchRecentSuggestions#saveRecentQuery
* SearchRecentSuggestions.saveRecentQuery()}.</li>
* </ul>
+ *
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For information about using search suggestions in your application, read the
+ * <a href="{@docRoot}guide/topics/search/index.html">Search</a> developer guide.</p>
+ * </div>
*
* @see android.provider.SearchRecentSuggestions
*/
diff --git a/core/java/android/hardware/usb/UsbAccessory.java b/core/java/android/hardware/usb/UsbAccessory.java
index c8ea825d72fa..770204466eaf 100644
--- a/core/java/android/hardware/usb/UsbAccessory.java
+++ b/core/java/android/hardware/usb/UsbAccessory.java
@@ -37,6 +37,12 @@ import android.util.Log;
* {@link UsbManager#ACTION_USB_ACCESSORY_ATTACHED} Intent.
* The application can then call {@link UsbManager#openAccessory} to open a file descriptor
* for reading and writing data to and from the accessory.
+ *
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For more information about communicating with USB hardware, read the
+ * <a href="{@docRoot}guide/topics/usb/index.html">USB</a> developer guide.</p>
+ * </div>
*/
public class UsbAccessory implements Parcelable {
diff --git a/core/java/android/hardware/usb/UsbDevice.java b/core/java/android/hardware/usb/UsbDevice.java
index af3f7f0f1b3f..9bd38f9c33e8 100644
--- a/core/java/android/hardware/usb/UsbDevice.java
+++ b/core/java/android/hardware/usb/UsbDevice.java
@@ -34,6 +34,12 @@ import java.io.FileDescriptor;
* To communicate with the device, you open a {@link UsbDeviceConnection} for the device
* and use {@link UsbRequest} to send and receive data on an endpoint.
* {@link UsbDeviceConnection#controlTransfer} is used for control requests on endpoint zero.
+ *
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For more information about communicating with USB hardware, read the
+ * <a href="{@docRoot}guide/topics/usb/index.html">USB</a> developer guide.</p>
+ * </div>
*/
public class UsbDevice implements Parcelable {
diff --git a/core/java/android/hardware/usb/UsbInterface.java b/core/java/android/hardware/usb/UsbInterface.java
index 3b510639a671..d6c54a8e324b 100644
--- a/core/java/android/hardware/usb/UsbInterface.java
+++ b/core/java/android/hardware/usb/UsbInterface.java
@@ -26,6 +26,12 @@ import android.os.Parcelable;
* piece of functionality, separate from the other interfaces.
* An interface will have one or more {@link UsbEndpoint}s, which are the
* channels by which the host transfers data with the device.
+ *
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For more information about communicating with USB hardware, read the
+ * <a href="{@docRoot}guide/topics/usb/index.html">USB</a> developer guide.</p>
+ * </div>
*/
public class UsbInterface implements Parcelable {
diff --git a/core/java/android/hardware/usb/UsbManager.java b/core/java/android/hardware/usb/UsbManager.java
index 551926c8c5e0..93f93c70f3f3 100644
--- a/core/java/android/hardware/usb/UsbManager.java
+++ b/core/java/android/hardware/usb/UsbManager.java
@@ -35,8 +35,13 @@ import java.util.HashMap;
* {@link android.content.Context#getSystemService(java.lang.String) Context.getSystemService()}.
*
* {@samplecode
- * UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);
- * }
+ * UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);}
+ *
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For more information about communicating with USB hardware, read the
+ * <a href="{@docRoot}guide/topics/usb/index.html">USB</a> developer guide.</p>
+ * </div>
*/
public class UsbManager {
private static final String TAG = "UsbManager";
diff --git a/core/java/android/hardware/usb/package.html b/core/java/android/hardware/usb/package.html
index 5fd5a30798b3..b32e0df2d259 100644
--- a/core/java/android/hardware/usb/package.html
+++ b/core/java/android/hardware/usb/package.html
@@ -1,9 +1,16 @@
<HTML>
<BODY>
-<p>Provides support to communicate with USB hardware peripherals that are connected to Android-powered
-devices. Use {@link android.hardware.usb.UsbManager} to access the state of the USB and to
+<p>Provides support to communicate with USB hardware peripherals that are connected to
+Android-powered devices.</p>
+
+<p>For more information, see the
+<a href="{@docRoot}guide/topics/usb/index.html">USB</a> developer guide.</p>
+{@more}
+
+<p>Use {@link android.hardware.usb.UsbManager} to access the state of the USB and to
communicate with connected hardware peripherals. Use {@link android.hardware.usb.UsbDevice} to
-communicate with the hardware peripheral if the Android-powered device is acting as the USB host. Use
-{@link android.hardware.usb.UsbAccessory} if the peripheral is acting as the USB host.</p>
+communicate with the hardware peripheral if the Android-powered device is acting as the USB host.
+Use {@link android.hardware.usb.UsbAccessory} if the peripheral is acting as the USB host.</p>
+
</BODY>
</HTML> \ No newline at end of file
diff --git a/core/java/android/nfc/NfcAdapter.java b/core/java/android/nfc/NfcAdapter.java
index 2857ac53797a..a903a5ff3068 100644
--- a/core/java/android/nfc/NfcAdapter.java
+++ b/core/java/android/nfc/NfcAdapter.java
@@ -42,6 +42,12 @@ import android.util.Log;
* <p>
* Use the helper {@link #getDefaultAdapter(Context)} to get the default NFC
* adapter for this Android device.
+ *
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For more information about using NFC, read the
+ * <a href="{@docRoot}guide/topics/nfc/index.html">Near Field Communication</a> developer guide.</p>
+ * </div>
*/
public final class NfcAdapter {
static final String TAG = "NFC";
diff --git a/core/java/android/nfc/NfcManager.java b/core/java/android/nfc/NfcManager.java
index 6ec2e219d5c4..ef5c7ba30c63 100644
--- a/core/java/android/nfc/NfcManager.java
+++ b/core/java/android/nfc/NfcManager.java
@@ -28,6 +28,12 @@ import android.content.Context;
* Alternately, you can just call the static helper
* {@link NfcAdapter#getDefaultAdapter(android.content.Context)}.
*
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For more information about using NFC, read the
+ * <a href="{@docRoot}guide/topics/nfc/index.html">Near Field Communication</a> developer guide.</p>
+ * </div>
+ *
* @see Context#getSystemService
* @see NfcAdapter#getDefaultAdapter(android.content.Context)
*/
diff --git a/core/java/android/nfc/package.html b/core/java/android/nfc/package.html
index 97bb29d10a8f..9e028a5e7b56 100644
--- a/core/java/android/nfc/package.html
+++ b/core/java/android/nfc/package.html
@@ -1,7 +1,11 @@
<HTML>
<BODY>
-Provides access to Near Field Communication (NFC) functionality, allowing applications to read
-NDEF message in NFC tags. A "tag" may actually be another device that appears as a tag.
+<p>Provides access to Near Field Communication (NFC) functionality, allowing applications to read
+NDEF message in NFC tags. A "tag" may actually be another device that appears as a tag.</p>
+
+<p>For more information, see the
+<a href="{@docRoot}guide/topics/nfc/index.html">Near Field Communication</a> developer guide.</p>
+{@more}
<p>Here's a summary of the classes:</p>
@@ -24,5 +28,6 @@ type of data being shared and carries the data itself.</dd>
<p class="note"><strong>Note:</strong>
Not all Android-powered devices provide NFC functionality.</p>
+
</BODY>
</HTML>
diff --git a/core/java/android/provider/SearchRecentSuggestions.java b/core/java/android/provider/SearchRecentSuggestions.java
index 13ad9d345a49..c165487db6ff 100644
--- a/core/java/android/provider/SearchRecentSuggestions.java
+++ b/core/java/android/provider/SearchRecentSuggestions.java
@@ -44,6 +44,13 @@ import java.util.concurrent.Semaphore;
*
* <p>For a working example, see SearchSuggestionSampleProvider and SearchQueryResults in
* samples/ApiDemos/app.
+ *
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For information about using search suggestions in your application, read the
+ * <a href="{@docRoot}guide/topics/search/adding-recent-query-suggestions.html">Adding Recent Query
+ * Suggestions</a> developer guide.</p>
+ * </div>
*/
public class SearchRecentSuggestions {
// debugging support
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 65b4e7ef4d96..84b0c8b08abe 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -3642,11 +3642,20 @@ public final class Settings {
"pdp_watchdog_max_pdp_reset_fail_count";
/**
- * The number of milliseconds to delay when checking for data stalls
+ * The number of milliseconds to delay when checking for data stalls during
+ * non-aggressive detection. (screen is turned off.)
* @hide
*/
- public static final String DATA_STALL_ALARM_DELAY_IN_MS =
- "data_stall_alarm_delay_in_ms";
+ public static final String DATA_STALL_ALARM_NON_AGGRESSIVE_DELAY_IN_MS =
+ "data_stall_alarm_non_aggressive_delay_in_ms";
+
+ /**
+ * The number of milliseconds to delay when checking for data stalls during
+ * aggressive detection. (screen on or suspected data stall)
+ * @hide
+ */
+ public static final String DATA_STALL_ALARM_AGGRESSIVE_DELAY_IN_MS =
+ "data_stall_alarm_aggressive_delay_in_ms";
/**
* The interval in milliseconds at which to check gprs registration
diff --git a/core/java/android/test/package.html b/core/java/android/test/package.html
index 1972bed9f518..770e9a56e6e3 100644
--- a/core/java/android/test/package.html
+++ b/core/java/android/test/package.html
@@ -1,5 +1,10 @@
<HTML>
<BODY>
-A framework for writing Android test cases and suites.
+<p>A framework for writing Android test cases and suites.</p>
+
+<p>For more information, see the
+<a href="{@docRoot}guide/topics/testing/index.html">Testing</a> developer guide.</p>
+{@more}
+
</BODY>
</HTML> \ No newline at end of file
diff --git a/core/java/android/webkit/BrowserFrame.java b/core/java/android/webkit/BrowserFrame.java
index c1945599d337..b94eb763b8b8 100644
--- a/core/java/android/webkit/BrowserFrame.java
+++ b/core/java/android/webkit/BrowserFrame.java
@@ -941,6 +941,13 @@ class BrowserFrame extends Handler {
if (androidResource != null) {
return new WebResourceResponse(null, null, androidResource);
}
+
+ // Note that we check this after looking for an android_asset or
+ // android_res URL, as we allow those even if file access is disabled.
+ if (!mSettings.getAllowFileAccess() && url.startsWith("file://")) {
+ return new WebResourceResponse(null, null, null);
+ }
+
WebResourceResponse response = mCallbackProxy.shouldInterceptRequest(url);
if (response == null && "browser:incognito".equals(url)) {
try {
diff --git a/core/java/android/widget/SearchView.java b/core/java/android/widget/SearchView.java
index f524ef0f1d0f..9d2ff2efa3ae 100644
--- a/core/java/android/widget/SearchView.java
+++ b/core/java/android/widget/SearchView.java
@@ -75,10 +75,11 @@ import java.util.WeakHashMap;
* If you want the search field to always be visible, then call setIconifiedByDefault(false).
* </p>
*
- * <p>
- * For more information, see the <a href="{@docRoot}guide/topics/search/index.html">Search</a>
- * documentation.
- * <p>
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For information about using {@code SearchView}, read the
+ * <a href="{@docRoot}guide/topics/search/index.html">Search</a> developer guide.</p>
+ * </div>
*
* @see android.view.MenuItem#SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW
* @attr ref android.R.styleable#SearchView_iconifiedByDefault
diff --git a/docs/html/guide/developing/debugging/debugging-log.jd b/docs/html/guide/developing/debugging/debugging-log.jd
index 295772d2a501..b5b626e9bf3a 100644
--- a/docs/html/guide/developing/debugging/debugging-log.jd
+++ b/docs/html/guide/developing/debugging/debugging-log.jd
@@ -221,19 +221,20 @@ export ANDROID_LOG_TAGS="ActivityManager:I MyApp:D *:S"
below.</p>
<ul>
- <li><code>brief</code> &mdash; Display priority/tag and PID of originating process (the default
- format).</li>
+ <li><code>brief</code> &mdash; Display priority/tag and PID of the process issuing the
+ message (the default format).</li>
<li><code>process</code> &mdash; Display PID only.</li>
<li><code>tag</code> &mdash; Display the priority/tag only.</li>
- <li><code>thread</code> &mdash; Display process:thread and priority/tag only.</li>
-
<li><code>raw</code> &mdash; Display the raw log message, with no other metadata fields.</li>
<li><code>time</code> &mdash; Display the date, invocation time, priority/tag, and PID of the
- originating process.</li>
+ process issuing the message.</li>
+
+ <li><code>threadtime</code> &mdash; Display the date, invocation time, priority, tag, and
+ the PID and TID of the thread issuing the message.</li>
<li><code>long</code> &mdash; Display all metadata fields and separate messages with blank
lines.</li>
@@ -304,4 +305,4 @@ $ adb shell start
<p>
If you're developing a web application for Android, you can debug your JavaScript using the console JavaScript APIs,
which output messages to LogCat. For more information, see
- <a href="{@docRoot}guide/webapps/debugging.html">Debugging Web Apps</a>.</p> \ No newline at end of file
+ <a href="{@docRoot}guide/webapps/debugging.html">Debugging Web Apps</a>.</p>
diff --git a/docs/html/guide/developing/device.jd b/docs/html/guide/developing/device.jd
index 76b2516f9817..62ebfeee76f1 100644
--- a/docs/html/guide/developing/device.jd
+++ b/docs/html/guide/developing/device.jd
@@ -252,6 +252,10 @@ above.</p>
<td><code>0FCE</code></td>
</tr>
<tr>
+ <td>Teleepoch</td>
+ <td><code>2340</code></td>
+ </tr>
+ <tr>
<td>Toshiba</td>
<td><code>0930</code></td>
</tr>
diff --git a/docs/html/guide/developing/tools/adb.jd b/docs/html/guide/developing/tools/adb.jd
index d32cf6684eda..50c72365d03d 100644
--- a/docs/html/guide/developing/tools/adb.jd
+++ b/docs/html/guide/developing/tools/adb.jd
@@ -546,12 +546,12 @@ of each message, given as <code>&lt;priority&gt;/&lt;tag&gt;</code>. </p>
<p>Log messages contain a number of metadata fields, in addition to the tag and priority. You can modify the output format for messages so that they display a specific metadata field. To do so, you use the <code>-v</code> option and specify one of the supported output formats listed below. </p>
<ul>
- <li><code>brief</code> &mdash; Display priority/tag and PID of originating process (the default format).</li>
+ <li><code>brief</code> &mdash; Display priority/tag and the PID of process issuing the message (the default format).</li>
<li><code>process</code> &mdash; Display PID only.</li>
<li><code>tag</code> &mdash; Display the priority/tag only. </li>
- <li><code>thread</code> &mdash; Display process:thread and priority/tag only. </li>
<li><code>raw</code> &mdash; Display the raw log message, with no other metadata fields.</li>
- <li><code>time</code> &mdash; Display the date, invocation time, priority/tag, and PID of the originating process.</li>
+ <li><code>time</code> &mdash; Display the date, invocation time, priority/tag, and PID of the process issuing the message.</li>
+ <li><code>threadtime</code> &mdash; Display the date, invocation time, priority, tag, and the PID and TID of the thread issuing the message.</li>
<li><code>long</code> &mdash; Display all metadata fields and separate messages with a blank lines.</li>
</ul>
diff --git a/docs/html/guide/topics/appwidgets/index.jd b/docs/html/guide/topics/appwidgets/index.jd
index 2cb23c1cdbba..7b869a09b9fe 100644
--- a/docs/html/guide/topics/appwidgets/index.jd
+++ b/docs/html/guide/topics/appwidgets/index.jd
@@ -186,36 +186,34 @@ folder.</p>
<p>Here's a summary of the <code>&lt;appwidget-provider></code> attributes:</p>
<ul>
<li>The values for the <code>minWidth</code> and <code>minHeight</code>
-attributes specify the minimum
- area required by the App Widget's layout.
- <p>The default Home screen positions App Widgets in its window based on a
-grid of
- cells that have a defined height and width. If the values for an App
-Widget's minimum width
- or height don't match the dimensions of the cells,
- then the App Widget dimensions round <em>up</em> to the nearest cell size.
- (See the <a
-href="{@docRoot}guide/practices/ui_guidelines/widget_design.html">App Widget
-Design
- Guidelines</a> for more information on the Home screen cell sizes.)</p>
- <p>Because the Home screen's layout orientation (and thus, the cell sizes)
-can change,
- as a rule of thumb, you should assume the worst-case cell size of 74 pixels
-for the height
- <em>and</em> width of a cell. However, you must subtract 2 from the final
-dimension to account
- for any integer rounding errors that occur in the pixel count. To find your
-minimum width
- and height in density-independent pixels (dp), use this formula:<br/>
- <code>(number of cells * 74) - 2</code><br/>
- Following this formula, you should use 72 dp for a height of one cell, 294
-dp and for a width of four cells.</p>
-<p class="note"><strong>Note:</strong> To make your app widget portable across
-devices, your app widget's minimum size should never be larger than 4 x 4 cells.
-See the <a
-href="{@docRoot}guide/practices/ui_guidelines/widget_design.html#sizes">App
-Widget Design Guidelines</a> for more discussion of Home screen cell sizes.</p>
+ attributes specify the minimum amount of space the App Widget consumes
+ <em>by default</em>. The default Home screen positions App Widgets in its
+ window based on a grid of cells that have a defined height and width. If
+ the values for an App Widget's minimum width or height don't match the
+ dimensions of the cells, then the App Widget dimensions round
+ <em>up</em> to the nearest cell size.
+ <p>See the <a href="{@docRoot}guide/practices/ui_guidelines/widget_design.html#anatomy_determining_size">
+ App Widget Design Guidelines</a> for more information on sizing your App
+ Widgets.</p>
+
+ <p class="note"><strong>Note:</strong> To make your app widget portable
+ across devices, your app widget's minimum size should never be larger
+ than 4 x 4 cells.</p>
</li>
+
+ <li>The <code>minResizeWidth</code> and <code>minResizeHeight</code> attributes
+ specify the App Widget's absolute minimum size. These values should specify
+ the size below which the App Widget would be illegible or otherwise unusable.
+ Using these attributes allows the user to resize the widget to a size that
+ may be smaller than the default widget size defined by the
+ <code>minWidth</code> and <code>minHeight</code> attributes.
+ Introduced in Android 3.1.
+
+ <p>See the <a href="{@docRoot}guide/practices/ui_guidelines/widget_design.html#anatomy_determining_size">
+ App Widget Design Guidelines</a> for more information on sizing your App
+ Widgets.</p>
+ </li>
+
<li>The <code>updatePeriodMillis</code> attribute defines how often the App
Widget framework should request an update from the {@link
android.appwidget.AppWidgetProvider} by calling the
diff --git a/docs/html/index.jd b/docs/html/index.jd
index ac89264cfd13..86246335ca72 100644
--- a/docs/html/index.jd
+++ b/docs/html/index.jd
@@ -57,7 +57,7 @@ href="http://android-developers.blogspot.com/2011/07/new-android-market-for-phon
<td colspan="2"><div class="seperator">&nbsp;</div></td>
</tr>
<tr>
- <td class="imageCell"><a href="http://www.android.com/market.html"><img src="{@docRoot}assets/images/icon_market.jpg" style="padding:0" /></a></td>
+ <td class="imageCell"><a href="http://market.android.com/publish"><img src="{@docRoot}assets/images/icon_market.jpg" style="padding:0" /></a></td>
<td>
<h2 class="green">Publish</h2>
<p>Android Market is an open service that lets you distribute your apps to handsets.</p>
diff --git a/docs/html/resources/dashboard/opengl.jd b/docs/html/resources/dashboard/opengl.jd
index 4d0abeceac61..357c1ea4b797 100644
--- a/docs/html/resources/dashboard/opengl.jd
+++ b/docs/html/resources/dashboard/opengl.jd
@@ -57,7 +57,7 @@ ending on the data collection date noted below.</p>
<div class="dashboard-panel">
<img alt="" width="400" height="250"
-src="http://chart.googleapis.com/chart?cht=p&chs=400x250&chco=c4df9b,6fad0c&chl=GL%201.1|GL%202.0%20%26%201.1&chd=t%3A10.1,89.9" />
+src="http://chart.googleapis.com/chart?cht=p&chs=400x250&chco=c4df9b,6fad0c&chl=GL%201.1|GL%202.0%20%26%201.1&chd=t%3A9.5,90.5" />
<table>
<tr>
@@ -66,14 +66,14 @@ src="http://chart.googleapis.com/chart?cht=p&chs=400x250&chco=c4df9b,6fad0c&chl=
</tr>
<tr>
<td>1.1</th>
-<td>10.1%</td>
+<td>9.5%</td>
</tr>
<tr>
<td>2.0</th>
-<td>89.9%</td>
+<td>90.5%</td>
</tr>
</table>
-<p><em>Data collected during a 7-day period ending on December 1, 2011</em></p>
+<p><em>Data collected during a 7-day period ending on January 3, 2012</em></p>
</div>
diff --git a/docs/html/resources/dashboard/platform-versions.jd b/docs/html/resources/dashboard/platform-versions.jd
index 72370bb4ead8..2618a0424b49 100644
--- a/docs/html/resources/dashboard/platform-versions.jd
+++ b/docs/html/resources/dashboard/platform-versions.jd
@@ -52,7 +52,7 @@ Android Market within a 14-day period ending on the data collection date noted b
<div class="dashboard-panel">
<img alt="" height="250" width="470"
-src="http://chart.apis.google.com/chart?&cht=p&chs=460x250&chd=t:0.8,1.3,9.6,35.3,0.5,50.1,0.1,1.1,1.2&chl=Android%201.5|Android%201.6|Android%202.1|Android%202.2|Android%202.3|Android%202.3.3|Android%203.0|Android%203.1|Android%203.2&chco=c4df9b,6fad0c" />
+src="http://chart.apis.google.com/chart?&cht=p&chs=460x250&chd=t:0.6,1.1,8.5,30.4,0.6,54.9,0.1,1.5,1.7,0.3,0.3&chl=Android%201.5|Android%201.6|Android%202.1|Android%202.2|Android%202.3|Android%202.3.3|Android%203.0|Android%203.1|Android%203.2|Android%204.0|Android%204.0.3&chco=c4df9b,6fad0c" />
<table>
<tr>
@@ -61,21 +61,25 @@ src="http://chart.apis.google.com/chart?&cht=p&chs=460x250&chd=t:0.8,1.3,9.6,35.
<th>API Level</th>
<th>Distribution</th>
</tr>
-<tr><td><a href="{@docRoot}sdk/android-1.5.html">Android 1.5</a></td><td>Cupcake</td> <td>3</td><td>0.8%</td></tr>
-<tr><td><a href="{@docRoot}sdk/android-1.6.html">Android 1.6</a></td><td>Donut</td> <td>4</td><td>1.3%</td></tr>
-<tr><td><a href="{@docRoot}sdk/android-2.1.html">Android 2.1</a></td><td>Eclair</td> <td>7</td><td>9.6%</td></tr>
-<tr><td><a href="{@docRoot}sdk/android-2.2.html">Android 2.2</a></td><td>Froyo</td> <td>8</td><td>35.3%</td></tr>
+<tr><td><a href="{@docRoot}sdk/android-1.5.html">Android 1.5</a></td><td>Cupcake</td> <td>3</td><td>0.6%</td></tr>
+<tr><td><a href="{@docRoot}sdk/android-1.6.html">Android 1.6</a></td><td>Donut</td> <td>4</td><td>1.1%</td></tr>
+<tr><td><a href="{@docRoot}sdk/android-2.1.html">Android 2.1</a></td><td>Eclair</td> <td>7</td><td>8.5%</td></tr>
+<tr><td><a href="{@docRoot}sdk/android-2.2.html">Android 2.2</a></td><td>Froyo</td> <td>8</td><td>30.4%</td></tr>
<tr><td><a href="{@docRoot}sdk/android-2.3.html">Android 2.3 -<br/>
- Android 2.3.2</a></td><td rowspan="2">Gingerbread</td> <td>9</td><td>0.5%</td></tr>
+ Android 2.3.2</a></td><td rowspan="2">Gingerbread</td> <td>9</td><td>0.6%</td></tr>
<tr><td><a href="{@docRoot}sdk/android-2.3.3.html">Android 2.3.3 -<br/>
- Android 2.3.7</a></td><!-- Gingerbread --> <td>10</td><td>50.1%</td></tr>
+ Android 2.3.7</a></td><!-- Gingerbread --> <td>10</td><td>54.9%</td></tr>
<tr><td><a href="{@docRoot}sdk/android-3.0.html">Android 3.0</a></td>
<td rowspan="3">Honeycomb</td> <td>11</td><td>0.1%</td></tr>
-<tr><td><a href="{@docRoot}sdk/android-3.1.html">Android 3.1</a></td><!-- Honeycomb --><td>12</td><td>1.1%</td></tr>
-<tr><td><a href="{@docRoot}sdk/android-3.2.html">Android 3.2</a></td><!-- Honeycomb --><td>13</td><td>1.2%</td></tr>
+<tr><td><a href="{@docRoot}sdk/android-3.1.html">Android 3.1</a></td><!-- Honeycomb --><td>12</td><td>1.5%</td></tr>
+<tr><td><a href="{@docRoot}sdk/android-3.2.html">Android 3.2</a></td><!-- Honeycomb --><td>13</td><td>1.7%</td></tr>
+<tr><td><a href="{@docRoot}sdk/android-4.0.html">Android 4.0 -<br/>
+ Android 4.0.2</a></td>
+ <td rowspan="2">Ice Cream Sandwich</td><td>14</td><td>0.3%</td></tr>
+<tr><td><a href="{@docRoot}sdk/android-4.0.3.html">Android 4.0.3</a></td><!-- ICS --><td>15</td><td>0.3%</td></tr>
</table>
-<p><em>Data collected during a 14-day period ending on December 1, 2011</em></p>
+<p><em>Data collected during a 14-day period ending on January 3, 2012</em></p>
<!--
<p style="font-size:.9em">* <em>Other: 0.1% of devices running obsolete versions</em></p>
-->
@@ -104,9 +108,9 @@ Android Market within a 14-day period ending on the date indicated on the x-axis
<div class="dashboard-panel">
<img alt="" height="250" width="660" style="padding:5px;background:#fff"
-src="http://chart.apis.google.com/chart?&cht=lc&chs=660x250&chxt=x,x,y,r&chxr=0,0,12|1,0,12|2,0,100|3,0,100&chxl=0%3A|06/01|06/15|07/01|07/15|08/01|08/15|09/01|09/15|10/01|10/15|11/01|11/15|12/01|1%3A|2011||||||||||||2011|2%3A|0%25|25%25|50%25|75%25|100%25|3%3A|0%25|25%25|50%25|75%25|100%25&chxp=0,0,1,2,3,4,5,6,7,8,9,10,11,12&chxtc=0,5&chd=t:99.4,99.3,99.2,99.0,98.8,98.7,98.5,98.5,98.2,98.1,98.0,99.9,99.9|97.5,97.5,97.7,97.6,97.5,97.5,97.5,97.5,97.1,97.1,97.0,99.1,99.1|95.0,95.2,95.5,95.5,95.5,95.6,95.7,95.8,95.6,95.9,95.7,97.7,97.8|73.9,75.4,77.6,79.0,80.2,81.1,82.4,83.3,83.8,84.9,85.1,87.5,88.2|9.5,13.6,17.8,20.6,24.3,27.5,31.2,34.7,38.3,41.3,44.0,48.9,52.9|8.4,12.6,16.8,20.0,23.7,26.9,30.6,34.1,37.8,40.8,43.5,48.4,52.4|0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,2.0,2.3|0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,1.2&chm=b,c3df9b,0,1,0|b,b8dc82,1,2,0|tAndroid%202.1,608920,2,0,15,,t::-5|b,addb67,2,3,0|tAndroid%202.2,517617,3,0,15,,t::-5|b,a3db4b,3,4,0|b,98dc2e,4,5,0|tAndroid%202.3.3,334d0a,5,1,15,,t::-5|b,8cd41b,5,6,0|b,7ec113,6,7,0|B,6fad0c,7,8,0&chg=7,25&chdl=Android%201.5|Android%201.6|Android%202.1|Android%202.2|Android%202.3|Android%202.3.3|Android%203.1|Android%203.2&chco=add274,a2d15a,97d13e,8bcb28,7dba1e,6ea715,5f920e,507d08" />
+src="http://chart.apis.google.com/chart?&cht=lc&chs=660x250&chxt=x,x,y,r&chxr=0,0,12|1,0,12|2,0,100|3,0,100&chxl=0%3A%7C07/01%7C07/15%7C08/01%7C08/15%7C09/01%7C09/15%7C10/01%7C10/15%7C11/01%7C11/15%7C12/01%7C12/15%7C01/01%7C1%3A%7C2011%7C%7C%7C%7C%7C%7C%7C%7C%7C%7C%7C%7C2012%7C2%3A%7C0%25%7C25%25%7C50%25%7C75%25%7C100%25%7C3%3A%7C0%25%7C25%25%7C50%25%7C75%25%7C100%25&chxp=0,0,1,2,3,4,5,6,7,8,9,10,11,12&chxtc=0,5&chd=t:99.2,99.0,98.8,98.7,98.5,98.5,98.2,98.1,98.0,99.9,99.9,99.7,99.2|97.7,97.6,97.5,97.5,97.5,97.5,97.1,97.1,97.0,99.1,99.1,99.0,98.6|95.5,95.5,95.5,95.6,95.7,95.8,95.6,95.9,95.7,97.7,97.8,97.8,97.5|77.6,79.0,80.2,81.1,82.4,83.3,83.8,84.9,85.1,87.5,88.2,88.6,89.0|17.8,20.6,24.3,27.5,31.2,34.7,38.3,41.3,44.0,48.9,52.9,55.7,58.5|16.8,20.0,23.7,26.9,30.6,34.1,37.8,40.8,43.5,48.4,52.4,55.2,57.9|0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,2.0,2.3,2.6,3.2|0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,1.2,1.3,1.7&chm=b,c3df9b,0,1,0|b,b8dc82,1,2,0|tAndroid 2.1,608920,2,0,15,,t::-5|b,addb67,2,3,0|tAndroid 2.2,517617,3,0,15,,t::-5|b,a3db4b,3,4,0|b,98dc2e,4,5,0|tAndroid 2.3.3,334d0a,5,0,15,,t::-5|b,8cd41b,5,6,0|b,7ec113,6,7,0|B,6fad0c,7,8,0&chg=7,25&chdl=Android 1.5|Android 1.6|Android 2.1|Android 2.2|Android 2.3|Android 2.3.3|Android 3.1|Android 3.2&chco=add274,a2d15a,97d13e,8bcb28,7dba1e,6ea715,5f920e,507d08" />
-<p><em>Last historical dataset collected during a 14-day period ending on December 1, 2011</em></p>
+<p><em>Last historical dataset collected during a 14-day period ending on January 3, 2012</em></p>
</div><!-- end dashboard-panel -->
diff --git a/docs/html/sdk/oem-usb.jd b/docs/html/sdk/oem-usb.jd
index ddc7defad51b..b81be71dc079 100644
--- a/docs/html/sdk/oem-usb.jd
+++ b/docs/html/sdk/oem-usb.jd
@@ -22,8 +22,11 @@ Refer to <a href="{@docRoot}guide/developing/device.html#setting-up">Setting up
start development with a device.</p>
<p class="note"><strong>Note:</strong> If your device is one of the Android Developer Phones
-(purchased from the Android Market publisher site), a Nexus One, or a Nexus S, then you should
-use the <a href="{@docRoot}sdk/win-usb.html">Google USB Driver</a>, instead of an OEM driver.</p>
+(purchased from the Android Market publisher site), a Nexus One, or a Nexus S, then you need
+the <a href="{@docRoot}sdk/win-usb.html">Google USB Driver</a>, instead of an OEM driver. The Galaxy
+Nexus driver, however, is distributed by <a
+href="http://www.samsung.com/us/support/downloads/verizon-wireless/SCH-I515MSAVZW">Samsung</a>
+(listed as model SCH-I515).</p>
<p>For instructions about how to install the driver on Windows, follow the guide for <a
href="{@docRoot}sdk/win-usb.html#InstallingDriver">Installing the USB Driver</a>.</p>
@@ -85,7 +88,7 @@ support tab to select your products/device. Different regions will have differe
</tr>
<tr><td>Huawei</td> <td><a
-href="http://www.huaweidevice.com/worldwide/downloadCenter.do?method=list&flay=software&directoryId=20&treeId=0">http://www.huaweidevice.com/worldwide/downloadCenter.do?method=list&amp;flay=software&amp;directoryId=20&amp;treeId=0</a></td>
+href="http://www.huaweidevice.com/worldwide/downloadCenter.do?method=index">http://www.huaweidevice.com/worldwide/downloadCenter.do?method=index</a></td>
</tr>
<tr><td>KT Tech</td> <td><a
@@ -119,7 +122,13 @@ href="http://k-tai.sharp.co.jp/support/">http://k-tai.sharp.co.jp/support/</a></
</tr><tr><td>SK Telesys</td> <td><a
href="http://www.sk-w.com/service/wDownload/wDownload.jsp">http://www.sk-w.com/service/wDownload/wDownload.jsp</a></td></tr><tr>
<td>Sony Ericsson</td> <td><a
-href="http://developer.sonyericsson.com/wportal/devworld/search-downloads/driver?cc=gb&lc=en">http://developer.sonyericsson.com/wportal/devworld/search-downloads/driver?cc=gb&amp;lc=en</a></td></tr><tr>
+href="http://developer.sonyericsson.com/wportal/devworld/search-downloads/driver?cc=gb&lc=en">http://developer.sonyericsson.com/wportal/devworld/search-downloads/driver?cc=gb&amp;lc=en</a></td></tr>
+
+<tr><td>Teleepoch</td> <td><a
+href="http://www.teleepoch.com/android.html">http://www.teleepoch.com/android.html</a></td>
+</tr>
+
+<tr>
<td>ZTE</td> <td><a
href="http://support.zte.com.cn/support/news/NewsDetail.aspx?newsId=1000442">http://support.zte.com.cn/support/news/NewsDetail.aspx?newsId=1000442</a></td></tr>
</table>
diff --git a/docs/html/sdk/win-usb.jd b/docs/html/sdk/win-usb.jd
index 3dfe55d0fb09..2d1435b8d4b5 100644
--- a/docs/html/sdk/win-usb.jd
+++ b/docs/html/sdk/win-usb.jd
@@ -24,18 +24,9 @@ page.title=Google USB Driver
</div>
</div>
-<p>The Google USB driver is a downloadable component for Windows developers, available
-for download from the AVD and SDK Manager.</p>
-
-<p>The Google USB Driver is only for Android Developer Phones (ADP), Nexus One, and Nexus S.
-If you're using a different Android-powered device,
-then you need to get a USB driver from the device OEM. For help finding the appropriate
-driver, see the list of <a href="{@docRoot}sdk/oem-usb.html">OEM USB Drivers</a>.</p>
-
-<div class="sidebox-wrapper">
-<div class="sidebox">
- <p>The Google USB driver for Windows provides support for the following
-Android-powered devices:</p>
+<p>The Google USB driver is a downloadable component for the Android SDK, available
+from the SDK Manager. The driver is for Windows only and provides the necessary drivers for the
+following devices:</p>
<ul>
<li>ADP1 / T-Mobile G1*</li>
<li>ADP2 / Google Ion / T-Mobile myTouch 3G*</li>
@@ -44,19 +35,20 @@ Android-powered devices:</p>
<li>Nexus S</li>
</ul>
<p>* <em>Or similar hardware on other carriers</em></p>
- <p>Any additional devices will require Windows drivers provided by
-the hardware manufacturer. See <a href="{@docRoot}sdk/oem-usb.html">OEM USB Drivers</a>.</p>
-</div>
-</div>
+
+ <p>All other devices require Windows drivers provided by the hardware manufacturer, as listed in
+the <a href="{@docRoot}sdk/oem-usb.html">OEM USB Drivers</a> document. The Galaxy Nexus
+driver is also distributed by <a
+href="http://www.samsung.com/us/support/downloads/verizon-wireless/SCH-I515MSAVZW">Samsung</a>
+(listed as model SCH-I515).</p>
<p class="note"><strong>Note:</strong>
-If you're developing on Mac OS X or Linux, then you do not need to install a
-USB driver. Refer to <a
-href="{@docRoot}guide/developing/device.html#setting-up">Setting up a
-Device</a> to start development with a device.</p>
+If you're developing on Mac OS X or Linux, then you do not need to install a USB driver. Refer to <a
+href="{@docRoot}guide/developing/device.html#setting-up">Setting up a Device</a> to start
+development with a device.</p>
-<p>The sections below provide instructions on how to download the USB Driver
-for Windows and install it on your development computer. </p>
+<p>The sections below provide instructions on how to download and install the Google USB Driver
+for Windows. </p>
diff --git a/graphics/java/android/graphics/drawable/AnimationDrawable.java b/graphics/java/android/graphics/drawable/AnimationDrawable.java
index 7efdc6cf0203..07de074d48a2 100644
--- a/graphics/java/android/graphics/drawable/AnimationDrawable.java
+++ b/graphics/java/android/graphics/drawable/AnimationDrawable.java
@@ -64,8 +64,13 @@ import android.util.AttributeSet;
* // Start the animation (looped playback by default).
* frameAnimation.start();
* </pre>
- * <p>For more information, see the guide to <a
- * href="{@docRoot}guide/topics/resources/animation-resource.html">Animation Resources</a>.</p>
+ *
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For more information about animating with {@code AnimationDrawable}, read the
+ * <a href="{@docRoot}guide/topics/graphics/drawable-animation.html">Drawable Animation</a>
+ * developer guide.</p>
+ * </div>
*
* @attr ref android.R.styleable#AnimationDrawable_visible
* @attr ref android.R.styleable#AnimationDrawable_variablePadding
diff --git a/graphics/java/android/renderscript/Allocation.java b/graphics/java/android/renderscript/Allocation.java
index 12e5ada5c673..f285f5b5ac0c 100644
--- a/graphics/java/android/renderscript/Allocation.java
+++ b/graphics/java/android/renderscript/Allocation.java
@@ -62,6 +62,11 @@ import android.util.TypedValue;
* The unchecked variants exist to allow apps to copy over arrays of structures from a
* control language that does not support structures.</p>
*
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For more information about creating an application that uses Renderscript, read the
+ * <a href="{@docRoot}guide/topics/graphics/renderscript.html">Renderscript</a> developer guide.</p>
+ * </div>
**/
public class Allocation extends BaseObj {
Type mType;
diff --git a/graphics/java/android/renderscript/Element.java b/graphics/java/android/renderscript/Element.java
index 8a9ca8550992..d378a78699c4 100644
--- a/graphics/java/android/renderscript/Element.java
+++ b/graphics/java/android/renderscript/Element.java
@@ -40,6 +40,12 @@ import android.util.Log;
* <p>The primary source of elements are from scripts. A script that exports a
* bind point for a data structure generates a Renderscript element to represent the
* data exported by the script. The other common source of elements is from bitmap formats.</p>
+ *
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For more information about creating an application that uses Renderscript, read the
+ * <a href="{@docRoot}guide/topics/graphics/renderscript.html">Renderscript</a> developer guide.</p>
+ * </div>
**/
public class Element extends BaseObj {
int mSize;
diff --git a/graphics/java/android/renderscript/RSSurfaceView.java b/graphics/java/android/renderscript/RSSurfaceView.java
index a8e3107606c9..6756fd0d9225 100644
--- a/graphics/java/android/renderscript/RSSurfaceView.java
+++ b/graphics/java/android/renderscript/RSSurfaceView.java
@@ -31,6 +31,12 @@ import android.view.SurfaceView;
/**
* The Surface View for a graphics renderscript (RenderScriptGL) to draw on.
+ *
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For more information about creating an application that uses Renderscript, read the
+ * <a href="{@docRoot}guide/topics/graphics/renderscript.html">Renderscript</a> developer guide.</p>
+ * </div>
*/
public class RSSurfaceView extends SurfaceView implements SurfaceHolder.Callback {
private SurfaceHolder mSurfaceHolder;
diff --git a/graphics/java/android/renderscript/RenderScript.java b/graphics/java/android/renderscript/RenderScript.java
index 130563386174..ad10832b8966 100644
--- a/graphics/java/android/renderscript/RenderScript.java
+++ b/graphics/java/android/renderscript/RenderScript.java
@@ -32,13 +32,16 @@ import android.view.Surface;
/**
- * RenderScript base master class. An instance of this class creates native
+ * Renderscript base master class. An instance of this class creates native
* worker threads for processing commands from this object. This base class
* does not provide any extended capabilities beyond simple data processing.
* For extended capabilities use derived classes such as RenderScriptGL.
*
- *
- *
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For more information about creating an application that uses Renderscript, read the
+ * <a href="{@docRoot}guide/topics/graphics/renderscript.html">Renderscript</a> developer guide.</p>
+ * </div>
**/
public class RenderScript {
static final String LOG_TAG = "RenderScript_jni";
diff --git a/graphics/java/android/renderscript/RenderScriptGL.java b/graphics/java/android/renderscript/RenderScriptGL.java
index 2dfcc83fc70b..2cfeb176c146 100644
--- a/graphics/java/android/renderscript/RenderScriptGL.java
+++ b/graphics/java/android/renderscript/RenderScriptGL.java
@@ -29,11 +29,17 @@ import android.view.SurfaceHolder;
import android.view.SurfaceView;
/**
- * The Graphics derivitive of RenderScript. Extends the basic context to add a
+ * The Graphics derivitive of Renderscript. Extends the basic context to add a
* root script which is the display window for graphical output. When the
* system needs to update the display the currently bound root script will be
* called. This script is expected to issue the rendering commands to repaint
* the screen.
+ *
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For more information about creating an application that uses Renderscript, read the
+ * <a href="{@docRoot}guide/topics/graphics/renderscript.html">Renderscript</a> developer guide.</p>
+ * </div>
**/
public class RenderScriptGL extends RenderScript {
int mWidth;
diff --git a/graphics/java/android/renderscript/Type.java b/graphics/java/android/renderscript/Type.java
index f88af8bc9a8a..70d1de43e404 100644
--- a/graphics/java/android/renderscript/Type.java
+++ b/graphics/java/android/renderscript/Type.java
@@ -35,6 +35,11 @@ import android.util.Log;
*
* <p>The LOD and Faces dimensions are booleans to indicate present or not present.</p>
*
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For more information about creating an application that uses Renderscript, read the
+ * <a href="{@docRoot}guide/topics/graphics/renderscript.html">Renderscript</a> developer guide.</p>
+ * </div>
**/
public class Type extends BaseObj {
int mDimX;
diff --git a/graphics/java/android/renderscript/package.html b/graphics/java/android/renderscript/package.html
index 36a24fffead8..775645fb3650 100644
--- a/graphics/java/android/renderscript/package.html
+++ b/graphics/java/android/renderscript/package.html
@@ -1,10 +1,16 @@
<HTML>
<BODY>
<p>The Renderscript rendering and computational APIs offer a low-level, high performance means of
-carrying out mathematical calculations and 3D graphics rendering. An example of Renderscript in
-applications include the 3D carousel view that is present in Android 3.0 applications such as the
-Books and YouTube applications. This API is intended for developers who are comfortable working with
-native code and want to maximize their performance critical applications.</p>
+carrying out mathematical calculations and 3D graphics rendering.</p>
+
+<p>For more information, see the
+<a href="{@docRoot}guide/topics/graphics/renderscript.html">Renderscript</a> developer guide.</p>
+{@more}
+
+<p>An example of Renderscript in applications include the 3D carousel view that is present in
+Android 3.0 applications such as the Books and YouTube applications. This API is intended for
+developers who are comfortable working with native code and want to maximize their performance
+critical applications.</p>
<p>Renderscript adopts a control and slave architecture where the low-level native code is controlled by the
higher level Android system that runs in the virtual machine (VM). The VM code handles resource
@@ -14,7 +20,7 @@ the native Renderscript code, which you write in C (C99 standard). The Renderscr
does the intensive computation and returns the result back to the Android VM.</p>
<p>You can find the Renderscript native
-APIs in the <code>&lt;sdk_root&gt;/platforms/android-3.0/renderscript</code> directory.
+APIs in the <code>&lt;sdk_root&gt;/platforms/android-11/renderscript</code> directory.
The Android system APIs are broken into a few main groups:</p>
<h4>Core</h4>
@@ -37,7 +43,7 @@ classes include:</p>
<li>Byte2, Byte3, and Byte4</li>
<li>Float2, Float3, Float4</li>
<li>Int2, Int3, Int4</li>
- <li>Long2, Long3, Long4</li>
+ <li>Long2, Long3, Long4</li>
<li>Matrix2f, Matrix3f, Matrix4f</li>
<li>Short2, Short3, Short4</li>
</ul>
@@ -76,10 +82,5 @@ pipeline.</p>
</ul>
</p>
-<p>
-For information on how to create an application that uses Renderscript, and also the
-see <a href="../../../guide/topics/graphics/renderscript.html">3D with
-Renderscript</a> dev guide.
-</p>
</BODY>
</HTML>
diff --git a/location/java/android/location/LocationListener.java b/location/java/android/location/LocationListener.java
index 0f5f3885f591..88904c824912 100644
--- a/location/java/android/location/LocationListener.java
+++ b/location/java/android/location/LocationListener.java
@@ -24,6 +24,13 @@ import android.os.Bundle;
* LocationListener has been registered with the location manager service
* using the {@link LocationManager#requestLocationUpdates(String, long, float, LocationListener)}
* method.
+ *
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For more information about identifying user location, read the
+ * <a href="{@docRoot}guide/topics/location/obtaining-user-location.html">Obtaining User
+ * Location</a> developer guide.</p>
+ * </div>
*/
public interface LocationListener {
diff --git a/location/java/android/location/LocationManager.java b/location/java/android/location/LocationManager.java
index 2817df8ebabc..91d8bc1f431c 100644
--- a/location/java/android/location/LocationManager.java
+++ b/location/java/android/location/LocationManager.java
@@ -42,6 +42,13 @@ import java.util.List;
* instantiate this class directly; instead, retrieve it through
* {@link android.content.Context#getSystemService
* Context.getSystemService(Context.LOCATION_SERVICE)}.
+ *
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For more information about using location services, read the
+ * <a href="{@docRoot}guide/topics/location/index.html">Location and Maps</a>
+ * developer guide.</p>
+ * </div>
*/
public class LocationManager {
private static final String TAG = "LocationManager";
diff --git a/location/java/android/location/package.html b/location/java/android/location/package.html
index be3477476311..1abe0987f08c 100644
--- a/location/java/android/location/package.html
+++ b/location/java/android/location/package.html
@@ -1,10 +1,10 @@
<html>
-
<body>
<p>Contains classes that define Android location-based and related services.</p>
-<p>For more information about location services, see the documentation for <a
-href="{@docRoot}guide/topics/location/obtaining-user-location.html">Obtaining User Location</a>.</p>
+
+<p>For more information, see the
+<a href="{@docRoot}guide/topics/location/index.html">Location and Maps</a> developer guide.</p>
{@more}
</body>
diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp
index e9ac3f93e8a0..060a6322029f 100644
--- a/services/audioflinger/AudioFlinger.cpp
+++ b/services/audioflinger/AudioFlinger.cpp
@@ -2111,7 +2111,15 @@ uint32_t AudioFlinger::MixerThread::prepareTracks_l(const SortedVector< wp<Track
if (t->sampleRate() == (int)mSampleRate) {
minFrames = mFrameCount;
} else {
- minFrames = (mFrameCount * t->sampleRate()) / mSampleRate + 1;
+ // +1 for rounding and +1 for additional sample needed for interpolation
+ minFrames = (mFrameCount * t->sampleRate()) / mSampleRate + 1 + 1;
+ // add frames already consumed but not yet released by the resampler
+ // because cblk->framesReady() will include these frames
+ minFrames += mAudioMixer->getUnreleasedFrames(track->name());
+ // the minimum track buffer size is normally twice the number of frames necessary
+ // to fill one buffer and the resampler should not leave more than one buffer worth
+ // of unreleased frames after each pass, but just in case...
+ LOG_ASSERT(minFrames <= cblk->frameCount);
}
}
if ((cblk->framesReady() >= minFrames) && track->isReady() &&
diff --git a/services/audioflinger/AudioMixer.cpp b/services/audioflinger/AudioMixer.cpp
index 6e9319d81699..1200f75f13d8 100644
--- a/services/audioflinger/AudioMixer.cpp
+++ b/services/audioflinger/AudioMixer.cpp
@@ -331,6 +331,23 @@ void AudioMixer::track_t::adjustVolumeRamp(bool aux)
}
}
+size_t AudioMixer::track_t::getUnreleasedFrames()
+{
+ if (resampler != NULL) {
+ return resampler->getUnreleasedFrames();
+ }
+ return 0;
+}
+
+size_t AudioMixer::getUnreleasedFrames(int name)
+{
+ name -= TRACK0;
+ if (uint32_t(name) < MAX_NUM_TRACKS) {
+ track_t& track(mState.tracks[name]);
+ return track.getUnreleasedFrames();
+ }
+ return 0;
+}
status_t AudioMixer::setBufferProvider(AudioBufferProvider* buffer)
{
diff --git a/services/audioflinger/AudioMixer.h b/services/audioflinger/AudioMixer.h
index 75c91700e352..0137185d936f 100644
--- a/services/audioflinger/AudioMixer.h
+++ b/services/audioflinger/AudioMixer.h
@@ -91,6 +91,8 @@ public:
static void ditherAndClamp(int32_t* out, int32_t const *sums, size_t c);
+ size_t getUnreleasedFrames(int name);
+
private:
enum {
@@ -167,6 +169,7 @@ private:
bool doesResample() const;
void resetResampler();
void adjustVolumeRamp(bool aux);
+ size_t getUnreleasedFrames();
};
// pad to 32-bytes to fill cache line
diff --git a/services/audioflinger/AudioResampler.h b/services/audioflinger/AudioResampler.h
index 9f06c1cf1d2f..ffa690afd0ad 100644
--- a/services/audioflinger/AudioResampler.h
+++ b/services/audioflinger/AudioResampler.h
@@ -54,6 +54,7 @@ public:
AudioBufferProvider* provider) = 0;
virtual void reset();
+ virtual size_t getUnreleasedFrames() { return mInputIndex; }
protected:
// number of bits for phase fraction - 30 bits allows nearly 2x downsampling
diff --git a/telephony/java/com/android/internal/telephony/DataConnectionTracker.java b/telephony/java/com/android/internal/telephony/DataConnectionTracker.java
index 6d9a2c29c3cb..2c4fdef3f391 100644
--- a/telephony/java/com/android/internal/telephony/DataConnectionTracker.java
+++ b/telephony/java/com/android/internal/telephony/DataConnectionTracker.java
@@ -212,8 +212,10 @@ public abstract class DataConnectionTracker extends Handler {
// represents an invalid IP address
protected static final String NULL_IP = "0.0.0.0";
- // Default for the data stall alarm
- protected static final int DATA_STALL_ALARM_DELAY_IN_MS_DEFAULT = 1000 * 60 * 6;
+ // Default for the data stall alarm while non-aggressive stall detection
+ protected static final int DATA_STALL_ALARM_NON_AGGRESSIVE_DELAY_IN_MS_DEFAULT = 1000 * 60 * 6;
+ // Default for the data stall alarm for aggressive stall detection
+ protected static final int DATA_STALL_ALARM_AGGRESSIVE_DELAY_IN_MS_DEFAULT = 1000 * 60;
// If attempt is less than this value we're doing first level recovery
protected static final int DATA_STALL_NO_RECV_POLL_LIMIT = 1;
// Tag for tracking stale alarms
@@ -323,10 +325,12 @@ public abstract class DataConnectionTracker extends Handler {
mIsScreenOn = true;
stopNetStatPoll();
startNetStatPoll();
+ restartDataStallAlarm();
} else if (action.equals(Intent.ACTION_SCREEN_OFF)) {
mIsScreenOn = false;
stopNetStatPoll();
startNetStatPoll();
+ restartDataStallAlarm();
} else if (action.startsWith(getActionIntentReconnectAlarm())) {
log("Reconnect alarm. Previous state was " + mState);
onActionIntentReconnectAlarm(intent);
@@ -622,6 +626,7 @@ public abstract class DataConnectionTracker extends Handler {
protected abstract String getActionIntentDataStallAlarm();
protected abstract void startNetStatPoll();
protected abstract void stopNetStatPoll();
+ protected abstract void restartDataStallAlarm();
protected abstract void restartRadio();
protected abstract void log(String s);
protected abstract void loge(String s);
diff --git a/telephony/java/com/android/internal/telephony/cat/AppInterface.java b/telephony/java/com/android/internal/telephony/cat/AppInterface.java
index 2eb6ccb5ee2e..299e1408f5d1 100644
--- a/telephony/java/com/android/internal/telephony/cat/AppInterface.java
+++ b/telephony/java/com/android/internal/telephony/cat/AppInterface.java
@@ -42,6 +42,7 @@ public interface AppInterface {
* Enumeration for representing "Type of Command" of proactive commands.
* Those are the only commands which are supported by the Telephony. Any app
* implementation should support those.
+ * Refer to ETSI TS 102.223 section 9.4
*/
public static enum CommandType {
DISPLAY_TEXT(0x21),
@@ -59,7 +60,11 @@ public interface AppInterface {
SET_UP_IDLE_MODE_TEXT(0x28),
SET_UP_MENU(0x25),
SET_UP_CALL(0x10),
- PROVIDE_LOCAL_INFORMATION(0x26);
+ PROVIDE_LOCAL_INFORMATION(0x26),
+ OPEN_CHANNEL(0x40),
+ CLOSE_CHANNEL(0x41),
+ RECEIVE_DATA(0x42),
+ SEND_DATA(0x43);
private int mValue;
diff --git a/telephony/java/com/android/internal/telephony/cat/CatCmdMessage.java b/telephony/java/com/android/internal/telephony/cat/CatCmdMessage.java
index 5155bb2b6598..48c2e2bab7be 100644
--- a/telephony/java/com/android/internal/telephony/cat/CatCmdMessage.java
+++ b/telephony/java/com/android/internal/telephony/cat/CatCmdMessage.java
@@ -85,6 +85,13 @@ public class CatCmdMessage implements Parcelable {
mCallSettings.confirmMsg = ((CallSetupParams) cmdParams).confirmMsg;
mCallSettings.callMsg = ((CallSetupParams) cmdParams).callMsg;
break;
+ case OPEN_CHANNEL:
+ case CLOSE_CHANNEL:
+ case RECEIVE_DATA:
+ case SEND_DATA:
+ BIPClientParams param = (BIPClientParams) cmdParams;
+ mTextMsg = param.textMsg;
+ break;
}
}
diff --git a/telephony/java/com/android/internal/telephony/cat/CatService.java b/telephony/java/com/android/internal/telephony/cat/CatService.java
index 5a994f3de061..74af9fa45dda 100644
--- a/telephony/java/com/android/internal/telephony/cat/CatService.java
+++ b/telephony/java/com/android/internal/telephony/cat/CatService.java
@@ -18,6 +18,8 @@ package com.android.internal.telephony.cat;
import android.content.Context;
import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
import android.os.AsyncResult;
import android.os.Handler;
import android.os.HandlerThread;
@@ -32,6 +34,7 @@ import com.android.internal.telephony.IccRecords;
import java.io.ByteArrayOutputStream;
+import java.util.List;
import java.util.Locale;
class RilMessage {
@@ -72,6 +75,7 @@ public class CatService extends Handler implements AppInterface {
private CatCmdMessage mMenuCmd = null;
private RilMessageDecoder mMsgDecoder = null;
+ private boolean mStkAppInstalled = false;
// Service constants.
static final int MSG_ID_SESSION_END = 1;
@@ -125,7 +129,10 @@ public class CatService extends Handler implements AppInterface {
mCmdIf.registerForNVReady(this, MSG_ID_SIM_READY, null);
mIccRecords.registerForRecordsLoaded(this, MSG_ID_ICC_RECORDS_LOADED, null);
- CatLog.d(this, "Is running");
+ // Check if STK application is availalbe
+ mStkAppInstalled = isStkAppInstalled();
+
+ CatLog.d(this, "Running CAT service. STK app installed:" + mStkAppInstalled);
}
public void dispose() {
@@ -154,7 +161,7 @@ public class CatService extends Handler implements AppInterface {
if (rilMsg.mResCode == ResultCode.OK) {
cmdParams = (CommandParams) rilMsg.mData;
if (cmdParams != null) {
- handleProactiveCommand(cmdParams);
+ handleCommand(cmdParams, false);
}
}
break;
@@ -170,7 +177,7 @@ public class CatService extends Handler implements AppInterface {
}
if (cmdParams != null) {
if (rilMsg.mResCode == ResultCode.OK) {
- handleProactiveCommand(cmdParams);
+ handleCommand(cmdParams, true);
} else {
// for proactive commands that couldn't be decoded
// successfully respond with the code generated by the
@@ -183,7 +190,7 @@ public class CatService extends Handler implements AppInterface {
case MSG_ID_REFRESH:
cmdParams = (CommandParams) rilMsg.mData;
if (cmdParams != null) {
- handleProactiveCommand(cmdParams);
+ handleCommand(cmdParams, false);
}
break;
case MSG_ID_SESSION_END:
@@ -197,11 +204,13 @@ public class CatService extends Handler implements AppInterface {
}
/**
- * Handles RIL_UNSOL_STK_PROACTIVE_COMMAND unsolicited command from RIL.
+ * Handles RIL_UNSOL_STK_EVENT_NOTIFY or RIL_UNSOL_STK_PROACTIVE_COMMAND command
+ * from RIL.
* Sends valid proactive command data to the application using intents.
- *
+ * RIL_REQUEST_STK_SEND_TERMINAL_RESPONSE will be send back if the command is
+ * from RIL_UNSOL_STK_PROACTIVE_COMMAND.
*/
- private void handleProactiveCommand(CommandParams cmdParams) {
+ private void handleCommand(CommandParams cmdParams, boolean isProactiveCmd) {
CatLog.d(this, cmdParams.getCommandType().name());
CharSequence message;
@@ -235,15 +244,16 @@ public class CatService extends Handler implements AppInterface {
case CommandParamsFactory.DTTZ_SETTING:
resp = new DTTZResponseData(null);
sendTerminalResponse(cmdParams.cmdDet, ResultCode.OK, false, 0, resp);
- return;
+ break;
case CommandParamsFactory.LANGUAGE_SETTING:
resp = new LanguageResponseData(Locale.getDefault().getLanguage());
sendTerminalResponse(cmdParams.cmdDet, ResultCode.OK, false, 0, resp);
- return;
+ break;
default:
sendTerminalResponse(cmdParams.cmdDet, ResultCode.OK, false, 0, null);
- return;
}
+ // No need to start STK app here.
+ return;
case LAUNCH_BROWSER:
if ((((LaunchBrowserParams) cmdParams).confirmMsg.text != null)
&& (((LaunchBrowserParams) cmdParams).confirmMsg.text.equals(STK_DEFAULT))) {
@@ -274,6 +284,42 @@ public class CatService extends Handler implements AppInterface {
((CallSetupParams) cmdParams).confirmMsg.text = message.toString();
}
break;
+ case OPEN_CHANNEL:
+ case CLOSE_CHANNEL:
+ case RECEIVE_DATA:
+ case SEND_DATA:
+ BIPClientParams cmd = (BIPClientParams) cmdParams;
+ if (cmd.bHasAlphaId && (cmd.textMsg.text == null)) {
+ CatLog.d(this, "cmd " + cmdParams.getCommandType() + " with null alpha id");
+ // If alpha length is zero, we just respond with OK.
+ if (isProactiveCmd) {
+ sendTerminalResponse(cmdParams.cmdDet, ResultCode.OK, false, 0, null);
+ }
+ return;
+ }
+ // Respond with permanent failure to avoid retry if STK app is not present.
+ if (!mStkAppInstalled) {
+ CatLog.d(this, "No STK application found.");
+ if (isProactiveCmd) {
+ sendTerminalResponse(cmdParams.cmdDet,
+ ResultCode.BEYOND_TERMINAL_CAPABILITY,
+ false, 0, null);
+ return;
+ }
+ }
+ /*
+ * CLOSE_CHANNEL, RECEIVE_DATA and SEND_DATA can be delivered by
+ * either PROACTIVE_COMMAND or EVENT_NOTIFY.
+ * If PROACTIVE_COMMAND is used for those commands, send terminal
+ * response here.
+ */
+ if (isProactiveCmd &&
+ ((cmdParams.getCommandType() == CommandType.CLOSE_CHANNEL) ||
+ (cmdParams.getCommandType() == CommandType.RECEIVE_DATA) ||
+ (cmdParams.getCommandType() == CommandType.SEND_DATA))) {
+ sendTerminalResponse(cmdParams.cmdDet, ResultCode.OK, false, 0, null);
+ }
+ break;
default:
CatLog.d(this, "Unsupported command");
return;
@@ -684,6 +730,7 @@ public class CatService extends Handler implements AppInterface {
case NO_RESPONSE_FROM_USER:
case UICC_SESSION_TERM_BY_USER:
case BACKWARD_MOVE_BY_USER:
+ case USER_NOT_ACCEPT:
resp = null;
break;
default:
@@ -692,4 +739,14 @@ public class CatService extends Handler implements AppInterface {
sendTerminalResponse(cmdDet, resMsg.resCode, false, 0, resp);
mCurrntCmd = null;
}
+
+ private boolean isStkAppInstalled() {
+ Intent intent = new Intent(AppInterface.CAT_CMD_ACTION);
+ PackageManager pm = mContext.getPackageManager();
+ List<ResolveInfo> broadcastReceivers =
+ pm.queryBroadcastReceivers(intent, PackageManager.GET_META_DATA);
+ int numReceiver = broadcastReceivers == null ? 0 : broadcastReceivers.size();
+
+ return (numReceiver > 0);
+ }
}
diff --git a/telephony/java/com/android/internal/telephony/cat/CommandParams.java b/telephony/java/com/android/internal/telephony/cat/CommandParams.java
index 22a5c8ced5c5..959c9e2ca2f9 100644
--- a/telephony/java/com/android/internal/telephony/cat/CommandParams.java
+++ b/telephony/java/com/android/internal/telephony/cat/CommandParams.java
@@ -166,4 +166,29 @@ class GetInputParams extends CommandParams {
}
}
+/*
+ * BIP (Bearer Independent Protocol) is the mechanism for SIM card applications
+ * to access data connection through the mobile device.
+ *
+ * SIM utilizes proactive commands (OPEN CHANNEL, CLOSE CHANNEL, SEND DATA and
+ * RECEIVE DATA to control/read/write data for BIP. Refer to ETSI TS 102 223 for
+ * the details of proactive commands procedures and their structures.
+ */
+class BIPClientParams extends CommandParams {
+ TextMessage textMsg;
+ boolean bHasAlphaId;
+
+ BIPClientParams(CommandDetails cmdDet, TextMessage textMsg, boolean has_alpha_id) {
+ super(cmdDet);
+ this.textMsg = textMsg;
+ this.bHasAlphaId = has_alpha_id;
+ }
+ boolean setIcon(Bitmap icon) {
+ if (icon != null && textMsg != null) {
+ textMsg.icon = icon;
+ return true;
+ }
+ return false;
+ }
+}
diff --git a/telephony/java/com/android/internal/telephony/cat/CommandParamsFactory.java b/telephony/java/com/android/internal/telephony/cat/CommandParamsFactory.java
index e7fca5a8b936..89c13297863d 100644
--- a/telephony/java/com/android/internal/telephony/cat/CommandParamsFactory.java
+++ b/telephony/java/com/android/internal/telephony/cat/CommandParamsFactory.java
@@ -165,6 +165,12 @@ class CommandParamsFactory extends Handler {
case PROVIDE_LOCAL_INFORMATION:
cmdPending = processProvideLocalInfo(cmdDet, ctlvs);
break;
+ case OPEN_CHANNEL:
+ case CLOSE_CHANNEL:
+ case RECEIVE_DATA:
+ case SEND_DATA:
+ cmdPending = processBIPClient(cmdDet, ctlvs);
+ break;
default:
// unsupported proactive commands
mCmdParams = new CommandParams(cmdDet);
@@ -893,4 +899,43 @@ class CommandParamsFactory extends Handler {
}
return false;
}
+
+ private boolean processBIPClient(CommandDetails cmdDet,
+ List<ComprehensionTlv> ctlvs) throws ResultException {
+ AppInterface.CommandType commandType =
+ AppInterface.CommandType.fromInt(cmdDet.typeOfCommand);
+ if (commandType != null) {
+ CatLog.d(this, "process "+ commandType.name());
+ }
+
+ TextMessage textMsg = new TextMessage();
+ IconId iconId = null;
+ ComprehensionTlv ctlv = null;
+ boolean has_alpha_id = false;
+
+ // parse alpha identifier
+ ctlv = searchForTag(ComprehensionTlvTag.ALPHA_ID, ctlvs);
+ if (ctlv != null) {
+ textMsg.text = ValueParser.retrieveAlphaId(ctlv);
+ CatLog.d(this, "alpha TLV text=" + textMsg.text);
+ has_alpha_id = true;
+ }
+
+ // parse icon identifier
+ ctlv = searchForTag(ComprehensionTlvTag.ICON_ID, ctlvs);
+ if (ctlv != null) {
+ iconId = ValueParser.retrieveIconId(ctlv);
+ textMsg.iconSelfExplanatory = iconId.selfExplanatory;
+ }
+
+ textMsg.responseNeeded = false;
+ mCmdParams = new BIPClientParams(cmdDet, textMsg, has_alpha_id);
+
+ if (iconId != null) {
+ mIconLoadState = LOAD_SINGLE_ICON;
+ mIconLoader.loadIcon(iconId.recordNumber, this.obtainMessage(MSG_ID_LOAD_ICON_DONE));
+ return true;
+ }
+ return false;
+ }
}
diff --git a/telephony/java/com/android/internal/telephony/cdma/CdmaDataConnectionTracker.java b/telephony/java/com/android/internal/telephony/cdma/CdmaDataConnectionTracker.java
index 5889372526c7..e2a4a7a4c1df 100644
--- a/telephony/java/com/android/internal/telephony/cdma/CdmaDataConnectionTracker.java
+++ b/telephony/java/com/android/internal/telephony/cdma/CdmaDataConnectionTracker.java
@@ -41,6 +41,7 @@ import com.android.internal.telephony.DataConnectionAc;
import com.android.internal.telephony.DataConnectionTracker;
import com.android.internal.telephony.EventLogTags;
import com.android.internal.telephony.RetryManager;
+import com.android.internal.telephony.RILConstants;
import com.android.internal.telephony.Phone;
import com.android.internal.util.AsyncChannel;
@@ -158,6 +159,9 @@ public final class CdmaDataConnectionTracker extends DataConnectionTracker {
}
@Override
+ protected void restartDataStallAlarm() {}
+
+ @Override
protected void setState(State s) {
if (DBG) log ("setState: " + s);
if (mState != s) {
@@ -506,7 +510,7 @@ public final class CdmaDataConnectionTracker extends DataConnectionTracker {
return retry;
}
- private void reconnectAfterFail(FailCause lastFailCauseCode, String reason) {
+ private void reconnectAfterFail(FailCause lastFailCauseCode, String reason, int retryOverride) {
if (mState == State.FAILED) {
/**
* For now With CDMA we never try to reconnect on
@@ -514,9 +518,12 @@ public final class CdmaDataConnectionTracker extends DataConnectionTracker {
* at the last time until the state is changed.
* TODO: Make this configurable?
*/
- int nextReconnectDelay = mDataConnections.get(0).getRetryTimer();
+ int nextReconnectDelay = retryOverride;
+ if (nextReconnectDelay < 0) {
+ nextReconnectDelay = mDataConnections.get(0).getRetryTimer();
+ mDataConnections.get(0).increaseRetryCount();
+ }
startAlarmForReconnect(nextReconnectDelay, reason);
- mDataConnections.get(0).increaseRetryCount();
if (!shouldPostNotification(lastFailCauseCode)) {
log("NOT Posting Data Connection Unavailable notification "
@@ -674,7 +681,17 @@ public final class CdmaDataConnectionTracker extends DataConnectionTracker {
notifyNoData(cause);
return;
}
- startDelayedRetry(cause, reason);
+
+ int retryOverride = -1;
+ if (ar.exception instanceof DataConnection.CallSetupException) {
+ retryOverride =
+ ((DataConnection.CallSetupException)ar.exception).getRetryOverride();
+ }
+ if (retryOverride == RILConstants.MAX_INT) {
+ if (DBG) log("No retry is suggested.");
+ } else {
+ startDelayedRetry(cause, reason, retryOverride);
+ }
}
}
@@ -907,9 +924,9 @@ public final class CdmaDataConnectionTracker extends DataConnectionTracker {
}
}
- private void startDelayedRetry(FailCause cause, String reason) {
+ private void startDelayedRetry(FailCause cause, String reason, int retryOverride) {
notifyNoData(cause);
- reconnectAfterFail(cause, reason);
+ reconnectAfterFail(cause, reason, retryOverride);
}
@Override
diff --git a/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java b/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java
index 963db2c6809d..3c8ef40af497 100644
--- a/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java
+++ b/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java
@@ -97,13 +97,21 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
private ContentResolver mResolver;
// Recovery action taken in case of data stall
- class RecoveryAction {
+ private static class RecoveryAction {
public static final int GET_DATA_CALL_LIST = 0;
public static final int CLEANUP = 1;
public static final int REREGISTER = 2;
public static final int RADIO_RESTART = 3;
public static final int RADIO_RESTART_WITH_PROP = 4;
+
+ private static boolean isAggressiveRecovery(int value) {
+ return ((value == RecoveryAction.CLEANUP) ||
+ (value == RecoveryAction.REREGISTER) ||
+ (value == RecoveryAction.RADIO_RESTART) ||
+ (value == RecoveryAction.RADIO_RESTART_WITH_PROP));
+ }
}
+
public int getRecoveryAction() {
int action = Settings.System.getInt(mPhone.getContext().getContentResolver(),
"radio.data.stall.recovery.action", RecoveryAction.GET_DATA_CALL_LIST);
@@ -131,6 +139,9 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
static final String APN_ID = "apn_id";
private boolean canSetPreferApn = false;
+ private static final boolean DATA_STALL_SUSPECTED = true;
+ private static final boolean DATA_STALL_NOT_SUSPECTED = false;
+
@Override
protected void onActionIntentReconnectAlarm(Intent intent) {
if (DBG) log("GPRS reconnect alarm. Previous state was " + mState);
@@ -586,7 +597,7 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
if (getOverallState() == State.CONNECTED) {
if (DBG) log("onDataConnectionAttached: start polling notify attached");
startNetStatPoll();
- startDataStallAlarm();
+ startDataStallAlarm(DATA_STALL_NOT_SUSPECTED);
notifyDataConnection(Phone.REASON_DATA_ATTACHED);
} else {
// update APN availability so that APN can be enabled.
@@ -1271,7 +1282,7 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
// setState(State.CONNECTED);
mPhone.notifyDataConnection(apnContext.getReason(), apnContext.getApnType());
startNetStatPoll();
- startDataStallAlarm();
+ startDataStallAlarm(DATA_STALL_NOT_SUSPECTED);
// reset reconnect timer
apnContext.getDataConnection().resetRetryCount();
}
@@ -1437,10 +1448,12 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
Settings.Secure.PDP_WATCHDOG_TRIGGER_PACKET_COUNT,
NUMBER_SENT_PACKETS_OF_HANG);
+ boolean suspectedStall = DATA_STALL_NOT_SUSPECTED;
if (mSentSinceLastRecv >= hangWatchdogTrigger) {
if (DBG) {
log("onDataStallAlarm: tag=" + tag + " do recovery action=" + getRecoveryAction());
}
+ suspectedStall = DATA_STALL_SUSPECTED;
sendMessage(obtainMessage(EVENT_DO_RECOVERY));
} else {
if (VDBG) {
@@ -1448,7 +1461,7 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
" pkts since last received, < watchdogTrigger=" + hangWatchdogTrigger);
}
}
- startDataStallAlarm();
+ startDataStallAlarm(suspectedStall);
}
@@ -1614,12 +1627,24 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
}
- private void startDataStallAlarm() {
- int delayInMs = Settings.Secure.getInt(mResolver,
- Settings.Secure.DATA_STALL_ALARM_DELAY_IN_MS,
- DATA_STALL_ALARM_DELAY_IN_MS_DEFAULT);
+ private void startDataStallAlarm(boolean suspectedStall) {
+ int nextAction = getRecoveryAction();
+ int delayInMs;
+
+ // If screen is on or data stall is currently suspected, set the alarm
+ // with an aggresive timeout.
+ if (mIsScreenOn || suspectedStall || RecoveryAction.isAggressiveRecovery(nextAction)) {
+ delayInMs = Settings.Secure.getInt(mResolver,
+ Settings.Secure.DATA_STALL_ALARM_AGGRESSIVE_DELAY_IN_MS,
+ DATA_STALL_ALARM_AGGRESSIVE_DELAY_IN_MS_DEFAULT);
+ } else {
+ delayInMs = Settings.Secure.getInt(mResolver,
+ Settings.Secure.DATA_STALL_ALARM_NON_AGGRESSIVE_DELAY_IN_MS,
+ DATA_STALL_ALARM_NON_AGGRESSIVE_DELAY_IN_MS_DEFAULT);
+ }
+
mDataStallAlarmTag += 1;
- if (DBG) {
+ if (VDBG) {
log("startDataStallAlarm: tag=" + mDataStallAlarmTag +
" delay=" + (delayInMs / 1000) + "s");
}
@@ -1638,7 +1663,7 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
AlarmManager am =
(AlarmManager) mPhone.getContext().getSystemService(Context.ALARM_SERVICE);
- if (DBG) {
+ if (VDBG) {
log("stopDataStallAlarm: current tag=" + mDataStallAlarmTag +
" mDataStallAlarmIntent=" + mDataStallAlarmIntent);
}
@@ -1649,6 +1674,20 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
}
}
+ @Override
+ protected void restartDataStallAlarm() {
+ // To be called on screen status change.
+ // Do not cancel the alarm if it is set with aggressive timeout.
+ int nextAction = getRecoveryAction();
+
+ if (RecoveryAction.isAggressiveRecovery(nextAction)) {
+ if (DBG) log("data stall recovery action is pending. not resetting the alarm.");
+ return;
+ }
+ stopDataStallAlarm();
+ startDataStallAlarm(DATA_STALL_NOT_SUSPECTED);
+ }
+
private void notifyNoData(GsmDataConnection.FailCause lastFailCauseCode,
ApnContext apnContext) {
if (DBG) log( "notifyNoData: type=" + apnContext.getApnType());
@@ -2044,7 +2083,7 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
if (isConnected()) {
if (!mPhone.getServiceStateTracker().isConcurrentVoiceAndDataAllowed()) {
startNetStatPoll();
- startDataStallAlarm();
+ startDataStallAlarm(DATA_STALL_NOT_SUSPECTED);
notifyDataConnection(Phone.REASON_VOICE_CALL_ENDED);
} else {
// clean slate after call end.
@@ -2386,7 +2425,7 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
mIsPsRestricted = false;
if (isConnected()) {
startNetStatPoll();
- startDataStallAlarm();
+ startDataStallAlarm(DATA_STALL_NOT_SUSPECTED);
} else {
// TODO: Should all PDN states be checked to fail?
if (mState == State.FAILED) {
diff --git a/test-runner/src/android/test/ActivityInstrumentationTestCase2.java b/test-runner/src/android/test/ActivityInstrumentationTestCase2.java
index 24b125e0e287..c4bcf312ad9c 100644
--- a/test-runner/src/android/test/ActivityInstrumentationTestCase2.java
+++ b/test-runner/src/android/test/ActivityInstrumentationTestCase2.java
@@ -37,6 +37,12 @@ import java.lang.reflect.Method;
* New tests should be written using this base class.
*
* <p>If you prefer an isolated unit test, see {@link android.test.ActivityUnitTestCase}.
+ *
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For more information about application testing, read the
+ * <a href="{@docRoot}guide/topics/testing/index.html">Testing</a> developer guide.</p>
+ * </div>
*/
public abstract class ActivityInstrumentationTestCase2<T extends Activity>
extends ActivityTestCase {
diff --git a/test-runner/src/android/test/InstrumentationTestRunner.java b/test-runner/src/android/test/InstrumentationTestRunner.java
index 70cf89e5f817..43285fb2ce07 100644
--- a/test-runner/src/android/test/InstrumentationTestRunner.java
+++ b/test-runner/src/android/test/InstrumentationTestRunner.java
@@ -54,7 +54,15 @@ import junit.textui.ResultPrinter;
/**
* An {@link Instrumentation} that runs various types of {@link junit.framework.TestCase}s against
- * an Android package (application). Typical usage:
+ * an Android package (application).
+ *
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For more information about application testing, read the
+ * <a href="{@docRoot}guide/topics/testing/index.html">Testing</a> developer guide.</p>
+ * </div>
+ *
+ * <h3>Typical Usage</h3>
* <ol>
* <li>Write {@link junit.framework.TestCase}s that perform unit, functional, or performance tests
* against the classes in your package. Typically these are subclassed from:
diff --git a/test-runner/src/android/test/ServiceTestCase.java b/test-runner/src/android/test/ServiceTestCase.java
index 8fad5d670dcd..06c1c5b31f4b 100644
--- a/test-runner/src/android/test/ServiceTestCase.java
+++ b/test-runner/src/android/test/ServiceTestCase.java
@@ -34,6 +34,12 @@ import java.util.Random;
* Service, and hooks with which you can inject various dependencies and control
* the environment in which your Service is tested.
*
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For more information about application testing, read the
+ * <a href="{@docRoot}guide/topics/testing/index.html">Testing</a> developer guide.</p>
+ * </div>
+ *
* <p><b>Lifecycle Support.</b>
* A Service is accessed with a specific sequence of
* calls, as described in the
diff --git a/test-runner/src/android/test/mock/MockContentResolver.java b/test-runner/src/android/test/mock/MockContentResolver.java
index 26eb8e4d5457..6c91f4ea555a 100644
--- a/test-runner/src/android/test/mock/MockContentResolver.java
+++ b/test-runner/src/android/test/mock/MockContentResolver.java
@@ -43,6 +43,12 @@ import java.util.Map;
* Users can also set an authority's entry in the map to null, so that a provider is completely
* mocked out.
* </p>
+ *
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For more information about application testing, read the
+ * <a href="{@docRoot}guide/topics/testing/index.html">Testing</a> developer guide.</p>
+ * </div>
*/
public class MockContentResolver extends ContentResolver {
diff --git a/test-runner/src/android/test/mock/package.html b/test-runner/src/android/test/mock/package.html
index 0f1bc6f466c2..29b2d8077ad4 100644
--- a/test-runner/src/android/test/mock/package.html
+++ b/test-runner/src/android/test/mock/package.html
@@ -1,5 +1,10 @@
<HTML>
<BODY>
-Utility classes providing stubs or mocks of various Android framework building blocks.
+<p>Utility classes providing stubs or mocks of various Android framework building blocks.</p>
+
+<p>For more information, see the
+<a href="{@docRoot}guide/topics/testing/index.html">Testing</a> developer guide.</p>
+{@more}
+
</BODY>
</HTML>
diff --git a/voip/java/android/net/sip/SipAudioCall.java b/voip/java/android/net/sip/SipAudioCall.java
index fcdbd2cef6bf..1d6705592e0b 100644
--- a/voip/java/android/net/sip/SipAudioCall.java
+++ b/voip/java/android/net/sip/SipAudioCall.java
@@ -44,13 +44,20 @@ import java.util.Map;
*
* <p class="note"><strong>Note:</strong> Using this class require the
* {@link android.Manifest.permission#INTERNET} and
- * {@link android.Manifest.permission#USE_SIP} permissions.<br/><br/>In addition, {@link
+ * {@link android.Manifest.permission#USE_SIP} permissions. In addition, {@link
* #startAudio} requires the
* {@link android.Manifest.permission#RECORD_AUDIO},
* {@link android.Manifest.permission#ACCESS_WIFI_STATE}, and
* {@link android.Manifest.permission#WAKE_LOCK} permissions; and {@link #setSpeakerMode
* setSpeakerMode()} requires the
* {@link android.Manifest.permission#MODIFY_AUDIO_SETTINGS} permission.</p>
+ *
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For more information about using SIP, read the
+ * <a href="{@docRoot}guide/topics/network/sip.html">Session Initiation Protocol</a>
+ * developer guide.</p>
+ * </div>
*/
public class SipAudioCall {
private static final String TAG = SipAudioCall.class.getSimpleName();
diff --git a/voip/java/android/net/sip/SipManager.java b/voip/java/android/net/sip/SipManager.java
index cd0b5c40c885..74c36725a704 100644
--- a/voip/java/android/net/sip/SipManager.java
+++ b/voip/java/android/net/sip/SipManager.java
@@ -49,9 +49,16 @@ import java.text.ParseException;
* SIP. You should always call {@link android.net.sip.SipManager#isVoipSupported
* isVoipSupported()} to verify that the device supports VOIP calling and {@link
* android.net.sip.SipManager#isApiSupported isApiSupported()} to verify that the device supports
- * the SIP APIs.<br/><br/>Your application must also request the {@link
+ * the SIP APIs. Your application must also request the {@link
* android.Manifest.permission#INTERNET} and {@link android.Manifest.permission#USE_SIP}
* permissions.</p>
+ *
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For more information about using SIP, read the
+ * <a href="{@docRoot}guide/topics/network/sip.html">Session Initiation Protocol</a>
+ * developer guide.</p>
+ * </div>
*/
public class SipManager {
/**
diff --git a/voip/java/android/net/sip/SipProfile.java b/voip/java/android/net/sip/SipProfile.java
index 34d91dd7f84f..0ef754ce4ef8 100644
--- a/voip/java/android/net/sip/SipProfile.java
+++ b/voip/java/android/net/sip/SipProfile.java
@@ -37,6 +37,13 @@ import javax.sip.address.URI;
* <p>You can create a {@link SipProfile} using {@link
* SipProfile.Builder}. You can also retrieve one from a {@link SipSession}, using {@link
* SipSession#getLocalProfile} and {@link SipSession#getPeerProfile}.</p>
+ *
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For more information about using SIP, read the
+ * <a href="{@docRoot}guide/topics/network/sip.html">Session Initiation Protocol</a>
+ * developer guide.</p>
+ * </div>
*/
public class SipProfile implements Parcelable, Serializable, Cloneable {
private static final long serialVersionUID = 1L;
diff --git a/voip/java/android/net/sip/package.html b/voip/java/android/net/sip/package.html
index 790656be3b4a..eb683d0e4759 100644
--- a/voip/java/android/net/sip/package.html
+++ b/voip/java/android/net/sip/package.html
@@ -3,6 +3,11 @@
<p>Provides access to Session Initiation Protocol (SIP) functionality, such as
making and answering VOIP calls using SIP.</p>
+<p>For more information, see the
+<a href="{@docRoot}guide/topics/network/sip.html">Session Initiation Protocol</a>
+developer guide.</p>
+{@more}
+
<p>To get started, you need to get an instance of the {@link android.net.sip.SipManager} by
calling {@link android.net.sip.SipManager#newInstance newInstance()}.</p>
@@ -31,9 +36,10 @@ Not all Android-powered devices support VOIP functionality with SIP. Before perf
activity, you should call {@link android.net.sip.SipManager#isVoipSupported isVoipSupported()}
to verify that the device supports VOIP calling and {@link
android.net.sip.SipManager#isApiSupported isApiSupported()} to verify that the device supports the
-SIP APIs.<br/><br/>
+SIP APIs.
Your application must also request the {@link android.Manifest.permission#INTERNET} and {@link
android.Manifest.permission#USE_SIP} permissions in order to use the SIP APIs.
</p>
+
</BODY>
</HTML> \ No newline at end of file