Merge "Enable RTT End-to-end" into lmp-dev
diff --git a/api/current.txt b/api/current.txt
index 5b719bb..713b8d5 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -17438,6 +17438,7 @@
public class Network implements android.os.Parcelable {
method public int describeContents();
method public java.net.InetAddress[] getAllByName(java.lang.String) throws java.net.UnknownHostException;
+ method public java.net.URL getBoundURL(java.net.URL) throws java.net.MalformedURLException;
method public java.net.InetAddress getByName(java.lang.String) throws java.net.UnknownHostException;
method public javax.net.SocketFactory getSocketFactory();
method public void writeToParcel(android.os.Parcel, int);
diff --git a/core/java/android/app/ApplicationPackageManager.java b/core/java/android/app/ApplicationPackageManager.java
index 2fef250..f18507e 100644
--- a/core/java/android/app/ApplicationPackageManager.java
+++ b/core/java/android/app/ApplicationPackageManager.java
@@ -1623,11 +1623,11 @@
return new BitmapDrawable(getUserManager().getUserIcon(itemInfo.showUserIcon));
}
Drawable dr = getDrawable(itemInfo.packageName, itemInfo.icon, appInfo);
- if (dr != null) {
- dr = getUserManager().getBadgedDrawableForUser(dr,
- new UserHandle(mContext.getUserId()));
+ if (dr == null) {
+ dr = getDefaultActivityIcon();
}
- return dr;
+ return getUserManager().getBadgedDrawableForUser(dr,
+ new UserHandle(mContext.getUserId()));
}
private static class LegacyPackageInstallObserver extends PackageInstallObserver {
diff --git a/core/java/android/content/pm/PackageItemInfo.java b/core/java/android/content/pm/PackageItemInfo.java
index 9f79a89..4b5bdda 100644
--- a/core/java/android/content/pm/PackageItemInfo.java
+++ b/core/java/android/content/pm/PackageItemInfo.java
@@ -152,15 +152,9 @@
* such as the default activity icon.
*/
public Drawable loadIcon(PackageManager pm) {
- if (icon != 0 || showUserIcon != UserHandle.USER_NULL) {
- Drawable dr = pm.loadItemIcon(this, getApplicationInfo());
- if (dr != null) {
- return dr;
- }
- }
- return loadDefaultIcon(pm);
+ return pm.loadItemIcon(this, getApplicationInfo());
}
-
+
/**
* Retrieve the current graphical banner associated with this item. This
* will call back on the given PackageManager to load the banner from
diff --git a/core/java/android/net/Network.java b/core/java/android/net/Network.java
index 9a22d78..97238f1 100644
--- a/core/java/android/net/Network.java
+++ b/core/java/android/net/Network.java
@@ -23,11 +23,16 @@
import java.io.IOException;
import java.net.InetAddress;
import java.net.InetSocketAddress;
+import java.net.MalformedURLException;
import java.net.Socket;
import java.net.SocketException;
import java.net.UnknownHostException;
+import java.net.URL;
import javax.net.SocketFactory;
+import com.android.okhttp.HostResolver;
+import com.android.okhttp.OkHttpClient;
+
/**
* Identifies a {@code Network}. This is supplied to applications via
* {@link ConnectivityManager.NetworkCallback} in response to the active
@@ -44,7 +49,11 @@
*/
public final int netId;
+ // Objects used to perform per-network operations such as getSocketFactory
+ // and getBoundURL, and a lock to protect access to them.
private NetworkBoundSocketFactory mNetworkBoundSocketFactory = null;
+ private OkHttpClient mOkHttpClient = null;
+ private Object mLock = new Object();
/**
* @hide
@@ -166,12 +175,38 @@
* {@code Network}.
*/
public SocketFactory getSocketFactory() {
- if (mNetworkBoundSocketFactory == null) {
- mNetworkBoundSocketFactory = new NetworkBoundSocketFactory(netId);
+ synchronized (mLock) {
+ if (mNetworkBoundSocketFactory == null) {
+ mNetworkBoundSocketFactory = new NetworkBoundSocketFactory(netId);
+ }
}
return mNetworkBoundSocketFactory;
}
+ /**
+ * Returns a {@link URL} based on the given URL but bound to this {@code Network}.
+ * Note that if this {@code Network} ever disconnects, this factory and any URL object it
+ * produced in the past or future will cease to work.
+ *
+ * @return a {@link URL} bound to this {@code Network}.
+ */
+ public URL getBoundURL(URL url) throws MalformedURLException {
+ synchronized (mLock) {
+ if (mOkHttpClient == null) {
+ HostResolver hostResolver = new HostResolver() {
+ @Override
+ public InetAddress[] getAllByName(String host) throws UnknownHostException {
+ return Network.this.getAllByName(host);
+ }
+ };
+ mOkHttpClient = new OkHttpClient()
+ .setSocketFactory(getSocketFactory())
+ .setHostResolver(hostResolver);
+ }
+ }
+ return new URL(url, "", mOkHttpClient.createURLStreamHandler(url.getProtocol()));
+ }
+
// implement the Parcelable interface
public int describeContents() {
return 0;
diff --git a/core/java/android/view/RenderNode.java b/core/java/android/view/RenderNode.java
index 8aba8af..2d54acb 100644
--- a/core/java/android/view/RenderNode.java
+++ b/core/java/android/view/RenderNode.java
@@ -597,6 +597,9 @@
* @see #getScaleX()
*/
public boolean setScaleX(float scaleX) {
+ if (scaleX > 1000000) {
+ throw new IllegalArgumentException("Invalid scale: " + scaleX);
+ }
return nSetScaleX(mNativeRenderNode, scaleX);
}
@@ -618,6 +621,9 @@
* @see #getScaleY()
*/
public boolean setScaleY(float scaleY) {
+ if (scaleY > 1000000) {
+ throw new IllegalArgumentException("Invalid scale: " + scaleY);
+ }
return nSetScaleY(mNativeRenderNode, scaleY);
}
diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java
index c4c3242..27f493a 100644
--- a/core/java/android/view/ViewGroup.java
+++ b/core/java/android/view/ViewGroup.java
@@ -3327,7 +3327,7 @@
child.mRenderNode.setClipToBounds(clipChildren);
}
}
- invalidate();
+ invalidate(true);
}
}
@@ -3342,7 +3342,7 @@
public void setClipToPadding(boolean clipToPadding) {
if (hasBooleanFlag(FLAG_CLIP_TO_PADDING) != clipToPadding) {
setBooleanFlag(FLAG_CLIP_TO_PADDING, clipToPadding);
- invalidate();
+ invalidate(true);
}
}
diff --git a/core/jni/android_media_AudioTrack.cpp b/core/jni/android_media_AudioTrack.cpp
index 7e2448e..e0431a7 100644
--- a/core/jni/android_media_AudioTrack.cpp
+++ b/core/jni/android_media_AudioTrack.cpp
@@ -290,7 +290,7 @@
case MODE_STREAM:
status = lpTrack->set(
- AUDIO_STREAM_DEFAULT,// stream type
+ AUDIO_STREAM_DEFAULT,// stream type, but more info conveyed in paa (last argument)
sampleRateInHertz,
format,// word length, PCM
nativeChannelMask,
@@ -301,7 +301,7 @@
0,// shared mem
true,// thread can call Java
sessionId,// audio session ID
- AudioTrack::TRANSFER_DEFAULT, // default transfer mode
+ AudioTrack::TRANSFER_SYNC,
NULL, // default offloadInfo
-1, -1, // default uid, pid values
paa);
@@ -316,7 +316,7 @@
}
status = lpTrack->set(
- AUDIO_STREAM_DEFAULT,// stream type
+ AUDIO_STREAM_DEFAULT,// stream type, but more info conveyed in paa (last argument)
sampleRateInHertz,
format,// word length, PCM
nativeChannelMask,
@@ -327,7 +327,7 @@
lpJniStorage->mMemBase,// shared mem
true,// thread can call Java
sessionId,// audio session ID
- AudioTrack::TRANSFER_DEFAULT, // default transfer mode
+ AudioTrack::TRANSFER_SHARED,
NULL, // default offloadInfo
-1, -1, // default uid, pid values
paa);