diff options
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> — Display priority/tag and PID of originating process (the default - format).</li> + <li><code>brief</code> — Display priority/tag and PID of the process issuing the + message (the default format).</li> <li><code>process</code> — Display PID only.</li> <li><code>tag</code> — Display the priority/tag only.</li> - <li><code>thread</code> — Display process:thread and priority/tag only.</li> - <li><code>raw</code> — Display the raw log message, with no other metadata fields.</li> <li><code>time</code> — Display the date, invocation time, priority/tag, and PID of the - originating process.</li> + process issuing the message.</li> + + <li><code>threadtime</code> — Display the date, invocation time, priority, tag, and + the PID and TID of the thread issuing the message.</li> <li><code>long</code> — 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><priority>/<tag></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> — Display priority/tag and PID of originating process (the default format).</li> + <li><code>brief</code> — Display priority/tag and the PID of process issuing the message (the default format).</li> <li><code>process</code> — Display PID only.</li> <li><code>tag</code> — Display the priority/tag only. </li> - <li><code>thread</code> — Display process:thread and priority/tag only. </li> <li><code>raw</code> — Display the raw log message, with no other metadata fields.</li> - <li><code>time</code> — Display the date, invocation time, priority/tag, and PID of the originating process.</li> + <li><code>time</code> — Display the date, invocation time, priority/tag, and PID of the process issuing the message.</li> + <li><code>threadtime</code> — Display the date, invocation time, priority, tag, and the PID and TID of the thread issuing the message.</li> <li><code>long</code> — 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><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"> </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&flay=software&directoryId=20&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&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&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><sdk_root>/platforms/android-3.0/renderscript</code> directory. +APIs in the <code><sdk_root>/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 |