diff options
65 files changed, 759 insertions, 216 deletions
diff --git a/Android.mk b/Android.mk index b919e9fc015e..dab32296f179 100644 --- a/Android.mk +++ b/Android.mk @@ -235,7 +235,7 @@ LOCAL_INTERMEDIATE_SOURCES := \ $(framework_res_source_path)/com/android/internal/R.java LOCAL_NO_STANDARD_LIBRARIES := true -LOCAL_JAVA_LIBRARIES := bouncycastle core core-junit ext okhttp +LOCAL_JAVA_LIBRARIES := bouncycastle conscrypt core core-junit ext okhttp LOCAL_MODULE := framework LOCAL_MODULE_CLASS := JAVA_LIBRARIES @@ -400,6 +400,7 @@ framework_docs_LOCAL_INTERMEDIATE_SOURCES := \ framework_docs_LOCAL_JAVA_LIBRARIES := \ bouncycastle \ + conscrypt \ core \ okhttp \ ext \ diff --git a/api/current.txt b/api/current.txt index e46dbeb74db0..ccd214b122af 100644 --- a/api/current.txt +++ b/api/current.txt @@ -15916,7 +15916,7 @@ package android.os { method public static void startMethodTracing(java.lang.String, int); method public static void startMethodTracing(java.lang.String, int, int); method public static void startNativeTracing(); - method public static void stopAllocCounting(); + method public static deprecated void stopAllocCounting(); method public static void stopMethodTracing(); method public static void stopNativeTracing(); method public static long threadCpuTimeNanos(); @@ -30455,7 +30455,7 @@ package java.io { ctor public CharConversionException(java.lang.String); } - public abstract interface Closeable { + public abstract interface Closeable implements java.lang.AutoCloseable { method public abstract void close() throws java.io.IOException; } @@ -30625,7 +30625,7 @@ package java.io { method public abstract boolean accept(java.io.File); } - public class FileInputStream extends java.io.InputStream implements java.io.Closeable { + public class FileInputStream extends java.io.InputStream { ctor public FileInputStream(java.io.File) throws java.io.FileNotFoundException; ctor public FileInputStream(java.io.FileDescriptor); ctor public FileInputStream(java.lang.String) throws java.io.FileNotFoundException; @@ -30639,7 +30639,7 @@ package java.io { ctor public FileNotFoundException(java.lang.String); } - public class FileOutputStream extends java.io.OutputStream implements java.io.Closeable { + public class FileOutputStream extends java.io.OutputStream { ctor public FileOutputStream(java.io.File) throws java.io.FileNotFoundException; ctor public FileOutputStream(java.io.File, boolean) throws java.io.FileNotFoundException; ctor public FileOutputStream(java.io.FileDescriptor); @@ -30778,7 +30778,7 @@ package java.io { ctor public NotSerializableException(java.lang.String); } - public abstract interface ObjectInput implements java.io.DataInput { + public abstract interface ObjectInput implements java.lang.AutoCloseable java.io.DataInput { method public abstract int available() throws java.io.IOException; method public abstract void close() throws java.io.IOException; method public abstract int read() throws java.io.IOException; @@ -30840,7 +30840,7 @@ package java.io { method public abstract void validateObject() throws java.io.InvalidObjectException; } - public abstract interface ObjectOutput implements java.io.DataOutput { + public abstract interface ObjectOutput implements java.lang.AutoCloseable java.io.DataOutput { method public abstract void close() throws java.io.IOException; method public abstract void flush() throws java.io.IOException; method public abstract void write(byte[]) throws java.io.IOException; @@ -31339,6 +31339,7 @@ package java.lang { public class AssertionError extends java.lang.Error { ctor public AssertionError(); + ctor public AssertionError(java.lang.String, java.lang.Throwable); ctor public AssertionError(java.lang.Object); ctor public AssertionError(boolean); ctor public AssertionError(char); @@ -31348,10 +31349,15 @@ package java.lang { ctor public AssertionError(double); } + public abstract interface AutoCloseable { + method public abstract void close() throws java.lang.Exception; + } + public final class Boolean implements java.lang.Comparable java.io.Serializable { ctor public Boolean(java.lang.String); ctor public Boolean(boolean); method public boolean booleanValue(); + method public static int compare(boolean, boolean); method public int compareTo(java.lang.Boolean); method public static boolean getBoolean(java.lang.String); method public static boolean parseBoolean(java.lang.String); @@ -31366,6 +31372,7 @@ package java.lang { public final class Byte extends java.lang.Number implements java.lang.Comparable { ctor public Byte(byte); ctor public Byte(java.lang.String) throws java.lang.NumberFormatException; + method public static int compare(byte, byte); method public int compareTo(java.lang.Byte); method public static java.lang.Byte decode(java.lang.String) throws java.lang.NumberFormatException; method public double doubleValue(); @@ -31403,16 +31410,20 @@ package java.lang { method public static int codePointBefore(char[], int, int); method public static int codePointCount(java.lang.CharSequence, int, int); method public static int codePointCount(char[], int, int); + method public static int compare(char, char); method public int compareTo(java.lang.Character); method public static int digit(char, int); method public static int digit(int, int); method public static char forDigit(int, int); method public static byte getDirectionality(char); method public static byte getDirectionality(int); + method public static java.lang.String getName(int); method public static int getNumericValue(char); method public static int getNumericValue(int); method public static int getType(char); method public static int getType(int); + method public static char highSurrogate(int); + method public static boolean isBmpCodePoint(int); method public static boolean isDefined(char); method public static boolean isDefined(int); method public static boolean isDigit(char); @@ -31441,6 +31452,7 @@ package java.lang { method public static boolean isSpaceChar(char); method public static boolean isSpaceChar(int); method public static boolean isSupplementaryCodePoint(int); + method public static boolean isSurrogate(char); method public static boolean isSurrogatePair(char, char); method public static boolean isTitleCase(char); method public static boolean isTitleCase(int); @@ -31453,6 +31465,7 @@ package java.lang { method public static boolean isValidCodePoint(int); method public static boolean isWhitespace(char); method public static boolean isWhitespace(int); + method public static char lowSurrogate(int); method public static int offsetByCodePoints(java.lang.CharSequence, int, int); method public static int offsetByCodePoints(char[], int, int, int, int); method public static char reverseBytes(char); @@ -31981,6 +31994,7 @@ package java.lang { ctor public Integer(int); ctor public Integer(java.lang.String) throws java.lang.NumberFormatException; method public static int bitCount(int); + method public static int compare(int, int); method public int compareTo(java.lang.Integer); method public static java.lang.Integer decode(java.lang.String) throws java.lang.NumberFormatException; method public double doubleValue(); @@ -32032,12 +32046,14 @@ package java.lang { public class LinkageError extends java.lang.Error { ctor public LinkageError(); ctor public LinkageError(java.lang.String); + ctor public LinkageError(java.lang.String, java.lang.Throwable); } public final class Long extends java.lang.Number implements java.lang.Comparable { ctor public Long(long); ctor public Long(java.lang.String) throws java.lang.NumberFormatException; method public static int bitCount(long); + method public static int compare(long, long); method public int compareTo(java.lang.Long); method public static java.lang.Long decode(java.lang.String) throws java.lang.NumberFormatException; method public double doubleValue(); @@ -32294,6 +32310,9 @@ package java.lang { ctor public RuntimePermission(java.lang.String, java.lang.String); } + public abstract class SafeVarargs implements java.lang.annotation.Annotation { + } + public class SecurityException extends java.lang.RuntimeException { ctor public SecurityException(); ctor public SecurityException(java.lang.String); @@ -32350,6 +32369,7 @@ package java.lang { public final class Short extends java.lang.Number implements java.lang.Comparable { ctor public Short(java.lang.String) throws java.lang.NumberFormatException; ctor public Short(short); + method public static int compare(short, short); method public int compareTo(java.lang.Short); method public static java.lang.Short decode(java.lang.String) throws java.lang.NumberFormatException; method public double doubleValue(); @@ -32621,6 +32641,7 @@ package java.lang { method public static java.util.Map<java.lang.String, java.lang.String> getenv(); method public static int identityHashCode(java.lang.Object); method public static java.nio.channels.Channel inheritedChannel() throws java.io.IOException; + method public static java.lang.String lineSeparator(); method public static void load(java.lang.String); method public static void loadLibrary(java.lang.String); method public static java.lang.String mapLibraryName(java.lang.String); @@ -32753,11 +32774,14 @@ package java.lang { ctor public Throwable(java.lang.String); ctor public Throwable(java.lang.String, java.lang.Throwable); ctor public Throwable(java.lang.Throwable); + ctor protected Throwable(java.lang.String, java.lang.Throwable, boolean, boolean); + method public final void addSuppressed(java.lang.Throwable); method public java.lang.Throwable fillInStackTrace(); method public java.lang.Throwable getCause(); method public java.lang.String getLocalizedMessage(); method public java.lang.String getMessage(); method public java.lang.StackTraceElement[] getStackTrace(); + method public final java.lang.Throwable[] getSuppressed(); method public java.lang.Throwable initCause(java.lang.Throwable); method public void printStackTrace(); method public void printStackTrace(java.io.PrintStream); @@ -33052,6 +33076,10 @@ package java.lang.reflect { public class Modifier { ctor public Modifier(); + method public static int classModifiers(); + method public static int constructorModifiers(); + method public static int fieldModifiers(); + method public static int interfaceModifiers(); method public static boolean isAbstract(int); method public static boolean isFinal(int); method public static boolean isInterface(int); @@ -33064,6 +33092,7 @@ package java.lang.reflect { method public static boolean isSynchronized(int); method public static boolean isTransient(int); method public static boolean isVolatile(int); + method public static int methodModifiers(); method public static java.lang.String toString(int); field public static final int ABSTRACT = 1024; // 0x400 field public static final int FINAL = 16; // 0x10 @@ -33403,7 +33432,7 @@ package java.net { method public synchronized void setSocketAddress(java.net.SocketAddress); } - public class DatagramSocket { + public class DatagramSocket implements java.io.Closeable { ctor public DatagramSocket() throws java.net.SocketException; ctor public DatagramSocket(int) throws java.net.SocketException; ctor public DatagramSocket(int, java.net.InetAddress) throws java.net.SocketException; @@ -33600,6 +33629,7 @@ package java.net { method public java.lang.String getHostAddress(); method public java.lang.String getHostName(); method public static java.net.InetAddress getLocalHost() throws java.net.UnknownHostException; + method public static java.net.InetAddress getLoopbackAddress(); method public boolean isAnyLocalAddress(); method public boolean isLinkLocalAddress(); method public boolean isLoopbackAddress(); @@ -33622,6 +33652,7 @@ package java.net { method public final boolean equals(java.lang.Object); method public final java.net.InetAddress getAddress(); method public final java.lang.String getHostName(); + method public final java.lang.String getHostString(); method public final int getPort(); method public final int hashCode(); method public final boolean isUnresolved(); @@ -33678,10 +33709,12 @@ package java.net { } public final class NetworkInterface { + method public static java.net.NetworkInterface getByIndex(int) throws java.net.SocketException; method public static java.net.NetworkInterface getByInetAddress(java.net.InetAddress) throws java.net.SocketException; method public static java.net.NetworkInterface getByName(java.lang.String) throws java.net.SocketException; method public java.lang.String getDisplayName(); method public byte[] getHardwareAddress() throws java.net.SocketException; + method public int getIndex(); method public java.util.Enumeration<java.net.InetAddress> getInetAddresses(); method public java.util.List<java.net.InterfaceAddress> getInterfaceAddresses(); method public int getMTU() throws java.net.SocketException; @@ -33759,7 +33792,7 @@ package java.net { method public abstract java.util.List<java.security.cert.Certificate> getServerCertificateChain() throws javax.net.ssl.SSLPeerUnverifiedException; } - public class ServerSocket { + public class ServerSocket implements java.io.Closeable { ctor public ServerSocket() throws java.io.IOException; ctor public ServerSocket(int) throws java.io.IOException; ctor public ServerSocket(int, int) throws java.io.IOException; @@ -33785,7 +33818,7 @@ package java.net { method public static synchronized void setSocketFactory(java.net.SocketImplFactory) throws java.io.IOException; } - public class Socket { + public class Socket implements java.io.Closeable { ctor public Socket(); ctor public Socket(java.net.Proxy); ctor public Socket(java.lang.String, int) throws java.io.IOException, java.net.UnknownHostException; @@ -34463,9 +34496,10 @@ package java.nio.channels { field public static final java.nio.channels.FileChannel.MapMode READ_WRITE; } - public abstract class FileLock { + public abstract class FileLock implements java.lang.AutoCloseable { ctor protected FileLock(java.nio.channels.FileChannel, long, long, boolean); method public final java.nio.channels.FileChannel channel(); + method public final void close() throws java.io.IOException; method public final boolean isShared(); method public abstract boolean isValid(); method public final boolean overlaps(long, long); @@ -34580,7 +34614,7 @@ package java.nio.channels { field public static final int OP_WRITE = 4; // 0x4 } - public abstract class Selector { + public abstract class Selector implements java.io.Closeable { ctor protected Selector(); method public abstract void close() throws java.io.IOException; method public abstract boolean isOpen(); @@ -36516,7 +36550,7 @@ package java.sql { method public abstract void truncate(long) throws java.sql.SQLException; } - public abstract interface Connection implements java.sql.Wrapper { + public abstract interface Connection implements java.lang.AutoCloseable java.sql.Wrapper { method public abstract void clearWarnings() throws java.sql.SQLException; method public abstract void close() throws java.sql.SQLException; method public abstract void commit() throws java.sql.SQLException; @@ -36945,7 +36979,7 @@ package java.sql { method public abstract void setObject(java.lang.Object) throws java.sql.SQLException; } - public abstract interface ResultSet implements java.sql.Wrapper { + public abstract interface ResultSet implements java.lang.AutoCloseable java.sql.Wrapper { method public abstract boolean absolute(int) throws java.sql.SQLException; method public abstract void afterLast() throws java.sql.SQLException; method public abstract void beforeFirst() throws java.sql.SQLException; @@ -37451,7 +37485,7 @@ package java.sql { method public abstract java.lang.String getSavepointName() throws java.sql.SQLException; } - public abstract interface Statement implements java.sql.Wrapper { + public abstract interface Statement implements java.lang.AutoCloseable java.sql.Wrapper { method public abstract void addBatch(java.lang.String) throws java.sql.SQLException; method public abstract void cancel() throws java.sql.SQLException; method public abstract void clearBatch() throws java.sql.SQLException; @@ -38351,11 +38385,19 @@ package java.util { method public int nextClearBit(int); method public int nextSetBit(int); method public void or(java.util.BitSet); + method public int previousClearBit(int); + method public int previousSetBit(int); method public void set(int); method public void set(int, boolean); method public void set(int, int, boolean); method public void set(int, int); method public int size(); + method public byte[] toByteArray(); + method public long[] toLongArray(); + method public static java.util.BitSet valueOf(long[]); + method public static java.util.BitSet valueOf(java.nio.LongBuffer); + method public static java.util.BitSet valueOf(byte[]); + method public static java.util.BitSet valueOf(java.nio.ByteBuffer); method public void xor(java.util.BitSet); } @@ -38488,7 +38530,10 @@ package java.util { method public static java.util.SortedSet<E> checkedSortedSet(java.util.SortedSet<E>, java.lang.Class<E>); method public static void copy(java.util.List<? super T>, java.util.List<? extends T>); method public static boolean disjoint(java.util.Collection<?>, java.util.Collection<?>); + method public static java.util.Enumeration<T> emptyEnumeration(); + method public static java.util.Iterator<T> emptyIterator(); method public static final java.util.List<T> emptyList(); + method public static java.util.ListIterator<T> emptyListIterator(); method public static final java.util.Map<K, V> emptyMap(); method public static final java.util.Set<T> emptySet(); method public static java.util.Enumeration<T> enumeration(java.util.Collection<T>); @@ -38541,11 +38586,16 @@ package java.util { public class ConcurrentModificationException extends java.lang.RuntimeException { ctor public ConcurrentModificationException(); ctor public ConcurrentModificationException(java.lang.String); + ctor public ConcurrentModificationException(java.lang.String, java.lang.Throwable); + ctor public ConcurrentModificationException(java.lang.Throwable); } public final class Currency implements java.io.Serializable { + method public static java.util.Set<java.util.Currency> getAvailableCurrencies(); method public java.lang.String getCurrencyCode(); method public int getDefaultFractionDigits(); + method public java.lang.String getDisplayName(); + method public java.lang.String getDisplayName(java.util.Locale); method public static java.util.Currency getInstance(java.lang.String); method public static java.util.Currency getInstance(java.util.Locale); method public java.lang.String getSymbol(); @@ -39210,7 +39260,7 @@ package java.util { field public static final long TTL_NO_EXPIRATION_CONTROL = -2L; // 0xfffffffffffffffeL } - public final class Scanner implements java.util.Iterator { + public final class Scanner implements java.io.Closeable java.util.Iterator { ctor public Scanner(java.io.File) throws java.io.FileNotFoundException; ctor public Scanner(java.io.File, java.lang.String) throws java.io.FileNotFoundException; ctor public Scanner(java.lang.String); @@ -40852,6 +40902,7 @@ package java.util.logging { method public static java.util.logging.Logger getAnonymousLogger(); method public static java.util.logging.Logger getAnonymousLogger(java.lang.String); method public java.util.logging.Filter getFilter(); + method public static java.util.logging.Logger getGlobal(); method public java.util.logging.Handler[] getHandlers(); method public java.util.logging.Level getLevel(); method public static java.util.logging.Logger getLogger(java.lang.String); @@ -41198,6 +41249,7 @@ package java.util.zip { ctor public Deflater(int, boolean); method public int deflate(byte[]); method public synchronized int deflate(byte[], int, int); + method public synchronized int deflate(byte[], int, int, int); method public synchronized void end(); method public synchronized void finish(); method public synchronized boolean finished(); @@ -41220,8 +41272,11 @@ package java.util.zip { field public static final int DEFAULT_STRATEGY = 0; // 0x0 field public static final int DEFLATED = 8; // 0x8 field public static final int FILTERED = 1; // 0x1 + field public static final int FULL_FLUSH = 3; // 0x3 field public static final int HUFFMAN_ONLY = 2; // 0x2 field public static final int NO_COMPRESSION = 0; // 0x0 + field public static final int NO_FLUSH = 0; // 0x0 + field public static final int SYNC_FLUSH = 2; // 0x2 } public class DeflaterInputStream extends java.io.FilterInputStream { @@ -41233,9 +41288,12 @@ package java.util.zip { } public class DeflaterOutputStream extends java.io.FilterOutputStream { - ctor public DeflaterOutputStream(java.io.OutputStream, java.util.zip.Deflater); ctor public DeflaterOutputStream(java.io.OutputStream); + ctor public DeflaterOutputStream(java.io.OutputStream, java.util.zip.Deflater); ctor public DeflaterOutputStream(java.io.OutputStream, java.util.zip.Deflater, int); + ctor public DeflaterOutputStream(java.io.OutputStream, boolean); + ctor public DeflaterOutputStream(java.io.OutputStream, java.util.zip.Deflater, boolean); + ctor public DeflaterOutputStream(java.io.OutputStream, java.util.zip.Deflater, int, boolean); method protected void deflate() throws java.io.IOException; method public void finish() throws java.io.IOException; field protected byte[] buf; @@ -41330,7 +41388,7 @@ package java.util.zip { ctor public ZipException(java.lang.String); } - public class ZipFile { + public class ZipFile implements java.io.Closeable { ctor public ZipFile(java.io.File) throws java.io.IOException, java.util.zip.ZipException; ctor public ZipFile(java.lang.String) throws java.io.IOException; ctor public ZipFile(java.io.File, int) throws java.io.IOException; @@ -41366,6 +41424,11 @@ package java.util.zip { package javax.crypto { + public class AEADBadTagException extends javax.crypto.BadPaddingException { + ctor public AEADBadTagException(); + ctor public AEADBadTagException(java.lang.String); + } + public class BadPaddingException extends java.security.GeneralSecurityException { ctor public BadPaddingException(java.lang.String); ctor public BadPaddingException(); @@ -41406,6 +41469,9 @@ package javax.crypto { method public final int update(byte[], int, int, byte[]) throws javax.crypto.ShortBufferException; method public final int update(byte[], int, int, byte[], int) throws javax.crypto.ShortBufferException; method public final int update(java.nio.ByteBuffer, java.nio.ByteBuffer) throws javax.crypto.ShortBufferException; + method public final void updateAAD(byte[]); + method public final void updateAAD(byte[], int, int); + method public final void updateAAD(java.nio.ByteBuffer); method public final byte[] wrap(java.security.Key) throws javax.crypto.IllegalBlockSizeException, java.security.InvalidKeyException; field public static final int DECRYPT_MODE = 2; // 0x2 field public static final int ENCRYPT_MODE = 1; // 0x1 @@ -41445,6 +41511,8 @@ package javax.crypto { method protected abstract byte[] engineUpdate(byte[], int, int); method protected abstract int engineUpdate(byte[], int, int, byte[], int) throws javax.crypto.ShortBufferException; method protected int engineUpdate(java.nio.ByteBuffer, java.nio.ByteBuffer) throws javax.crypto.ShortBufferException; + method protected void engineUpdateAAD(byte[], int, int); + method protected void engineUpdateAAD(java.nio.ByteBuffer); method protected byte[] engineWrap(java.security.Key) throws javax.crypto.IllegalBlockSizeException, java.security.InvalidKeyException; } @@ -41703,6 +41771,13 @@ package javax.crypto.spec { method public java.math.BigInteger getY(); } + public class GCMParameterSpec implements java.security.spec.AlgorithmParameterSpec { + ctor public GCMParameterSpec(int, byte[]); + ctor public GCMParameterSpec(int, byte[], int, int); + method public byte[] getIV(); + method public int getTLen(); + } + public class IvParameterSpec implements java.security.spec.AlgorithmParameterSpec { ctor public IvParameterSpec(byte[]); ctor public IvParameterSpec(byte[], int, int); diff --git a/cmds/app_process/app_main.cpp b/cmds/app_process/app_main.cpp index 0668be606a7e..6f37180e15eb 100644 --- a/cmds/app_process/app_main.cpp +++ b/cmds/app_process/app_main.cpp @@ -7,6 +7,7 @@ #define LOG_TAG "appproc" +#include <cutils/properties.h> #include <binder/IPCThreadState.h> #include <binder/ProcessState.h> #include <utils/Log.h> @@ -144,7 +145,10 @@ int main(int argc, char* const argv[]) * This breaks some programs which improperly embed * an out of date copy of Android's linker. */ - if (getenv("NO_ADDR_COMPAT_LAYOUT_FIXUP") == NULL) { + char value[PROPERTY_VALUE_MAX]; + property_get("ro.kernel.qemu", value, ""); + bool is_qemu = (strcmp(value, "1") == 0); + if ((getenv("NO_ADDR_COMPAT_LAYOUT_FIXUP") == NULL) && !is_qemu) { int current = personality(0xFFFFFFFF); if ((current & ADDR_COMPAT_LAYOUT) == 0) { personality(current | ADDR_COMPAT_LAYOUT); diff --git a/cmds/input/src/com/android/commands/input/Input.java b/cmds/input/src/com/android/commands/input/Input.java index a21df0d2c8b2..6dc9f3d562c0 100644 --- a/cmds/input/src/com/android/commands/input/Input.java +++ b/cmds/input/src/com/android/commands/input/Input.java @@ -56,12 +56,14 @@ public class Input { return; } } else if (command.equals("keyevent")) { - if (args.length == 2) { - int keyCode = KeyEvent.keyCodeFromString(args[1]); - if (keyCode == KeyEvent.KEYCODE_UNKNOWN) { - keyCode = KeyEvent.keyCodeFromString("KEYCODE_" + args[1]); + if (args.length >= 2) { + for (int i=1; i < args.length; i++) { + int keyCode = KeyEvent.keyCodeFromString(args[i]); + if (keyCode == KeyEvent.KEYCODE_UNKNOWN) { + keyCode = KeyEvent.keyCodeFromString("KEYCODE_" + args[i]); + } + sendKeyEvent(keyCode); } - sendKeyEvent(keyCode); return; } } else if (command.equals("tap")) { @@ -223,7 +225,7 @@ public class Input { DEFAULT_META_STATE, DEFAULT_PRECISION_X, DEFAULT_PRECISION_Y, DEFAULT_DEVICE_ID, DEFAULT_EDGE_FLAGS); event.setSource(inputSource); - Log.i("Input", "injectMotionEvent: " + event); + Log.i(TAG, "injectMotionEvent: " + event); InputManager.getInstance().injectInputEvent(event, InputManager.INJECT_INPUT_EVENT_MODE_WAIT_FOR_FINISH); } @@ -235,7 +237,7 @@ public class Input { private void showUsage() { System.err.println("usage: input ..."); System.err.println(" input text <string>"); - System.err.println(" input keyevent <key code number or name>"); + System.err.println(" input keyevent <key code number or name> ..."); System.err.println(" input [touchscreen|touchpad] tap <x> <y>"); System.err.println(" input [touchscreen|touchpad] swipe <x1> <y1> <x2> <y2>"); System.err.println(" input trackball press"); diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index 22fd9a9d3686..8281e302c382 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -92,8 +92,7 @@ import com.android.internal.os.BinderInternal; import com.android.internal.os.RuntimeInit; import com.android.internal.os.SamplingProfilerIntegration; import com.android.internal.util.Objects; - -import org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl; +import com.android.org.conscrypt.OpenSSLSocketImpl; import java.io.File; import java.io.FileDescriptor; diff --git a/core/java/android/app/PendingIntent.java b/core/java/android/app/PendingIntent.java index 2897ee0f5569..97de4f4b5026 100644 --- a/core/java/android/app/PendingIntent.java +++ b/core/java/android/app/PendingIntent.java @@ -202,8 +202,7 @@ public final class PendingIntent implements Parcelable { * * @param context The Context in which this PendingIntent should start * the activity. - * @param requestCode Private request code for the sender (currently - * not used). + * @param requestCode Private request code for the sender * @param intent Intent of the activity to be launched. * @param flags May be {@link #FLAG_ONE_SHOT}, {@link #FLAG_NO_CREATE}, * {@link #FLAG_CANCEL_CURRENT}, {@link #FLAG_UPDATE_CURRENT}, @@ -229,8 +228,7 @@ public final class PendingIntent implements Parcelable { * * @param context The Context in which this PendingIntent should start * the activity. - * @param requestCode Private request code for the sender (currently - * not used). + * @param requestCode Private request code for the sender * @param intent Intent of the activity to be launched. * @param flags May be {@link #FLAG_ONE_SHOT}, {@link #FLAG_NO_CREATE}, * {@link #FLAG_CANCEL_CURRENT}, {@link #FLAG_UPDATE_CURRENT}, @@ -315,8 +313,7 @@ public final class PendingIntent implements Parcelable { * * @param context The Context in which this PendingIntent should start * the activity. - * @param requestCode Private request code for the sender (currently - * not used). + * @param requestCode Private request code for the sender * @param intents Array of Intents of the activities to be launched. * @param flags May be {@link #FLAG_ONE_SHOT}, {@link #FLAG_NO_CREATE}, * {@link #FLAG_CANCEL_CURRENT}, {@link #FLAG_UPDATE_CURRENT}, @@ -361,8 +358,7 @@ public final class PendingIntent implements Parcelable { * * @param context The Context in which this PendingIntent should start * the activity. - * @param requestCode Private request code for the sender (currently - * not used). + * @param requestCode Private request code for the sender * @param intents Array of Intents of the activities to be launched. * @param flags May be {@link #FLAG_ONE_SHOT}, {@link #FLAG_NO_CREATE}, * {@link #FLAG_CANCEL_CURRENT}, {@link #FLAG_UPDATE_CURRENT}, @@ -425,8 +421,7 @@ public final class PendingIntent implements Parcelable { * * @param context The Context in which this PendingIntent should perform * the broadcast. - * @param requestCode Private request code for the sender (currently - * not used). + * @param requestCode Private request code for the sender * @param intent The Intent to be broadcast. * @param flags May be {@link #FLAG_ONE_SHOT}, {@link #FLAG_NO_CREATE}, * {@link #FLAG_CANCEL_CURRENT}, {@link #FLAG_UPDATE_CURRENT}, @@ -475,8 +470,7 @@ public final class PendingIntent implements Parcelable { * * @param context The Context in which this PendingIntent should start * the service. - * @param requestCode Private request code for the sender (currently - * not used). + * @param requestCode Private request code for the sender * @param intent An Intent describing the service to be started. * @param flags May be {@link #FLAG_ONE_SHOT}, {@link #FLAG_NO_CREATE}, * {@link #FLAG_CANCEL_CURRENT}, {@link #FLAG_UPDATE_CURRENT}, diff --git a/core/java/android/content/res/Configuration.java b/core/java/android/content/res/Configuration.java index 86d6ee77ae7e..add839990280 100644 --- a/core/java/android/content/res/Configuration.java +++ b/core/java/android/content/res/Configuration.java @@ -853,11 +853,13 @@ public final class Configuration implements Parcelable, Comparable<Configuration changed |= ActivityInfo.CONFIG_SCREEN_SIZE; screenHeightDp = delta.screenHeightDp; } - if (delta.smallestScreenWidthDp != SMALLEST_SCREEN_WIDTH_DP_UNDEFINED) { - changed |= ActivityInfo.CONFIG_SCREEN_SIZE; + if (delta.smallestScreenWidthDp != SMALLEST_SCREEN_WIDTH_DP_UNDEFINED + && smallestScreenWidthDp != delta.smallestScreenWidthDp) { + changed |= ActivityInfo.CONFIG_SMALLEST_SCREEN_SIZE; smallestScreenWidthDp = delta.smallestScreenWidthDp; } - if (delta.densityDpi != DENSITY_DPI_UNDEFINED) { + if (delta.densityDpi != DENSITY_DPI_UNDEFINED && + densityDpi != delta.densityDpi) { changed |= ActivityInfo.CONFIG_DENSITY; densityDpi = delta.densityDpi; } diff --git a/core/java/android/database/sqlite/SQLiteConnection.java b/core/java/android/database/sqlite/SQLiteConnection.java index 0017c46a7a16..747f16233cb2 100644 --- a/core/java/android/database/sqlite/SQLiteConnection.java +++ b/core/java/android/database/sqlite/SQLiteConnection.java @@ -30,9 +30,9 @@ import android.util.Log; import android.util.LruCache; import android.util.Printer; -import java.sql.Date; import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Date; import java.util.Map; import java.util.regex.Pattern; diff --git a/core/java/android/inputmethodservice/InputMethodService.java b/core/java/android/inputmethodservice/InputMethodService.java index 6f1cc942c965..d6b90c3f331e 100644 --- a/core/java/android/inputmethodservice/InputMethodService.java +++ b/core/java/android/inputmethodservice/InputMethodService.java @@ -424,7 +424,7 @@ public class InputMethodService extends AbstractInputMethodService { showWindow(true); } // If user uses hard keyboard, IME button should always be shown. - boolean showing = onEvaluateInputViewShown(); + boolean showing = isInputViewShown(); mImm.setImeWindowStatus(mToken, IME_ACTIVE | (showing ? IME_VISIBLE : 0), mBackDisposition); if (resultReceiver != null) { diff --git a/core/java/android/net/EthernetDataTracker.java b/core/java/android/net/EthernetDataTracker.java index 37601fce5cec..d587e6873dd7 100644 --- a/core/java/android/net/EthernetDataTracker.java +++ b/core/java/android/net/EthernetDataTracker.java @@ -178,6 +178,7 @@ public class EthernetDataTracker implements NetworkStateTracker { mLinkProperties = dhcpInfoInternal.makeLinkProperties(); mLinkProperties.setInterfaceName(mIface); + mNetworkInfo.setIsAvailable(true); mNetworkInfo.setDetailedState(DetailedState.CONNECTED, null, mHwAddr); Message msg = mCsHandler.obtainMessage(EVENT_STATE_CHANGED, mNetworkInfo); msg.sendToTarget(); diff --git a/core/java/android/net/SSLCertificateSocketFactory.java b/core/java/android/net/SSLCertificateSocketFactory.java index 2a2f7cf81f84..37f04d308773 100644 --- a/core/java/android/net/SSLCertificateSocketFactory.java +++ b/core/java/android/net/SSLCertificateSocketFactory.java @@ -18,6 +18,9 @@ package android.net; import android.os.SystemProperties; import android.util.Log; +import com.android.org.conscrypt.OpenSSLContextImpl; +import com.android.org.conscrypt.OpenSSLSocketImpl; +import com.android.org.conscrypt.SSLClientSessionCache; import java.io.IOException; import java.net.InetAddress; import java.net.Socket; @@ -36,9 +39,6 @@ import javax.net.ssl.SSLSocket; import javax.net.ssl.SSLSocketFactory; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; -import org.apache.harmony.xnet.provider.jsse.OpenSSLContextImpl; -import org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl; -import org.apache.harmony.xnet.provider.jsse.SSLClientSessionCache; /** * SSLSocketFactory implementation with several extra features: diff --git a/core/java/android/net/SSLSessionCache.java b/core/java/android/net/SSLSessionCache.java index 4cbeb947b8e3..15421de71111 100644 --- a/core/java/android/net/SSLSessionCache.java +++ b/core/java/android/net/SSLSessionCache.java @@ -16,12 +16,12 @@ package android.net; -import org.apache.harmony.xnet.provider.jsse.FileClientSessionCache; -import org.apache.harmony.xnet.provider.jsse.SSLClientSessionCache; - import android.content.Context; import android.util.Log; +import com.android.org.conscrypt.FileClientSessionCache; +import com.android.org.conscrypt.SSLClientSessionCache; + import java.io.File; import java.io.IOException; diff --git a/core/java/android/net/http/CertificateChainValidator.java b/core/java/android/net/http/CertificateChainValidator.java index f66075d66b75..3652a4c12a19 100644 --- a/core/java/android/net/http/CertificateChainValidator.java +++ b/core/java/android/net/http/CertificateChainValidator.java @@ -16,21 +16,22 @@ package android.net.http; +import com.android.org.conscrypt.SSLParametersImpl; +import com.android.org.conscrypt.TrustManagerImpl; +import java.io.ByteArrayInputStream; import java.io.IOException; import java.security.GeneralSecurityException; import java.security.KeyManagementException; import java.security.cert.Certificate; import java.security.cert.CertificateException; +import java.security.cert.CertificateFactory; import java.security.cert.X509Certificate; import javax.net.ssl.DefaultHostnameVerifier; import javax.net.ssl.SSLHandshakeException; import javax.net.ssl.SSLSession; import javax.net.ssl.SSLSocket; import javax.net.ssl.X509TrustManager; -import org.apache.harmony.security.provider.cert.X509CertImpl; -import org.apache.harmony.xnet.provider.jsse.SSLParametersImpl; -import org.apache.harmony.xnet.provider.jsse.TrustManagerImpl; /** * Class responsible for all server certificate validation functionality @@ -118,8 +119,14 @@ public class CertificateChainValidator { X509Certificate[] serverCertificates = new X509Certificate[certChain.length]; - for (int i = 0; i < certChain.length; ++i) { - serverCertificates[i] = new X509CertImpl(certChain[i]); + try { + CertificateFactory cf = CertificateFactory.getInstance("X.509"); + for (int i = 0; i < certChain.length; ++i) { + serverCertificates[i] = (X509Certificate) cf.generateCertificate( + new ByteArrayInputStream(certChain[i])); + } + } catch (CertificateException e) { + throw new IOException("can't read certificate", e); } return verifyServerDomainAndCertificates(serverCertificates, domain, authType); diff --git a/core/java/android/net/http/HttpsConnection.java b/core/java/android/net/http/HttpsConnection.java index 84765a5cbcd2..f421d29dcabc 100644 --- a/core/java/android/net/http/HttpsConnection.java +++ b/core/java/android/net/http/HttpsConnection.java @@ -18,9 +18,9 @@ package android.net.http; import android.content.Context; import android.util.Log; -import org.apache.harmony.xnet.provider.jsse.FileClientSessionCache; -import org.apache.harmony.xnet.provider.jsse.OpenSSLContextImpl; -import org.apache.harmony.xnet.provider.jsse.SSLClientSessionCache; +import com.android.org.conscrypt.FileClientSessionCache; +import com.android.org.conscrypt.OpenSSLContextImpl; +import com.android.org.conscrypt.SSLClientSessionCache; import org.apache.http.Header; import org.apache.http.HttpException; import org.apache.http.HttpHost; diff --git a/core/java/android/net/http/X509TrustManagerExtensions.java b/core/java/android/net/http/X509TrustManagerExtensions.java index 64eacbc9ba0a..cfe5f27b9e86 100644 --- a/core/java/android/net/http/X509TrustManagerExtensions.java +++ b/core/java/android/net/http/X509TrustManagerExtensions.java @@ -16,7 +16,7 @@ package android.net.http; -import org.apache.harmony.xnet.provider.jsse.TrustManagerImpl; +import com.android.org.conscrypt.TrustManagerImpl; import java.security.cert.CertificateException; import java.security.cert.X509Certificate; diff --git a/core/java/android/os/Debug.java b/core/java/android/os/Debug.java index 2e77237451ce..fd01da9f8afa 100644 --- a/core/java/android/os/Debug.java +++ b/core/java/android/os/Debug.java @@ -577,6 +577,7 @@ href="{@docRoot}guide/developing/tools/traceview.html">Traceview: A Graphical Lo * * @see #startAllocCounting() */ + @Deprecated public static void stopAllocCounting() { VMDebug.stopAllocCounting(); } diff --git a/core/java/android/preference/Preference.java b/core/java/android/preference/Preference.java index e343e830d894..6c0296537b50 100644 --- a/core/java/android/preference/Preference.java +++ b/core/java/android/preference/Preference.java @@ -1072,6 +1072,9 @@ public class Preference implements Comparable<Preference>, OnDependencyChangeLis || (mOrder == DEFAULT_ORDER && another.mOrder != DEFAULT_ORDER)) { // Do order comparison return mOrder - another.mOrder; + } else if (mTitle == another.mTitle) { + // If titles are null or share same object comparison + return 0; } else if (mTitle == null) { return 1; } else if (another.mTitle == null) { diff --git a/core/java/android/text/format/DateFormat.java b/core/java/android/text/format/DateFormat.java index 50b1a2962a1b..ff5106a25c3e 100644 --- a/core/java/android/text/format/DateFormat.java +++ b/core/java/android/text/format/DateFormat.java @@ -31,6 +31,7 @@ import java.util.Locale; import java.util.TimeZone; import java.text.SimpleDateFormat; +import libcore.icu.ICU; import libcore.icu.LocaleData; /** @@ -278,39 +279,13 @@ public class DateFormat { * Gets the current date format stored as a char array. The array will contain * 3 elements ({@link #DATE}, {@link #MONTH}, and {@link #YEAR}) in the order * specified by the user's format preference. Note that this order is - * only appropriate for all-numeric dates; spelled-out (MEDIUM and LONG) + * <i>only</i> appropriate for all-numeric dates; spelled-out (MEDIUM and LONG) * dates will generally contain other punctuation, spaces, or words, * not just the day, month, and year, and not necessarily in the same * order returned here. */ public static char[] getDateFormatOrder(Context context) { - char[] order = new char[] {DATE, MONTH, YEAR}; - String value = getDateFormatString(context); - int index = 0; - boolean foundDate = false; - boolean foundMonth = false; - boolean foundYear = false; - - for (char c : value.toCharArray()) { - if (!foundDate && (c == DATE)) { - foundDate = true; - order[index] = DATE; - index++; - } - - if (!foundMonth && (c == MONTH || c == STANDALONE_MONTH)) { - foundMonth = true; - order[index] = MONTH; - index++; - } - - if (!foundYear && (c == YEAR)) { - foundYear = true; - order[index] = YEAR; - index++; - } - } - return order; + return ICU.getDateFormatOrder(getDateFormatString(context)); } private static String getDateFormatString(Context context) { diff --git a/core/java/android/util/TimeUtils.java b/core/java/android/util/TimeUtils.java index 5a4f3227ec90..33964a067818 100644 --- a/core/java/android/util/TimeUtils.java +++ b/core/java/android/util/TimeUtils.java @@ -235,7 +235,7 @@ public class TimeUtils { * during the lifetime of an activity. */ public static String getTimeZoneDatabaseVersion() { - return ZoneInfoDB.getVersion(); + return ZoneInfoDB.getInstance().getVersion(); } /** @hide Field length that can hold 999 days of time */ diff --git a/core/java/android/view/KeyEvent.java b/core/java/android/view/KeyEvent.java index c2a3e5816ea3..4649a8b85d88 100644 --- a/core/java/android/view/KeyEvent.java +++ b/core/java/android/view/KeyEvent.java @@ -628,8 +628,8 @@ public class KeyEvent extends InputEvent implements Parcelable { // NOTE: If you add a new keycode here you must also add it to: // isSystem() - // native/include/android/keycodes.h - // frameworks/base/include/ui/KeycodeLabels.h + // frameworks/native/include/android/keycodes.h + // frameworks/base/include/androidfw/KeycodeLabels.h // external/webkit/WebKit/android/plugins/ANPKeyCodes.h // frameworks/base/core/res/res/values/attrs.xml // emulator? diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index 0d2141f0071d..75b8e97a0945 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -10525,8 +10525,9 @@ public class View implements Drawable.Callback, KeyEvent.Callback, * handler can be used to pump events in the UI events queue. */ public Handler getHandler() { - if (mAttachInfo != null) { - return mAttachInfo.mHandler; + final AttachInfo attachInfo = mAttachInfo; + if (attachInfo != null) { + return attachInfo.mHandler; } return null; } diff --git a/core/java/android/webkit/BrowserFrame.java b/core/java/android/webkit/BrowserFrame.java index 023dfa8dafe4..7fe81dd2a4c8 100644 --- a/core/java/android/webkit/BrowserFrame.java +++ b/core/java/android/webkit/BrowserFrame.java @@ -40,13 +40,13 @@ import android.view.WindowManager; import junit.framework.Assert; +import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.lang.ref.WeakReference; import java.net.URLEncoder; -import java.nio.charset.Charsets; import java.security.PrivateKey; -import java.security.cert.CertificateEncodingException; +import java.security.cert.CertificateFactory; import java.security.cert.X509Certificate; import java.util.ArrayList; import java.util.HashMap; @@ -55,9 +55,8 @@ import java.util.Iterator; import java.util.Map; import java.util.Set; -import org.apache.harmony.security.provider.cert.X509CertImpl; -import org.apache.harmony.xnet.provider.jsse.OpenSSLKey; -import org.apache.harmony.xnet.provider.jsse.OpenSSLKeyHolder; +import com.android.org.conscrypt.OpenSSLKey; +import com.android.org.conscrypt.OpenSSLKeyHolder; class BrowserFrame extends Handler { @@ -1079,10 +1078,12 @@ class BrowserFrame extends Handler { String url) { final SslError sslError; try { - X509Certificate cert = new X509CertImpl(certDER); + CertificateFactory cf = CertificateFactory.getInstance("X.509"); + X509Certificate cert = (X509Certificate) cf.generateCertificate( + new ByteArrayInputStream(certDER)); SslCertificate sslCert = new SslCertificate(cert); sslError = SslError.SslErrorFromChromiumErrorCode(certError, sslCert, url); - } catch (IOException e) { + } catch (Exception e) { // Can't get the certificate, not much to do. Log.e(LOGTAG, "Can't get the certificate from WebKit, canceling"); nativeSslCertErrorCancel(handle, certError); @@ -1200,9 +1201,11 @@ class BrowserFrame extends Handler { */ private void setCertificate(byte cert_der[]) { try { - X509Certificate cert = new X509CertImpl(cert_der); + CertificateFactory cf = CertificateFactory.getInstance("X.509"); + X509Certificate cert = (X509Certificate) cf.generateCertificate( + new ByteArrayInputStream(cert_der)); mCallbackProxy.onReceivedCertificate(new SslCertificate(cert)); - } catch (IOException e) { + } catch (Exception e) { // Can't get the certificate, not much to do. Log.e(LOGTAG, "Can't get the certificate from WebKit, canceling"); return; diff --git a/core/java/android/webkit/ClientCertRequestHandler.java b/core/java/android/webkit/ClientCertRequestHandler.java index f5a60f6e871d..d7a68060bf65 100644 --- a/core/java/android/webkit/ClientCertRequestHandler.java +++ b/core/java/android/webkit/ClientCertRequestHandler.java @@ -20,9 +20,9 @@ import android.os.Handler; import java.security.PrivateKey; import java.security.cert.CertificateEncodingException; import java.security.cert.X509Certificate; -import org.apache.harmony.xnet.provider.jsse.NativeCrypto; -import org.apache.harmony.xnet.provider.jsse.OpenSSLKey; -import org.apache.harmony.xnet.provider.jsse.OpenSSLKeyHolder; +import com.android.org.conscrypt.NativeCrypto; +import com.android.org.conscrypt.OpenSSLKey; +import com.android.org.conscrypt.OpenSSLKeyHolder; /** * ClientCertRequestHandler: class responsible for handling client diff --git a/core/java/android/widget/CalendarView.java b/core/java/android/widget/CalendarView.java index 361eca4d3399..a19c6a813fe2 100644 --- a/core/java/android/widget/CalendarView.java +++ b/core/java/android/widget/CalendarView.java @@ -247,7 +247,7 @@ public class CalendarView extends FrameLayout { /** * Which month should be displayed/highlighted [0-11]. */ - private int mCurrentMonthDisplayed; + private int mCurrentMonthDisplayed = -1; /** * Used for tracking during a scroll. diff --git a/core/java/android/widget/DatePicker.java b/core/java/android/widget/DatePicker.java index 07d3a7a75539..fdf8e78c9bf4 100644 --- a/core/java/android/widget/DatePicker.java +++ b/core/java/android/widget/DatePicker.java @@ -23,6 +23,7 @@ import android.content.res.TypedArray; import android.os.Parcel; import android.os.Parcelable; import android.text.TextUtils; +import android.text.InputType; import android.text.format.DateFormat; import android.text.format.DateUtils; import android.util.AttributeSet; @@ -38,6 +39,7 @@ import android.widget.NumberPicker.OnValueChangeListener; import com.android.internal.R; +import java.text.DateFormatSymbols; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Arrays; @@ -45,6 +47,8 @@ import java.util.Calendar; import java.util.Locale; import java.util.TimeZone; +import libcore.icu.ICU; + /** * This class is a widget for selecting a date. The date can be selected by a * year, month, and day spinners or a {@link CalendarView}. The set of spinners @@ -477,14 +481,27 @@ public class DatePicker extends FrameLayout { mCurrentDate = getCalendarForLocale(mCurrentDate, locale); mNumberOfMonths = mTempDate.getActualMaximum(Calendar.MONTH) + 1; - mShortMonths = new String[mNumberOfMonths]; - for (int i = 0; i < mNumberOfMonths; i++) { - mShortMonths[i] = DateUtils.getMonthString(Calendar.JANUARY + i, - DateUtils.LENGTH_MEDIUM); + mShortMonths = new DateFormatSymbols().getShortMonths(); + + if (usingNumericMonths()) { + // We're in a locale where a date should either be all-numeric, or all-text. + // All-text would require custom NumberPicker formatters for day and year. + mShortMonths = new String[mNumberOfMonths]; + for (int i = 0; i < mNumberOfMonths; ++i) { + mShortMonths[i] = String.format("%d", i + 1); + } } } /** + * Tests whether the current locale is one where there are no real month names, + * such as Chinese, Japanese, or Korean locales. + */ + private boolean usingNumericMonths() { + return Character.isDigit(mShortMonths[Calendar.JANUARY].charAt(0)); + } + + /** * Gets a calendar for locale bootstrapped with the value of a given calendar. * * @param oldCalendar The old calendar. @@ -508,24 +525,27 @@ public class DatePicker extends FrameLayout { */ private void reorderSpinners() { mSpinners.removeAllViews(); - char[] order = DateFormat.getDateFormatOrder(getContext()); + // We use numeric spinners for year and day, but textual months. Ask icu4c what + // order the user's locale uses for that combination. http://b/7207103. + String pattern = ICU.getBestDateTimePattern("yyyyMMMdd", Locale.getDefault().toString()); + char[] order = ICU.getDateFormatOrder(pattern); final int spinnerCount = order.length; for (int i = 0; i < spinnerCount; i++) { switch (order[i]) { - case DateFormat.DATE: + case 'd': mSpinners.addView(mDaySpinner); setImeOptions(mDaySpinner, spinnerCount, i); break; - case DateFormat.MONTH: + case 'M': mSpinners.addView(mMonthSpinner); setImeOptions(mMonthSpinner, spinnerCount, i); break; - case DateFormat.YEAR: + case 'y': mSpinners.addView(mYearSpinner); setImeOptions(mYearSpinner, spinnerCount, i); break; default: - throw new IllegalArgumentException(); + throw new IllegalArgumentException(Arrays.toString(order)); } } } @@ -660,6 +680,10 @@ public class DatePicker extends FrameLayout { mYearSpinner.setValue(mCurrentDate.get(Calendar.YEAR)); mMonthSpinner.setValue(mCurrentDate.get(Calendar.MONTH)); mDaySpinner.setValue(mCurrentDate.get(Calendar.DAY_OF_MONTH)); + + if (usingNumericMonths()) { + mMonthSpinnerInput.setRawInputType(InputType.TYPE_CLASS_NUMBER); + } } /** diff --git a/core/java/android/widget/HeaderViewListAdapter.java b/core/java/android/widget/HeaderViewListAdapter.java index 0685e613c073..222f1089ddf6 100644 --- a/core/java/android/widget/HeaderViewListAdapter.java +++ b/core/java/android/widget/HeaderViewListAdapter.java @@ -145,7 +145,7 @@ public class HeaderViewListAdapter implements WrapperListAdapter, Filterable { } public boolean isEnabled(int position) { - // Header (negative positions will throw an ArrayIndexOutOfBoundsException) + // Header (negative positions will throw an IndexOutOfBoundsException) int numHeaders = getHeadersCount(); if (position < numHeaders) { return mHeaderViewInfos.get(position).isSelectable; @@ -161,12 +161,12 @@ public class HeaderViewListAdapter implements WrapperListAdapter, Filterable { } } - // Footer (off-limits positions will throw an ArrayIndexOutOfBoundsException) + // Footer (off-limits positions will throw an IndexOutOfBoundsException) return mFooterViewInfos.get(adjPosition - adapterCount).isSelectable; } public Object getItem(int position) { - // Header (negative positions will throw an ArrayIndexOutOfBoundsException) + // Header (negative positions will throw an IndexOutOfBoundsException) int numHeaders = getHeadersCount(); if (position < numHeaders) { return mHeaderViewInfos.get(position).data; @@ -182,7 +182,7 @@ public class HeaderViewListAdapter implements WrapperListAdapter, Filterable { } } - // Footer (off-limits positions will throw an ArrayIndexOutOfBoundsException) + // Footer (off-limits positions will throw an IndexOutOfBoundsException) return mFooterViewInfos.get(adjPosition - adapterCount).data; } @@ -206,7 +206,7 @@ public class HeaderViewListAdapter implements WrapperListAdapter, Filterable { } public View getView(int position, View convertView, ViewGroup parent) { - // Header (negative positions will throw an ArrayIndexOutOfBoundsException) + // Header (negative positions will throw an IndexOutOfBoundsException) int numHeaders = getHeadersCount(); if (position < numHeaders) { return mHeaderViewInfos.get(position).view; @@ -222,7 +222,7 @@ public class HeaderViewListAdapter implements WrapperListAdapter, Filterable { } } - // Footer (off-limits positions will throw an ArrayIndexOutOfBoundsException) + // Footer (off-limits positions will throw an IndexOutOfBoundsException) return mFooterViewInfos.get(adjPosition - adapterCount).view; } diff --git a/core/java/com/android/internal/os/ZygoteInit.java b/core/java/com/android/internal/os/ZygoteInit.java index 9e43749d61f8..4ac16d8e6251 100644 --- a/core/java/com/android/internal/os/ZygoteInit.java +++ b/core/java/com/android/internal/os/ZygoteInit.java @@ -35,6 +35,7 @@ import dalvik.system.Zygote; import libcore.io.IoUtils; import libcore.io.Libcore; +import libcore.io.OsConstants; import java.io.BufferedReader; import java.io.FileDescriptor; @@ -479,12 +480,25 @@ public class ZygoteInit { */ private static boolean startSystemServer() throws MethodAndArgsCaller, RuntimeException { + long capabilities = posixCapabilitiesAsBits( + OsConstants.CAP_KILL, + OsConstants.CAP_NET_ADMIN, + OsConstants.CAP_NET_BIND_SERVICE, + OsConstants.CAP_NET_BROADCAST, + OsConstants.CAP_NET_RAW, + OsConstants.CAP_SYS_BOOT, + OsConstants.CAP_SYS_MODULE, + OsConstants.CAP_SYS_NICE, + OsConstants.CAP_SYS_RESOURCE, + OsConstants.CAP_SYS_TIME, + OsConstants.CAP_SYS_TTY_CONFIG + ); /* Hardcoded command line to start the system server */ String args[] = { "--setuid=1000", "--setgid=1000", "--setgroups=1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1018,3001,3002,3003,3006,3007", - "--capabilities=130104352,130104352", + "--capabilities=" + capabilities + "," + capabilities, "--runtime-init", "--nice-name=system_server", "com.android.server.SystemServer", @@ -518,6 +532,20 @@ public class ZygoteInit { return true; } + /** + * Gets the bit array representation of the provided list of POSIX capabilities. + */ + private static long posixCapabilitiesAsBits(int... capabilities) { + long result = 0; + for (int capability : capabilities) { + if ((capability < 0) || (capability > OsConstants.CAP_LAST_CAP)) { + throw new IllegalArgumentException(String.valueOf(capability)); + } + result |= (1L << capability); + } + return result; + } + public static void main(String argv[]) { try { // Start profiling the zygote initialization. diff --git a/core/jni/Android.mk b/core/jni/Android.mk index d8f20c179dc0..c1a8e9274df8 100644 --- a/core/jni/Android.mk +++ b/core/jni/Android.mk @@ -151,7 +151,7 @@ LOCAL_C_INCLUDES += \ $(call include-path-for, bluedroid) \ $(call include-path-for, libhardware)/hardware \ $(call include-path-for, libhardware_legacy)/hardware_legacy \ - $(TOP)/frameworks/av/include \ + $(TOP)/frameworks/av/include \ external/skia/include/core \ external/skia/include/effects \ external/skia/include/images \ @@ -224,6 +224,7 @@ endif LOCAL_MODULE:= libandroid_runtime +include external/stlport/libstlport.mk include $(BUILD_SHARED_LIBRARY) include $(call all-makefiles-under,$(LOCAL_PATH)) diff --git a/core/jni/android_os_SELinux.cpp b/core/jni/android_os_SELinux.cpp index 0a97f3922113..ca278cf00d4f 100644 --- a/core/jni/android_os_SELinux.cpp +++ b/core/jni/android_os_SELinux.cpp @@ -102,7 +102,7 @@ static jstring getPeerCon(JNIEnv *env, jobject, jobject fileDescriptor) { return NULL; } - security_context_t tmp; + security_context_t tmp = NULL; int ret = getpeercon(fd, &tmp); Unique_SecurityContext context(tmp); @@ -111,7 +111,7 @@ static jstring getPeerCon(JNIEnv *env, jobject, jobject fileDescriptor) { contextStr.reset(env->NewStringUTF(context.get())); } - ALOGV("getPeerCon(%d) => %s", fd, contextStr.get()); + ALOGV("getPeerCon(%d) => %s", fd, context.get()); return contextStr.release(); } @@ -198,7 +198,7 @@ static jstring getFileCon(JNIEnv *env, jobject, jstring pathStr) { return NULL; } - security_context_t tmp; + security_context_t tmp = NULL; int ret = getfilecon(path.c_str(), &tmp); Unique_SecurityContext context(tmp); @@ -224,7 +224,7 @@ static jstring getCon(JNIEnv *env, jobject) { return NULL; } - security_context_t tmp; + security_context_t tmp = NULL; int ret = getcon(&tmp); Unique_SecurityContext context(tmp); @@ -251,7 +251,7 @@ static jstring getPidCon(JNIEnv *env, jobject, jint pid) { return NULL; } - security_context_t tmp; + security_context_t tmp = NULL; int ret = getpidcon(static_cast<pid_t>(pid), &tmp); Unique_SecurityContext context(tmp); diff --git a/core/res/res/values-mcc202-mnc05/config.xml b/core/res/res/values-mcc202-mnc05/config.xml new file mode 100644 index 000000000000..ec5ecaf12134 --- /dev/null +++ b/core/res/res/values-mcc202-mnc05/config.xml @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* +** Copyright 2013, 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 my 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. +*/ +--> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + + <!-- Array of ConnectivityManager.TYPE_xxxx values allowable for tethering --> + <!-- Common options are [1, 4] for TYPE_WIFI and TYPE_MOBILE_DUN or + <!== [0,1,5,7] for TYPE_MOBILE, TYPE_WIFI, TYPE_MOBILE_HIPRI and TYPE_BLUETOOTH --> + <integer-array translatable="false" name="config_tether_upstream_types"> + <item>1</item> + <item>4</item> + <item>7</item> + <item>9</item> + </integer-array> + + <!-- String containing the apn value for tethering. May be overriden by secure settings + TETHER_DUN_APN. Value is a comma separated series of strings: + "name,apn,proxy,port,username,password,server,mmsc,mmsproxy,mmsport,mcc,mnc,auth,type" + note that empty fields can be ommitted: "name,apn,,,,,,,,,310,260,,DUN" --> + <string translatable="false" name="config_tether_apndata">Vf Tethering,internet.vodafone.gr,,,,,,,,,202,05,,DUN</string> + +</resources> diff --git a/core/res/res/values-mcc208-mnc01/config.xml b/core/res/res/values-mcc208-mnc01/config.xml index c1489b199eb5..3b84ff231e68 100644 --- a/core/res/res/values-mcc208-mnc01/config.xml +++ b/core/res/res/values-mcc208-mnc01/config.xml @@ -34,5 +34,6 @@ TETHER_DUN_APN. Value is a comma separated series of strings: "name,apn,proxy,port,username,password,server,mmsc,mmsproxy,mmsport,mcc,mnc,auth,type" note that empty fields can be ommitted: "name,apn,,,,,,,,,310,260,,DUN" --> - <string translatable="false" name="config_tether_apndata">Orange Internet,orange.fr,,,,,,orange,orange,,208,01,,DUN</string> + <string translatable="false" name="config_tether_apndata">Orange Internet,orange.fr,,,orange,orange,,,,,208,01,1,DUN</string> + </resources> diff --git a/core/res/res/values-mcc208-mnc10/config.xml b/core/res/res/values-mcc208-mnc10/config.xml index 99cc599fed8d..358bef674c7b 100644 --- a/core/res/res/values-mcc208-mnc10/config.xml +++ b/core/res/res/values-mcc208-mnc10/config.xml @@ -33,6 +33,6 @@ TETHER_DUN_APN. Value is a comma separated series of strings: "name,apn,proxy,port,username,password,server,mmsc,mmsproxy,mmsport,mcc,mnc,auth,type" note that empty fields can be ommitted: "name,apn,,,,,,,,,310,260,,DUN" --> - <string translatable="false" name="config_tether_apndata">SFR Option Modem,websfr,,,,,,,,,208,10,,DUN"</string> + <string translatable="false" name="config_tether_apndata">SFR option modem,websfr,,,,,,,,,208,10,,DUN</string> </resources> diff --git a/core/res/res/values-mcc214-mnc01/config.xml b/core/res/res/values-mcc214-mnc01/config.xml new file mode 100644 index 000000000000..1b7c462df3da --- /dev/null +++ b/core/res/res/values-mcc214-mnc01/config.xml @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* +** Copyright 2013, 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 my 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. +*/ +--> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + + <!-- Array of ConnectivityManager.TYPE_xxxx values allowable for tethering --> + <!-- Common options are [1, 4] for TYPE_WIFI and TYPE_MOBILE_DUN or + <!== [0,1,5,7] for TYPE_MOBILE, TYPE_WIFI, TYPE_MOBILE_HIPRI and TYPE_BLUETOOTH --> + <integer-array translatable="false" name="config_tether_upstream_types"> + <item>1</item> + <item>4</item> + <item>7</item> + <item>9</item> + </integer-array> + + <!-- String containing the apn value for tethering. May be overriden by secure settings + TETHER_DUN_APN. Value is a comma separated series of strings: + "name,apn,proxy,port,username,password,server,mmsc,mmsproxy,mmsport,mcc,mnc,auth,type" + note that empty fields can be ommitted: "name,apn,,,,,,,,,310,260,,DUN" --> + <string translatable="false" name="config_tether_apndata">INTERNET,airtelnet.es,,,vodafone,vodafone,,,,,214,01,1,DUN</string> + +</resources> diff --git a/core/res/res/values-mcc214-mnc03/config.xml b/core/res/res/values-mcc214-mnc03/config.xml index 02f1475acfad..4a51a2ffd03e 100644 --- a/core/res/res/values-mcc214-mnc03/config.xml +++ b/core/res/res/values-mcc214-mnc03/config.xml @@ -34,5 +34,6 @@ TETHER_DUN_APN. Value is a comma separated series of strings: "name,apn,proxy,port,username,password,server,mmsc,mmsproxy,mmsport,mcc,mnc,auth,type" note that empty fields can be ommitted: "name,apn,,,,,,,,,310,260,,DUN" --> - <string translatable="false" name="config_tether_apndata">Orange Internet PC,internet,,,,,,orange,orange,,214,03,,DUN</string> + <string translatable="false" name="config_tether_apndata">Orange Internet PC,internet,,,orange,orange,,,,,214,03,1,DUN</string> + </resources> diff --git a/core/res/res/values-mcc214-mnc07/config.xml b/core/res/res/values-mcc214-mnc07/config.xml index 4e3fa162cf62..b49ad74c36c6 100644 --- a/core/res/res/values-mcc214-mnc07/config.xml +++ b/core/res/res/values-mcc214-mnc07/config.xml @@ -34,5 +34,6 @@ TETHER_DUN_APN. Value is a comma separated series of strings: "name,apn,proxy,port,username,password,server,mmsc,mmsproxy,mmsport,mcc,mnc,auth,type" note that empty fields can be ommitted: "name,apn,,,,,,,,,310,260,,DUN" --> - <string translatable="false" name="config_tether_apndata">Conexión compartida,movistar.es,,,,,,MOVISTAR,MOVISTAR,,214,07,,DUN</string> + <string translatable="false" name="config_tether_apndata">Conexión Compartida,movistar.es,,,MOVISTAR,MOVISTAR,,,,,214,07,1,DUN</string> + </resources> diff --git a/core/res/res/values-mcc302-mnc370/config.xml b/core/res/res/values-mcc302-mnc370/config.xml index b1d363fac070..3d2ea757ae4a 100644 --- a/core/res/res/values-mcc302-mnc370/config.xml +++ b/core/res/res/values-mcc302-mnc370/config.xml @@ -34,5 +34,6 @@ TETHER_DUN_APN. Value is a comma separated series of strings: "name,apn,proxy,port,username,password,server,mmsc,mmsproxy,mmsport,mcc,mnc,auth,type" note that empty fields can be ommitted: "name,apn,,,,,,,,,310,260,,DUN" --> - <string translatable="false" name="config_tether_apndata">Fido Tethering,isp.fido.apn,,,,,,,,,302,370,,DUN</string> + <string translatable="false" name="config_tether_apndata">Fido LTE Tethering,ltedata.apn,,,,,,,,,302,370,,DUN</string> + </resources> diff --git a/core/res/res/values-mcc302-mnc720/config.xml b/core/res/res/values-mcc302-mnc720/config.xml index 40ef9391ffd8..680f1a38f5d1 100644 --- a/core/res/res/values-mcc302-mnc720/config.xml +++ b/core/res/res/values-mcc302-mnc720/config.xml @@ -34,5 +34,6 @@ TETHER_DUN_APN. Value is a comma separated series of strings: "name,apn,proxy,port,username,password,server,mmsc,mmsproxy,mmsport,mcc,mnc,auth,type" note that empty fields can be ommitted: "name,apn,,,,,,,,,310,260,,DUN" --> - <string translatable="false" name="config_tether_apndata">Rogers Tethering,isp.apn,,,,,,,,,302,720,,DUN</string> + <string translatable="false" name="config_tether_apndata">Rogers LTE Tethering,ltedata.apn,,,,,,,,,302,720,,DUN</string> + </resources> diff --git a/core/res/res/values-mcc302-mnc780/config.xml b/core/res/res/values-mcc302-mnc780/config.xml new file mode 100644 index 000000000000..42d495691222 --- /dev/null +++ b/core/res/res/values-mcc302-mnc780/config.xml @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* +** Copyright 2013, 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 my 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. +*/ +--> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + + <!-- Array of ConnectivityManager.TYPE_xxxx values allowable for tethering --> + <!-- Common options are [1, 4] for TYPE_WIFI and TYPE_MOBILE_DUN or + <!== [0,1,5,7] for TYPE_MOBILE, TYPE_WIFI, TYPE_MOBILE_HIPRI and TYPE_BLUETOOTH --> + <integer-array translatable="false" name="config_tether_upstream_types"> + <item>1</item> + <item>4</item> + <item>7</item> + <item>9</item> + </integer-array> + + <!-- String containing the apn value for tethering. May be overriden by secure settings + TETHER_DUN_APN. Value is a comma separated series of strings: + "name,apn,proxy,port,username,password,server,mmsc,mmsproxy,mmsport,mcc,mnc,auth,type" + note that empty fields can be ommitted: "name,apn,,,,,,,,,310,260,,DUN" --> + <string translatable="false" name="config_tether_apndata">SaskTel Tethering,inet.stm.sk.ca,,,,,,,,,302,780,,DUN</string> + +</resources> diff --git a/core/res/res/values-mcc310-mnc260/config.xml b/core/res/res/values-mcc310-mnc260/config.xml new file mode 100644 index 000000000000..56a5d4effd8d --- /dev/null +++ b/core/res/res/values-mcc310-mnc260/config.xml @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* +** Copyright 2013, 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 my 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. +*/ +--> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + + <!-- Array of ConnectivityManager.TYPE_xxxx values allowable for tethering --> + <!-- Common options are [1, 4] for TYPE_WIFI and TYPE_MOBILE_DUN or + <!== [0,1,5,7] for TYPE_MOBILE, TYPE_WIFI, TYPE_MOBILE_HIPRI and TYPE_BLUETOOTH --> + <integer-array translatable="false" name="config_tether_upstream_types"> + <item>1</item> + <item>4</item> + <item>7</item> + <item>9</item> + </integer-array> + + <!-- String containing the apn value for tethering. May be overriden by secure settings + TETHER_DUN_APN. Value is a comma separated series of strings: + "name,apn,proxy,port,username,password,server,mmsc,mmsproxy,mmsport,mcc,mnc,auth,type" + note that empty fields can be ommitted: "name,apn,,,,,,,,,310,260,,DUN" --> + <string translatable="false" name="config_tether_apndata">T-Mobile Tethering,pcweb.tmobile.com,,,,,,,,,310,260,,DUN</string> + +</resources> diff --git a/core/res/res/values-mcc425-mnc01/config.xml b/core/res/res/values-mcc425-mnc01/config.xml new file mode 100644 index 000000000000..f4854da5ede8 --- /dev/null +++ b/core/res/res/values-mcc425-mnc01/config.xml @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* +** Copyright 2013, 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 my 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. +*/ +--> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + + <!-- Array of ConnectivityManager.TYPE_xxxx values allowable for tethering --> + <!-- Common options are [1, 4] for TYPE_WIFI and TYPE_MOBILE_DUN or + <!== [0,1,5,7] for TYPE_MOBILE, TYPE_WIFI, TYPE_MOBILE_HIPRI and TYPE_BLUETOOTH --> + <integer-array translatable="false" name="config_tether_upstream_types"> + <item>1</item> + <item>4</item> + <item>7</item> + <item>9</item> + </integer-array> + + <!-- String containing the apn value for tethering. May be overriden by secure settings + TETHER_DUN_APN. Value is a comma separated series of strings: + "name,apn,proxy,port,username,password,server,mmsc,mmsproxy,mmsport,mcc,mnc,auth,type" + note that empty fields can be ommitted: "name,apn,,,,,,,,,310,260,,DUN" --> + <string translatable="false" name="config_tether_apndata">DUN,modem.orange.net.il,,,,,,,,,425,01,,DUN</string> + +</resources> diff --git a/core/res/res/values-mcc425-mnc07/config.xml b/core/res/res/values-mcc425-mnc07/config.xml new file mode 100644 index 000000000000..890420ecc2c0 --- /dev/null +++ b/core/res/res/values-mcc425-mnc07/config.xml @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* +** Copyright 2013, 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 my 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. +*/ +--> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + + <!-- Array of ConnectivityManager.TYPE_xxxx values allowable for tethering --> + <!-- Common options are [1, 4] for TYPE_WIFI and TYPE_MOBILE_DUN or + <!== [0,1,5,7] for TYPE_MOBILE, TYPE_WIFI, TYPE_MOBILE_HIPRI and TYPE_BLUETOOTH --> + <integer-array translatable="false" name="config_tether_upstream_types"> + <item>1</item> + <item>4</item> + <item>7</item> + <item>9</item> + </integer-array> + + <!-- String containing the apn value for tethering. May be overriden by secure settings + TETHER_DUN_APN. Value is a comma separated series of strings: + "name,apn,proxy,port,username,password,server,mmsc,mmsproxy,mmsport,mcc,mnc,auth,type" + note that empty fields can be ommitted: "name,apn,,,,,,,,,310,260,,DUN" --> + <string translatable="false" name="config_tether_apndata">PC HOT mobile,pc.hotm,,,,,,,,,425,07,,DUN</string> + +</resources> diff --git a/core/res/res/values-mcc454-mnc00/config.xml b/core/res/res/values-mcc454-mnc00/config.xml new file mode 100644 index 000000000000..c92b9c71da2b --- /dev/null +++ b/core/res/res/values-mcc454-mnc00/config.xml @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* +** Copyright 2013, 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 my 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. +*/ +--> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + + <!-- Array of ConnectivityManager.TYPE_xxxx values allowable for tethering --> + <!-- Common options are [1, 4] for TYPE_WIFI and TYPE_MOBILE_DUN or + <!== [0,1,5,7] for TYPE_MOBILE, TYPE_WIFI, TYPE_MOBILE_HIPRI and TYPE_BLUETOOTH --> + <integer-array translatable="false" name="config_tether_upstream_types"> + <item>1</item> + <item>4</item> + <item>7</item> + <item>9</item> + </integer-array> + + <!-- String containing the apn value for tethering. May be overriden by secure settings + TETHER_DUN_APN. Value is a comma separated series of strings: + "name,apn,proxy,port,username,password,server,mmsc,mmsproxy,mmsport,mcc,mnc,auth,type" + note that empty fields can be ommitted: "name,apn,,,,,,,,,310,260,,DUN" --> + <string translatable="false" name="config_tether_apndata">1O1O tethering,lte.internet,,,,,,,,,454,00,3,DUN</string> + +</resources> diff --git a/core/res/res/values-mcc454-mnc03/config.xml b/core/res/res/values-mcc454-mnc03/config.xml new file mode 100644 index 000000000000..c7dc960ae854 --- /dev/null +++ b/core/res/res/values-mcc454-mnc03/config.xml @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* +** Copyright 2013, 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 my 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. +*/ +--> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + + <!-- Array of ConnectivityManager.TYPE_xxxx values allowable for tethering --> + <!-- Common options are [1, 4] for TYPE_WIFI and TYPE_MOBILE_DUN or + <!== [0,1,5,7] for TYPE_MOBILE, TYPE_WIFI, TYPE_MOBILE_HIPRI and TYPE_BLUETOOTH --> + <integer-array translatable="false" name="config_tether_upstream_types"> + <item>1</item> + <item>4</item> + <item>7</item> + <item>9</item> + </integer-array> + + <!-- String containing the apn value for tethering. May be overriden by secure settings + TETHER_DUN_APN. Value is a comma separated series of strings: + "name,apn,proxy,port,username,password,server,mmsc,mmsproxy,mmsport,mcc,mnc,auth,type" + note that empty fields can be ommitted: "name,apn,,,,,,,,,310,260,,DUN" --> + <string translatable="false" name="config_tether_apndata">3 Share,share.lte.three.com.hk,,,,,,,,,454,03,1,DUN</string> + +</resources> diff --git a/core/res/res/values-mcc505-mnc01/config.xml b/core/res/res/values-mcc505-mnc01/config.xml new file mode 100644 index 000000000000..f9d9ac7bf050 --- /dev/null +++ b/core/res/res/values-mcc505-mnc01/config.xml @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* +** Copyright 2013, 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 my 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. +*/ +--> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + + <!-- Array of ConnectivityManager.TYPE_xxxx values allowable for tethering --> + <!-- Common options are [1, 4] for TYPE_WIFI and TYPE_MOBILE_DUN or + <!== [0,1,5,7] for TYPE_MOBILE, TYPE_WIFI, TYPE_MOBILE_HIPRI and TYPE_BLUETOOTH --> + <integer-array translatable="false" name="config_tether_upstream_types"> + <item>1</item> + <item>4</item> + <item>7</item> + <item>9</item> + </integer-array> + + <!-- String containing the apn value for tethering. May be overriden by secure settings + TETHER_DUN_APN. Value is a comma separated series of strings: + "name,apn,proxy,port,username,password,server,mmsc,mmsproxy,mmsport,mcc,mnc,auth,type" + note that empty fields can be ommitted: "name,apn,,,,,,,,,310,260,,DUN" --> + <string translatable="false" name="config_tether_apndata">Telstra Tethering,telstra.internet,,,,,,,,,505,01,,DUN</string> + +</resources> diff --git a/core/res/res/xml/sms_short_codes.xml b/core/res/res/xml/sms_short_codes.xml index 8b395af0a7b3..7804dd2422c7 100644 --- a/core/res/res/xml/sms_short_codes.xml +++ b/core/res/res/xml/sms_short_codes.xml @@ -184,6 +184,6 @@ <shortcode country="ua" pattern="\\d{4}" premium="444[3-9]|70[579]4|7540" /> <!-- USA: 5-6 digits (premium codes from https://www.premiumsmsrefunds.com/ShortCodes.htm) --> - <shortcode country="us" pattern="\\d{5,6}" premium="20433|21(?:344|472)|22715|23(?:333|847)|24(?:15|28)0|25209|27(?:449|606|663)|28498|305(?:00|83)|32(?:340|941)|33(?:166|786|849)|34746|35(?:182|564)|37975|38(?:135|146|254)|41(?:366|463)|42335|43(?:355|500)|44(?:578|711|811)|45814|46(?:157|173|327)|46666|47553|48(?:221|277|669)|50(?:844|920)|51(?:062|368)|52944|54(?:723|892)|55928|56483|57370|59(?:182|187|252|342)|60339|61(?:266|982)|62478|64(?:219|898)|65(?:108|500)|69(?:208|388)|70877|71851|72(?:078|087|465)|73(?:288|588|882|909|997)|74(?:034|332|815)|76426|79213|81946|83177|84(?:103|685)|85797|86(?:234|236|666)|89616|90(?:715|842|938)|91(?:362|958)|94719|95297|96(?:040|666|835|969)|97(?:142|294|688)|99(?:689|796|807)" /> + <shortcode country="us" pattern="\\d{5,6}" premium="20433|21(?:344|472)|22715|23(?:333|847)|24(?:15|28)0|25209|27(?:449|606|663)|28498|305(?:00|83)|32(?:340|941)|33(?:166|786|849)|34746|35(?:182|564)|37975|38(?:135|146|254)|41(?:366|463)|42335|43(?:355|500)|44(?:578|711|811)|45814|46(?:157|173|327)|46666|47553|48(?:221|277|669)|50(?:844|920)|51(?:062|368)|52944|54(?:723|892)|55928|56483|57370|59(?:182|187|252|342)|60339|61(?:266|982)|62478|64(?:219|898)|65(?:108|500)|69(?:208|388)|70877|71851|72(?:078|087|465)|73(?:288|588|882|909|997)|74(?:034|332|815)|76426|79213|81946|83177|84(?:103|685)|85797|86(?:234|236|666)|89616|90(?:715|842|938)|91(?:362|958)|94719|95297|96(?:040|666|835|969)|97(?:142|294|688)|99(?:689|796|807)" free="87902" /> </shortcodes> diff --git a/core/tests/coretests/Android.mk b/core/tests/coretests/Android.mk index b6b15c46fb5e..22fa7fc0a456 100644 --- a/core/tests/coretests/Android.mk +++ b/core/tests/coretests/Android.mk @@ -23,7 +23,7 @@ LOCAL_SRC_FILES := \ LOCAL_DX_FLAGS := --core-library LOCAL_STATIC_JAVA_LIBRARIES := core-tests android-common frameworks-core-util-lib mockwebserver guava littlemock -LOCAL_JAVA_LIBRARIES := android.test.runner telephony-common +LOCAL_JAVA_LIBRARIES := android.test.runner conscrypt telephony-common LOCAL_PACKAGE_NAME := FrameworksCoreTests LOCAL_CERTIFICATE := platform diff --git a/core/tests/coretests/src/android/net/http/X509TrustManagerExtensionsTest.java b/core/tests/coretests/src/android/net/http/X509TrustManagerExtensionsTest.java index 60c40dbdc320..04aa62a3e38e 100644 --- a/core/tests/coretests/src/android/net/http/X509TrustManagerExtensionsTest.java +++ b/core/tests/coretests/src/android/net/http/X509TrustManagerExtensionsTest.java @@ -25,7 +25,7 @@ import javax.net.ssl.X509TrustManager; import junit.framework.TestCase; -import org.apache.harmony.xnet.provider.jsse.TrustManagerImpl; +import com.android.org.conscrypt.TrustManagerImpl; public class X509TrustManagerExtensionsTest extends TestCase { diff --git a/docs/html/guide/topics/data/backup.jd b/docs/html/guide/topics/data/backup.jd index 598b08a59547..4903852de9f1 100644 --- a/docs/html/guide/topics/data/backup.jd +++ b/docs/html/guide/topics/data/backup.jd @@ -680,7 +680,7 @@ android.app.backup.BackupAgentHelper} looks like this:</p> <pre> public class MyFileBackupAgent extends BackupAgentHelper { - // The name of the SharedPreferences file + // The name of the file static final String TOP_SCORES = "scores"; static final String PLAYER_STATS = "stats"; diff --git a/keystore/java/android/security/AndroidKeyPairGenerator.java b/keystore/java/android/security/AndroidKeyPairGenerator.java index 69755833e6f4..11afbf561ad1 100644 --- a/keystore/java/android/security/AndroidKeyPairGenerator.java +++ b/keystore/java/android/security/AndroidKeyPairGenerator.java @@ -18,7 +18,7 @@ package android.security; import com.android.org.bouncycastle.x509.X509V3CertificateGenerator; -import org.apache.harmony.xnet.provider.jsse.OpenSSLEngine; +import com.android.org.conscrypt.OpenSSLEngine; import java.security.InvalidAlgorithmParameterException; import java.security.InvalidKeyException; diff --git a/keystore/java/android/security/AndroidKeyStore.java b/keystore/java/android/security/AndroidKeyStore.java index dcc951685d59..cf715d691628 100644 --- a/keystore/java/android/security/AndroidKeyStore.java +++ b/keystore/java/android/security/AndroidKeyStore.java @@ -16,8 +16,8 @@ package android.security; -import org.apache.harmony.xnet.provider.jsse.OpenSSLEngine; -import org.apache.harmony.xnet.provider.jsse.OpenSSLKeyHolder; +import com.android.org.conscrypt.OpenSSLEngine; +import com.android.org.conscrypt.OpenSSLKeyHolder; import android.util.Log; diff --git a/keystore/java/android/security/KeyChain.java b/keystore/java/android/security/KeyChain.java index d7119fff170f..0ad4d0752875 100644 --- a/keystore/java/android/security/KeyChain.java +++ b/keystore/java/android/security/KeyChain.java @@ -37,8 +37,8 @@ import java.util.List; import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue; -import org.apache.harmony.xnet.provider.jsse.OpenSSLEngine; -import org.apache.harmony.xnet.provider.jsse.TrustedCertificateStore; +import com.android.org.conscrypt.OpenSSLEngine; +import com.android.org.conscrypt.TrustedCertificateStore; /** * The {@code KeyChain} class provides access to private keys and @@ -346,6 +346,8 @@ public final class KeyChain { List<X509Certificate> chain = store .getCertificateChain(toCertificate(certificateBytes)); return chain.toArray(new X509Certificate[chain.size()]); + } catch (CertificateException e) { + throw new KeyChainException(e); } catch (RemoteException e) { throw new KeyChainException(e); } catch (RuntimeException e) { diff --git a/keystore/tests/Android.mk b/keystore/tests/Android.mk index 61cf64079015..35388d7d129e 100644 --- a/keystore/tests/Android.mk +++ b/keystore/tests/Android.mk @@ -5,7 +5,7 @@ include $(CLEAR_VARS) LOCAL_MODULE_TAGS := tests LOCAL_CERTIFICATE := platform -LOCAL_JAVA_LIBRARIES := android.test.runner bouncycastle +LOCAL_JAVA_LIBRARIES := android.test.runner bouncycastle conscrypt # Include all test java files. LOCAL_SRC_FILES := $(call all-java-files-under, src) diff --git a/keystore/tests/src/android/security/AndroidKeyStoreTest.java b/keystore/tests/src/android/security/AndroidKeyStoreTest.java index 05ffe109289a..135f93f257f4 100644 --- a/keystore/tests/src/android/security/AndroidKeyStoreTest.java +++ b/keystore/tests/src/android/security/AndroidKeyStoreTest.java @@ -18,7 +18,7 @@ package android.security; import com.android.org.bouncycastle.x509.X509V3CertificateGenerator; -import org.apache.harmony.xnet.provider.jsse.OpenSSLEngine; +import com.android.org.conscrypt.OpenSSLEngine; import android.test.AndroidTestCase; diff --git a/preloaded-classes b/preloaded-classes index 126dd15fe5aa..607c142cee65 100644 --- a/preloaded-classes +++ b/preloaded-classes @@ -1512,6 +1512,66 @@ com.android.org.bouncycastle.util.encoders.Hex com.android.org.bouncycastle.util.encoders.HexEncoder com.android.org.bouncycastle.util.io.Streams com.android.org.bouncycastle.x509.ExtendedPKIXParameters +com.android.org.conscrypt.AbstractSessionContext +com.android.org.conscrypt.AbstractSessionContext$1 +com.android.org.conscrypt.ByteArray +com.android.org.conscrypt.CertPinManager +com.android.org.conscrypt.ClientSessionContext +com.android.org.conscrypt.ClientSessionContext$HostAndPort +com.android.org.conscrypt.DefaultSSLContextImpl +com.android.org.conscrypt.FileClientSessionCache +com.android.org.conscrypt.FileClientSessionCache$Impl +com.android.org.conscrypt.JSSEProvider +com.android.org.conscrypt.KeyManagerFactoryImpl +com.android.org.conscrypt.KeyManagerImpl +com.android.org.conscrypt.NativeCrypto +com.android.org.conscrypt.NativeCrypto$SSLHandshakeCallbacks +com.android.org.conscrypt.OpenSSLCipherRSA +com.android.org.conscrypt.OpenSSLCipherRSA$PKCS1 +com.android.org.conscrypt.OpenSSLCipherRSA$Raw +com.android.org.conscrypt.OpenSSLContextImpl +com.android.org.conscrypt.OpenSSLDSAKeyPairGenerator +com.android.org.conscrypt.OpenSSLDSAPublicKey +com.android.org.conscrypt.OpenSSLKey +com.android.org.conscrypt.OpenSSLMessageDigestJDK +com.android.org.conscrypt.OpenSSLMessageDigestJDK$MD5 +com.android.org.conscrypt.OpenSSLMessageDigestJDK$SHA1 +com.android.org.conscrypt.OpenSSLMessageDigestJDK$SHA512 +com.android.org.conscrypt.OpenSSLProvider +com.android.org.conscrypt.OpenSSLRSAKeyFactory +com.android.org.conscrypt.OpenSSLRSAKeyPairGenerator +com.android.org.conscrypt.OpenSSLRSAPublicKey +com.android.org.conscrypt.OpenSSLRandom +com.android.org.conscrypt.OpenSSLSessionImpl +com.android.org.conscrypt.OpenSSLSignature +com.android.org.conscrypt.OpenSSLSignature$EngineType +com.android.org.conscrypt.OpenSSLSignature$MD5RSA +com.android.org.conscrypt.OpenSSLSignature$SHA1DSA +com.android.org.conscrypt.OpenSSLSignature$SHA1RSA +com.android.org.conscrypt.OpenSSLSignature$SHA256RSA +com.android.org.conscrypt.OpenSSLSignature$SHA384RSA +com.android.org.conscrypt.OpenSSLSignature$SHA512RSA +com.android.org.conscrypt.OpenSSLSignatureRawRSA +com.android.org.conscrypt.OpenSSLSocketFactoryImpl +com.android.org.conscrypt.OpenSSLSocketImpl +com.android.org.conscrypt.OpenSSLSocketImpl$SSLInputStream +com.android.org.conscrypt.OpenSSLSocketImpl$SSLOutputStream +com.android.org.conscrypt.OpenSSLSocketImplWrapper +com.android.org.conscrypt.PinListEntry +com.android.org.conscrypt.ProtocolVersion +com.android.org.conscrypt.SSLClientSessionCache +com.android.org.conscrypt.SSLContextImpl +com.android.org.conscrypt.SSLParametersImpl +com.android.org.conscrypt.ServerSessionContext +com.android.org.conscrypt.TrustManagerFactoryImpl +com.android.org.conscrypt.TrustManagerImpl +com.android.org.conscrypt.TrustedCertificateIndex +com.android.org.conscrypt.TrustedCertificateKeyStoreSpi +com.android.org.conscrypt.TrustedCertificateStore +com.android.org.conscrypt.TrustedCertificateStore$1 +com.android.org.conscrypt.TrustedCertificateStore$2 +com.android.org.conscrypt.TrustedCertificateStore$3 +com.android.org.conscrypt.TrustedCertificateStore$CertSelector com.android.server.NetworkManagementSocketTagger com.android.server.NetworkManagementSocketTagger$1 com.android.server.NetworkManagementSocketTagger$SocketTags @@ -2273,66 +2333,6 @@ org.apache.harmony.security.x509.Validity org.apache.harmony.security.x509.Validity$1 org.apache.harmony.xml.ExpatAttributes org.apache.harmony.xml.ExpatParser -org.apache.harmony.xnet.provider.jsse.AbstractSessionContext -org.apache.harmony.xnet.provider.jsse.AbstractSessionContext$1 -org.apache.harmony.xnet.provider.jsse.ByteArray -org.apache.harmony.xnet.provider.jsse.CertPinManager -org.apache.harmony.xnet.provider.jsse.ClientSessionContext -org.apache.harmony.xnet.provider.jsse.ClientSessionContext$HostAndPort -org.apache.harmony.xnet.provider.jsse.DefaultSSLContextImpl -org.apache.harmony.xnet.provider.jsse.FileClientSessionCache -org.apache.harmony.xnet.provider.jsse.FileClientSessionCache$Impl -org.apache.harmony.xnet.provider.jsse.JSSEProvider -org.apache.harmony.xnet.provider.jsse.KeyManagerFactoryImpl -org.apache.harmony.xnet.provider.jsse.KeyManagerImpl -org.apache.harmony.xnet.provider.jsse.NativeCrypto -org.apache.harmony.xnet.provider.jsse.NativeCrypto$SSLHandshakeCallbacks -org.apache.harmony.xnet.provider.jsse.OpenSSLCipherRSA -org.apache.harmony.xnet.provider.jsse.OpenSSLCipherRSA$PKCS1 -org.apache.harmony.xnet.provider.jsse.OpenSSLCipherRSA$Raw -org.apache.harmony.xnet.provider.jsse.OpenSSLContextImpl -org.apache.harmony.xnet.provider.jsse.OpenSSLDSAKeyPairGenerator -org.apache.harmony.xnet.provider.jsse.OpenSSLDSAPublicKey -org.apache.harmony.xnet.provider.jsse.OpenSSLKey -org.apache.harmony.xnet.provider.jsse.OpenSSLMessageDigestJDK -org.apache.harmony.xnet.provider.jsse.OpenSSLMessageDigestJDK$MD5 -org.apache.harmony.xnet.provider.jsse.OpenSSLMessageDigestJDK$SHA1 -org.apache.harmony.xnet.provider.jsse.OpenSSLMessageDigestJDK$SHA512 -org.apache.harmony.xnet.provider.jsse.OpenSSLProvider -org.apache.harmony.xnet.provider.jsse.OpenSSLRSAKeyFactory -org.apache.harmony.xnet.provider.jsse.OpenSSLRSAKeyPairGenerator -org.apache.harmony.xnet.provider.jsse.OpenSSLRSAPublicKey -org.apache.harmony.xnet.provider.jsse.OpenSSLRandom -org.apache.harmony.xnet.provider.jsse.OpenSSLSessionImpl -org.apache.harmony.xnet.provider.jsse.OpenSSLSignature -org.apache.harmony.xnet.provider.jsse.OpenSSLSignature$EngineType -org.apache.harmony.xnet.provider.jsse.OpenSSLSignature$MD5RSA -org.apache.harmony.xnet.provider.jsse.OpenSSLSignature$SHA1DSA -org.apache.harmony.xnet.provider.jsse.OpenSSLSignature$SHA1RSA -org.apache.harmony.xnet.provider.jsse.OpenSSLSignature$SHA256RSA -org.apache.harmony.xnet.provider.jsse.OpenSSLSignature$SHA384RSA -org.apache.harmony.xnet.provider.jsse.OpenSSLSignature$SHA512RSA -org.apache.harmony.xnet.provider.jsse.OpenSSLSignatureRawRSA -org.apache.harmony.xnet.provider.jsse.OpenSSLSocketFactoryImpl -org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl -org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl$SSLInputStream -org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl$SSLOutputStream -org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImplWrapper -org.apache.harmony.xnet.provider.jsse.PinListEntry -org.apache.harmony.xnet.provider.jsse.ProtocolVersion -org.apache.harmony.xnet.provider.jsse.SSLClientSessionCache -org.apache.harmony.xnet.provider.jsse.SSLContextImpl -org.apache.harmony.xnet.provider.jsse.SSLParametersImpl -org.apache.harmony.xnet.provider.jsse.ServerSessionContext -org.apache.harmony.xnet.provider.jsse.TrustManagerFactoryImpl -org.apache.harmony.xnet.provider.jsse.TrustManagerImpl -org.apache.harmony.xnet.provider.jsse.TrustedCertificateIndex -org.apache.harmony.xnet.provider.jsse.TrustedCertificateKeyStoreSpi -org.apache.harmony.xnet.provider.jsse.TrustedCertificateStore -org.apache.harmony.xnet.provider.jsse.TrustedCertificateStore$1 -org.apache.harmony.xnet.provider.jsse.TrustedCertificateStore$2 -org.apache.harmony.xnet.provider.jsse.TrustedCertificateStore$3 -org.apache.harmony.xnet.provider.jsse.TrustedCertificateStore$CertSelector org.apache.http.ConnectionReuseStrategy org.apache.http.FormattedHeader org.apache.http.Header diff --git a/services/java/com/android/server/InputMethodManagerService.java b/services/java/com/android/server/InputMethodManagerService.java index a296d34498dc..72aa2031e735 100644 --- a/services/java/com/android/server/InputMethodManagerService.java +++ b/services/java/com/android/server/InputMethodManagerService.java @@ -1493,7 +1493,9 @@ public class InputMethodManagerService extends IInputMethodManager.Stub if (mStatusBar != null) { mStatusBar.setImeWindowStatus(token, vis, backDisposition); } - final boolean iconVisibility = (vis & InputMethodService.IME_ACTIVE) != 0; + final boolean iconVisibility = ((vis & (InputMethodService.IME_ACTIVE)) != 0) + && (mWindowManagerService.isHardKeyboardAvailable() + || (vis & (InputMethodService.IME_VISIBLE)) != 0); final InputMethodInfo imi = mMethodMap.get(mCurMethodId); if (imi != null && iconVisibility && needsToShowImeSwitchOngoingNotification()) { // Used to load label diff --git a/services/java/com/android/server/am/ActivityStack.java b/services/java/com/android/server/am/ActivityStack.java index 27dd7327a186..eafd09b022a6 100644 --- a/services/java/com/android/server/am/ActivityStack.java +++ b/services/java/com/android/server/am/ActivityStack.java @@ -3623,7 +3623,9 @@ final class ActivityStack { } if (activityRemoved) { - resumeTopActivityLocked(null); + synchronized (mService) { + resumeTopActivityLocked(null); + } } return res; diff --git a/tests/CoreTests/android/Android.mk b/tests/CoreTests/android/Android.mk index 5abfc8821a6a..bc0e4e4ddaf8 100644 --- a/tests/CoreTests/android/Android.mk +++ b/tests/CoreTests/android/Android.mk @@ -6,7 +6,7 @@ LOCAL_MODULE_TAGS := tests LOCAL_SRC_FILES := \ $(call all-subdir-java-files) -LOCAL_JAVA_LIBRARIES := android.test.runner bouncycastle +LOCAL_JAVA_LIBRARIES := android.test.runner bouncycastle conscrypt LOCAL_PACKAGE_NAME := CoreTests diff --git a/tests/CoreTests/android/core/SSLSocketTest.java b/tests/CoreTests/android/core/SSLSocketTest.java index 03905e1743e9..b06790bc715d 100644 --- a/tests/CoreTests/android/core/SSLSocketTest.java +++ b/tests/CoreTests/android/core/SSLSocketTest.java @@ -18,10 +18,10 @@ package android.core; import junit.framework.TestCase; +import com.android.org.conscrypt.FileClientSessionCache; +import com.android.org.conscrypt.OpenSSLContextImpl; +import com.android.org.conscrypt.SSLClientSessionCache; import org.apache.commons.codec.binary.Base64; -import org.apache.harmony.xnet.provider.jsse.FileClientSessionCache; -import org.apache.harmony.xnet.provider.jsse.OpenSSLContextImpl; -import org.apache.harmony.xnet.provider.jsse.SSLClientSessionCache; import java.io.ByteArrayInputStream; import java.io.DataInputStream; diff --git a/tools/aapt/Main.cpp b/tools/aapt/Main.cpp index f398de0630b9..74ffeb00d9d3 100644 --- a/tools/aapt/Main.cpp +++ b/tools/aapt/Main.cpp @@ -48,6 +48,7 @@ void usage(void) " List contents of Zip-compatible archive.\n\n", gProgName); fprintf(stderr, " %s d[ump] [--values] WHAT file.{apk} [asset [asset ...]]\n" + " strings Print the contents of the resource table string pool in the APK.\n" " badging Print the label and icon for the app declared in APK.\n" " permissions Print the permissions from the APK.\n" " resources Print the resource table from the APK.\n" diff --git a/wifi/java/android/net/wifi/SupplicantStateTracker.java b/wifi/java/android/net/wifi/SupplicantStateTracker.java index d1e9b6750761..055bfb43a59b 100644 --- a/wifi/java/android/net/wifi/SupplicantStateTracker.java +++ b/wifi/java/android/net/wifi/SupplicantStateTracker.java @@ -42,6 +42,7 @@ class SupplicantStateTracker extends StateMachine { private WifiStateMachine mWifiStateMachine; private WifiConfigStore mWifiConfigStore; private int mAuthenticationFailuresCount = 0; + private int mAssociationRejectCount = 0; /* Indicates authentication failure in supplicant broadcast. * TODO: enhance auth failure reporting to include notification * for all type of failures: EAP, WPS & WPA networks */ @@ -50,6 +51,9 @@ class SupplicantStateTracker extends StateMachine { /* Maximum retries on a authentication failure notification */ private static final int MAX_RETRIES_ON_AUTHENTICATION_FAILURE = 2; + /* Maximum retries on assoc rejection events */ + private static final int MAX_RETRIES_ON_ASSOCIATION_REJECT = 4; + /* Tracks if networks have been disabled during a connection */ private boolean mNetworksDisabledDuringConnect = false; @@ -85,14 +89,14 @@ class SupplicantStateTracker extends StateMachine { start(); } - private void handleNetworkConnectionFailure(int netId) { + private void handleNetworkConnectionFailure(int netId, int disableReason) { /* If other networks disabled during connection, enable them */ if (mNetworksDisabledDuringConnect) { mWifiConfigStore.enableAllNetworks(); mNetworksDisabledDuringConnect = false; } /* Disable failed network */ - mWifiConfigStore.disableNetwork(netId, WifiConfiguration.DISABLED_AUTH_FAILURE); + mWifiConfigStore.disableNetwork(netId, disableReason); } private void transitionOnSupplicantStateChange(StateChangeResult stateChangeResult) { @@ -178,6 +182,10 @@ class SupplicantStateTracker extends StateMachine { break; case WifiManager.CONNECT_NETWORK: mNetworksDisabledDuringConnect = true; + mAssociationRejectCount = 0; + break; + case WifiMonitor.ASSOCIATION_REJECTION_EVENT: + mAssociationRejectCount++; break; default: Log.e(TAG, "Ignoring " + message); @@ -222,9 +230,17 @@ class SupplicantStateTracker extends StateMachine { if (mAuthenticationFailuresCount >= MAX_RETRIES_ON_AUTHENTICATION_FAILURE) { Log.d(TAG, "Failed to authenticate, disabling network " + stateChangeResult.networkId); - handleNetworkConnectionFailure(stateChangeResult.networkId); + handleNetworkConnectionFailure(stateChangeResult.networkId, + WifiConfiguration.DISABLED_AUTH_FAILURE); mAuthenticationFailuresCount = 0; } + else if (mAssociationRejectCount >= MAX_RETRIES_ON_ASSOCIATION_REJECT) { + Log.d(TAG, "Association getting rejected, disabling network " + + stateChangeResult.networkId); + handleNetworkConnectionFailure(stateChangeResult.networkId, + WifiConfiguration.DISABLED_ASSOCIATION_REJECT); + mAssociationRejectCount = 0; + } } } @@ -264,7 +280,8 @@ class SupplicantStateTracker extends StateMachine { if (mLoopDetectCount > MAX_SUPPLICANT_LOOP_ITERATIONS) { Log.d(TAG, "Supplicant loop detected, disabling network " + stateChangeResult.networkId); - handleNetworkConnectionFailure(stateChangeResult.networkId); + handleNetworkConnectionFailure(stateChangeResult.networkId, + WifiConfiguration.DISABLED_AUTH_FAILURE); } mLoopDetectIndex = state.ordinal(); sendSupplicantStateChangedBroadcast(state, @@ -287,6 +304,7 @@ class SupplicantStateTracker extends StateMachine { if (DBG) Log.d(TAG, getName() + "\n"); /* Reset authentication failure count */ mAuthenticationFailuresCount = 0; + mAssociationRejectCount = 0; if (mNetworksDisabledDuringConnect) { mWifiConfigStore.enableAllNetworks(); mNetworksDisabledDuringConnect = false; diff --git a/wifi/java/android/net/wifi/WifiConfiguration.java b/wifi/java/android/net/wifi/WifiConfiguration.java index bf82792779bb..f1542e9e5164 100644 --- a/wifi/java/android/net/wifi/WifiConfiguration.java +++ b/wifi/java/android/net/wifi/WifiConfiguration.java @@ -173,6 +173,8 @@ public class WifiConfiguration implements Parcelable { public static final int DISABLED_DHCP_FAILURE = 2; /** @hide */ public static final int DISABLED_AUTH_FAILURE = 3; + /** @hide */ + public static final int DISABLED_ASSOCIATION_REJECT = 4; /** * The ID number that the supplicant uses to identify this diff --git a/wifi/java/android/net/wifi/WifiEnterpriseConfig.java b/wifi/java/android/net/wifi/WifiEnterpriseConfig.java index 7313e7ee511b..25272b94961f 100644 --- a/wifi/java/android/net/wifi/WifiEnterpriseConfig.java +++ b/wifi/java/android/net/wifi/WifiEnterpriseConfig.java @@ -87,6 +87,7 @@ public class WifiEnterpriseConfig implements Parcelable { private static final String ENGINE_KEY = "engine"; private static final String ENGINE_ID_KEY = "engine_id"; private static final String PRIVATE_KEY_ID_KEY = "key_id"; + private static final String OPP_KEY_CACHING = "proactive_key_caching"; private HashMap<String, String> mFields = new HashMap<String, String>(); private X509Certificate mCaCert; @@ -258,6 +259,7 @@ public class WifiEnterpriseConfig implements Parcelable { case Eap.TLS: case Eap.TTLS: mFields.put(EAP_KEY, Eap.strings[eapMethod]); + mFields.put(OPP_KEY_CACHING, "1"); break; default: throw new IllegalArgumentException("Unknown EAP method"); diff --git a/wifi/java/android/net/wifi/WifiMonitor.java b/wifi/java/android/net/wifi/WifiMonitor.java index 0b0d7388e6ee..fe3c70902052 100644 --- a/wifi/java/android/net/wifi/WifiMonitor.java +++ b/wifi/java/android/net/wifi/WifiMonitor.java @@ -56,7 +56,8 @@ public class WifiMonitor { private static final int TERMINATING = 6; private static final int DRIVER_STATE = 7; private static final int EAP_FAILURE = 8; - private static final int UNKNOWN = 9; + private static final int ASSOC_REJECT = 9; + private static final int UNKNOWN = 10; /** All events coming from the supplicant start with this prefix */ private static final String EVENT_PREFIX_STR = "CTRL-EVENT-"; @@ -153,6 +154,11 @@ public class WifiMonitor { private static final String EAP_AUTH_FAILURE_STR = "EAP authentication failed"; /** + * This indicates an assoc reject event + */ + private static final String ASSOC_REJECT_STR = "ASSOC-REJECT"; + + /** * Regex pattern for extracting an Ethernet-style MAC address from a string. * Matches a strings like the following:<pre> * CTRL-EVENT-CONNECTED - Connection to 00:1e:58:ec:d5:6d completed (reauth) [id=1 id_str=]</pre> @@ -328,6 +334,8 @@ public class WifiMonitor { public static final int AP_STA_DISCONNECTED_EVENT = BASE + 41; public static final int AP_STA_CONNECTED_EVENT = BASE + 42; + /* Indicates assoc reject event */ + public static final int ASSOCIATION_REJECTION_EVENT = BASE + 43; /** * This indicates the supplicant connection for the monitor is closed */ @@ -429,6 +437,8 @@ public class WifiMonitor { event = DRIVER_STATE; else if (eventName.equals(EAP_FAILURE_STR)) event = EAP_FAILURE; + else if (eventName.equals(ASSOC_REJECT_STR)) + event = ASSOC_REJECT; else event = UNKNOWN; @@ -473,6 +483,8 @@ public class WifiMonitor { if (eventData.startsWith(EAP_AUTH_FAILURE_STR)) { mStateMachine.sendMessage(AUTHENTICATION_FAILURE_EVENT); } + } else if (event == ASSOC_REJECT) { + mStateMachine.sendMessage(ASSOCIATION_REJECTION_EVENT); } else { handleEvent(event, eventData); } diff --git a/wifi/java/android/net/wifi/WifiStateMachine.java b/wifi/java/android/net/wifi/WifiStateMachine.java index 2d9cc2945465..880040b97d0f 100644 --- a/wifi/java/android/net/wifi/WifiStateMachine.java +++ b/wifi/java/android/net/wifi/WifiStateMachine.java @@ -1962,6 +1962,7 @@ public class WifiStateMachine extends StateMachine { case WifiMonitor.SCAN_RESULTS_EVENT: case WifiMonitor.SUPPLICANT_STATE_CHANGE_EVENT: case WifiMonitor.AUTHENTICATION_FAILURE_EVENT: + case WifiMonitor.ASSOCIATION_REJECTION_EVENT: case WifiMonitor.WPS_OVERLAP_EVENT: case CMD_BLACKLIST_NETWORK: case CMD_CLEAR_BLACKLIST: @@ -2698,6 +2699,7 @@ public class WifiStateMachine extends StateMachine { case WifiMonitor.NETWORK_CONNECTION_EVENT: case WifiMonitor.NETWORK_DISCONNECTION_EVENT: case WifiMonitor.AUTHENTICATION_FAILURE_EVENT: + case WifiMonitor.ASSOCIATION_REJECTION_EVENT: case WifiMonitor.WPS_OVERLAP_EVENT: case CMD_SET_SCAN_TYPE: case CMD_SET_COUNTRY_CODE: @@ -3092,6 +3094,9 @@ public class WifiStateMachine extends StateMachine { if (DBG) log(getName() + message.toString() + "\n"); StateChangeResult stateChangeResult; switch(message.what) { + case WifiMonitor.ASSOCIATION_REJECTION_EVENT: + mSupplicantStateTracker.sendMessage(WifiMonitor.ASSOCIATION_REJECTION_EVENT); + break; case WifiMonitor.AUTHENTICATION_FAILURE_EVENT: mSupplicantStateTracker.sendMessage(WifiMonitor.AUTHENTICATION_FAILURE_EVENT); break; @@ -3786,6 +3791,9 @@ public class WifiStateMachine extends StateMachine { if (DBG) log("Network connection lost"); handleNetworkDisconnect(); break; + case WifiMonitor.ASSOCIATION_REJECTION_EVENT: + if (DBG) log("Ignore Assoc reject event during WPS Connection"); + break; case WifiMonitor.AUTHENTICATION_FAILURE_EVENT: // Disregard auth failure events during WPS connection. The // EAP sequence is retried several times, and there might be @@ -3983,6 +3991,7 @@ public class WifiStateMachine extends StateMachine { if (!isWifiTethered(stateChange.active)) { loge("Tethering reports wifi as untethered!, shut down soft Ap"); setWifiApEnabled(null, false); + setWifiApEnabled(null, true); } return HANDLED; case CMD_STOP_AP: diff --git a/wifi/java/android/net/wifi/p2p/WifiP2pService.java b/wifi/java/android/net/wifi/p2p/WifiP2pService.java index 532148e00dec..3325b2b8c741 100644 --- a/wifi/java/android/net/wifi/p2p/WifiP2pService.java +++ b/wifi/java/android/net/wifi/p2p/WifiP2pService.java @@ -1312,6 +1312,11 @@ public class WifiP2pService extends IWifiP2pManager.Stub { * TODO: Verify multi-channel scenarios and supplicant behavior are * better before adding a time out in future */ + //Set group idle timeout of 10 sec, to avoid GO beaconing incase of any + //failure during 4-way Handshake. + if (!mAutonomousGroup) { + mWifiNative.setP2pGroupIdle(mGroup.getInterface(), GROUP_IDLE_TIME_S); + } startDhcpServer(mGroup.getInterface()); } else { mWifiNative.setP2pGroupIdle(mGroup.getInterface(), GROUP_IDLE_TIME_S); @@ -1507,6 +1512,8 @@ public class WifiP2pService extends IWifiP2pManager.Stub { case WifiMonitor.AP_STA_CONNECTED_EVENT: WifiP2pDevice device = (WifiP2pDevice) message.obj; String deviceAddress = device.deviceAddress; + // Clear timeout that was set when group was started. + mWifiNative.setP2pGroupIdle(mGroup.getInterface(), 0); if (deviceAddress != null) { if (mSavedProvDiscDevice != null && deviceAddress.equals(mSavedProvDiscDevice.deviceAddress)) { |