diff options
16 files changed, 854 insertions, 98 deletions
diff --git a/core/java/android/net/ConnectivityManager.java b/core/java/android/net/ConnectivityManager.java index cab8ed2..491c73a 100644 --- a/core/java/android/net/ConnectivityManager.java +++ b/core/java/android/net/ConnectivityManager.java @@ -224,9 +224,9 @@ public class ConnectivityManager /** {@hide} */ public static final int TYPE_ETHERNET = 9; /** {@hide} TODO: Need to adjust this for WiMAX. */ - public static final int MAX_RADIO_TYPE = TYPE_DUMMY; + public static final int MAX_RADIO_TYPE = TYPE_ETHERNET; /** {@hide} TODO: Need to adjust this for WiMAX. */ - public static final int MAX_NETWORK_TYPE = TYPE_DUMMY; + public static final int MAX_NETWORK_TYPE = TYPE_ETHERNET; public static final int DEFAULT_NETWORK_PREFERENCE = TYPE_WIFI; diff --git a/core/java/android/net/EthernetDataTracker.java b/core/java/android/net/EthernetDataTracker.java new file mode 100644 index 0000000..df5fdd0 --- /dev/null +++ b/core/java/android/net/EthernetDataTracker.java @@ -0,0 +1,333 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.net; + +import android.content.Context; +import android.net.ConnectivityManager; +import android.net.DhcpInfoInternal; +import android.net.LinkAddress; +import android.net.LinkCapabilities; +import android.net.LinkProperties; +import android.net.NetworkInfo; +import android.net.NetworkInfo.DetailedState; +import android.net.NetworkStateTracker; +import android.net.NetworkUtils; +import android.os.Handler; +import android.os.IBinder; +import android.os.INetworkManagementService; +import android.os.Message; +import android.os.RemoteException; +import android.os.ServiceManager; +import android.util.Log; + +import java.net.InetAddress; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicInteger; + +/** + * This class tracks the data connection associated with Ethernet + * This is a singleton class and an instance will be created by + * ConnectivityService. + * @hide + */ +public class EthernetDataTracker implements NetworkStateTracker { + private static final String NETWORKTYPE = "ETHERNET"; + private static final String TAG = "Ethernet"; + + private AtomicBoolean mTeardownRequested = new AtomicBoolean(false); + private AtomicBoolean mPrivateDnsRouteSet = new AtomicBoolean(false); + private AtomicInteger mDefaultGatewayAddr = new AtomicInteger(0); + private AtomicBoolean mDefaultRouteSet = new AtomicBoolean(false); + + private LinkProperties mLinkProperties; + private LinkCapabilities mLinkCapabilities; + private NetworkInfo mNetworkInfo; + private InterfaceObserver mInterfaceObserver; + + /* For sending events to connectivity service handler */ + private Handler mCsHandler; + private Context mContext; + + private static EthernetDataTracker sInstance; + private static String mIface = ""; + + private static class InterfaceObserver extends INetworkManagementEventObserver.Stub { + private EthernetDataTracker mTracker; + + InterfaceObserver(EthernetDataTracker tracker) { + super(); + mTracker = tracker; + } + + public void interfaceLinkStatusChanged(String iface, boolean up) { + Log.d(TAG, "Interface " + iface + " link " + (up ? "up" : "down")); + } + + public void interfaceAdded(String iface) { + mTracker.interfaceAdded(iface); + } + + public void interfaceRemoved(String iface) { + mTracker.interfaceRemoved(iface); + } + } + + private EthernetDataTracker() { + mNetworkInfo = new NetworkInfo(ConnectivityManager.TYPE_ETHERNET, 0, NETWORKTYPE, ""); + mLinkProperties = new LinkProperties(); + mLinkCapabilities = new LinkCapabilities(); + + mNetworkInfo.setIsAvailable(false); + setTeardownRequested(false); + } + + private void interfaceAdded(String iface) { + if (!iface.matches("eth\\d")) + return; + + Log.d(TAG, "Adding " + iface); + + synchronized(mIface) { + if(!mIface.isEmpty()) + return; + mIface = iface; + } + + mNetworkInfo.setIsAvailable(true); + Message msg = mCsHandler.obtainMessage(EVENT_CONFIGURATION_CHANGED, mNetworkInfo); + msg.sendToTarget(); + + runDhcp(); + } + + private void interfaceRemoved(String iface) { + if (!iface.equals(mIface)) + return; + + Log.d(TAG, "Removing " + iface); + + NetworkUtils.stopDhcp(mIface); + + mLinkProperties.clear(); + mNetworkInfo.setIsAvailable(false); + mNetworkInfo.setDetailedState(DetailedState.DISCONNECTED, null, null); + + Message msg = mCsHandler.obtainMessage(EVENT_CONFIGURATION_CHANGED, mNetworkInfo); + msg.sendToTarget(); + + msg = mCsHandler.obtainMessage(EVENT_STATE_CHANGED, mNetworkInfo); + msg.sendToTarget(); + + mIface = ""; + } + + private void runDhcp() { + Thread dhcpThread = new Thread(new Runnable() { + public void run() { + DhcpInfoInternal dhcpInfoInternal = new DhcpInfoInternal(); + if (!NetworkUtils.runDhcp(mIface, dhcpInfoInternal)) { + Log.e(TAG, "DHCP request error:" + NetworkUtils.getDhcpError()); + return; + } + mLinkProperties = dhcpInfoInternal.makeLinkProperties(); + mLinkProperties.setInterfaceName(mIface); + + mNetworkInfo.setDetailedState(DetailedState.CONNECTED, null, null); + Message msg = mCsHandler.obtainMessage(EVENT_STATE_CHANGED, mNetworkInfo); + msg.sendToTarget(); + } + }); + dhcpThread.start(); + } + + public static synchronized EthernetDataTracker getInstance() { + if (sInstance == null) sInstance = new EthernetDataTracker(); + return sInstance; + } + + public Object Clone() throws CloneNotSupportedException { + throw new CloneNotSupportedException(); + } + + public void setTeardownRequested(boolean isRequested) { + mTeardownRequested.set(isRequested); + } + + public boolean isTeardownRequested() { + return mTeardownRequested.get(); + } + + /** + * Begin monitoring connectivity + */ + public void startMonitoring(Context context, Handler target) { + mContext = context; + mCsHandler = target; + + // register for notifications from NetworkManagement Service + IBinder b = ServiceManager.getService(Context.NETWORKMANAGEMENT_SERVICE); + INetworkManagementService service = INetworkManagementService.Stub.asInterface(b); + mInterfaceObserver = new InterfaceObserver(this); + try { + service.registerObserver(mInterfaceObserver); + } catch (RemoteException e) { + Log.e(TAG, "Could not register InterfaceObserver " + e); + } + } + + /** + * Disable connectivity to a network + * TODO: do away with return value after making MobileDataStateTracker async + */ + public boolean teardown() { + mTeardownRequested.set(true); + NetworkUtils.stopDhcp(mIface); + return true; + } + + /** + * Re-enable connectivity to a network after a {@link #teardown()}. + */ + public boolean reconnect() { + mTeardownRequested.set(false); + runDhcp(); + return true; + } + + /** + * Turn the wireless radio off for a network. + * @param turnOn {@code true} to turn the radio on, {@code false} + */ + public boolean setRadio(boolean turnOn) { + return true; + } + + /** + * @return true - If are we currently tethered with another device. + */ + public synchronized boolean isAvailable() { + return mNetworkInfo.isAvailable(); + } + + /** + * Tells the underlying networking system that the caller wants to + * begin using the named feature. The interpretation of {@code feature} + * is completely up to each networking implementation. + * @param feature the name of the feature to be used + * @param callingPid the process ID of the process that is issuing this request + * @param callingUid the user ID of the process that is issuing this request + * @return an integer value representing the outcome of the request. + * The interpretation of this value is specific to each networking + * implementation+feature combination, except that the value {@code -1} + * always indicates failure. + * TODO: needs to go away + */ + public int startUsingNetworkFeature(String feature, int callingPid, int callingUid) { + return -1; + } + + /** + * Tells the underlying networking system that the caller is finished + * using the named feature. The interpretation of {@code feature} + * is completely up to each networking implementation. + * @param feature the name of the feature that is no longer needed. + * @param callingPid the process ID of the process that is issuing this request + * @param callingUid the user ID of the process that is issuing this request + * @return an integer value representing the outcome of the request. + * The interpretation of this value is specific to each networking + * implementation+feature combination, except that the value {@code -1} + * always indicates failure. + * TODO: needs to go away + */ + public int stopUsingNetworkFeature(String feature, int callingPid, int callingUid) { + return -1; + } + + /** + * @param enabled + */ + public void setDataEnable(boolean enabled) { + Log.d(TAG, "setDataEnabled: IGNORING enabled=" + enabled); + } + + /** + * Check if private DNS route is set for the network + */ + public boolean isPrivateDnsRouteSet() { + return mPrivateDnsRouteSet.get(); + } + + /** + * Set a flag indicating private DNS route is set + */ + public void privateDnsRouteSet(boolean enabled) { + mPrivateDnsRouteSet.set(enabled); + } + + /** + * Fetch NetworkInfo for the network + */ + public synchronized NetworkInfo getNetworkInfo() { + return mNetworkInfo; + } + + /** + * Fetch LinkProperties for the network + */ + public synchronized LinkProperties getLinkProperties() { + return new LinkProperties(mLinkProperties); + } + + /** + * A capability is an Integer/String pair, the capabilities + * are defined in the class LinkSocket#Key. + * + * @return a copy of this connections capabilities, may be empty but never null. + */ + public LinkCapabilities getLinkCapabilities() { + return new LinkCapabilities(mLinkCapabilities); + } + + /** + * Fetch default gateway address for the network + */ + public int getDefaultGatewayAddr() { + return mDefaultGatewayAddr.get(); + } + + /** + * Check if default route is set + */ + public boolean isDefaultRouteSet() { + return mDefaultRouteSet.get(); + } + + /** + * Set a flag indicating default route is set for the network + */ + public void defaultRouteSet(boolean enabled) { + mDefaultRouteSet.set(enabled); + } + + /** + * Return the system properties name associated with the tcp buffer sizes + * for this network. + */ + public String getTcpBufferSizesPropName() { + return "net.tcp.buffersize.wifi"; + } +} diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java index 57d6108..cf83456 100644 --- a/core/java/android/webkit/WebView.java +++ b/core/java/android/webkit/WebView.java @@ -8790,7 +8790,6 @@ public class WebView extends AbsoluteLayout private native int nativeGetDrawGLFunction(Rect rect, Rect viewRect, float scale, int extras); private native void nativeUpdateDrawGLFunction(Rect rect, Rect viewRect); - private native boolean nativeDrawGL(Rect rect, float scale, int extras); private native void nativeExtendSelection(int x, int y); private native int nativeFindAll(String findLower, String findUpper, boolean sameAsLastSearch); diff --git a/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/AccessPointParserHelper.java b/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/AccessPointParserHelper.java index 3667c7b..d22356d 100644 --- a/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/AccessPointParserHelper.java +++ b/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/AccessPointParserHelper.java @@ -182,6 +182,7 @@ public class AccessPointParserHelper { } config.proxySettings = ProxySettings.NONE; networks.add(config); + mLinkProperties = null; } } diff --git a/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/ConnectivityManagerTestActivity.java b/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/ConnectivityManagerTestActivity.java index e138200..adf1883 100644 --- a/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/ConnectivityManagerTestActivity.java +++ b/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/ConnectivityManagerTestActivity.java @@ -242,10 +242,10 @@ public class ConnectivityManagerTestActivity extends Activity { initializeNetworkStates(); - if (mWifiManager.isWifiEnabled()) { - log("Clear Wifi before we start the test."); - removeConfiguredNetworksAndDisableWifi(); - } + mWifiManager.setWifiEnabled(true); + log("Clear Wifi before we start the test."); + sleep(SHORT_TIMEOUT); + removeConfiguredNetworksAndDisableWifi(); mWifiRegexs = mCM.getTetherableWifiRegexs(); } @@ -633,13 +633,13 @@ public class ConnectivityManagerTestActivity extends Activity { * Disconnect from the current AP and remove configured networks. */ public boolean disconnectAP() { - if (mWifiManager.isWifiEnabled()) { - // remove saved networks - List<WifiConfiguration> wifiConfigList = mWifiManager.getConfiguredNetworks(); - for (WifiConfiguration wifiConfig: wifiConfigList) { - log("remove wifi configuration: " + wifiConfig.toString()); - mWifiManager.forgetNetwork(wifiConfig.networkId); - } + // remove saved networks + List<WifiConfiguration> wifiConfigList = mWifiManager.getConfiguredNetworks(); + log("size of wifiConfigList: " + wifiConfigList.size()); + for (WifiConfiguration wifiConfig: wifiConfigList) { + log("remove wifi configuration: " + wifiConfig.networkId); + int netId = wifiConfig.networkId; + mWifiManager.forgetNetwork(netId); } return true; } @@ -655,20 +655,23 @@ public class ConnectivityManagerTestActivity extends Activity { * Remove configured networks and disable wifi */ public boolean removeConfiguredNetworksAndDisableWifi() { - if (!disconnectAP()) { - return false; - } - // Disable Wifi - if (!mWifiManager.setWifiEnabled(false)) { - return false; - } - // Wait for the actions to be completed - try { - Thread.sleep(SHORT_TIMEOUT); - } catch (InterruptedException e) {} + if (!disconnectAP()) { + return false; + } + sleep(SHORT_TIMEOUT); + if (!mWifiManager.setWifiEnabled(false)) { + return false; + } + sleep(SHORT_TIMEOUT); return true; } + private void sleep(long sleeptime) { + try { + Thread.sleep(sleeptime); + } catch (InterruptedException e) {} + } + /** * Set airplane mode */ diff --git a/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/functional/WifiConnectionTest.java b/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/functional/WifiConnectionTest.java index fe79e6c..22b1759 100644 --- a/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/functional/WifiConnectionTest.java +++ b/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/functional/WifiConnectionTest.java @@ -72,10 +72,8 @@ public class WifiConnectionTest @Override public void setUp() throws Exception { super.setUp(); - log("before we launch the test activity, we preserve all the configured networks."); mRunner = ((ConnectivityManagerTestRunner)getInstrumentation()); mWifiManager = (WifiManager) mRunner.getContext().getSystemService(Context.WIFI_SERVICE); - enabledNetworks = getEnabledNetworks(mWifiManager.getConfiguredNetworks()); mAct = getActivity(); mWifiManager.asyncConnect(mAct, new WifiServiceHandler()); @@ -123,42 +121,9 @@ public class WifiConnectionTest public void tearDown() throws Exception { log("tearDown()"); mAct.removeConfiguredNetworksAndDisableWifi(); - reEnableNetworks(enabledNetworks); super.tearDown(); } - private Set<WifiConfiguration> getEnabledNetworks(List<WifiConfiguration> configuredNetworks) { - Set<WifiConfiguration> networks = new HashSet<WifiConfiguration>(); - for (WifiConfiguration wifiConfig : configuredNetworks) { - if (wifiConfig.status == Status.ENABLED || wifiConfig.status == Status.CURRENT) { - networks.add(wifiConfig); - log("remembering enabled network " + wifiConfig.SSID + - " status is " + wifiConfig.status); - } - } - return networks; - } - - private void reEnableNetworks(Set<WifiConfiguration> enabledNetworks) { - if (!mWifiManager.isWifiEnabled()) { - log("reEnableNetworks: enable Wifi"); - mWifiManager.setWifiEnabled(true); - sleep(ConnectivityManagerTestActivity.SHORT_TIMEOUT, - "interruped while waiting for wifi to be enabled"); - } - - for (WifiConfiguration config : enabledNetworks) { - if (DEBUG) { - log("recover wifi configuration: " + config.toString()); - } - config.SSID = "\"" + config.SSID + "\""; - config.networkId = -1; - mWifiManager.connectNetwork(config); - sleep(ConnectivityManagerTestActivity.SHORT_TIMEOUT, - "interruped while connecting to " + config.SSID); - } - } - /** * Connect to the provided Wi-Fi network * @param config is the network configuration diff --git a/docs/html/guide/developing/tools/logcat.jd b/docs/html/guide/developing/tools/logcat.jd index d4ee68a..546e3ea 100644 --- a/docs/html/guide/developing/tools/logcat.jd +++ b/docs/html/guide/developing/tools/logcat.jd @@ -2,7 +2,6 @@ page.title=logcat parent.title=Tools parent.link=index.html @jd:body -<div></div> <p>The Android logging system provides a mechanism for collecting and viewing system debug output. Logs from various applications and portions of the system are collected in a series of @@ -23,7 +22,7 @@ For more <p>You can run <code>logcat</code> as an adb command or directly in a shell prompt of your emulator or connected device. To view log output using adb, navigate to your SDK - <code>platform-tools/</code> directory and execute:/p> + <code>platform-tools/</code> directory and execute:</p> <pre> $ adb logcat </pre> diff --git a/docs/html/guide/market/billing/billing_admin.jd b/docs/html/guide/market/billing/billing_admin.jd index 723113d..939bbaa 100755 --- a/docs/html/guide/market/billing/billing_admin.jd +++ b/docs/html/guide/market/billing/billing_admin.jd @@ -97,7 +97,7 @@ file</a>.</p> <img src="{@docRoot}images/billing_list_form.png" height="840" id="figure3" /> <p class="img-caption"> - f<strong>Figure 3.</strong> The Create New In-app Product page lets you add items to an + <strong>Figure 3.</strong> The Create New In-app Product page lets you add items to an application's product list. </p> diff --git a/docs/html/guide/market/billing/billing_integrate.jd b/docs/html/guide/market/billing/billing_integrate.jd index f57ebe3..59344ba 100755 --- a/docs/html/guide/market/billing/billing_integrate.jd +++ b/docs/html/guide/market/billing/billing_integrate.jd @@ -163,11 +163,11 @@ Selected</strong> to begin the download.</p> <p>When the download is complete, the Android SDK and AVD Manager saves the component into the following directory:</p> -<p><code><sdk>/google-market_billing/</code></p> +<p><code><sdk>/extras/google/market_billing/</code></p> <p>If you want to see an end-to-end demonstration of in-app billing before you integrate in-app billing into your own application, you can build and run the sample application. Building and -running the sample application involves three tasks:<p> +running the sample application involves three tasks:</p> <ul> <li>Configuring and building the sample application.</li> @@ -501,7 +501,7 @@ protected Bundle makeRequestBundle(String method) { <p>To use this helper method, you pass in a <code>String</code> that corresponds to one of the five types of billing requests. The method returns a Bundle that has the three required keys defined. The -following sections show you how to use this helper method when you send a billing request.<p> +following sections show you how to use this helper method when you send a billing request.</p> <p class="caution"><strong>Important</strong>: You must make all in-app billing requests from your application's main thread.</p> diff --git a/docs/html/guide/practices/design/accessibility.jd b/docs/html/guide/practices/design/accessibility.jd index a2b314e..a66a974 100644 --- a/docs/html/guide/practices/design/accessibility.jd +++ b/docs/html/guide/practices/design/accessibility.jd @@ -60,8 +60,9 @@ access-related problems:</p> <li>Make all of your user interface controls accessible with a trackball or directional controller (d-pad).</li> <li>Label your {@link android.widget.ImageButton}, {@link android.widget.EditText}, and other input -widgets using the <a href="{@docRoot}reference/android/view/View#attr_android:contentDescription" ->{@code android:contentDescription}</a> attribute.</li> +widgets using the <a +href="{@docRoot}reference/android/view/View.html#attr_android:contentDescription">{@code +android:contentDescription}</a> attribute.</li> </ul> @@ -100,8 +101,9 @@ request that a widget be given focus. Such methods include:</p> </ul> <p>When working with a view that is not focusable by default, you can make it focusable from the XML -layout file by setting the <a href="{@docRoot}reference/android/view/View#attr_android:focusable" ->{@code android:focusable}</a> attribute to {@code "true"}.</p> +layout file by setting the <a +href="{@docRoot}reference/android/view/View.html#attr_android:focusable">{@code +android:focusable}</a> attribute to {@code "true"}.</p> @@ -181,13 +183,13 @@ a label near it that indicates its purpose. When a visually impaired user acces application, these visual cues are often useless.</p> <p>To provide textual information about these widgets (as an alternative to the visual cues), you -should use the <a href="{@docRoot}reference/android/view/View#attr_android:contentDescription" +should use the <a href="{@docRoot}reference/android/view/View.html#attr_android:contentDescription" >{@code android:contentDescription}</a> attribute. The text you provide in this attribute is not visible on the screen, but if a user has enabled accessibility speech tools then the description in this attribute is read aloud to the user.</p> <p>You should set the <a -href="{@docRoot}reference/android/view/View#attr_android:contentDescription" >{@code +href="{@docRoot}reference/android/view/View.html#attr_android:contentDescription" >{@code android:contentDescription}</a> attribute on every {@link android.widget.ImageButton}, {@link android.widget.EditText}, {@link android.widget.CheckBox}, and on any other input widgets that might benefit users with extra information.</p> diff --git a/docs/html/guide/publishing/licensing.jd b/docs/html/guide/publishing/licensing.jd index 4184ecb..a9b182e 100644 --- a/docs/html/guide/publishing/licensing.jd +++ b/docs/html/guide/publishing/licensing.jd @@ -368,7 +368,7 @@ to set up your development environment for licensing. </p> <ol> <li><a href="#download-sdk">Downloading the latest SDK</a>, if you haven't already done so </li> -<li><a href="#runtime-setup">Setting up the runtime environment</a> for development</a></li> +<li><a href="#runtime-setup">Setting up the runtime environment</a> for development</li> <li><a href="#download-lvl">Downloading the Market Licensing component</a> into your SDK </li> <li><a href="#lvl-setup">Setting up the Licensing Verification Library</a></li> <li><a href="#add-library">Including the LVL library project in your application</a></li> @@ -582,9 +582,9 @@ Licensing package contains the LVL and the LVL sample application. </div> <p>When the download is complete, the Android SDK and AVD Manager installs both the LVL library project and the example application into these directories: </p> -<p style="margin-left:2em"><code><<em>sdk</em>>/market_licensing/library/</code> +<p style="margin-left:2em"><code><<em>sdk</em>>/extras/google/market_licensing/library/</code> (the LVL library project)<br /> -<code><<em>sdk</em>>/market_licensing/sample/</code> (the example +<code><<em>sdk</em>>/extras/google/market_licensing/sample/</code> (the example application)</p> <p>If you aren't familiar with how to download components into your SDK, see the @@ -1530,7 +1530,7 @@ Make sure that you sign in to the account from which the application you are licensing is published (or will be published). </li> <li>In the account home page, locate the "Edit profile" link and click it. </li> <li>In the Edit Profile page, locate the "Licensing" pane, shown below. Your -public key for licensing is given in the "Public key" text box. </p> +public key for licensing is given in the "Public key" text box. </li> </ol> <p>To add the public key to your application, simply copy/paste the key string diff --git a/docs/html/sdk/download.jd b/docs/html/sdk/download.jd index 81b4ff6..44fe5e4 100644 --- a/docs/html/sdk/download.jd +++ b/docs/html/sdk/download.jd @@ -1,4 +1,93 @@ -sdk.redirect=true +page.title=Download an Archived Android SDK +hide_license_footer=true @jd:body +<script type="text/javascript"> + function verify() { + document.getElementById('download-button').disabled = +!document.getElementById('checkbox').checked; + } + function submit() { + var location = window.location.href; + if (location.indexOf('?v=') != -1) { + var filename = location.substring(location.indexOf('=')+1,location.length); + if (document.getElementById('checkbox').checked) { + document.location = "http://dl.google.com/android/" + filename; + } + document.getElementById('click-download').setAttribute("href", "http://dl.google.com/android/" ++ filename); + $("#terms-form").hide(500); + $("#next-steps").show(500); + document.getElementById('checkbox').disabled=true; + document.getElementById('download-button').disabled=true; + } else { + alert("You have not selected an SDK version. Please return to the SDK Archives page"); + } + } +</script> + +<div id="terms-form"> + <p>Please carefully review the Android SDK License Agreement before downloading the SDK. +The License Agreement constitutes a contract between you and Google with respect to your use of the +SDK.</p> + <p class="note"><strong>Note:</strong> You must agree to this license agreement in order to +download one of the archived SDKs, because these SDK packages contain Google software (whereas, the +<a href="http://developer.android.com/sdk/index.html">current SDK</a> packages do not require a +license agreement, because they contain only the open sourced SDK tools).</p> + + <iframe id="terms" style="border:1px solid #888;margin:0 0 1em;height:400px;width:95%;" +src="terms_body.html"> + </iframe> + + <p> + <input type="checkbox" id="checkbox" onclick="verify()" /> + <label for="checkbox">I agree to the terms of the Android SDK License Agreement.</label> + </p> + <p> + <input type="submit" value="Download" id="download-button" disabled="disabled" +onclick="submit()" /> + </p> + <p> + <script language="javascript"> + var loc = window.location.href; + if (loc.indexOf('?v=') != -1) { + var filename = loc.substring(loc.indexOf('=')+1,loc.length); + document.write("File: " + filename); + } + </script> + </p> +</div><!-- end terms-form --> + +<noscript> + <p><strong>Please enable Javascript in your browser in order to agree to the terms and download +the SDK.</strong></p> +</noscript> + +<div class="special" id="next-steps" style="display:none"> + <p>Your download should be underway. If not, <a id="click-download">click here to start the +download</a>.</p> + <p>Beware that you've just downloaded a very old version of the Android SDK, which is not +recommended. We no longer maintain documentation about how to install these archived SDKs nor +support the tools contained within.</p> + <p>We recommend that you instead download the latest <a +href="http://developer.android.com/sdk/index.html">Android SDK starter package</a>, which includes +the latest SDK tools and allows you to develop against any version of the Android platform, back to +Android 1.1.</p> +</div> + +<script type="text/javascript"> + var loc = window.location.href; + var filename = loc.substring(loc.indexOf('=')+1,loc.length); + version = filename.substring(filename.indexOf('.')-1,filename.lastIndexOf('.')); + $(".addVersionPath").each(function(i) { + var oldHref = $(this).attr("href"); + $(this).attr({href: "/sdk/" + version + "/" + oldHref}); + }); +</script> + + + + + + diff --git a/docs/html/sdk/older_releases.jd b/docs/html/sdk/older_releases.jd index 77f7e43..870ff04 100644 --- a/docs/html/sdk/older_releases.jd +++ b/docs/html/sdk/older_releases.jd @@ -47,7 +47,7 @@ Notes</a></em></p> <td>Windows</td> <td> <a -href="http://dl.google.com/android/archives/android-sdk-windows-1.6_r1.zip">android-sdk- +href="{@docRoot}sdk/download.html?v=archives/android-sdk-windows-1.6_r1.zip">android-sdk- windows-1 .6_r1.zip</a> </td> <td>260529085 bytes</td> @@ -57,7 +57,7 @@ windows-1 .6_r1.zip</a> <td>Mac OS X (intel)</td> <td> <a -href="http://dl.google.com/android/archives/android-sdk-mac_x86-1.6_r1.zip">android-sdk- +href="{@docRoot}sdk/download.html?v=archives/android-sdk-mac_x86-1.6_r1.zip">android-sdk- mac_x86-1 .6_r1.zip</a> </td> <td>247412515 bytes</td> @@ -67,7 +67,7 @@ mac_x86-1 .6_r1.zip</a> <td>Linux (i386)</td> <td> <a -href="http://dl.google.com/android/archives/android-sdk-linux_x86-1.6_r1.tgz">android- +href="{@docRoot}sdk/download.html?v=archives/android-sdk-linux_x86-1.6_r1.tgz">android- sdk- linux_x86-1.6_r1.tgz</a> </td> <td>238224860 bytes</td> @@ -92,7 +92,7 @@ Notes</a></em></p> <td>Windows</td> <td> <a -href="http://dl.google.com/android/archives/android-sdk-windows-1.5_r3.zip">android-sdk- +href="{@docRoot}sdk/download.html?v=archives/android-sdk-windows-1.5_r3.zip">android-sdk- windows-1 .5_r3.zip</a> </td> <td>191477853 bytes</td> @@ -102,7 +102,7 @@ windows-1 .5_r3.zip</a> <td>Mac OS X (intel)</td> <td> <a -href="http://dl.google.com/android/archives/android-sdk-mac_x86-1.5_r3.zip">android-sdk- +href="{@docRoot}sdk/download.html?v=archives/android-sdk-mac_x86-1.5_r3.zip">android-sdk- mac_x86-1 .5_r3.zip</a> </td> <td>183024673 bytes</td> @@ -112,7 +112,7 @@ mac_x86-1 .5_r3.zip</a> <td>Linux (i386)</td> <td> <a -href="http://dl.google.com/android/archives/android-sdk-linux_x86-1.5_r3.zip">android- +href="{@docRoot}sdk/download.html?v=archives/android-sdk-linux_x86-1.5_r3.zip">android- sdk- linux_x86-1.5_r3.zip</a> </td> <td>178117561 bytes</td> @@ -137,7 +137,7 @@ Notes</a></em></p> <td>Windows</td> <td> <a -href="http://dl.google.com/android/archives/android-sdk-windows-1.1_r1.zip">android-sdk- +href="{@docRoot}sdk/download.html?v=archives/android-sdk-windows-1.1_r1.zip">android-sdk- windows-1 .1_r1.zip</a> </td> @@ -148,7 +148,7 @@ windows-1 <td>Mac OS X (intel)</td> <td> <a -href="http://dl.google.com/android/archives/android-sdk-mac_x86-1.1_r1.zip">android-sdk- +href="{@docRoot}sdk/download.html?v=archives/android-sdk-mac_x86-1.1_r1.zip">android-sdk- mac_x86-1 .1_r1.zip</a> </td> @@ -159,7 +159,7 @@ mac_x86-1 <td>Linux (i386)</td> <td> <a -href="http://dl.google.com/android/archives/android-sdk-linux_x86-1.1_r1.zip">android- +href="{@docRoot}sdk/download.html?v=archives/android-sdk-linux_x86-1.1_r1.zip">android- sdk- linux_x86-1.1_r1.zip</a> </td> @@ -185,7 +185,7 @@ Notes</a></em></p> <td>Windows</td> <td> <a -href="http://dl.google.com/android/archives/android-sdk-windows-1.0_r2.zip">android-sdk- +href="{@docRoot}sdk/download.html?v=archives/android-sdk-windows-1.0_r2.zip">android-sdk- windows-1 .0_r2.zip</a> </td> @@ -196,7 +196,7 @@ windows-1 <td>Mac OS X (intel)</td> <td> <a -href="http://dl.google.com/android/archives/android-sdk-mac_x86-1.0_r2.zip">android-sdk- +href="{@docRoot}sdk/download.html?v=archives/android-sdk-mac_x86-1.0_r2.zip">android-sdk- mac_x86-1 .0_r2.zip</a> </td> @@ -207,7 +207,7 @@ mac_x86-1 <td>Linux (i386)</td> <td> <a -href="http://dl.google.com/android/archives/android-sdk-linux_x86-1.0_r2.zip">android- +href="{@docRoot}sdk/download.html?v=archives/android-sdk-linux_x86-1.0_r2.zip">android- sdk- linux_x86-1.0_r2.zip</a> </td> @@ -241,7 +241,7 @@ Notes</a></em></p> <td>Windows</td> <td> <a -href="http://dl.google.com/android/archives/android-sdk-windows-1.5_r2.zip">android-sdk- +href="{@docRoot}sdk/download.html?v=archives/android-sdk-windows-1.5_r2.zip">android-sdk- windows-1 .5_r2.zip</a> </td> <td>178346828 bytes</td> @@ -251,7 +251,7 @@ windows-1 .5_r2.zip</a> <td>Mac OS X (intel)</td> <td> <a -href="http://dl.google.com/android/archives/android-sdk-mac_x86-1.5_r2.zip">android-sdk- +href="{@docRoot}sdk/download.html?v=archives/android-sdk-mac_x86-1.5_r2.zip">android-sdk- mac_x86-1 .5_r2.zip</a> </td> <td>169945128 bytes</td> @@ -261,7 +261,7 @@ mac_x86-1 .5_r2.zip</a> <td>Linux (i386)</td> <td> <a -href="http://dl.google.com/android/archives/android-sdk-linux_x86-1.5_r2.zip">android- +href="{@docRoot}sdk/download.html?v=archives/android-sdk-linux_x86-1.5_r2.zip">android- sdk- linux_x86-1.5_r2.zip</a> </td> <td>165035130 bytes</td> @@ -286,7 +286,7 @@ Notes</a></em></p> <td>Windows</td> <td> <a -href="http://dl.google.com/android/archives/android-sdk-windows-1.5_r1.zip">android-sdk- +href="{@docRoot}sdk/download.html?v=archives/android-sdk-windows-1.5_r1.zip">android-sdk- windows-1 .5_r1.zip</a> </td> <td>176263368 bytes</td> @@ -296,7 +296,7 @@ windows-1 .5_r1.zip</a> <td>Mac OS X (intel)</td> <td> <a -href="http://dl.google.com/android/archives/android-sdk-mac_x86-1.5_r1.zip">android-sdk- +href="{@docRoot}sdk/download.html?v=archives/android-sdk-mac_x86-1.5_r1.zip">android-sdk- mac_x86-1 .5_r1.zip</a> </td> <td>167848675 bytes</td> @@ -306,7 +306,7 @@ mac_x86-1 .5_r1.zip</a> <td>Linux (i386)</td> <td> <a -href="http://dl.google.com/android/archives/android-sdk-linux_x86-1.5_r1.zip">android- +href="{@docRoot}sdk/download.html?v=archives/android-sdk-linux_x86-1.5_r1.zip">android- sdk- linux_x86-1.5_r1.zip</a> </td> <td>162938845 bytes</td> @@ -331,7 +331,7 @@ Notes</a></em></p> <td>Windows</td> <td> <a -href="http://dl.google.com/android/archives/android-sdk-windows-1.0_r1.zip">android-sdk- +href="{@docRoot}sdk/download.html?v=archives/android-sdk-windows-1.0_r1.zip">android-sdk- windows-1 .0_r1.zip</a> </td> <td>89.7 MB bytes</td> @@ -341,7 +341,7 @@ windows-1 .0_r1.zip</a> <td>Mac OS X (intel)</td> <td> <a -href="http://dl.google.com/android/archives/android-sdk-mac_x86-1.0_r1.zip">android-sdk- +href="{@docRoot}sdk/download.html?v=archives/android-sdk-mac_x86-1.0_r1.zip">android-sdk- mac_x86-1 .0_r1.zip</a> </td> <td>87.5 MB bytes</td> @@ -351,7 +351,7 @@ mac_x86-1 .0_r1.zip</a> <td>Linux (i386)</td> <td> <a -href="http://dl.google.com/android/archives/android-sdk-linux_x86-1.0_r1.zip">android- +href="{@docRoot}sdk/download.html?v=archives/android-sdk-linux_x86-1.0_r1.zip">android- sdk- linux_x86-1.0_r1.zip</a> </td> <td>87.8 MB bytes</td> diff --git a/docs/html/sdk/terms_body.html b/docs/html/sdk/terms_body.html new file mode 100644 index 0000000..8c55b37 --- /dev/null +++ b/docs/html/sdk/terms_body.html @@ -0,0 +1,336 @@ + + +<p>This is the Android Software Development Kit License Agreement.</p> + +<h2> + 1. Introduction +</h2> +<p> + 1.1 The Android Software Development Kit (referred to in this License Agreement as the "SDK" +and specifically including the Android system files, packaged APIs, and Google APIs add-ons) is +licensed to you subject to the terms of this License Agreement. This License Agreement forms a +legally binding contract between you and Google in relation to your use of the SDK. + +</p> +<p> + 1.2 "Google" means Google Inc., a Delaware corporation with principal place of business at +1600 Amphitheatre Parkway, Mountain View, CA 94043, United States. +</p> +<h2> + 2. Accepting this License Agreement +</h2> +<p> + 2.1 In order to use the SDK, you must first agree to this License Agreement. You may not use +the SDK if you do not accept this License Agreement. +</p> +<p> + 2.2 You can accept this License Agreement by: +</p> +<p> + (A) clicking to accept or agree to this License Agreement, where this option is made +available to you; or +</p> +<p> + (B) by actually using the SDK. In this case, you agree that use of the SDK constitutes +acceptance of the Licensing Agreement from that point onwards. +</p> +<p> + 2.3 You may not use the SDK and may not accept the Licensing Agreement if you are a person +barred from receiving the SDK under the laws of the United States or other countries including the +country in which you are resident or from which you use the SDK. +</p> +<p> + 2.4 If you are agreeing to be bound by this License Agreement on behalf of your employer or +other entity, you represent and warrant that you have full legal authority to bind your employer or +such entity to this License Agreement. If you do not have the requisite authority, you may not +accept the Licensing Agreement or use the SDK on behalf of your employer or other entity. +</p> +<h2> + 3. SDK License from Google +</h2> +<p> + 3.1 Subject to the terms of this License Agreement, Google grants you a limited, worldwide, +royalty-free, non- assignable and non-exclusive license to use the SDK solely to develop +applications to run on the Android platform. +</p> +<p> + 3.2 You agree that Google or third parties own all legal right, title and interest in and to +the SDK, including any Intellectual Property Rights that subsist in the SDK. "Intellectual Property +Rights" means any and all rights under patent law, copyright law, trade secret law, trademark law, +and any and all other proprietary rights. Google reserves all rights not expressly granted to you. + +</p> +<p> + 3.3 Except to the extent required by applicable third party licenses, you may not copy +(except for backup purposes), modify, adapt, redistribute, decompile, reverse engineer, disassemble, +or create derivative works of the SDK or any part of the SDK. Except to the extent required by +applicable third party licenses, you may not load any part of the SDK onto a mobile handset or any +other hardware device except a personal computer, combine any part of the SDK with other software, +or distribute any software or device incorporating a part of the SDK. +</p> +<p> + 3.4 Use, reproduction and distribution of components of the SDK licensed under an open +source software license are governed solely by the terms of that open source software license and +not this License Agreement. +</p> +<p> + 3.5 You agree that the form and nature of the SDK that Google provides may change without +prior notice to you and that future versions of the SDK may be incompatible with applications +developed on previous versions of the SDK. You agree that Google may stop (permanently or +temporarily) providing the SDK (or any features within the SDK) to you or to users generally at +Google's sole discretion, without prior notice to you. +</p> +<p> + 3.6 Nothing in this License Agreement gives you a right to use any of Google's trade names, +trademarks, service marks, logos, domain names, or other distinctive brand features. +</p> +<p> + 3.7 You agree that you will not remove, obscure, or alter any proprietary rights notices +(including copyright and trademark notices) that may be affixed to or contained within the SDK. +</p> +<h2> + 4. Use of the SDK by You +</h2> +<p> + 4.1 Google agrees that it obtains no right, title or interest from you (or your licensors) +under this License Agreement in or to any software applications that you develop using the SDK, +including any intellectual property rights that subsist in those applications. +</p> +<p> + 4.2 You agree to use the SDK and write applications only for purposes that are permitted by +(a) this License Agreement and (b) any applicable law, regulation or generally accepted practices or +guidelines in the relevant jurisdictions (including any laws regarding the export of data or +software to and from the United States or other relevant countries). +</p> +<p> + 4.3 You agree that if you use the SDK to develop applications for general public users, you +will protect the privacy and legal rights of those users. If the users provide you with user names, +passwords, or other login information or personal information, your must make the users aware that +the information will be available to your application, and you must provide legally adequate privacy +notice and protection for those users. If your application stores personal or sensitive information +provided by users, it must do so securely. If the user provides your application with Google Account +information, your application may only use that information to access the user's Google Account +when, and for the limited purposes for which, the user has given you permission to do so. +</p> +<p> + 4.4 You agree that you will not engage in any activity with the SDK, including the +development or distribution of an application, that interferes with, disrupts, damages, or accesses +in an unauthorized manner the servers, networks, or other properties or services of any third party +including, but not limited to, Google or any mobile communications carrier. +</p> +<p> + 4.5 You agree that you are solely responsible for (and that Google has no responsibility to +you or to any third party for) any data, content, or resources that you create, transmit or display +through the Android platform and/or applications for the Android platform, and for the consequences +of your actions (including any loss or damage which Google may suffer) by doing so. +</p> +<p> + 4.6 You agree that you are solely responsible for (and that Google has no responsibility to +you or to any third party for) any breach of your obligations under this License Agreement, any +applicable third party contract or Terms of Service, or any applicable law or regulation, and for +the consequences (including any loss or damage which Google or any third party may suffer) of any +such breach. +</p> +<h2> + 5. Your Developer Credentials +</h2> +<p> + 5.1 You agree that you are responsible for maintaining the confidentiality of any developer +credentials that may be issued to you by Google or which you may choose yourself and that you will +be solely responsible for all applications that are developed under your developer credentials. +</p> +<h2> + 6. Privacy and Information +</h2> +<p> + 6.1 In order to continually innovate and improve the SDK, Google may collect certain usage +statistics from the software including but not limited to a unique identifier, associated IP +address, version number of the software, and information on which tools and/or services in the SDK +are being used and how they are being used. Before any of this information is collected, the SDK +will notify you and seek your consent. If you withhold consent, the information will not be +collected. +</p> +<p> + 6.2 The data collected is examined in the aggregate to improve the SDK and is maintained in +accordance with Google's Privacy Policy. +</p> +<h2> + 7. Third Party Applications for the Android Platform +</h2> +<p> + 7.1 If you use the SDK to run applications developed by a third party or that access data, +content or resources provided by a third party, you agree that Google is not responsible for those +applications, data, content, or resources. You understand that all data, content or resources which +you may access through such third party applications are the sole responsibility of the person from +which they originated and that Google is not liable for any loss or damage that you may experience +as a result of the use or access of any of those third party applications, data, content, or +resources. +</p> +<p> + 7.2 You should be aware the data, content, and resources presented to you through such a +third party application may be protected by intellectual property rights which are owned by the +providers (or by other persons or companies on their behalf). You may not modify, rent, lease, loan, +sell, distribute or create derivative works based on these data, content, or resources (either in +whole or in part) unless you have been specifically given permission to do so by the relevant +owners. +</p> +<p> + 7.3 You acknowledge that your use of such third party applications, data, content, or +resources may be subject to separate terms between you and the relevant third party. In that case, +this License Agreement does not affect your legal relationship with these third parties. +</p> +<h2> + 8. Using Android APIs +</h2> +<p> + 8.1 Google Data APIs +</p> +<p> + 8.1.1 If you use any API to retrieve data from Google, you acknowledge that the data may be +protected by intellectual property rights which are owned by Google or those parties that provide +the data (or by other persons or companies on their behalf). Your use of any such API may be subject +to additional Terms of Service. You may not modify, rent, lease, loan, sell, distribute or create +derivative works based on this data (either in whole or in part) unless allowed by the relevant +Terms of Service. +</p> +<p> + 8.1.2 If you use any API to retrieve a user's data from Google, you acknowledge and agree +that you shall retrieve data only with the user's explicit consent and only when, and for the +limited purposes for which, the user has given you permission to do so. + +</p> +<h2> + 9. Terminating this License Agreement +</h2> +<p> + 9.1 This License Agreement will continue to apply until terminated by either you or Google +as set out below. +</p> +<p> + 9.2 If you want to terminate this License Agreement, you may do so by ceasing your use of +the SDK and any relevant developer credentials. +</p> +<p> + 9.3 Google may at any time, terminate this License Agreement with you if: +</p> +<p> + (A) you have breached any provision of this License Agreement; or +</p> +<p> + (B) Google is required to do so by law; or +</p> +<p> + (C) the partner with whom Google offered certain parts of SDK (such as APIs) to you has +terminated its relationship with Google or ceased to offer certain parts of the SDK to you; or +</p> +<p> + (D) Google decides to no longer providing the SDK or certain parts of the SDK to users in +the country in which you are resident or from which you use the service, or the provision of the SDK +or certain SDK services to you by Google is, in Google's sole discretion, no longer commercially +viable. +</p> +<p> + 9.4 When this License Agreement comes to an end, all of the legal rights, obligations and +liabilities that you and Google have benefited from, been subject to (or which have accrued over +time whilst this License Agreement has been in force) or which are expressed to continue +indefinitely, shall be unaffected by this cessation, and the provisions of paragraph 14.7 shall +continue to apply to such rights, obligations and liabilities indefinitely. +</p> +<h2> + 10. DISCLAIMER OF WARRANTIES +</h2> +<p> + 10.1 YOU EXPRESSLY UNDERSTAND AND AGREE THAT YOUR USE OF THE SDK IS AT YOUR SOLE RISK AND +THAT THE SDK IS PROVIDED "AS IS" AND "AS AVAILABLE" WITHOUT WARRANTY OF ANY KIND FROM GOOGLE. +</p> +<p> + 10.2 YOUR USE OF THE SDK AND ANY MATERIAL DOWNLOADED OR OTHERWISE OBTAINED THROUGH THE USE +OF THE SDK IS AT YOUR OWN DISCRETION AND RISK AND YOU ARE SOLELY RESPONSIBLE FOR ANY DAMAGE TO YOUR +COMPUTER SYSTEM OR OTHER DEVICE OR LOSS OF DATA THAT RESULTS FROM SUCH USE. +</p> +<p> + 10.3 GOOGLE FURTHER EXPRESSLY DISCLAIMS ALL WARRANTIES AND CONDITIONS OF ANY KIND, WHETHER +EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE IMPLIED WARRANTIES AND CONDITIONS OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. +</p> +<h2> + 11. LIMITATION OF LIABILITY +</h2> +<p> + 11.1 YOU EXPRESSLY UNDERSTAND AND AGREE THAT GOOGLE, ITS SUBSIDIARIES AND AFFILIATES, AND +ITS LICENSORS SHALL NOT BE LIABLE TO YOU UNDER ANY THEORY OF LIABILITY FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL CONSEQUENTIAL OR EXEMPLARY DAMAGES THAT MAY BE INCURRED BY YOU, INCLUDING ANY +LOSS OF DATA, WHETHER OR NOT GOOGLE OR ITS REPRESENTATIVES HAVE BEEN ADVISED OF OR SHOULD HAVE BEEN +AWARE OF THE POSSIBILITY OF ANY SUCH LOSSES ARISING. +</p> +<h2> + 12. Indemnification +</h2> +<p> + 12.1 To the maximum extent permitted by law, you agree to defend, indemnify and hold +harmless Google, its affiliates and their respective directors, officers, employees and agents from +and against any and all claims, actions, suits or proceedings, as well as any and all losses, +liabilities, damages, costs and expenses (including reasonable attorneys fees) arising out of or +accruing from (a) your use of the SDK, (b) any application you develop on the SDK that infringes any +copyright, trademark, trade secret, trade dress, patent or other intellectual property right of any +person or defames any person or violates their rights of publicity or privacy, and (c) any +non-compliance by you with this License Agreement. +</p> +<h2> + 13. Changes to the License Agreement +</h2> +<p> + 13.1 Google may make changes to the License Agreement as it distributes new versions of the +SDK. When these changes are made, Google will make a new version of the License Agreement available +on the website where the SDK is made available. +</p> +<h2> + 14. General Legal Terms +</h2> +<p> + 14.1 This License Agreement constitute the whole legal agreement between you and Google and +govern your use of the SDK (excluding any services which Google may provide to you under a separate +written agreement), and completely replace any prior agreements between you and Google in relation +to the SDK. +</p> +<p> + 14.2 You agree that if Google does not exercise or enforce any legal right or remedy which +is contained in this License Agreement (or which Google has the benefit of under any applicable +law), this will not be taken to be a formal waiver of Google's rights and that those rights or +remedies will still be available to Google. +</p> +<p> + 14.3 If any court of law, having the jurisdiction to decide on this matter, rules that any +provision of this License Agreement is invalid, then that provision will be removed from this +License Agreement without affecting the rest of this License Agreement. The remaining provisions of +this License Agreement will continue to be valid and enforceable. +</p> +<p> + 14.4 You acknowledge and agree that each member of the group of companies of which Google is +the parent shall be third party beneficiaries to this License Agreement and that such other +companies shall be entitled to directly enforce, and rely upon, any provision of this License +Agreement that confers a benefit on (or rights in favor of) them. Other than this, no other person +or company shall be third party beneficiaries to this License Agreement. +</p> +<p> + 14.5 EXPORT RESTRICTIONS. THE SDK IS SUBJECT TO UNITED STATES EXPORT LAWS AND REGULATIONS. +YOU MUST COMPLY WITH ALL DOMESTIC AND INTERNATIONAL EXPORT LAWS AND REGULATIONS THAT APPLY TO THE +SDK. THESE LAWS INCLUDE RESTRICTIONS ON DESTINATIONS, END USERS AND END USE. +</p> +<p> + 14.6 The rights granted in this License Agreement may not be assigned or transferred by +either you or Google without the prior written approval of the other party. Neither you nor Google +shall be permitted to delegate their responsibilities or obligations under this License Agreement +without the prior written approval of the other party. +</p> +<p> + 14.7 This License Agreement, and your relationship with Google under this License Agreement, +shall be governed by the laws of the State of California without regard to its conflict of laws +provisions. You and Google agree to submit to the exclusive jurisdiction of the courts located +within the county of Santa Clara, California to resolve any legal matter arising from this License +Agreement. Notwithstanding this, you agree that Google shall still be allowed to apply for +injunctive remedies (or an equivalent type of urgent legal relief) in any jurisdiction. +</p> +<p> + <em>April 10, 2009</em> +</p>
\ No newline at end of file diff --git a/media/libstagefright/OMXCodec.cpp b/media/libstagefright/OMXCodec.cpp index a70f868..5d26fd5 100644 --- a/media/libstagefright/OMXCodec.cpp +++ b/media/libstagefright/OMXCodec.cpp @@ -1593,6 +1593,11 @@ status_t OMXCodec::allocateBuffersOnPort(OMX_U32 portIndex) { return allocateOutputBuffersFromNativeWindow(); } + if (mEnableGrallocUsageProtected && portIndex == kPortIndexOutput) { + LOGE("protected output buffers must be stent to an ANativeWindow"); + return PERMISSION_DENIED; + } + OMX_PARAM_PORTDEFINITIONTYPE def; InitOMXParams(&def); def.nPortIndex = portIndex; @@ -1761,6 +1766,25 @@ status_t OMXCodec::allocateOutputBuffersFromNativeWindow() { usage |= GRALLOC_USAGE_PROTECTED; } + // Make sure to check whether either Stagefright or the video decoder + // requested protected buffers. + if (usage & GRALLOC_USAGE_PROTECTED) { + // Verify that the ANativeWindow sends images directly to + // SurfaceFlinger. + int queuesToNativeWindow = 0; + err = mNativeWindow->query( + mNativeWindow.get(), NATIVE_WINDOW_QUEUES_TO_WINDOW_COMPOSER, + &queuesToNativeWindow); + if (err != 0) { + LOGE("error authenticating native window: %d", err); + return err; + } + if (queuesToNativeWindow != 1) { + LOGE("native window could not be authenticated"); + return PERMISSION_DENIED; + } + } + LOGV("native_window_set_usage usage=0x%x", usage); err = native_window_set_usage( mNativeWindow.get(), usage | GRALLOC_USAGE_HW_TEXTURE | GRALLOC_USAGE_EXTERNAL_DISP); diff --git a/services/java/com/android/server/ConnectivityService.java b/services/java/com/android/server/ConnectivityService.java index fcb4c23..b1552a8 100644 --- a/services/java/com/android/server/ConnectivityService.java +++ b/services/java/com/android/server/ConnectivityService.java @@ -24,6 +24,7 @@ import android.content.pm.PackageManager; import android.database.ContentObserver; import android.net.ConnectivityManager; import android.net.DummyDataStateTracker; +import android.net.EthernetDataTracker; import android.net.IConnectivityManager; import android.net.LinkProperties; import android.net.MobileDataStateTracker; @@ -420,6 +421,10 @@ public class ConnectivityService extends IConnectivityManager.Stub { mNetTrackers[netType] = BluetoothTetheringDataTracker.getInstance(); mNetTrackers[netType].startMonitoring(context, mHandler); break; + case ConnectivityManager.TYPE_ETHERNET: + mNetTrackers[netType] = EthernetDataTracker.getInstance(); + mNetTrackers[netType].startMonitoring(context, mHandler); + break; default: loge("Trying to create a DataStateTracker for an unknown radio type " + mNetAttributes[netType].mRadio); |