Merge "Use channel mask instead of channel count for track creation"
diff --git a/api/14.txt b/api/14.txt
index b080d25..58d49d9 100644
--- a/api/14.txt
+++ b/api/14.txt
@@ -6273,6 +6273,9 @@
public static final class CursorJoiner.Result extends java.lang.Enum {
method public static android.database.CursorJoiner.Result valueOf(java.lang.String);
method public static final android.database.CursorJoiner.Result[] values();
+ enum_constant public static final android.database.CursorJoiner.Result BOTH;
+ enum_constant public static final android.database.CursorJoiner.Result LEFT;
+ enum_constant public static final android.database.CursorJoiner.Result RIGHT;
}
public class CursorWindow extends android.database.sqlite.SQLiteClosable implements android.os.Parcelable {
@@ -7191,6 +7194,8 @@
public static final class AvoidXfermode.Mode extends java.lang.Enum {
method public static android.graphics.AvoidXfermode.Mode valueOf(java.lang.String);
method public static final android.graphics.AvoidXfermode.Mode[] values();
+ enum_constant public static final android.graphics.AvoidXfermode.Mode AVOID;
+ enum_constant public static final android.graphics.AvoidXfermode.Mode TARGET;
}
public final class Bitmap implements android.os.Parcelable {
@@ -7243,11 +7248,17 @@
public static final class Bitmap.CompressFormat extends java.lang.Enum {
method public static android.graphics.Bitmap.CompressFormat valueOf(java.lang.String);
method public static final android.graphics.Bitmap.CompressFormat[] values();
+ enum_constant public static final android.graphics.Bitmap.CompressFormat JPEG;
+ enum_constant public static final android.graphics.Bitmap.CompressFormat PNG;
}
public static final class Bitmap.Config extends java.lang.Enum {
method public static android.graphics.Bitmap.Config valueOf(java.lang.String);
method public static final android.graphics.Bitmap.Config[] values();
+ enum_constant public static final android.graphics.Bitmap.Config ALPHA_8;
+ enum_constant public static final deprecated android.graphics.Bitmap.Config ARGB_4444;
+ enum_constant public static final android.graphics.Bitmap.Config ARGB_8888;
+ enum_constant public static final android.graphics.Bitmap.Config RGB_565;
}
public class BitmapFactory {
@@ -7311,6 +7322,10 @@
public static final class BlurMaskFilter.Blur extends java.lang.Enum {
method public static android.graphics.BlurMaskFilter.Blur valueOf(java.lang.String);
method public static final android.graphics.BlurMaskFilter.Blur[] values();
+ enum_constant public static final android.graphics.BlurMaskFilter.Blur INNER;
+ enum_constant public static final android.graphics.BlurMaskFilter.Blur NORMAL;
+ enum_constant public static final android.graphics.BlurMaskFilter.Blur OUTER;
+ enum_constant public static final android.graphics.BlurMaskFilter.Blur SOLID;
}
public class Camera {
@@ -7424,11 +7439,16 @@
public static final class Canvas.EdgeType extends java.lang.Enum {
method public static android.graphics.Canvas.EdgeType valueOf(java.lang.String);
method public static final android.graphics.Canvas.EdgeType[] values();
+ enum_constant public static final android.graphics.Canvas.EdgeType AA;
+ enum_constant public static final android.graphics.Canvas.EdgeType BW;
}
public static final class Canvas.VertexMode extends java.lang.Enum {
method public static android.graphics.Canvas.VertexMode valueOf(java.lang.String);
method public static final android.graphics.Canvas.VertexMode[] values();
+ enum_constant public static final android.graphics.Canvas.VertexMode TRIANGLES;
+ enum_constant public static final android.graphics.Canvas.VertexMode TRIANGLE_FAN;
+ enum_constant public static final android.graphics.Canvas.VertexMode TRIANGLE_STRIP;
}
public class Color {
@@ -7543,6 +7563,9 @@
public static final class Interpolator.Result extends java.lang.Enum {
method public static android.graphics.Interpolator.Result valueOf(java.lang.String);
method public static final android.graphics.Interpolator.Result[] values();
+ enum_constant public static final android.graphics.Interpolator.Result FREEZE_END;
+ enum_constant public static final android.graphics.Interpolator.Result FREEZE_START;
+ enum_constant public static final android.graphics.Interpolator.Result NORMAL;
}
public class LayerRasterizer extends android.graphics.Rasterizer {
@@ -7626,6 +7649,10 @@
public static final class Matrix.ScaleToFit extends java.lang.Enum {
method public static android.graphics.Matrix.ScaleToFit valueOf(java.lang.String);
method public static final android.graphics.Matrix.ScaleToFit[] values();
+ enum_constant public static final android.graphics.Matrix.ScaleToFit CENTER;
+ enum_constant public static final android.graphics.Matrix.ScaleToFit END;
+ enum_constant public static final android.graphics.Matrix.ScaleToFit FILL;
+ enum_constant public static final android.graphics.Matrix.ScaleToFit START;
}
public class Movie {
@@ -7755,11 +7782,17 @@
public static final class Paint.Align extends java.lang.Enum {
method public static android.graphics.Paint.Align valueOf(java.lang.String);
method public static final android.graphics.Paint.Align[] values();
+ enum_constant public static final android.graphics.Paint.Align CENTER;
+ enum_constant public static final android.graphics.Paint.Align LEFT;
+ enum_constant public static final android.graphics.Paint.Align RIGHT;
}
public static final class Paint.Cap extends java.lang.Enum {
method public static android.graphics.Paint.Cap valueOf(java.lang.String);
method public static final android.graphics.Paint.Cap[] values();
+ enum_constant public static final android.graphics.Paint.Cap BUTT;
+ enum_constant public static final android.graphics.Paint.Cap ROUND;
+ enum_constant public static final android.graphics.Paint.Cap SQUARE;
}
public static class Paint.FontMetrics {
@@ -7783,11 +7816,17 @@
public static final class Paint.Join extends java.lang.Enum {
method public static android.graphics.Paint.Join valueOf(java.lang.String);
method public static final android.graphics.Paint.Join[] values();
+ enum_constant public static final android.graphics.Paint.Join BEVEL;
+ enum_constant public static final android.graphics.Paint.Join MITER;
+ enum_constant public static final android.graphics.Paint.Join ROUND;
}
public static final class Paint.Style extends java.lang.Enum {
method public static android.graphics.Paint.Style valueOf(java.lang.String);
method public static final android.graphics.Paint.Style[] values();
+ enum_constant public static final android.graphics.Paint.Style FILL;
+ enum_constant public static final android.graphics.Paint.Style FILL_AND_STROKE;
+ enum_constant public static final android.graphics.Paint.Style STROKE;
}
public class PaintFlagsDrawFilter extends android.graphics.DrawFilter {
@@ -7839,11 +7878,17 @@
public static final class Path.Direction extends java.lang.Enum {
method public static android.graphics.Path.Direction valueOf(java.lang.String);
method public static final android.graphics.Path.Direction[] values();
+ enum_constant public static final android.graphics.Path.Direction CCW;
+ enum_constant public static final android.graphics.Path.Direction CW;
}
public static final class Path.FillType extends java.lang.Enum {
method public static android.graphics.Path.FillType valueOf(java.lang.String);
method public static final android.graphics.Path.FillType[] values();
+ enum_constant public static final android.graphics.Path.FillType EVEN_ODD;
+ enum_constant public static final android.graphics.Path.FillType INVERSE_EVEN_ODD;
+ enum_constant public static final android.graphics.Path.FillType INVERSE_WINDING;
+ enum_constant public static final android.graphics.Path.FillType WINDING;
}
public class PathDashPathEffect extends android.graphics.PathEffect {
@@ -7853,6 +7898,9 @@
public static final class PathDashPathEffect.Style extends java.lang.Enum {
method public static android.graphics.PathDashPathEffect.Style valueOf(java.lang.String);
method public static final android.graphics.PathDashPathEffect.Style[] values();
+ enum_constant public static final android.graphics.PathDashPathEffect.Style MORPH;
+ enum_constant public static final android.graphics.PathDashPathEffect.Style ROTATE;
+ enum_constant public static final android.graphics.PathDashPathEffect.Style TRANSLATE;
}
public class PathEffect {
@@ -7949,6 +7997,24 @@
public static final class PorterDuff.Mode extends java.lang.Enum {
method public static android.graphics.PorterDuff.Mode valueOf(java.lang.String);
method public static final android.graphics.PorterDuff.Mode[] values();
+ enum_constant public static final android.graphics.PorterDuff.Mode ADD;
+ enum_constant public static final android.graphics.PorterDuff.Mode CLEAR;
+ enum_constant public static final android.graphics.PorterDuff.Mode DARKEN;
+ enum_constant public static final android.graphics.PorterDuff.Mode DST;
+ enum_constant public static final android.graphics.PorterDuff.Mode DST_ATOP;
+ enum_constant public static final android.graphics.PorterDuff.Mode DST_IN;
+ enum_constant public static final android.graphics.PorterDuff.Mode DST_OUT;
+ enum_constant public static final android.graphics.PorterDuff.Mode DST_OVER;
+ enum_constant public static final android.graphics.PorterDuff.Mode LIGHTEN;
+ enum_constant public static final android.graphics.PorterDuff.Mode MULTIPLY;
+ enum_constant public static final android.graphics.PorterDuff.Mode OVERLAY;
+ enum_constant public static final android.graphics.PorterDuff.Mode SCREEN;
+ enum_constant public static final android.graphics.PorterDuff.Mode SRC;
+ enum_constant public static final android.graphics.PorterDuff.Mode SRC_ATOP;
+ enum_constant public static final android.graphics.PorterDuff.Mode SRC_IN;
+ enum_constant public static final android.graphics.PorterDuff.Mode SRC_OUT;
+ enum_constant public static final android.graphics.PorterDuff.Mode SRC_OVER;
+ enum_constant public static final android.graphics.PorterDuff.Mode XOR;
}
public class PorterDuffColorFilter extends android.graphics.ColorFilter {
@@ -8090,6 +8156,12 @@
public static final class Region.Op extends java.lang.Enum {
method public static android.graphics.Region.Op valueOf(java.lang.String);
method public static final android.graphics.Region.Op[] values();
+ enum_constant public static final android.graphics.Region.Op DIFFERENCE;
+ enum_constant public static final android.graphics.Region.Op INTERSECT;
+ enum_constant public static final android.graphics.Region.Op REPLACE;
+ enum_constant public static final android.graphics.Region.Op REVERSE_DIFFERENCE;
+ enum_constant public static final android.graphics.Region.Op UNION;
+ enum_constant public static final android.graphics.Region.Op XOR;
}
public class RegionIterator {
@@ -8106,6 +8178,9 @@
public static final class Shader.TileMode extends java.lang.Enum {
method public static android.graphics.Shader.TileMode valueOf(java.lang.String);
method public static final android.graphics.Shader.TileMode[] values();
+ enum_constant public static final android.graphics.Shader.TileMode CLAMP;
+ enum_constant public static final android.graphics.Shader.TileMode MIRROR;
+ enum_constant public static final android.graphics.Shader.TileMode REPEAT;
}
public class SumPathEffect extends android.graphics.PathEffect {
@@ -8380,6 +8455,14 @@
public static final class GradientDrawable.Orientation extends java.lang.Enum {
method public static android.graphics.drawable.GradientDrawable.Orientation valueOf(java.lang.String);
method public static final android.graphics.drawable.GradientDrawable.Orientation[] values();
+ enum_constant public static final android.graphics.drawable.GradientDrawable.Orientation BL_TR;
+ enum_constant public static final android.graphics.drawable.GradientDrawable.Orientation BOTTOM_TOP;
+ enum_constant public static final android.graphics.drawable.GradientDrawable.Orientation BR_TL;
+ enum_constant public static final android.graphics.drawable.GradientDrawable.Orientation LEFT_RIGHT;
+ enum_constant public static final android.graphics.drawable.GradientDrawable.Orientation RIGHT_LEFT;
+ enum_constant public static final android.graphics.drawable.GradientDrawable.Orientation TL_BR;
+ enum_constant public static final android.graphics.drawable.GradientDrawable.Orientation TOP_BOTTOM;
+ enum_constant public static final android.graphics.drawable.GradientDrawable.Orientation TR_BL;
}
public class InsetDrawable extends android.graphics.drawable.Drawable implements android.graphics.drawable.Drawable.Callback {
@@ -10812,6 +10895,9 @@
public static final class LocalSocketAddress.Namespace extends java.lang.Enum {
method public static android.net.LocalSocketAddress.Namespace valueOf(java.lang.String);
method public static final android.net.LocalSocketAddress.Namespace[] values();
+ enum_constant public static final android.net.LocalSocketAddress.Namespace ABSTRACT;
+ enum_constant public static final android.net.LocalSocketAddress.Namespace FILESYSTEM;
+ enum_constant public static final android.net.LocalSocketAddress.Namespace RESERVED;
}
public class MailTo {
@@ -10846,11 +10932,27 @@
public static final class NetworkInfo.DetailedState extends java.lang.Enum {
method public static android.net.NetworkInfo.DetailedState valueOf(java.lang.String);
method public static final android.net.NetworkInfo.DetailedState[] values();
+ enum_constant public static final android.net.NetworkInfo.DetailedState AUTHENTICATING;
+ enum_constant public static final android.net.NetworkInfo.DetailedState CONNECTED;
+ enum_constant public static final android.net.NetworkInfo.DetailedState CONNECTING;
+ enum_constant public static final android.net.NetworkInfo.DetailedState DISCONNECTED;
+ enum_constant public static final android.net.NetworkInfo.DetailedState DISCONNECTING;
+ enum_constant public static final android.net.NetworkInfo.DetailedState FAILED;
+ enum_constant public static final android.net.NetworkInfo.DetailedState IDLE;
+ enum_constant public static final android.net.NetworkInfo.DetailedState OBTAINING_IPADDR;
+ enum_constant public static final android.net.NetworkInfo.DetailedState SCANNING;
+ enum_constant public static final android.net.NetworkInfo.DetailedState SUSPENDED;
}
public static final class NetworkInfo.State extends java.lang.Enum {
method public static android.net.NetworkInfo.State valueOf(java.lang.String);
method public static final android.net.NetworkInfo.State[] values();
+ enum_constant public static final android.net.NetworkInfo.State CONNECTED;
+ enum_constant public static final android.net.NetworkInfo.State CONNECTING;
+ enum_constant public static final android.net.NetworkInfo.State DISCONNECTED;
+ enum_constant public static final android.net.NetworkInfo.State DISCONNECTING;
+ enum_constant public static final android.net.NetworkInfo.State SUSPENDED;
+ enum_constant public static final android.net.NetworkInfo.State UNKNOWN;
}
public class ParseException extends java.lang.RuntimeException {
@@ -11363,6 +11465,17 @@
method public static android.net.wifi.SupplicantState valueOf(java.lang.String);
method public static final android.net.wifi.SupplicantState[] values();
method public void writeToParcel(android.os.Parcel, int);
+ enum_constant public static final android.net.wifi.SupplicantState ASSOCIATED;
+ enum_constant public static final android.net.wifi.SupplicantState ASSOCIATING;
+ enum_constant public static final android.net.wifi.SupplicantState COMPLETED;
+ enum_constant public static final android.net.wifi.SupplicantState DISCONNECTED;
+ enum_constant public static final android.net.wifi.SupplicantState DORMANT;
+ enum_constant public static final android.net.wifi.SupplicantState FOUR_WAY_HANDSHAKE;
+ enum_constant public static final android.net.wifi.SupplicantState GROUP_HANDSHAKE;
+ enum_constant public static final android.net.wifi.SupplicantState INACTIVE;
+ enum_constant public static final android.net.wifi.SupplicantState INVALID;
+ enum_constant public static final android.net.wifi.SupplicantState SCANNING;
+ enum_constant public static final android.net.wifi.SupplicantState UNINITIALIZED;
}
public class WifiConfiguration implements android.os.Parcelable {
@@ -13184,6 +13297,9 @@
public static final class AsyncTask.Status extends java.lang.Enum {
method public static android.os.AsyncTask.Status valueOf(java.lang.String);
method public static final android.os.AsyncTask.Status[] values();
+ enum_constant public static final android.os.AsyncTask.Status FINISHED;
+ enum_constant public static final android.os.AsyncTask.Status PENDING;
+ enum_constant public static final android.os.AsyncTask.Status RUNNING;
}
public class BadParcelableException extends android.util.AndroidRuntimeException {
@@ -16159,6 +16275,9 @@
public static final class Allocation.MipmapControl extends java.lang.Enum {
method public static android.renderscript.Allocation.MipmapControl valueOf(java.lang.String);
method public static final android.renderscript.Allocation.MipmapControl[] values();
+ enum_constant public static final android.renderscript.Allocation.MipmapControl MIPMAP_FULL;
+ enum_constant public static final android.renderscript.Allocation.MipmapControl MIPMAP_NONE;
+ enum_constant public static final android.renderscript.Allocation.MipmapControl MIPMAP_ON_SYNC_TO_TEXTURE;
}
public class AllocationAdapter extends android.renderscript.Allocation {
@@ -16256,11 +16375,45 @@
public static final class Element.DataKind extends java.lang.Enum {
method public static android.renderscript.Element.DataKind valueOf(java.lang.String);
method public static final android.renderscript.Element.DataKind[] values();
+ enum_constant public static final android.renderscript.Element.DataKind PIXEL_A;
+ enum_constant public static final android.renderscript.Element.DataKind PIXEL_DEPTH;
+ enum_constant public static final android.renderscript.Element.DataKind PIXEL_L;
+ enum_constant public static final android.renderscript.Element.DataKind PIXEL_LA;
+ enum_constant public static final android.renderscript.Element.DataKind PIXEL_RGB;
+ enum_constant public static final android.renderscript.Element.DataKind PIXEL_RGBA;
+ enum_constant public static final android.renderscript.Element.DataKind USER;
}
public static final class Element.DataType extends java.lang.Enum {
method public static android.renderscript.Element.DataType valueOf(java.lang.String);
method public static final android.renderscript.Element.DataType[] values();
+ enum_constant public static final android.renderscript.Element.DataType BOOLEAN;
+ enum_constant public static final android.renderscript.Element.DataType FLOAT_32;
+ enum_constant public static final android.renderscript.Element.DataType FLOAT_64;
+ enum_constant public static final android.renderscript.Element.DataType MATRIX_2X2;
+ enum_constant public static final android.renderscript.Element.DataType MATRIX_3X3;
+ enum_constant public static final android.renderscript.Element.DataType MATRIX_4X4;
+ enum_constant public static final android.renderscript.Element.DataType RS_ALLOCATION;
+ enum_constant public static final android.renderscript.Element.DataType RS_ELEMENT;
+ enum_constant public static final android.renderscript.Element.DataType RS_MESH;
+ enum_constant public static final android.renderscript.Element.DataType RS_PROGRAM_FRAGMENT;
+ enum_constant public static final android.renderscript.Element.DataType RS_PROGRAM_RASTER;
+ enum_constant public static final android.renderscript.Element.DataType RS_PROGRAM_STORE;
+ enum_constant public static final android.renderscript.Element.DataType RS_PROGRAM_VERTEX;
+ enum_constant public static final android.renderscript.Element.DataType RS_SAMPLER;
+ enum_constant public static final android.renderscript.Element.DataType RS_SCRIPT;
+ enum_constant public static final android.renderscript.Element.DataType RS_TYPE;
+ enum_constant public static final android.renderscript.Element.DataType SIGNED_16;
+ enum_constant public static final android.renderscript.Element.DataType SIGNED_32;
+ enum_constant public static final android.renderscript.Element.DataType SIGNED_64;
+ enum_constant public static final android.renderscript.Element.DataType SIGNED_8;
+ enum_constant public static final android.renderscript.Element.DataType UNSIGNED_16;
+ enum_constant public static final android.renderscript.Element.DataType UNSIGNED_32;
+ enum_constant public static final android.renderscript.Element.DataType UNSIGNED_4_4_4_4;
+ enum_constant public static final android.renderscript.Element.DataType UNSIGNED_5_5_5_1;
+ enum_constant public static final android.renderscript.Element.DataType UNSIGNED_5_6_5;
+ enum_constant public static final android.renderscript.Element.DataType UNSIGNED_64;
+ enum_constant public static final android.renderscript.Element.DataType UNSIGNED_8;
}
public class FieldPacker {
@@ -16320,6 +16473,8 @@
public static final class FileA3D.EntryType extends java.lang.Enum {
method public static android.renderscript.FileA3D.EntryType valueOf(java.lang.String);
method public static final android.renderscript.FileA3D.EntryType[] values();
+ enum_constant public static final android.renderscript.FileA3D.EntryType MESH;
+ enum_constant public static final android.renderscript.FileA3D.EntryType UNKNOWN;
}
public static class FileA3D.IndexEntry {
@@ -16364,6 +16519,10 @@
public static final class Font.Style extends java.lang.Enum {
method public static android.renderscript.Font.Style valueOf(java.lang.String);
method public static final android.renderscript.Font.Style[] values();
+ enum_constant public static final android.renderscript.Font.Style BOLD;
+ enum_constant public static final android.renderscript.Font.Style BOLD_ITALIC;
+ enum_constant public static final android.renderscript.Font.Style ITALIC;
+ enum_constant public static final android.renderscript.Font.Style NORMAL;
}
public class Int2 {
@@ -16507,6 +16666,12 @@
public static final class Mesh.Primitive extends java.lang.Enum {
method public static android.renderscript.Mesh.Primitive valueOf(java.lang.String);
method public static final android.renderscript.Mesh.Primitive[] values();
+ enum_constant public static final android.renderscript.Mesh.Primitive LINE;
+ enum_constant public static final android.renderscript.Mesh.Primitive LINE_STRIP;
+ enum_constant public static final android.renderscript.Mesh.Primitive POINT;
+ enum_constant public static final android.renderscript.Mesh.Primitive TRIANGLE;
+ enum_constant public static final android.renderscript.Mesh.Primitive TRIANGLE_FAN;
+ enum_constant public static final android.renderscript.Mesh.Primitive TRIANGLE_STRIP;
}
public static class Mesh.TriangleMeshBuilder {
@@ -16543,6 +16708,8 @@
public static final class Program.TextureType extends java.lang.Enum {
method public static android.renderscript.Program.TextureType valueOf(java.lang.String);
method public static final android.renderscript.Program.TextureType[] values();
+ enum_constant public static final android.renderscript.Program.TextureType TEXTURE_2D;
+ enum_constant public static final android.renderscript.Program.TextureType TEXTURE_CUBE;
}
public class ProgramFragment extends android.renderscript.Program {
@@ -16568,11 +16735,18 @@
public static final class ProgramFragmentFixedFunction.Builder.EnvMode extends java.lang.Enum {
method public static android.renderscript.ProgramFragmentFixedFunction.Builder.EnvMode valueOf(java.lang.String);
method public static final android.renderscript.ProgramFragmentFixedFunction.Builder.EnvMode[] values();
+ enum_constant public static final android.renderscript.ProgramFragmentFixedFunction.Builder.EnvMode DECAL;
+ enum_constant public static final android.renderscript.ProgramFragmentFixedFunction.Builder.EnvMode MODULATE;
+ enum_constant public static final android.renderscript.ProgramFragmentFixedFunction.Builder.EnvMode REPLACE;
}
public static final class ProgramFragmentFixedFunction.Builder.Format extends java.lang.Enum {
method public static android.renderscript.ProgramFragmentFixedFunction.Builder.Format valueOf(java.lang.String);
method public static final android.renderscript.ProgramFragmentFixedFunction.Builder.Format[] values();
+ enum_constant public static final android.renderscript.ProgramFragmentFixedFunction.Builder.Format ALPHA;
+ enum_constant public static final android.renderscript.ProgramFragmentFixedFunction.Builder.Format LUMINANCE_ALPHA;
+ enum_constant public static final android.renderscript.ProgramFragmentFixedFunction.Builder.Format RGB;
+ enum_constant public static final android.renderscript.ProgramFragmentFixedFunction.Builder.Format RGBA;
}
public class ProgramRaster extends android.renderscript.BaseObj {
@@ -16591,6 +16765,9 @@
public static final class ProgramRaster.CullMode extends java.lang.Enum {
method public static android.renderscript.ProgramRaster.CullMode valueOf(java.lang.String);
method public static final android.renderscript.ProgramRaster.CullMode[] values();
+ enum_constant public static final android.renderscript.ProgramRaster.CullMode BACK;
+ enum_constant public static final android.renderscript.ProgramRaster.CullMode FRONT;
+ enum_constant public static final android.renderscript.ProgramRaster.CullMode NONE;
}
public class ProgramStore extends android.renderscript.BaseObj {
@@ -16603,11 +16780,28 @@
public static final class ProgramStore.BlendDstFunc extends java.lang.Enum {
method public static android.renderscript.ProgramStore.BlendDstFunc valueOf(java.lang.String);
method public static final android.renderscript.ProgramStore.BlendDstFunc[] values();
+ enum_constant public static final android.renderscript.ProgramStore.BlendDstFunc DST_ALPHA;
+ enum_constant public static final android.renderscript.ProgramStore.BlendDstFunc ONE;
+ enum_constant public static final android.renderscript.ProgramStore.BlendDstFunc ONE_MINUS_DST_ALPHA;
+ enum_constant public static final android.renderscript.ProgramStore.BlendDstFunc ONE_MINUS_SRC_ALPHA;
+ enum_constant public static final android.renderscript.ProgramStore.BlendDstFunc ONE_MINUS_SRC_COLOR;
+ enum_constant public static final android.renderscript.ProgramStore.BlendDstFunc SRC_ALPHA;
+ enum_constant public static final android.renderscript.ProgramStore.BlendDstFunc SRC_COLOR;
+ enum_constant public static final android.renderscript.ProgramStore.BlendDstFunc ZERO;
}
public static final class ProgramStore.BlendSrcFunc extends java.lang.Enum {
method public static android.renderscript.ProgramStore.BlendSrcFunc valueOf(java.lang.String);
method public static final android.renderscript.ProgramStore.BlendSrcFunc[] values();
+ enum_constant public static final android.renderscript.ProgramStore.BlendSrcFunc DST_ALPHA;
+ enum_constant public static final android.renderscript.ProgramStore.BlendSrcFunc DST_COLOR;
+ enum_constant public static final android.renderscript.ProgramStore.BlendSrcFunc ONE;
+ enum_constant public static final android.renderscript.ProgramStore.BlendSrcFunc ONE_MINUS_DST_ALPHA;
+ enum_constant public static final android.renderscript.ProgramStore.BlendSrcFunc ONE_MINUS_DST_COLOR;
+ enum_constant public static final android.renderscript.ProgramStore.BlendSrcFunc ONE_MINUS_SRC_ALPHA;
+ enum_constant public static final android.renderscript.ProgramStore.BlendSrcFunc SRC_ALPHA;
+ enum_constant public static final android.renderscript.ProgramStore.BlendSrcFunc SRC_ALPHA_SATURATE;
+ enum_constant public static final android.renderscript.ProgramStore.BlendSrcFunc ZERO;
}
public static class ProgramStore.Builder {
@@ -16623,6 +16817,13 @@
public static final class ProgramStore.DepthFunc extends java.lang.Enum {
method public static android.renderscript.ProgramStore.DepthFunc valueOf(java.lang.String);
method public static final android.renderscript.ProgramStore.DepthFunc[] values();
+ enum_constant public static final android.renderscript.ProgramStore.DepthFunc ALWAYS;
+ enum_constant public static final android.renderscript.ProgramStore.DepthFunc EQUAL;
+ enum_constant public static final android.renderscript.ProgramStore.DepthFunc GREATER;
+ enum_constant public static final android.renderscript.ProgramStore.DepthFunc GREATER_OR_EQUAL;
+ enum_constant public static final android.renderscript.ProgramStore.DepthFunc LESS;
+ enum_constant public static final android.renderscript.ProgramStore.DepthFunc LESS_OR_EQUAL;
+ enum_constant public static final android.renderscript.ProgramStore.DepthFunc NOT_EQUAL;
}
public class ProgramVertex extends android.renderscript.Program {
@@ -16698,6 +16899,8 @@
public static final class RenderScript.Priority extends java.lang.Enum {
method public static android.renderscript.RenderScript.Priority valueOf(java.lang.String);
method public static final android.renderscript.RenderScript.Priority[] values();
+ enum_constant public static final android.renderscript.RenderScript.Priority LOW;
+ enum_constant public static final android.renderscript.RenderScript.Priority NORMAL;
}
public static class RenderScript.RSErrorHandler implements java.lang.Runnable {
@@ -16760,6 +16963,12 @@
public static final class Sampler.Value extends java.lang.Enum {
method public static android.renderscript.Sampler.Value valueOf(java.lang.String);
method public static final android.renderscript.Sampler.Value[] values();
+ enum_constant public static final android.renderscript.Sampler.Value CLAMP;
+ enum_constant public static final android.renderscript.Sampler.Value LINEAR;
+ enum_constant public static final android.renderscript.Sampler.Value LINEAR_MIP_LINEAR;
+ enum_constant public static final android.renderscript.Sampler.Value LINEAR_MIP_NEAREST;
+ enum_constant public static final android.renderscript.Sampler.Value NEAREST;
+ enum_constant public static final android.renderscript.Sampler.Value WRAP;
}
public class Script extends android.renderscript.BaseObj {
@@ -16839,6 +17048,12 @@
public static final class Type.CubemapFace extends java.lang.Enum {
method public static android.renderscript.Type.CubemapFace valueOf(java.lang.String);
method public static final android.renderscript.Type.CubemapFace[] values();
+ enum_constant public static final android.renderscript.Type.CubemapFace NEGATIVE_X;
+ enum_constant public static final android.renderscript.Type.CubemapFace NEGATIVE_Y;
+ enum_constant public static final android.renderscript.Type.CubemapFace NEGATIVE_Z;
+ enum_constant public static final android.renderscript.Type.CubemapFace POSITVE_X;
+ enum_constant public static final android.renderscript.Type.CubemapFace POSITVE_Y;
+ enum_constant public static final android.renderscript.Type.CubemapFace POSITVE_Z;
}
}
@@ -17287,6 +17502,11 @@
public static final class SmsMessage.MessageClass extends java.lang.Enum {
method public static android.telephony.SmsMessage.MessageClass valueOf(java.lang.String);
method public static final android.telephony.SmsMessage.MessageClass[] values();
+ enum_constant public static final android.telephony.SmsMessage.MessageClass CLASS_0;
+ enum_constant public static final android.telephony.SmsMessage.MessageClass CLASS_1;
+ enum_constant public static final android.telephony.SmsMessage.MessageClass CLASS_2;
+ enum_constant public static final android.telephony.SmsMessage.MessageClass CLASS_3;
+ enum_constant public static final android.telephony.SmsMessage.MessageClass UNKNOWN;
}
public static class SmsMessage.SubmitPdu {
@@ -17458,6 +17678,11 @@
public static final deprecated class SmsMessage.MessageClass extends java.lang.Enum {
method public static android.telephony.gsm.SmsMessage.MessageClass valueOf(java.lang.String);
method public static final android.telephony.gsm.SmsMessage.MessageClass[] values();
+ enum_constant public static final android.telephony.gsm.SmsMessage.MessageClass CLASS_0;
+ enum_constant public static final android.telephony.gsm.SmsMessage.MessageClass CLASS_1;
+ enum_constant public static final android.telephony.gsm.SmsMessage.MessageClass CLASS_2;
+ enum_constant public static final android.telephony.gsm.SmsMessage.MessageClass CLASS_3;
+ enum_constant public static final android.telephony.gsm.SmsMessage.MessageClass UNKNOWN;
}
public static deprecated class SmsMessage.SubmitPdu {
@@ -18292,6 +18517,9 @@
public static final class Layout.Alignment extends java.lang.Enum {
method public static android.text.Layout.Alignment valueOf(java.lang.String);
method public static final android.text.Layout.Alignment[] values();
+ enum_constant public static final android.text.Layout.Alignment ALIGN_CENTER;
+ enum_constant public static final android.text.Layout.Alignment ALIGN_NORMAL;
+ enum_constant public static final android.text.Layout.Alignment ALIGN_OPPOSITE;
}
public static class Layout.Directions {
@@ -18549,6 +18777,10 @@
public static final class TextUtils.TruncateAt extends java.lang.Enum {
method public static android.text.TextUtils.TruncateAt valueOf(java.lang.String);
method public static final android.text.TextUtils.TruncateAt[] values();
+ enum_constant public static final android.text.TextUtils.TruncateAt END;
+ enum_constant public static final android.text.TextUtils.TruncateAt MARQUEE;
+ enum_constant public static final android.text.TextUtils.TruncateAt MIDDLE;
+ enum_constant public static final android.text.TextUtils.TruncateAt START;
}
public abstract interface TextWatcher implements android.text.NoCopySpan {
@@ -18934,6 +19166,10 @@
public static final class TextKeyListener.Capitalize extends java.lang.Enum {
method public static android.text.method.TextKeyListener.Capitalize valueOf(java.lang.String);
method public static final android.text.method.TextKeyListener.Capitalize[] values();
+ enum_constant public static final android.text.method.TextKeyListener.Capitalize CHARACTERS;
+ enum_constant public static final android.text.method.TextKeyListener.Capitalize NONE;
+ enum_constant public static final android.text.method.TextKeyListener.Capitalize SENTENCES;
+ enum_constant public static final android.text.method.TextKeyListener.Capitalize WORDS;
}
public class TimeKeyListener extends android.text.method.NumberKeyListener {
@@ -19483,6 +19719,16 @@
public final class JsonToken extends java.lang.Enum {
method public static android.util.JsonToken valueOf(java.lang.String);
method public static final android.util.JsonToken[] values();
+ enum_constant public static final android.util.JsonToken BEGIN_ARRAY;
+ enum_constant public static final android.util.JsonToken BEGIN_OBJECT;
+ enum_constant public static final android.util.JsonToken BOOLEAN;
+ enum_constant public static final android.util.JsonToken END_ARRAY;
+ enum_constant public static final android.util.JsonToken END_DOCUMENT;
+ enum_constant public static final android.util.JsonToken END_OBJECT;
+ enum_constant public static final android.util.JsonToken NAME;
+ enum_constant public static final android.util.JsonToken NULL;
+ enum_constant public static final android.util.JsonToken NUMBER;
+ enum_constant public static final android.util.JsonToken STRING;
}
public final class JsonWriter implements java.io.Closeable {
@@ -19772,6 +20018,10 @@
public static final class Xml.Encoding extends java.lang.Enum {
method public static android.util.Xml.Encoding valueOf(java.lang.String);
method public static final android.util.Xml.Encoding[] values();
+ enum_constant public static final android.util.Xml.Encoding ISO_8859_1;
+ enum_constant public static final android.util.Xml.Encoding US_ASCII;
+ enum_constant public static final android.util.Xml.Encoding UTF_16;
+ enum_constant public static final android.util.Xml.Encoding UTF_8;
}
}
@@ -21424,6 +21674,14 @@
public static final class ViewDebug.HierarchyTraceType extends java.lang.Enum {
method public static android.view.ViewDebug.HierarchyTraceType valueOf(java.lang.String);
method public static final android.view.ViewDebug.HierarchyTraceType[] values();
+ enum_constant public static final android.view.ViewDebug.HierarchyTraceType BUILD_CACHE;
+ enum_constant public static final android.view.ViewDebug.HierarchyTraceType DRAW;
+ enum_constant public static final android.view.ViewDebug.HierarchyTraceType INVALIDATE;
+ enum_constant public static final android.view.ViewDebug.HierarchyTraceType INVALIDATE_CHILD;
+ enum_constant public static final android.view.ViewDebug.HierarchyTraceType INVALIDATE_CHILD_IN_PARENT;
+ enum_constant public static final android.view.ViewDebug.HierarchyTraceType ON_LAYOUT;
+ enum_constant public static final android.view.ViewDebug.HierarchyTraceType ON_MEASURE;
+ enum_constant public static final android.view.ViewDebug.HierarchyTraceType REQUEST_LAYOUT;
}
public static abstract class ViewDebug.IntToString implements java.lang.annotation.Annotation {
@@ -21432,6 +21690,12 @@
public static final class ViewDebug.RecyclerTraceType extends java.lang.Enum {
method public static android.view.ViewDebug.RecyclerTraceType valueOf(java.lang.String);
method public static final android.view.ViewDebug.RecyclerTraceType[] values();
+ enum_constant public static final android.view.ViewDebug.RecyclerTraceType BIND_VIEW;
+ enum_constant public static final android.view.ViewDebug.RecyclerTraceType MOVE_FROM_ACTIVE_TO_SCRAP_HEAP;
+ enum_constant public static final android.view.ViewDebug.RecyclerTraceType MOVE_TO_SCRAP_HEAP;
+ enum_constant public static final android.view.ViewDebug.RecyclerTraceType NEW_VIEW;
+ enum_constant public static final android.view.ViewDebug.RecyclerTraceType RECYCLE_FROM_ACTIVE_HEAP;
+ enum_constant public static final android.view.ViewDebug.RecyclerTraceType RECYCLE_FROM_SCRAP_HEAP;
}
public abstract class ViewGroup extends android.view.View implements android.view.ViewManager android.view.ViewParent {
@@ -22640,6 +22904,11 @@
public static final class ConsoleMessage.MessageLevel extends java.lang.Enum {
method public static android.webkit.ConsoleMessage.MessageLevel valueOf(java.lang.String);
method public static final android.webkit.ConsoleMessage.MessageLevel[] values();
+ enum_constant public static final android.webkit.ConsoleMessage.MessageLevel DEBUG;
+ enum_constant public static final android.webkit.ConsoleMessage.MessageLevel ERROR;
+ enum_constant public static final android.webkit.ConsoleMessage.MessageLevel LOG;
+ enum_constant public static final android.webkit.ConsoleMessage.MessageLevel TIP;
+ enum_constant public static final android.webkit.ConsoleMessage.MessageLevel WARNING;
}
public final class CookieManager {
@@ -22922,26 +23191,43 @@
public static final deprecated class WebSettings.LayoutAlgorithm extends java.lang.Enum {
method public static android.webkit.WebSettings.LayoutAlgorithm valueOf(java.lang.String);
method public static final android.webkit.WebSettings.LayoutAlgorithm[] values();
+ enum_constant public static final android.webkit.WebSettings.LayoutAlgorithm NARROW_COLUMNS;
+ enum_constant public static final android.webkit.WebSettings.LayoutAlgorithm NORMAL;
+ enum_constant public static final android.webkit.WebSettings.LayoutAlgorithm SINGLE_COLUMN;
}
public static final class WebSettings.PluginState extends java.lang.Enum {
method public static android.webkit.WebSettings.PluginState valueOf(java.lang.String);
method public static final android.webkit.WebSettings.PluginState[] values();
+ enum_constant public static final android.webkit.WebSettings.PluginState OFF;
+ enum_constant public static final android.webkit.WebSettings.PluginState ON;
+ enum_constant public static final android.webkit.WebSettings.PluginState ON_DEMAND;
}
public static final class WebSettings.RenderPriority extends java.lang.Enum {
method public static android.webkit.WebSettings.RenderPriority valueOf(java.lang.String);
method public static final android.webkit.WebSettings.RenderPriority[] values();
+ enum_constant public static final android.webkit.WebSettings.RenderPriority HIGH;
+ enum_constant public static final android.webkit.WebSettings.RenderPriority LOW;
+ enum_constant public static final android.webkit.WebSettings.RenderPriority NORMAL;
}
public static final class WebSettings.TextSize extends java.lang.Enum {
method public static android.webkit.WebSettings.TextSize valueOf(java.lang.String);
method public static final android.webkit.WebSettings.TextSize[] values();
+ enum_constant public static final android.webkit.WebSettings.TextSize LARGER;
+ enum_constant public static final android.webkit.WebSettings.TextSize LARGEST;
+ enum_constant public static final android.webkit.WebSettings.TextSize NORMAL;
+ enum_constant public static final android.webkit.WebSettings.TextSize SMALLER;
+ enum_constant public static final android.webkit.WebSettings.TextSize SMALLEST;
}
public static final class WebSettings.ZoomDensity extends java.lang.Enum {
method public static android.webkit.WebSettings.ZoomDensity valueOf(java.lang.String);
method public static final android.webkit.WebSettings.ZoomDensity[] values();
+ enum_constant public static final android.webkit.WebSettings.ZoomDensity CLOSE;
+ enum_constant public static final android.webkit.WebSettings.ZoomDensity FAR;
+ enum_constant public static final android.webkit.WebSettings.ZoomDensity MEDIUM;
}
public final class WebStorage {
@@ -24008,6 +24294,14 @@
public static final class ImageView.ScaleType extends java.lang.Enum {
method public static android.widget.ImageView.ScaleType valueOf(java.lang.String);
method public static final android.widget.ImageView.ScaleType[] values();
+ enum_constant public static final android.widget.ImageView.ScaleType CENTER;
+ enum_constant public static final android.widget.ImageView.ScaleType CENTER_CROP;
+ enum_constant public static final android.widget.ImageView.ScaleType CENTER_INSIDE;
+ enum_constant public static final android.widget.ImageView.ScaleType FIT_CENTER;
+ enum_constant public static final android.widget.ImageView.ScaleType FIT_END;
+ enum_constant public static final android.widget.ImageView.ScaleType FIT_START;
+ enum_constant public static final android.widget.ImageView.ScaleType FIT_XY;
+ enum_constant public static final android.widget.ImageView.ScaleType MATRIX;
}
public class LinearLayout extends android.view.ViewGroup {
@@ -25064,6 +25358,9 @@
public static final class TextView.BufferType extends java.lang.Enum {
method public static android.widget.TextView.BufferType valueOf(java.lang.String);
method public static final android.widget.TextView.BufferType[] values();
+ enum_constant public static final android.widget.TextView.BufferType EDITABLE;
+ enum_constant public static final android.widget.TextView.BufferType NORMAL;
+ enum_constant public static final android.widget.TextView.BufferType SPANNABLE;
}
public static abstract interface TextView.OnEditorActionListener {
@@ -28052,6 +28349,12 @@
public static final class Thread.State extends java.lang.Enum {
method public static java.lang.Thread.State valueOf(java.lang.String);
method public static final java.lang.Thread.State[] values();
+ enum_constant public static final java.lang.Thread.State BLOCKED;
+ enum_constant public static final java.lang.Thread.State NEW;
+ enum_constant public static final java.lang.Thread.State RUNNABLE;
+ enum_constant public static final java.lang.Thread.State TERMINATED;
+ enum_constant public static final java.lang.Thread.State TIMED_WAITING;
+ enum_constant public static final java.lang.Thread.State WAITING;
}
public static abstract interface Thread.UncaughtExceptionHandler {
@@ -28185,6 +28488,14 @@
public final class ElementType extends java.lang.Enum {
method public static java.lang.annotation.ElementType valueOf(java.lang.String);
method public static final java.lang.annotation.ElementType[] values();
+ enum_constant public static final java.lang.annotation.ElementType ANNOTATION_TYPE;
+ enum_constant public static final java.lang.annotation.ElementType CONSTRUCTOR;
+ enum_constant public static final java.lang.annotation.ElementType FIELD;
+ enum_constant public static final java.lang.annotation.ElementType LOCAL_VARIABLE;
+ enum_constant public static final java.lang.annotation.ElementType METHOD;
+ enum_constant public static final java.lang.annotation.ElementType PACKAGE;
+ enum_constant public static final java.lang.annotation.ElementType PARAMETER;
+ enum_constant public static final java.lang.annotation.ElementType TYPE;
}
public class IncompleteAnnotationException extends java.lang.RuntimeException {
@@ -28202,6 +28513,9 @@
public final class RetentionPolicy extends java.lang.Enum {
method public static java.lang.annotation.RetentionPolicy valueOf(java.lang.String);
method public static final java.lang.annotation.RetentionPolicy[] values();
+ enum_constant public static final java.lang.annotation.RetentionPolicy CLASS;
+ enum_constant public static final java.lang.annotation.RetentionPolicy RUNTIME;
+ enum_constant public static final java.lang.annotation.RetentionPolicy SOURCE;
}
public abstract class Target implements java.lang.annotation.Annotation {
@@ -28615,6 +28929,14 @@
method public static java.math.RoundingMode valueOf(java.lang.String);
method public static java.math.RoundingMode valueOf(int);
method public static final java.math.RoundingMode[] values();
+ enum_constant public static final java.math.RoundingMode CEILING;
+ enum_constant public static final java.math.RoundingMode DOWN;
+ enum_constant public static final java.math.RoundingMode FLOOR;
+ enum_constant public static final java.math.RoundingMode HALF_DOWN;
+ enum_constant public static final java.math.RoundingMode HALF_EVEN;
+ enum_constant public static final java.math.RoundingMode HALF_UP;
+ enum_constant public static final java.math.RoundingMode UNNECESSARY;
+ enum_constant public static final java.math.RoundingMode UP;
}
}
@@ -28641,6 +28963,8 @@
public static final class Authenticator.RequestorType extends java.lang.Enum {
method public static java.net.Authenticator.RequestorType valueOf(java.lang.String);
method public static final java.net.Authenticator.RequestorType[] values();
+ enum_constant public static final java.net.Authenticator.RequestorType PROXY;
+ enum_constant public static final java.net.Authenticator.RequestorType SERVER;
}
public class BindException extends java.net.SocketException {
@@ -29055,6 +29379,9 @@
public static final class Proxy.Type extends java.lang.Enum {
method public static java.net.Proxy.Type valueOf(java.lang.String);
method public static final java.net.Proxy.Type[] values();
+ enum_constant public static final java.net.Proxy.Type DIRECT;
+ enum_constant public static final java.net.Proxy.Type HTTP;
+ enum_constant public static final java.net.Proxy.Type SOCKS;
}
public abstract class ProxySelector {
@@ -30451,6 +30778,9 @@
public static final class KeyRep.Type extends java.lang.Enum {
method public static java.security.KeyRep.Type valueOf(java.lang.String);
method public static final java.security.KeyRep.Type[] values();
+ enum_constant public static final java.security.KeyRep.Type PRIVATE;
+ enum_constant public static final java.security.KeyRep.Type PUBLIC;
+ enum_constant public static final java.security.KeyRep.Type SECRET;
}
public class KeyStore {
@@ -31824,6 +32154,10 @@
public final class ClientInfoStatus extends java.lang.Enum {
method public static java.sql.ClientInfoStatus valueOf(java.lang.String);
method public static final java.sql.ClientInfoStatus[] values();
+ enum_constant public static final java.sql.ClientInfoStatus REASON_UNKNOWN;
+ enum_constant public static final java.sql.ClientInfoStatus REASON_UNKNOWN_PROPERTY;
+ enum_constant public static final java.sql.ClientInfoStatus REASON_VALUE_INVALID;
+ enum_constant public static final java.sql.ClientInfoStatus REASON_VALUE_TRUNCATED;
}
public abstract interface Clob {
@@ -32508,6 +32842,11 @@
public final class RowIdLifetime extends java.lang.Enum {
method public static java.sql.RowIdLifetime valueOf(java.lang.String);
method public static final java.sql.RowIdLifetime[] values();
+ enum_constant public static final java.sql.RowIdLifetime ROWID_UNSUPPORTED;
+ enum_constant public static final java.sql.RowIdLifetime ROWID_VALID_FOREVER;
+ enum_constant public static final java.sql.RowIdLifetime ROWID_VALID_OTHER;
+ enum_constant public static final java.sql.RowIdLifetime ROWID_VALID_SESSION;
+ enum_constant public static final java.sql.RowIdLifetime ROWID_VALID_TRANSACTION;
}
public class SQLClientInfoException extends java.sql.SQLException {
@@ -33297,6 +33636,10 @@
public static final class Normalizer.Form extends java.lang.Enum {
method public static java.text.Normalizer.Form valueOf(java.lang.String);
method public static final java.text.Normalizer.Form[] values();
+ enum_constant public static final java.text.Normalizer.Form NFC;
+ enum_constant public static final java.text.Normalizer.Form NFD;
+ enum_constant public static final java.text.Normalizer.Form NFKC;
+ enum_constant public static final java.text.Normalizer.Form NFKD;
}
public abstract class NumberFormat extends java.text.Format {
@@ -34038,6 +34381,8 @@
public static final class Formatter.BigDecimalLayoutForm extends java.lang.Enum {
method public static java.util.Formatter.BigDecimalLayoutForm valueOf(java.lang.String);
method public static final java.util.Formatter.BigDecimalLayoutForm[] values();
+ enum_constant public static final java.util.Formatter.BigDecimalLayoutForm DECIMAL_FLOAT;
+ enum_constant public static final java.util.Formatter.BigDecimalLayoutForm SCIENTIFIC;
}
public class FormatterClosedException extends java.lang.IllegalStateException implements java.io.Serializable {
@@ -35484,6 +35829,13 @@
method public long toSeconds(long);
method public static java.util.concurrent.TimeUnit valueOf(java.lang.String);
method public static final java.util.concurrent.TimeUnit[] values();
+ enum_constant public static final java.util.concurrent.TimeUnit DAYS;
+ enum_constant public static final java.util.concurrent.TimeUnit HOURS;
+ enum_constant public static final java.util.concurrent.TimeUnit MICROSECONDS;
+ enum_constant public static final java.util.concurrent.TimeUnit MILLISECONDS;
+ enum_constant public static final java.util.concurrent.TimeUnit MINUTES;
+ enum_constant public static final java.util.concurrent.TimeUnit NANOSECONDS;
+ enum_constant public static final java.util.concurrent.TimeUnit SECONDS;
}
public class TimeoutException extends java.lang.Exception {
@@ -38140,11 +38492,20 @@
public static final class SSLEngineResult.HandshakeStatus extends java.lang.Enum {
method public static javax.net.ssl.SSLEngineResult.HandshakeStatus valueOf(java.lang.String);
method public static final javax.net.ssl.SSLEngineResult.HandshakeStatus[] values();
+ enum_constant public static final javax.net.ssl.SSLEngineResult.HandshakeStatus FINISHED;
+ enum_constant public static final javax.net.ssl.SSLEngineResult.HandshakeStatus NEED_TASK;
+ enum_constant public static final javax.net.ssl.SSLEngineResult.HandshakeStatus NEED_UNWRAP;
+ enum_constant public static final javax.net.ssl.SSLEngineResult.HandshakeStatus NEED_WRAP;
+ enum_constant public static final javax.net.ssl.SSLEngineResult.HandshakeStatus NOT_HANDSHAKING;
}
public static final class SSLEngineResult.Status extends java.lang.Enum {
method public static javax.net.ssl.SSLEngineResult.Status valueOf(java.lang.String);
method public static final javax.net.ssl.SSLEngineResult.Status[] values();
+ enum_constant public static final javax.net.ssl.SSLEngineResult.Status BUFFER_OVERFLOW;
+ enum_constant public static final javax.net.ssl.SSLEngineResult.Status BUFFER_UNDERFLOW;
+ enum_constant public static final javax.net.ssl.SSLEngineResult.Status CLOSED;
+ enum_constant public static final javax.net.ssl.SSLEngineResult.Status OK;
}
public class SSLException extends java.io.IOException {
@@ -40658,11 +41019,15 @@
public static final class RouteInfo.LayerType extends java.lang.Enum {
method public static org.apache.http.conn.routing.RouteInfo.LayerType valueOf(java.lang.String);
method public static final org.apache.http.conn.routing.RouteInfo.LayerType[] values();
+ enum_constant public static final org.apache.http.conn.routing.RouteInfo.LayerType LAYERED;
+ enum_constant public static final org.apache.http.conn.routing.RouteInfo.LayerType PLAIN;
}
public static final class RouteInfo.TunnelType extends java.lang.Enum {
method public static org.apache.http.conn.routing.RouteInfo.TunnelType valueOf(java.lang.String);
method public static final org.apache.http.conn.routing.RouteInfo.TunnelType[] values();
+ enum_constant public static final org.apache.http.conn.routing.RouteInfo.TunnelType PLAIN;
+ enum_constant public static final org.apache.http.conn.routing.RouteInfo.TunnelType TUNNELLED;
}
public final class RouteTracker implements java.lang.Cloneable org.apache.http.conn.routing.RouteInfo {
diff --git a/api/current.txt b/api/current.txt
index 1e16b6ce..932c551 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -201,6 +201,7 @@
field public static final int actionModeCopyDrawable = 16843538; // 0x1010312
field public static final int actionModeCutDrawable = 16843537; // 0x1010311
field public static final int actionModePasteDrawable = 16843539; // 0x1010313
+ field public static final int actionModeSelectAllDrawable = 16843641; // 0x1010379
field public static final int actionOverflowButtonStyle = 16843510; // 0x10102f6
field public static final int actionViewClass = 16843516; // 0x10102fc
field public static final int activatedBackgroundIndicator = 16843517; // 0x10102fd
@@ -4130,6 +4131,7 @@
method public java.io.InputStream getInputStream() throws java.io.IOException;
method public java.io.OutputStream getOutputStream() throws java.io.IOException;
method public android.bluetooth.BluetoothDevice getRemoteDevice();
+ method public boolean isConnected();
}
}
@@ -6335,6 +6337,9 @@
public static final class CursorJoiner.Result extends java.lang.Enum {
method public static android.database.CursorJoiner.Result valueOf(java.lang.String);
method public static final android.database.CursorJoiner.Result[] values();
+ enum_constant public static final android.database.CursorJoiner.Result BOTH;
+ enum_constant public static final android.database.CursorJoiner.Result LEFT;
+ enum_constant public static final android.database.CursorJoiner.Result RIGHT;
}
public class CursorWindow extends android.database.sqlite.SQLiteClosable implements android.os.Parcelable {
@@ -7253,6 +7258,8 @@
public static final class AvoidXfermode.Mode extends java.lang.Enum {
method public static android.graphics.AvoidXfermode.Mode valueOf(java.lang.String);
method public static final android.graphics.AvoidXfermode.Mode[] values();
+ enum_constant public static final android.graphics.AvoidXfermode.Mode AVOID;
+ enum_constant public static final android.graphics.AvoidXfermode.Mode TARGET;
}
public final class Bitmap implements android.os.Parcelable {
@@ -7305,11 +7312,17 @@
public static final class Bitmap.CompressFormat extends java.lang.Enum {
method public static android.graphics.Bitmap.CompressFormat valueOf(java.lang.String);
method public static final android.graphics.Bitmap.CompressFormat[] values();
+ enum_constant public static final android.graphics.Bitmap.CompressFormat JPEG;
+ enum_constant public static final android.graphics.Bitmap.CompressFormat PNG;
}
public static final class Bitmap.Config extends java.lang.Enum {
method public static android.graphics.Bitmap.Config valueOf(java.lang.String);
method public static final android.graphics.Bitmap.Config[] values();
+ enum_constant public static final android.graphics.Bitmap.Config ALPHA_8;
+ enum_constant public static final deprecated android.graphics.Bitmap.Config ARGB_4444;
+ enum_constant public static final android.graphics.Bitmap.Config ARGB_8888;
+ enum_constant public static final android.graphics.Bitmap.Config RGB_565;
}
public class BitmapFactory {
@@ -7373,6 +7386,10 @@
public static final class BlurMaskFilter.Blur extends java.lang.Enum {
method public static android.graphics.BlurMaskFilter.Blur valueOf(java.lang.String);
method public static final android.graphics.BlurMaskFilter.Blur[] values();
+ enum_constant public static final android.graphics.BlurMaskFilter.Blur INNER;
+ enum_constant public static final android.graphics.BlurMaskFilter.Blur NORMAL;
+ enum_constant public static final android.graphics.BlurMaskFilter.Blur OUTER;
+ enum_constant public static final android.graphics.BlurMaskFilter.Blur SOLID;
}
public class Camera {
@@ -7486,11 +7503,16 @@
public static final class Canvas.EdgeType extends java.lang.Enum {
method public static android.graphics.Canvas.EdgeType valueOf(java.lang.String);
method public static final android.graphics.Canvas.EdgeType[] values();
+ enum_constant public static final android.graphics.Canvas.EdgeType AA;
+ enum_constant public static final android.graphics.Canvas.EdgeType BW;
}
public static final class Canvas.VertexMode extends java.lang.Enum {
method public static android.graphics.Canvas.VertexMode valueOf(java.lang.String);
method public static final android.graphics.Canvas.VertexMode[] values();
+ enum_constant public static final android.graphics.Canvas.VertexMode TRIANGLES;
+ enum_constant public static final android.graphics.Canvas.VertexMode TRIANGLE_FAN;
+ enum_constant public static final android.graphics.Canvas.VertexMode TRIANGLE_STRIP;
}
public class Color {
@@ -7605,6 +7627,9 @@
public static final class Interpolator.Result extends java.lang.Enum {
method public static android.graphics.Interpolator.Result valueOf(java.lang.String);
method public static final android.graphics.Interpolator.Result[] values();
+ enum_constant public static final android.graphics.Interpolator.Result FREEZE_END;
+ enum_constant public static final android.graphics.Interpolator.Result FREEZE_START;
+ enum_constant public static final android.graphics.Interpolator.Result NORMAL;
}
public class LayerRasterizer extends android.graphics.Rasterizer {
@@ -7688,6 +7713,10 @@
public static final class Matrix.ScaleToFit extends java.lang.Enum {
method public static android.graphics.Matrix.ScaleToFit valueOf(java.lang.String);
method public static final android.graphics.Matrix.ScaleToFit[] values();
+ enum_constant public static final android.graphics.Matrix.ScaleToFit CENTER;
+ enum_constant public static final android.graphics.Matrix.ScaleToFit END;
+ enum_constant public static final android.graphics.Matrix.ScaleToFit FILL;
+ enum_constant public static final android.graphics.Matrix.ScaleToFit START;
}
public class Movie {
@@ -7817,11 +7846,17 @@
public static final class Paint.Align extends java.lang.Enum {
method public static android.graphics.Paint.Align valueOf(java.lang.String);
method public static final android.graphics.Paint.Align[] values();
+ enum_constant public static final android.graphics.Paint.Align CENTER;
+ enum_constant public static final android.graphics.Paint.Align LEFT;
+ enum_constant public static final android.graphics.Paint.Align RIGHT;
}
public static final class Paint.Cap extends java.lang.Enum {
method public static android.graphics.Paint.Cap valueOf(java.lang.String);
method public static final android.graphics.Paint.Cap[] values();
+ enum_constant public static final android.graphics.Paint.Cap BUTT;
+ enum_constant public static final android.graphics.Paint.Cap ROUND;
+ enum_constant public static final android.graphics.Paint.Cap SQUARE;
}
public static class Paint.FontMetrics {
@@ -7845,11 +7880,17 @@
public static final class Paint.Join extends java.lang.Enum {
method public static android.graphics.Paint.Join valueOf(java.lang.String);
method public static final android.graphics.Paint.Join[] values();
+ enum_constant public static final android.graphics.Paint.Join BEVEL;
+ enum_constant public static final android.graphics.Paint.Join MITER;
+ enum_constant public static final android.graphics.Paint.Join ROUND;
}
public static final class Paint.Style extends java.lang.Enum {
method public static android.graphics.Paint.Style valueOf(java.lang.String);
method public static final android.graphics.Paint.Style[] values();
+ enum_constant public static final android.graphics.Paint.Style FILL;
+ enum_constant public static final android.graphics.Paint.Style FILL_AND_STROKE;
+ enum_constant public static final android.graphics.Paint.Style STROKE;
}
public class PaintFlagsDrawFilter extends android.graphics.DrawFilter {
@@ -7901,11 +7942,17 @@
public static final class Path.Direction extends java.lang.Enum {
method public static android.graphics.Path.Direction valueOf(java.lang.String);
method public static final android.graphics.Path.Direction[] values();
+ enum_constant public static final android.graphics.Path.Direction CCW;
+ enum_constant public static final android.graphics.Path.Direction CW;
}
public static final class Path.FillType extends java.lang.Enum {
method public static android.graphics.Path.FillType valueOf(java.lang.String);
method public static final android.graphics.Path.FillType[] values();
+ enum_constant public static final android.graphics.Path.FillType EVEN_ODD;
+ enum_constant public static final android.graphics.Path.FillType INVERSE_EVEN_ODD;
+ enum_constant public static final android.graphics.Path.FillType INVERSE_WINDING;
+ enum_constant public static final android.graphics.Path.FillType WINDING;
}
public class PathDashPathEffect extends android.graphics.PathEffect {
@@ -7915,6 +7962,9 @@
public static final class PathDashPathEffect.Style extends java.lang.Enum {
method public static android.graphics.PathDashPathEffect.Style valueOf(java.lang.String);
method public static final android.graphics.PathDashPathEffect.Style[] values();
+ enum_constant public static final android.graphics.PathDashPathEffect.Style MORPH;
+ enum_constant public static final android.graphics.PathDashPathEffect.Style ROTATE;
+ enum_constant public static final android.graphics.PathDashPathEffect.Style TRANSLATE;
}
public class PathEffect {
@@ -8019,6 +8069,24 @@
public static final class PorterDuff.Mode extends java.lang.Enum {
method public static android.graphics.PorterDuff.Mode valueOf(java.lang.String);
method public static final android.graphics.PorterDuff.Mode[] values();
+ enum_constant public static final android.graphics.PorterDuff.Mode ADD;
+ enum_constant public static final android.graphics.PorterDuff.Mode CLEAR;
+ enum_constant public static final android.graphics.PorterDuff.Mode DARKEN;
+ enum_constant public static final android.graphics.PorterDuff.Mode DST;
+ enum_constant public static final android.graphics.PorterDuff.Mode DST_ATOP;
+ enum_constant public static final android.graphics.PorterDuff.Mode DST_IN;
+ enum_constant public static final android.graphics.PorterDuff.Mode DST_OUT;
+ enum_constant public static final android.graphics.PorterDuff.Mode DST_OVER;
+ enum_constant public static final android.graphics.PorterDuff.Mode LIGHTEN;
+ enum_constant public static final android.graphics.PorterDuff.Mode MULTIPLY;
+ enum_constant public static final android.graphics.PorterDuff.Mode OVERLAY;
+ enum_constant public static final android.graphics.PorterDuff.Mode SCREEN;
+ enum_constant public static final android.graphics.PorterDuff.Mode SRC;
+ enum_constant public static final android.graphics.PorterDuff.Mode SRC_ATOP;
+ enum_constant public static final android.graphics.PorterDuff.Mode SRC_IN;
+ enum_constant public static final android.graphics.PorterDuff.Mode SRC_OUT;
+ enum_constant public static final android.graphics.PorterDuff.Mode SRC_OVER;
+ enum_constant public static final android.graphics.PorterDuff.Mode XOR;
}
public class PorterDuffColorFilter extends android.graphics.ColorFilter {
@@ -8160,6 +8228,12 @@
public static final class Region.Op extends java.lang.Enum {
method public static android.graphics.Region.Op valueOf(java.lang.String);
method public static final android.graphics.Region.Op[] values();
+ enum_constant public static final android.graphics.Region.Op DIFFERENCE;
+ enum_constant public static final android.graphics.Region.Op INTERSECT;
+ enum_constant public static final android.graphics.Region.Op REPLACE;
+ enum_constant public static final android.graphics.Region.Op REVERSE_DIFFERENCE;
+ enum_constant public static final android.graphics.Region.Op UNION;
+ enum_constant public static final android.graphics.Region.Op XOR;
}
public class RegionIterator {
@@ -8176,6 +8250,9 @@
public static final class Shader.TileMode extends java.lang.Enum {
method public static android.graphics.Shader.TileMode valueOf(java.lang.String);
method public static final android.graphics.Shader.TileMode[] values();
+ enum_constant public static final android.graphics.Shader.TileMode CLAMP;
+ enum_constant public static final android.graphics.Shader.TileMode MIRROR;
+ enum_constant public static final android.graphics.Shader.TileMode REPEAT;
}
public class SumPathEffect extends android.graphics.PathEffect {
@@ -8456,6 +8533,14 @@
public static final class GradientDrawable.Orientation extends java.lang.Enum {
method public static android.graphics.drawable.GradientDrawable.Orientation valueOf(java.lang.String);
method public static final android.graphics.drawable.GradientDrawable.Orientation[] values();
+ enum_constant public static final android.graphics.drawable.GradientDrawable.Orientation BL_TR;
+ enum_constant public static final android.graphics.drawable.GradientDrawable.Orientation BOTTOM_TOP;
+ enum_constant public static final android.graphics.drawable.GradientDrawable.Orientation BR_TL;
+ enum_constant public static final android.graphics.drawable.GradientDrawable.Orientation LEFT_RIGHT;
+ enum_constant public static final android.graphics.drawable.GradientDrawable.Orientation RIGHT_LEFT;
+ enum_constant public static final android.graphics.drawable.GradientDrawable.Orientation TL_BR;
+ enum_constant public static final android.graphics.drawable.GradientDrawable.Orientation TOP_BOTTOM;
+ enum_constant public static final android.graphics.drawable.GradientDrawable.Orientation TR_BL;
}
public class InsetDrawable extends android.graphics.drawable.Drawable implements android.graphics.drawable.Drawable.Callback {
@@ -10918,6 +11003,9 @@
public static final class LocalSocketAddress.Namespace extends java.lang.Enum {
method public static android.net.LocalSocketAddress.Namespace valueOf(java.lang.String);
method public static final android.net.LocalSocketAddress.Namespace[] values();
+ enum_constant public static final android.net.LocalSocketAddress.Namespace ABSTRACT;
+ enum_constant public static final android.net.LocalSocketAddress.Namespace FILESYSTEM;
+ enum_constant public static final android.net.LocalSocketAddress.Namespace RESERVED;
}
public class MailTo {
@@ -10952,11 +11040,27 @@
public static final class NetworkInfo.DetailedState extends java.lang.Enum {
method public static android.net.NetworkInfo.DetailedState valueOf(java.lang.String);
method public static final android.net.NetworkInfo.DetailedState[] values();
+ enum_constant public static final android.net.NetworkInfo.DetailedState AUTHENTICATING;
+ enum_constant public static final android.net.NetworkInfo.DetailedState CONNECTED;
+ enum_constant public static final android.net.NetworkInfo.DetailedState CONNECTING;
+ enum_constant public static final android.net.NetworkInfo.DetailedState DISCONNECTED;
+ enum_constant public static final android.net.NetworkInfo.DetailedState DISCONNECTING;
+ enum_constant public static final android.net.NetworkInfo.DetailedState FAILED;
+ enum_constant public static final android.net.NetworkInfo.DetailedState IDLE;
+ enum_constant public static final android.net.NetworkInfo.DetailedState OBTAINING_IPADDR;
+ enum_constant public static final android.net.NetworkInfo.DetailedState SCANNING;
+ enum_constant public static final android.net.NetworkInfo.DetailedState SUSPENDED;
}
public static final class NetworkInfo.State extends java.lang.Enum {
method public static android.net.NetworkInfo.State valueOf(java.lang.String);
method public static final android.net.NetworkInfo.State[] values();
+ enum_constant public static final android.net.NetworkInfo.State CONNECTED;
+ enum_constant public static final android.net.NetworkInfo.State CONNECTING;
+ enum_constant public static final android.net.NetworkInfo.State DISCONNECTED;
+ enum_constant public static final android.net.NetworkInfo.State DISCONNECTING;
+ enum_constant public static final android.net.NetworkInfo.State SUSPENDED;
+ enum_constant public static final android.net.NetworkInfo.State UNKNOWN;
}
public class ParseException extends java.lang.RuntimeException {
@@ -11488,6 +11592,17 @@
method public static android.net.wifi.SupplicantState valueOf(java.lang.String);
method public static final android.net.wifi.SupplicantState[] values();
method public void writeToParcel(android.os.Parcel, int);
+ enum_constant public static final android.net.wifi.SupplicantState ASSOCIATED;
+ enum_constant public static final android.net.wifi.SupplicantState ASSOCIATING;
+ enum_constant public static final android.net.wifi.SupplicantState COMPLETED;
+ enum_constant public static final android.net.wifi.SupplicantState DISCONNECTED;
+ enum_constant public static final android.net.wifi.SupplicantState DORMANT;
+ enum_constant public static final android.net.wifi.SupplicantState FOUR_WAY_HANDSHAKE;
+ enum_constant public static final android.net.wifi.SupplicantState GROUP_HANDSHAKE;
+ enum_constant public static final android.net.wifi.SupplicantState INACTIVE;
+ enum_constant public static final android.net.wifi.SupplicantState INVALID;
+ enum_constant public static final android.net.wifi.SupplicantState SCANNING;
+ enum_constant public static final android.net.wifi.SupplicantState UNINITIALIZED;
}
public class WifiConfiguration implements android.os.Parcelable {
@@ -13316,6 +13431,9 @@
public static final class AsyncTask.Status extends java.lang.Enum {
method public static android.os.AsyncTask.Status valueOf(java.lang.String);
method public static final android.os.AsyncTask.Status[] values();
+ enum_constant public static final android.os.AsyncTask.Status FINISHED;
+ enum_constant public static final android.os.AsyncTask.Status PENDING;
+ enum_constant public static final android.os.AsyncTask.Status RUNNING;
}
public class BadParcelableException extends android.util.AndroidRuntimeException {
@@ -16304,6 +16422,9 @@
public static final class Allocation.MipmapControl extends java.lang.Enum {
method public static android.renderscript.Allocation.MipmapControl valueOf(java.lang.String);
method public static final android.renderscript.Allocation.MipmapControl[] values();
+ enum_constant public static final android.renderscript.Allocation.MipmapControl MIPMAP_FULL;
+ enum_constant public static final android.renderscript.Allocation.MipmapControl MIPMAP_NONE;
+ enum_constant public static final android.renderscript.Allocation.MipmapControl MIPMAP_ON_SYNC_TO_TEXTURE;
}
public class AllocationAdapter extends android.renderscript.Allocation {
@@ -16428,11 +16549,45 @@
public static final class Element.DataKind extends java.lang.Enum {
method public static android.renderscript.Element.DataKind valueOf(java.lang.String);
method public static final android.renderscript.Element.DataKind[] values();
+ enum_constant public static final android.renderscript.Element.DataKind PIXEL_A;
+ enum_constant public static final android.renderscript.Element.DataKind PIXEL_DEPTH;
+ enum_constant public static final android.renderscript.Element.DataKind PIXEL_L;
+ enum_constant public static final android.renderscript.Element.DataKind PIXEL_LA;
+ enum_constant public static final android.renderscript.Element.DataKind PIXEL_RGB;
+ enum_constant public static final android.renderscript.Element.DataKind PIXEL_RGBA;
+ enum_constant public static final android.renderscript.Element.DataKind USER;
}
public static final class Element.DataType extends java.lang.Enum {
method public static android.renderscript.Element.DataType valueOf(java.lang.String);
method public static final android.renderscript.Element.DataType[] values();
+ enum_constant public static final android.renderscript.Element.DataType BOOLEAN;
+ enum_constant public static final android.renderscript.Element.DataType FLOAT_32;
+ enum_constant public static final android.renderscript.Element.DataType FLOAT_64;
+ enum_constant public static final android.renderscript.Element.DataType MATRIX_2X2;
+ enum_constant public static final android.renderscript.Element.DataType MATRIX_3X3;
+ enum_constant public static final android.renderscript.Element.DataType MATRIX_4X4;
+ enum_constant public static final android.renderscript.Element.DataType RS_ALLOCATION;
+ enum_constant public static final android.renderscript.Element.DataType RS_ELEMENT;
+ enum_constant public static final android.renderscript.Element.DataType RS_MESH;
+ enum_constant public static final android.renderscript.Element.DataType RS_PROGRAM_FRAGMENT;
+ enum_constant public static final android.renderscript.Element.DataType RS_PROGRAM_RASTER;
+ enum_constant public static final android.renderscript.Element.DataType RS_PROGRAM_STORE;
+ enum_constant public static final android.renderscript.Element.DataType RS_PROGRAM_VERTEX;
+ enum_constant public static final android.renderscript.Element.DataType RS_SAMPLER;
+ enum_constant public static final android.renderscript.Element.DataType RS_SCRIPT;
+ enum_constant public static final android.renderscript.Element.DataType RS_TYPE;
+ enum_constant public static final android.renderscript.Element.DataType SIGNED_16;
+ enum_constant public static final android.renderscript.Element.DataType SIGNED_32;
+ enum_constant public static final android.renderscript.Element.DataType SIGNED_64;
+ enum_constant public static final android.renderscript.Element.DataType SIGNED_8;
+ enum_constant public static final android.renderscript.Element.DataType UNSIGNED_16;
+ enum_constant public static final android.renderscript.Element.DataType UNSIGNED_32;
+ enum_constant public static final android.renderscript.Element.DataType UNSIGNED_4_4_4_4;
+ enum_constant public static final android.renderscript.Element.DataType UNSIGNED_5_5_5_1;
+ enum_constant public static final android.renderscript.Element.DataType UNSIGNED_5_6_5;
+ enum_constant public static final android.renderscript.Element.DataType UNSIGNED_64;
+ enum_constant public static final android.renderscript.Element.DataType UNSIGNED_8;
}
public class FieldPacker {
@@ -16492,6 +16647,8 @@
public static final class FileA3D.EntryType extends java.lang.Enum {
method public static android.renderscript.FileA3D.EntryType valueOf(java.lang.String);
method public static final android.renderscript.FileA3D.EntryType[] values();
+ enum_constant public static final android.renderscript.FileA3D.EntryType MESH;
+ enum_constant public static final android.renderscript.FileA3D.EntryType UNKNOWN;
}
public static class FileA3D.IndexEntry {
@@ -16536,6 +16693,10 @@
public static final class Font.Style extends java.lang.Enum {
method public static android.renderscript.Font.Style valueOf(java.lang.String);
method public static final android.renderscript.Font.Style[] values();
+ enum_constant public static final android.renderscript.Font.Style BOLD;
+ enum_constant public static final android.renderscript.Font.Style BOLD_ITALIC;
+ enum_constant public static final android.renderscript.Font.Style ITALIC;
+ enum_constant public static final android.renderscript.Font.Style NORMAL;
}
public class Int2 {
@@ -16685,6 +16846,12 @@
public static final class Mesh.Primitive extends java.lang.Enum {
method public static android.renderscript.Mesh.Primitive valueOf(java.lang.String);
method public static final android.renderscript.Mesh.Primitive[] values();
+ enum_constant public static final android.renderscript.Mesh.Primitive LINE;
+ enum_constant public static final android.renderscript.Mesh.Primitive LINE_STRIP;
+ enum_constant public static final android.renderscript.Mesh.Primitive POINT;
+ enum_constant public static final android.renderscript.Mesh.Primitive TRIANGLE;
+ enum_constant public static final android.renderscript.Mesh.Primitive TRIANGLE_FAN;
+ enum_constant public static final android.renderscript.Mesh.Primitive TRIANGLE_STRIP;
}
public static class Mesh.TriangleMeshBuilder {
@@ -16721,6 +16888,8 @@
public static final class Program.TextureType extends java.lang.Enum {
method public static android.renderscript.Program.TextureType valueOf(java.lang.String);
method public static final android.renderscript.Program.TextureType[] values();
+ enum_constant public static final android.renderscript.Program.TextureType TEXTURE_2D;
+ enum_constant public static final android.renderscript.Program.TextureType TEXTURE_CUBE;
}
public class ProgramFragment extends android.renderscript.Program {
@@ -16746,11 +16915,18 @@
public static final class ProgramFragmentFixedFunction.Builder.EnvMode extends java.lang.Enum {
method public static android.renderscript.ProgramFragmentFixedFunction.Builder.EnvMode valueOf(java.lang.String);
method public static final android.renderscript.ProgramFragmentFixedFunction.Builder.EnvMode[] values();
+ enum_constant public static final android.renderscript.ProgramFragmentFixedFunction.Builder.EnvMode DECAL;
+ enum_constant public static final android.renderscript.ProgramFragmentFixedFunction.Builder.EnvMode MODULATE;
+ enum_constant public static final android.renderscript.ProgramFragmentFixedFunction.Builder.EnvMode REPLACE;
}
public static final class ProgramFragmentFixedFunction.Builder.Format extends java.lang.Enum {
method public static android.renderscript.ProgramFragmentFixedFunction.Builder.Format valueOf(java.lang.String);
method public static final android.renderscript.ProgramFragmentFixedFunction.Builder.Format[] values();
+ enum_constant public static final android.renderscript.ProgramFragmentFixedFunction.Builder.Format ALPHA;
+ enum_constant public static final android.renderscript.ProgramFragmentFixedFunction.Builder.Format LUMINANCE_ALPHA;
+ enum_constant public static final android.renderscript.ProgramFragmentFixedFunction.Builder.Format RGB;
+ enum_constant public static final android.renderscript.ProgramFragmentFixedFunction.Builder.Format RGBA;
}
public class ProgramRaster extends android.renderscript.BaseObj {
@@ -16769,6 +16945,9 @@
public static final class ProgramRaster.CullMode extends java.lang.Enum {
method public static android.renderscript.ProgramRaster.CullMode valueOf(java.lang.String);
method public static final android.renderscript.ProgramRaster.CullMode[] values();
+ enum_constant public static final android.renderscript.ProgramRaster.CullMode BACK;
+ enum_constant public static final android.renderscript.ProgramRaster.CullMode FRONT;
+ enum_constant public static final android.renderscript.ProgramRaster.CullMode NONE;
}
public class ProgramStore extends android.renderscript.BaseObj {
@@ -16781,11 +16960,28 @@
public static final class ProgramStore.BlendDstFunc extends java.lang.Enum {
method public static android.renderscript.ProgramStore.BlendDstFunc valueOf(java.lang.String);
method public static final android.renderscript.ProgramStore.BlendDstFunc[] values();
+ enum_constant public static final android.renderscript.ProgramStore.BlendDstFunc DST_ALPHA;
+ enum_constant public static final android.renderscript.ProgramStore.BlendDstFunc ONE;
+ enum_constant public static final android.renderscript.ProgramStore.BlendDstFunc ONE_MINUS_DST_ALPHA;
+ enum_constant public static final android.renderscript.ProgramStore.BlendDstFunc ONE_MINUS_SRC_ALPHA;
+ enum_constant public static final android.renderscript.ProgramStore.BlendDstFunc ONE_MINUS_SRC_COLOR;
+ enum_constant public static final android.renderscript.ProgramStore.BlendDstFunc SRC_ALPHA;
+ enum_constant public static final android.renderscript.ProgramStore.BlendDstFunc SRC_COLOR;
+ enum_constant public static final android.renderscript.ProgramStore.BlendDstFunc ZERO;
}
public static final class ProgramStore.BlendSrcFunc extends java.lang.Enum {
method public static android.renderscript.ProgramStore.BlendSrcFunc valueOf(java.lang.String);
method public static final android.renderscript.ProgramStore.BlendSrcFunc[] values();
+ enum_constant public static final android.renderscript.ProgramStore.BlendSrcFunc DST_ALPHA;
+ enum_constant public static final android.renderscript.ProgramStore.BlendSrcFunc DST_COLOR;
+ enum_constant public static final android.renderscript.ProgramStore.BlendSrcFunc ONE;
+ enum_constant public static final android.renderscript.ProgramStore.BlendSrcFunc ONE_MINUS_DST_ALPHA;
+ enum_constant public static final android.renderscript.ProgramStore.BlendSrcFunc ONE_MINUS_DST_COLOR;
+ enum_constant public static final android.renderscript.ProgramStore.BlendSrcFunc ONE_MINUS_SRC_ALPHA;
+ enum_constant public static final android.renderscript.ProgramStore.BlendSrcFunc SRC_ALPHA;
+ enum_constant public static final android.renderscript.ProgramStore.BlendSrcFunc SRC_ALPHA_SATURATE;
+ enum_constant public static final android.renderscript.ProgramStore.BlendSrcFunc ZERO;
}
public static class ProgramStore.Builder {
@@ -16801,6 +16997,13 @@
public static final class ProgramStore.DepthFunc extends java.lang.Enum {
method public static android.renderscript.ProgramStore.DepthFunc valueOf(java.lang.String);
method public static final android.renderscript.ProgramStore.DepthFunc[] values();
+ enum_constant public static final android.renderscript.ProgramStore.DepthFunc ALWAYS;
+ enum_constant public static final android.renderscript.ProgramStore.DepthFunc EQUAL;
+ enum_constant public static final android.renderscript.ProgramStore.DepthFunc GREATER;
+ enum_constant public static final android.renderscript.ProgramStore.DepthFunc GREATER_OR_EQUAL;
+ enum_constant public static final android.renderscript.ProgramStore.DepthFunc LESS;
+ enum_constant public static final android.renderscript.ProgramStore.DepthFunc LESS_OR_EQUAL;
+ enum_constant public static final android.renderscript.ProgramStore.DepthFunc NOT_EQUAL;
}
public class ProgramVertex extends android.renderscript.Program {
@@ -16876,6 +17079,8 @@
public static final class RenderScript.Priority extends java.lang.Enum {
method public static android.renderscript.RenderScript.Priority valueOf(java.lang.String);
method public static final android.renderscript.RenderScript.Priority[] values();
+ enum_constant public static final android.renderscript.RenderScript.Priority LOW;
+ enum_constant public static final android.renderscript.RenderScript.Priority NORMAL;
}
public static class RenderScript.RSErrorHandler implements java.lang.Runnable {
@@ -16938,6 +17143,12 @@
public static final class Sampler.Value extends java.lang.Enum {
method public static android.renderscript.Sampler.Value valueOf(java.lang.String);
method public static final android.renderscript.Sampler.Value[] values();
+ enum_constant public static final android.renderscript.Sampler.Value CLAMP;
+ enum_constant public static final android.renderscript.Sampler.Value LINEAR;
+ enum_constant public static final android.renderscript.Sampler.Value LINEAR_MIP_LINEAR;
+ enum_constant public static final android.renderscript.Sampler.Value LINEAR_MIP_NEAREST;
+ enum_constant public static final android.renderscript.Sampler.Value NEAREST;
+ enum_constant public static final android.renderscript.Sampler.Value WRAP;
}
public class Script extends android.renderscript.BaseObj {
@@ -17020,6 +17231,12 @@
public static final class Type.CubemapFace extends java.lang.Enum {
method public static android.renderscript.Type.CubemapFace valueOf(java.lang.String);
method public static final android.renderscript.Type.CubemapFace[] values();
+ enum_constant public static final android.renderscript.Type.CubemapFace NEGATIVE_X;
+ enum_constant public static final android.renderscript.Type.CubemapFace NEGATIVE_Y;
+ enum_constant public static final android.renderscript.Type.CubemapFace NEGATIVE_Z;
+ enum_constant public static final android.renderscript.Type.CubemapFace POSITVE_X;
+ enum_constant public static final android.renderscript.Type.CubemapFace POSITVE_Y;
+ enum_constant public static final android.renderscript.Type.CubemapFace POSITVE_Z;
}
}
@@ -17508,6 +17725,11 @@
public static final class SmsMessage.MessageClass extends java.lang.Enum {
method public static android.telephony.SmsMessage.MessageClass valueOf(java.lang.String);
method public static final android.telephony.SmsMessage.MessageClass[] values();
+ enum_constant public static final android.telephony.SmsMessage.MessageClass CLASS_0;
+ enum_constant public static final android.telephony.SmsMessage.MessageClass CLASS_1;
+ enum_constant public static final android.telephony.SmsMessage.MessageClass CLASS_2;
+ enum_constant public static final android.telephony.SmsMessage.MessageClass CLASS_3;
+ enum_constant public static final android.telephony.SmsMessage.MessageClass UNKNOWN;
}
public static class SmsMessage.SubmitPdu {
@@ -17679,6 +17901,11 @@
public static final deprecated class SmsMessage.MessageClass extends java.lang.Enum {
method public static android.telephony.gsm.SmsMessage.MessageClass valueOf(java.lang.String);
method public static final android.telephony.gsm.SmsMessage.MessageClass[] values();
+ enum_constant public static final android.telephony.gsm.SmsMessage.MessageClass CLASS_0;
+ enum_constant public static final android.telephony.gsm.SmsMessage.MessageClass CLASS_1;
+ enum_constant public static final android.telephony.gsm.SmsMessage.MessageClass CLASS_2;
+ enum_constant public static final android.telephony.gsm.SmsMessage.MessageClass CLASS_3;
+ enum_constant public static final android.telephony.gsm.SmsMessage.MessageClass UNKNOWN;
}
public static deprecated class SmsMessage.SubmitPdu {
@@ -18513,6 +18740,9 @@
public static final class Layout.Alignment extends java.lang.Enum {
method public static android.text.Layout.Alignment valueOf(java.lang.String);
method public static final android.text.Layout.Alignment[] values();
+ enum_constant public static final android.text.Layout.Alignment ALIGN_CENTER;
+ enum_constant public static final android.text.Layout.Alignment ALIGN_NORMAL;
+ enum_constant public static final android.text.Layout.Alignment ALIGN_OPPOSITE;
}
public static class Layout.Directions {
@@ -18770,6 +19000,10 @@
public static final class TextUtils.TruncateAt extends java.lang.Enum {
method public static android.text.TextUtils.TruncateAt valueOf(java.lang.String);
method public static final android.text.TextUtils.TruncateAt[] values();
+ enum_constant public static final android.text.TextUtils.TruncateAt END;
+ enum_constant public static final android.text.TextUtils.TruncateAt MARQUEE;
+ enum_constant public static final android.text.TextUtils.TruncateAt MIDDLE;
+ enum_constant public static final android.text.TextUtils.TruncateAt START;
}
public abstract interface TextWatcher implements android.text.NoCopySpan {
@@ -19155,6 +19389,10 @@
public static final class TextKeyListener.Capitalize extends java.lang.Enum {
method public static android.text.method.TextKeyListener.Capitalize valueOf(java.lang.String);
method public static final android.text.method.TextKeyListener.Capitalize[] values();
+ enum_constant public static final android.text.method.TextKeyListener.Capitalize CHARACTERS;
+ enum_constant public static final android.text.method.TextKeyListener.Capitalize NONE;
+ enum_constant public static final android.text.method.TextKeyListener.Capitalize SENTENCES;
+ enum_constant public static final android.text.method.TextKeyListener.Capitalize WORDS;
}
public class TimeKeyListener extends android.text.method.NumberKeyListener {
@@ -19724,6 +19962,16 @@
public final class JsonToken extends java.lang.Enum {
method public static android.util.JsonToken valueOf(java.lang.String);
method public static final android.util.JsonToken[] values();
+ enum_constant public static final android.util.JsonToken BEGIN_ARRAY;
+ enum_constant public static final android.util.JsonToken BEGIN_OBJECT;
+ enum_constant public static final android.util.JsonToken BOOLEAN;
+ enum_constant public static final android.util.JsonToken END_ARRAY;
+ enum_constant public static final android.util.JsonToken END_DOCUMENT;
+ enum_constant public static final android.util.JsonToken END_OBJECT;
+ enum_constant public static final android.util.JsonToken NAME;
+ enum_constant public static final android.util.JsonToken NULL;
+ enum_constant public static final android.util.JsonToken NUMBER;
+ enum_constant public static final android.util.JsonToken STRING;
}
public final class JsonWriter implements java.io.Closeable {
@@ -20013,6 +20261,10 @@
public static final class Xml.Encoding extends java.lang.Enum {
method public static android.util.Xml.Encoding valueOf(java.lang.String);
method public static final android.util.Xml.Encoding[] values();
+ enum_constant public static final android.util.Xml.Encoding ISO_8859_1;
+ enum_constant public static final android.util.Xml.Encoding US_ASCII;
+ enum_constant public static final android.util.Xml.Encoding UTF_16;
+ enum_constant public static final android.util.Xml.Encoding UTF_8;
}
}
@@ -21731,6 +21983,14 @@
public static final class ViewDebug.HierarchyTraceType extends java.lang.Enum {
method public static android.view.ViewDebug.HierarchyTraceType valueOf(java.lang.String);
method public static final android.view.ViewDebug.HierarchyTraceType[] values();
+ enum_constant public static final android.view.ViewDebug.HierarchyTraceType BUILD_CACHE;
+ enum_constant public static final android.view.ViewDebug.HierarchyTraceType DRAW;
+ enum_constant public static final android.view.ViewDebug.HierarchyTraceType INVALIDATE;
+ enum_constant public static final android.view.ViewDebug.HierarchyTraceType INVALIDATE_CHILD;
+ enum_constant public static final android.view.ViewDebug.HierarchyTraceType INVALIDATE_CHILD_IN_PARENT;
+ enum_constant public static final android.view.ViewDebug.HierarchyTraceType ON_LAYOUT;
+ enum_constant public static final android.view.ViewDebug.HierarchyTraceType ON_MEASURE;
+ enum_constant public static final android.view.ViewDebug.HierarchyTraceType REQUEST_LAYOUT;
}
public static abstract class ViewDebug.IntToString implements java.lang.annotation.Annotation {
@@ -21739,6 +21999,12 @@
public static final class ViewDebug.RecyclerTraceType extends java.lang.Enum {
method public static android.view.ViewDebug.RecyclerTraceType valueOf(java.lang.String);
method public static final android.view.ViewDebug.RecyclerTraceType[] values();
+ enum_constant public static final android.view.ViewDebug.RecyclerTraceType BIND_VIEW;
+ enum_constant public static final android.view.ViewDebug.RecyclerTraceType MOVE_FROM_ACTIVE_TO_SCRAP_HEAP;
+ enum_constant public static final android.view.ViewDebug.RecyclerTraceType MOVE_TO_SCRAP_HEAP;
+ enum_constant public static final android.view.ViewDebug.RecyclerTraceType NEW_VIEW;
+ enum_constant public static final android.view.ViewDebug.RecyclerTraceType RECYCLE_FROM_ACTIVE_HEAP;
+ enum_constant public static final android.view.ViewDebug.RecyclerTraceType RECYCLE_FROM_SCRAP_HEAP;
}
public abstract class ViewGroup extends android.view.View implements android.view.ViewManager android.view.ViewParent {
@@ -22966,6 +23232,11 @@
public static final class ConsoleMessage.MessageLevel extends java.lang.Enum {
method public static android.webkit.ConsoleMessage.MessageLevel valueOf(java.lang.String);
method public static final android.webkit.ConsoleMessage.MessageLevel[] values();
+ enum_constant public static final android.webkit.ConsoleMessage.MessageLevel DEBUG;
+ enum_constant public static final android.webkit.ConsoleMessage.MessageLevel ERROR;
+ enum_constant public static final android.webkit.ConsoleMessage.MessageLevel LOG;
+ enum_constant public static final android.webkit.ConsoleMessage.MessageLevel TIP;
+ enum_constant public static final android.webkit.ConsoleMessage.MessageLevel WARNING;
}
public final class CookieManager {
@@ -23248,26 +23519,43 @@
public static final deprecated class WebSettings.LayoutAlgorithm extends java.lang.Enum {
method public static android.webkit.WebSettings.LayoutAlgorithm valueOf(java.lang.String);
method public static final android.webkit.WebSettings.LayoutAlgorithm[] values();
+ enum_constant public static final android.webkit.WebSettings.LayoutAlgorithm NARROW_COLUMNS;
+ enum_constant public static final android.webkit.WebSettings.LayoutAlgorithm NORMAL;
+ enum_constant public static final android.webkit.WebSettings.LayoutAlgorithm SINGLE_COLUMN;
}
public static final class WebSettings.PluginState extends java.lang.Enum {
method public static android.webkit.WebSettings.PluginState valueOf(java.lang.String);
method public static final android.webkit.WebSettings.PluginState[] values();
+ enum_constant public static final android.webkit.WebSettings.PluginState OFF;
+ enum_constant public static final android.webkit.WebSettings.PluginState ON;
+ enum_constant public static final android.webkit.WebSettings.PluginState ON_DEMAND;
}
public static final class WebSettings.RenderPriority extends java.lang.Enum {
method public static android.webkit.WebSettings.RenderPriority valueOf(java.lang.String);
method public static final android.webkit.WebSettings.RenderPriority[] values();
+ enum_constant public static final android.webkit.WebSettings.RenderPriority HIGH;
+ enum_constant public static final android.webkit.WebSettings.RenderPriority LOW;
+ enum_constant public static final android.webkit.WebSettings.RenderPriority NORMAL;
}
public static final class WebSettings.TextSize extends java.lang.Enum {
method public static android.webkit.WebSettings.TextSize valueOf(java.lang.String);
method public static final android.webkit.WebSettings.TextSize[] values();
+ enum_constant public static final android.webkit.WebSettings.TextSize LARGER;
+ enum_constant public static final android.webkit.WebSettings.TextSize LARGEST;
+ enum_constant public static final android.webkit.WebSettings.TextSize NORMAL;
+ enum_constant public static final android.webkit.WebSettings.TextSize SMALLER;
+ enum_constant public static final android.webkit.WebSettings.TextSize SMALLEST;
}
public static final class WebSettings.ZoomDensity extends java.lang.Enum {
method public static android.webkit.WebSettings.ZoomDensity valueOf(java.lang.String);
method public static final android.webkit.WebSettings.ZoomDensity[] values();
+ enum_constant public static final android.webkit.WebSettings.ZoomDensity CLOSE;
+ enum_constant public static final android.webkit.WebSettings.ZoomDensity FAR;
+ enum_constant public static final android.webkit.WebSettings.ZoomDensity MEDIUM;
}
public final class WebStorage {
@@ -24397,6 +24685,14 @@
public static final class ImageView.ScaleType extends java.lang.Enum {
method public static android.widget.ImageView.ScaleType valueOf(java.lang.String);
method public static final android.widget.ImageView.ScaleType[] values();
+ enum_constant public static final android.widget.ImageView.ScaleType CENTER;
+ enum_constant public static final android.widget.ImageView.ScaleType CENTER_CROP;
+ enum_constant public static final android.widget.ImageView.ScaleType CENTER_INSIDE;
+ enum_constant public static final android.widget.ImageView.ScaleType FIT_CENTER;
+ enum_constant public static final android.widget.ImageView.ScaleType FIT_END;
+ enum_constant public static final android.widget.ImageView.ScaleType FIT_START;
+ enum_constant public static final android.widget.ImageView.ScaleType FIT_XY;
+ enum_constant public static final android.widget.ImageView.ScaleType MATRIX;
}
public class LinearLayout extends android.view.ViewGroup {
@@ -25466,6 +25762,9 @@
public static final class TextView.BufferType extends java.lang.Enum {
method public static android.widget.TextView.BufferType valueOf(java.lang.String);
method public static final android.widget.TextView.BufferType[] values();
+ enum_constant public static final android.widget.TextView.BufferType EDITABLE;
+ enum_constant public static final android.widget.TextView.BufferType NORMAL;
+ enum_constant public static final android.widget.TextView.BufferType SPANNABLE;
}
public static abstract interface TextView.OnEditorActionListener {
@@ -28457,6 +28756,12 @@
public static final class Thread.State extends java.lang.Enum {
method public static java.lang.Thread.State valueOf(java.lang.String);
method public static final java.lang.Thread.State[] values();
+ enum_constant public static final java.lang.Thread.State BLOCKED;
+ enum_constant public static final java.lang.Thread.State NEW;
+ enum_constant public static final java.lang.Thread.State RUNNABLE;
+ enum_constant public static final java.lang.Thread.State TERMINATED;
+ enum_constant public static final java.lang.Thread.State TIMED_WAITING;
+ enum_constant public static final java.lang.Thread.State WAITING;
}
public static abstract interface Thread.UncaughtExceptionHandler {
@@ -28590,6 +28895,14 @@
public final class ElementType extends java.lang.Enum {
method public static java.lang.annotation.ElementType valueOf(java.lang.String);
method public static final java.lang.annotation.ElementType[] values();
+ enum_constant public static final java.lang.annotation.ElementType ANNOTATION_TYPE;
+ enum_constant public static final java.lang.annotation.ElementType CONSTRUCTOR;
+ enum_constant public static final java.lang.annotation.ElementType FIELD;
+ enum_constant public static final java.lang.annotation.ElementType LOCAL_VARIABLE;
+ enum_constant public static final java.lang.annotation.ElementType METHOD;
+ enum_constant public static final java.lang.annotation.ElementType PACKAGE;
+ enum_constant public static final java.lang.annotation.ElementType PARAMETER;
+ enum_constant public static final java.lang.annotation.ElementType TYPE;
}
public class IncompleteAnnotationException extends java.lang.RuntimeException {
@@ -28607,6 +28920,9 @@
public final class RetentionPolicy extends java.lang.Enum {
method public static java.lang.annotation.RetentionPolicy valueOf(java.lang.String);
method public static final java.lang.annotation.RetentionPolicy[] values();
+ enum_constant public static final java.lang.annotation.RetentionPolicy CLASS;
+ enum_constant public static final java.lang.annotation.RetentionPolicy RUNTIME;
+ enum_constant public static final java.lang.annotation.RetentionPolicy SOURCE;
}
public abstract class Target implements java.lang.annotation.Annotation {
@@ -29023,6 +29339,14 @@
method public static java.math.RoundingMode valueOf(java.lang.String);
method public static java.math.RoundingMode valueOf(int);
method public static final java.math.RoundingMode[] values();
+ enum_constant public static final java.math.RoundingMode CEILING;
+ enum_constant public static final java.math.RoundingMode DOWN;
+ enum_constant public static final java.math.RoundingMode FLOOR;
+ enum_constant public static final java.math.RoundingMode HALF_DOWN;
+ enum_constant public static final java.math.RoundingMode HALF_EVEN;
+ enum_constant public static final java.math.RoundingMode HALF_UP;
+ enum_constant public static final java.math.RoundingMode UNNECESSARY;
+ enum_constant public static final java.math.RoundingMode UP;
}
}
@@ -29049,6 +29373,8 @@
public static final class Authenticator.RequestorType extends java.lang.Enum {
method public static java.net.Authenticator.RequestorType valueOf(java.lang.String);
method public static final java.net.Authenticator.RequestorType[] values();
+ enum_constant public static final java.net.Authenticator.RequestorType PROXY;
+ enum_constant public static final java.net.Authenticator.RequestorType SERVER;
}
public class BindException extends java.net.SocketException {
@@ -29463,6 +29789,9 @@
public static final class Proxy.Type extends java.lang.Enum {
method public static java.net.Proxy.Type valueOf(java.lang.String);
method public static final java.net.Proxy.Type[] values();
+ enum_constant public static final java.net.Proxy.Type DIRECT;
+ enum_constant public static final java.net.Proxy.Type HTTP;
+ enum_constant public static final java.net.Proxy.Type SOCKS;
}
public abstract class ProxySelector {
@@ -30859,6 +31188,9 @@
public static final class KeyRep.Type extends java.lang.Enum {
method public static java.security.KeyRep.Type valueOf(java.lang.String);
method public static final java.security.KeyRep.Type[] values();
+ enum_constant public static final java.security.KeyRep.Type PRIVATE;
+ enum_constant public static final java.security.KeyRep.Type PUBLIC;
+ enum_constant public static final java.security.KeyRep.Type SECRET;
}
public class KeyStore {
@@ -32232,6 +32564,10 @@
public final class ClientInfoStatus extends java.lang.Enum {
method public static java.sql.ClientInfoStatus valueOf(java.lang.String);
method public static final java.sql.ClientInfoStatus[] values();
+ enum_constant public static final java.sql.ClientInfoStatus REASON_UNKNOWN;
+ enum_constant public static final java.sql.ClientInfoStatus REASON_UNKNOWN_PROPERTY;
+ enum_constant public static final java.sql.ClientInfoStatus REASON_VALUE_INVALID;
+ enum_constant public static final java.sql.ClientInfoStatus REASON_VALUE_TRUNCATED;
}
public abstract interface Clob {
@@ -32916,6 +33252,11 @@
public final class RowIdLifetime extends java.lang.Enum {
method public static java.sql.RowIdLifetime valueOf(java.lang.String);
method public static final java.sql.RowIdLifetime[] values();
+ enum_constant public static final java.sql.RowIdLifetime ROWID_UNSUPPORTED;
+ enum_constant public static final java.sql.RowIdLifetime ROWID_VALID_FOREVER;
+ enum_constant public static final java.sql.RowIdLifetime ROWID_VALID_OTHER;
+ enum_constant public static final java.sql.RowIdLifetime ROWID_VALID_SESSION;
+ enum_constant public static final java.sql.RowIdLifetime ROWID_VALID_TRANSACTION;
}
public class SQLClientInfoException extends java.sql.SQLException {
@@ -33705,6 +34046,10 @@
public static final class Normalizer.Form extends java.lang.Enum {
method public static java.text.Normalizer.Form valueOf(java.lang.String);
method public static final java.text.Normalizer.Form[] values();
+ enum_constant public static final java.text.Normalizer.Form NFC;
+ enum_constant public static final java.text.Normalizer.Form NFD;
+ enum_constant public static final java.text.Normalizer.Form NFKC;
+ enum_constant public static final java.text.Normalizer.Form NFKD;
}
public abstract class NumberFormat extends java.text.Format {
@@ -34446,6 +34791,8 @@
public static final class Formatter.BigDecimalLayoutForm extends java.lang.Enum {
method public static java.util.Formatter.BigDecimalLayoutForm valueOf(java.lang.String);
method public static final java.util.Formatter.BigDecimalLayoutForm[] values();
+ enum_constant public static final java.util.Formatter.BigDecimalLayoutForm DECIMAL_FLOAT;
+ enum_constant public static final java.util.Formatter.BigDecimalLayoutForm SCIENTIFIC;
}
public class FormatterClosedException extends java.lang.IllegalStateException implements java.io.Serializable {
@@ -35892,6 +36239,13 @@
method public long toSeconds(long);
method public static java.util.concurrent.TimeUnit valueOf(java.lang.String);
method public static final java.util.concurrent.TimeUnit[] values();
+ enum_constant public static final java.util.concurrent.TimeUnit DAYS;
+ enum_constant public static final java.util.concurrent.TimeUnit HOURS;
+ enum_constant public static final java.util.concurrent.TimeUnit MICROSECONDS;
+ enum_constant public static final java.util.concurrent.TimeUnit MILLISECONDS;
+ enum_constant public static final java.util.concurrent.TimeUnit MINUTES;
+ enum_constant public static final java.util.concurrent.TimeUnit NANOSECONDS;
+ enum_constant public static final java.util.concurrent.TimeUnit SECONDS;
}
public class TimeoutException extends java.lang.Exception {
@@ -38548,11 +38902,20 @@
public static final class SSLEngineResult.HandshakeStatus extends java.lang.Enum {
method public static javax.net.ssl.SSLEngineResult.HandshakeStatus valueOf(java.lang.String);
method public static final javax.net.ssl.SSLEngineResult.HandshakeStatus[] values();
+ enum_constant public static final javax.net.ssl.SSLEngineResult.HandshakeStatus FINISHED;
+ enum_constant public static final javax.net.ssl.SSLEngineResult.HandshakeStatus NEED_TASK;
+ enum_constant public static final javax.net.ssl.SSLEngineResult.HandshakeStatus NEED_UNWRAP;
+ enum_constant public static final javax.net.ssl.SSLEngineResult.HandshakeStatus NEED_WRAP;
+ enum_constant public static final javax.net.ssl.SSLEngineResult.HandshakeStatus NOT_HANDSHAKING;
}
public static final class SSLEngineResult.Status extends java.lang.Enum {
method public static javax.net.ssl.SSLEngineResult.Status valueOf(java.lang.String);
method public static final javax.net.ssl.SSLEngineResult.Status[] values();
+ enum_constant public static final javax.net.ssl.SSLEngineResult.Status BUFFER_OVERFLOW;
+ enum_constant public static final javax.net.ssl.SSLEngineResult.Status BUFFER_UNDERFLOW;
+ enum_constant public static final javax.net.ssl.SSLEngineResult.Status CLOSED;
+ enum_constant public static final javax.net.ssl.SSLEngineResult.Status OK;
}
public class SSLException extends java.io.IOException {
@@ -41066,11 +41429,15 @@
public static final class RouteInfo.LayerType extends java.lang.Enum {
method public static org.apache.http.conn.routing.RouteInfo.LayerType valueOf(java.lang.String);
method public static final org.apache.http.conn.routing.RouteInfo.LayerType[] values();
+ enum_constant public static final org.apache.http.conn.routing.RouteInfo.LayerType LAYERED;
+ enum_constant public static final org.apache.http.conn.routing.RouteInfo.LayerType PLAIN;
}
public static final class RouteInfo.TunnelType extends java.lang.Enum {
method public static org.apache.http.conn.routing.RouteInfo.TunnelType valueOf(java.lang.String);
method public static final org.apache.http.conn.routing.RouteInfo.TunnelType[] values();
+ enum_constant public static final org.apache.http.conn.routing.RouteInfo.TunnelType PLAIN;
+ enum_constant public static final org.apache.http.conn.routing.RouteInfo.TunnelType TUNNELLED;
}
public final class RouteTracker implements java.lang.Cloneable org.apache.http.conn.routing.RouteInfo {
diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java
index ef2e54a..a6658cc 100644
--- a/core/java/android/app/ActivityManager.java
+++ b/core/java/android/app/ActivityManager.java
@@ -138,6 +138,25 @@
}
}
+ /** @hide */
+ public boolean getPackageAskScreenCompat(String packageName) {
+ try {
+ return ActivityManagerNative.getDefault().getPackageAskScreenCompat(packageName);
+ } catch (RemoteException e) {
+ // System dead, we will be dead too soon!
+ return false;
+ }
+ }
+
+ /** @hide */
+ public void setPackageAskScreenCompat(String packageName, boolean ask) {
+ try {
+ ActivityManagerNative.getDefault().setPackageAskScreenCompat(packageName, ask);
+ } catch (RemoteException e) {
+ // System dead, we will be dead too soon!
+ }
+ }
+
/**
* Return the approximate per-application memory class of the current
* device. This gives you an idea of how hard a memory limit you should
diff --git a/core/java/android/app/ActivityManagerNative.java b/core/java/android/app/ActivityManagerNative.java
index 2a0d798..85f40c9 100644
--- a/core/java/android/app/ActivityManagerNative.java
+++ b/core/java/android/app/ActivityManagerNative.java
@@ -1483,6 +1483,26 @@
return true;
}
+ case GET_PACKAGE_ASK_SCREEN_COMPAT_TRANSACTION:
+ {
+ data.enforceInterface(IActivityManager.descriptor);
+ String pkg = data.readString();
+ boolean ask = getPackageAskScreenCompat(pkg);
+ reply.writeNoException();
+ reply.writeInt(ask ? 1 : 0);
+ return true;
+ }
+
+ case SET_PACKAGE_ASK_SCREEN_COMPAT_TRANSACTION:
+ {
+ data.enforceInterface(IActivityManager.descriptor);
+ String pkg = data.readString();
+ boolean ask = data.readInt() != 0;
+ setPackageAskScreenCompat(pkg, ask);
+ reply.writeNoException();
+ return true;
+ }
+
}
return super.onTransact(code, data, reply, flags);
@@ -3254,7 +3274,8 @@
Parcel data = Parcel.obtain();
Parcel reply = Parcel.obtain();
data.writeInterfaceToken(IActivityManager.descriptor);
- mRemote.transact(SET_PACKAGE_SCREEN_COMPAT_MODE_TRANSACTION, data, reply, 0);
+ data.writeString(packageName);
+ mRemote.transact(GET_PACKAGE_SCREEN_COMPAT_MODE_TRANSACTION, data, reply, 0);
reply.readException();
int mode = reply.readInt();
reply.recycle();
@@ -3275,6 +3296,32 @@
data.recycle();
}
+ public boolean getPackageAskScreenCompat(String packageName) throws RemoteException {
+ Parcel data = Parcel.obtain();
+ Parcel reply = Parcel.obtain();
+ data.writeInterfaceToken(IActivityManager.descriptor);
+ data.writeString(packageName);
+ mRemote.transact(GET_PACKAGE_ASK_SCREEN_COMPAT_TRANSACTION, data, reply, 0);
+ reply.readException();
+ boolean ask = reply.readInt() != 0;
+ reply.recycle();
+ data.recycle();
+ return ask;
+ }
+
+ public void setPackageAskScreenCompat(String packageName, boolean ask)
+ throws RemoteException {
+ Parcel data = Parcel.obtain();
+ Parcel reply = Parcel.obtain();
+ data.writeInterfaceToken(IActivityManager.descriptor);
+ data.writeString(packageName);
+ data.writeInt(ask ? 1 : 0);
+ mRemote.transact(SET_PACKAGE_ASK_SCREEN_COMPAT_TRANSACTION, data, reply, 0);
+ reply.readException();
+ reply.recycle();
+ data.recycle();
+ }
+
public boolean switchUser(int userid) throws RemoteException {
Parcel data = Parcel.obtain();
Parcel reply = Parcel.obtain();
diff --git a/core/java/android/app/IActivityManager.java b/core/java/android/app/IActivityManager.java
index 1f53c0e..e2588cf 100644
--- a/core/java/android/app/IActivityManager.java
+++ b/core/java/android/app/IActivityManager.java
@@ -347,6 +347,9 @@
public int getPackageScreenCompatMode(String packageName) throws RemoteException;
public void setPackageScreenCompatMode(String packageName, int mode)
throws RemoteException;
+ public boolean getPackageAskScreenCompat(String packageName) throws RemoteException;
+ public void setPackageAskScreenCompat(String packageName, boolean ask)
+ throws RemoteException;
// Multi-user APIs
public boolean switchUser(int userid) throws RemoteException;
@@ -577,9 +580,11 @@
int SET_FRONT_ACTIVITY_SCREEN_COMPAT_MODE_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+124;
int GET_PACKAGE_SCREEN_COMPAT_MODE_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+125;
int SET_PACKAGE_SCREEN_COMPAT_MODE_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+126;
- int SWITCH_USER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+127;
- int REMOVE_SUB_TASK_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+128;
- int REMOVE_TASK_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+129;
- int REGISTER_PROCESS_OBSERVER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+130;
- int UNREGISTER_PROCESS_OBSERVER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+131;
+ int GET_PACKAGE_ASK_SCREEN_COMPAT_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+127;
+ int SET_PACKAGE_ASK_SCREEN_COMPAT_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+128;
+ int SWITCH_USER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+129;
+ int REMOVE_SUB_TASK_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+130;
+ int REMOVE_TASK_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+131;
+ int REGISTER_PROCESS_OBSERVER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+132;
+ int UNREGISTER_PROCESS_OBSERVER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+133;
}
diff --git a/core/java/android/bluetooth/BluetoothSocket.java b/core/java/android/bluetooth/BluetoothSocket.java
index 719d730..9a13c3e 100644
--- a/core/java/android/bluetooth/BluetoothSocket.java
+++ b/core/java/android/bluetooth/BluetoothSocket.java
@@ -94,10 +94,16 @@
private int mPort; /* RFCOMM channel or L2CAP psm */
- /** prevents all native calls after destroyNative() */
- private boolean mClosed;
+ private enum SocketState {
+ INIT,
+ CONNECTED,
+ CLOSED
+ }
- /** protects mClosed */
+ /** prevents all native calls after destroyNative() */
+ private SocketState mSocketState;
+
+ /** protects mSocketState */
private final ReentrantReadWriteLock mLock;
/** used by native code only */
@@ -145,7 +151,7 @@
}
mInputStream = new BluetoothInputStream(this);
mOutputStream = new BluetoothOutputStream(this);
- mClosed = false;
+ mSocketState = SocketState.INIT;
mLock = new ReentrantReadWriteLock();
}
@@ -195,13 +201,14 @@
public void connect() throws IOException {
mLock.readLock().lock();
try {
- if (mClosed) throw new IOException("socket closed");
+ if (mSocketState == SocketState.CLOSED) throw new IOException("socket closed");
if (mSdp != null) {
mPort = mSdp.doSdp(); // blocks
}
connectNative(); // blocks
+ mSocketState = SocketState.CONNECTED;
} finally {
mLock.readLock().unlock();
}
@@ -216,7 +223,7 @@
// abort blocking operations on the socket
mLock.readLock().lock();
try {
- if (mClosed) return;
+ if (mSocketState == SocketState.CLOSED) return;
if (mSdp != null) {
mSdp.cancel();
}
@@ -229,7 +236,7 @@
// abortNative(), so this lock should immediately acquire
mLock.writeLock().lock();
try {
- mClosed = true;
+ mSocketState = SocketState.CLOSED;
destroyNative();
} finally {
mLock.writeLock().unlock();
@@ -267,13 +274,23 @@
}
/**
+ * Get the connection status of this socket, ie, whether there is an active connection with
+ * remote device.
+ * @return true if connected
+ * false if not connected
+ */
+ public boolean isConnected() {
+ return (mSocketState == SocketState.CONNECTED);
+ }
+
+ /**
* Currently returns unix errno instead of throwing IOException,
* so that BluetoothAdapter can check the error code for EADDRINUSE
*/
/*package*/ int bindListen() {
mLock.readLock().lock();
try {
- if (mClosed) return EBADFD;
+ if (mSocketState == SocketState.CLOSED) return EBADFD;
return bindListenNative();
} finally {
mLock.readLock().unlock();
@@ -283,8 +300,11 @@
/*package*/ BluetoothSocket accept(int timeout) throws IOException {
mLock.readLock().lock();
try {
- if (mClosed) throw new IOException("socket closed");
- return acceptNative(timeout);
+ if (mSocketState == SocketState.CLOSED) throw new IOException("socket closed");
+
+ BluetoothSocket acceptedSocket = acceptNative(timeout);
+ mSocketState = SocketState.CONNECTED;
+ return acceptedSocket;
} finally {
mLock.readLock().unlock();
}
@@ -293,7 +313,7 @@
/*package*/ int available() throws IOException {
mLock.readLock().lock();
try {
- if (mClosed) throw new IOException("socket closed");
+ if (mSocketState == SocketState.CLOSED) throw new IOException("socket closed");
return availableNative();
} finally {
mLock.readLock().unlock();
@@ -303,7 +323,7 @@
/*package*/ int read(byte[] b, int offset, int length) throws IOException {
mLock.readLock().lock();
try {
- if (mClosed) throw new IOException("socket closed");
+ if (mSocketState == SocketState.CLOSED) throw new IOException("socket closed");
return readNative(b, offset, length);
} finally {
mLock.readLock().unlock();
@@ -313,7 +333,7 @@
/*package*/ int write(byte[] b, int offset, int length) throws IOException {
mLock.readLock().lock();
try {
- if (mClosed) throw new IOException("socket closed");
+ if (mSocketState == SocketState.CLOSED) throw new IOException("socket closed");
return writeNative(b, offset, length);
} finally {
mLock.readLock().unlock();
diff --git a/core/java/android/content/res/CompatibilityInfo.java b/core/java/android/content/res/CompatibilityInfo.java
index 854d410..dca53a8 100644
--- a/core/java/android/content/res/CompatibilityInfo.java
+++ b/core/java/android/content/res/CompatibilityInfo.java
@@ -113,8 +113,13 @@
public CompatibilityInfo(ApplicationInfo appInfo, int screenLayout, boolean forceCompat) {
int compatFlags = 0;
+ // We can't rely on the application always setting
+ // FLAG_RESIZEABLE_FOR_SCREENS so will compute it based on various input.
+ boolean anyResizeable = false;
+
if ((appInfo.flags & ApplicationInfo.FLAG_SUPPORTS_LARGE_SCREENS) != 0) {
compatFlags |= LARGE_SCREENS;
+ anyResizeable = true;
if (!forceCompat) {
// If we aren't forcing the app into compatibility mode, then
// assume if it supports large screens that we should allow it
@@ -123,9 +128,13 @@
}
}
if ((appInfo.flags & ApplicationInfo.FLAG_SUPPORTS_XLARGE_SCREENS) != 0) {
- compatFlags |= XLARGE_SCREENS | EXPANDABLE;
+ anyResizeable = true;
+ if (!forceCompat) {
+ compatFlags |= XLARGE_SCREENS | EXPANDABLE;
+ }
}
if ((appInfo.flags & ApplicationInfo.FLAG_RESIZEABLE_FOR_SCREENS) != 0) {
+ anyResizeable = true;
compatFlags |= EXPANDABLE;
}
@@ -160,7 +169,7 @@
if ((screenLayout&Configuration.SCREENLAYOUT_COMPAT_NEEDED) != 0) {
if ((compatFlags&EXPANDABLE) != 0) {
supportsScreen = true;
- } else if ((appInfo.flags & ApplicationInfo.FLAG_RESIZEABLE_FOR_SCREENS) == 0) {
+ } else if (!anyResizeable) {
compatFlags |= ALWAYS_COMPAT;
}
}
diff --git a/core/java/android/nfc/tech/MifareClassic.java b/core/java/android/nfc/tech/MifareClassic.java
index 9a2f2bd..c4b7718 100644
--- a/core/java/android/nfc/tech/MifareClassic.java
+++ b/core/java/android/nfc/tech/MifareClassic.java
@@ -82,12 +82,12 @@
{(byte)0xA0,(byte)0xA1,(byte)0xA2,(byte)0xA3,(byte)0xA4,(byte)0xA5};
/**
* The well-known key for tags formatted according to the
- * NDEF on Mifare Classic specification.
+ * NDEF on MIFARE Classic specification.
*/
public static final byte[] KEY_NFC_FORUM =
{(byte)0xD3,(byte)0xF7,(byte)0xD3,(byte)0xF7,(byte)0xD3,(byte)0xF7};
- /** A Mifare Classic compatible card of unknown type */
+ /** A MIFARE Classic compatible card of unknown type */
public static final int TYPE_UNKNOWN = -1;
/** A MIFARE Classic tag */
public static final int TYPE_CLASSIC = 0;
@@ -141,7 +141,7 @@
public MifareClassic(Tag tag) throws RemoteException {
super(tag, TagTechnology.MIFARE_CLASSIC);
- NfcA a = NfcA.get(tag); // Mifare Classic is always based on NFC a
+ NfcA a = NfcA.get(tag); // MIFARE Classic is always based on NFC a
mIsEmulated = false;
@@ -192,7 +192,7 @@
// Stack incorrectly reported a MifareClassic. We cannot handle this
// gracefully - we have no idea of the memory layout. Bail.
throw new RuntimeException(
- "Tag incorrectly enumerated as Mifare Classic, SAK = " + a.getSak());
+ "Tag incorrectly enumerated as MIFARE Classic, SAK = " + a.getSak());
}
}
@@ -221,8 +221,8 @@
/**
* Return true if the tag is emulated, determined at discovery time.
- * These are actually smart-cards that emulate a Mifare Classic interface.
- * They can be treated identically to a Mifare Classic tag.
+ * These are actually smart-cards that emulate a MIFARE Classic interface.
+ * They can be treated identically to a MIFARE Classic tag.
* @hide
*/
public boolean isEmulated() {
@@ -571,8 +571,8 @@
private static void validateSector(int sector) {
// Do not be too strict on upper bounds checking, since some cards
// have more addressable memory than they report. For example,
- // Mifare Plus 2k cards will appear as Mifare Classic 1k cards when in
- // Mifare Classic compatibility mode.
+ // MIFARE Plus 2k cards will appear as MIFARE Classic 1k cards when in
+ // MIFARE Classic compatibility mode.
// Note that issuing a command to an out-of-bounds block is safe - the
// tag should report error causing IOException. This validation is a
// helper to guard against obvious programming mistakes.
diff --git a/core/java/android/nfc/tech/MifareUltralight.java b/core/java/android/nfc/tech/MifareUltralight.java
index 42c2e3e..6c2754b 100644
--- a/core/java/android/nfc/tech/MifareUltralight.java
+++ b/core/java/android/nfc/tech/MifareUltralight.java
@@ -99,7 +99,7 @@
public MifareUltralight(Tag tag) throws RemoteException {
super(tag, TagTechnology.MIFARE_ULTRALIGHT);
- // Check if this could actually be a Mifare
+ // Check if this could actually be a MIFARE
NfcA a = NfcA.get(tag);
mType = TYPE_UNKNOWN;
diff --git a/core/java/android/os/FileUtils.java b/core/java/android/os/FileUtils.java
index f56f6a9..eb0cf37 100644
--- a/core/java/android/os/FileUtils.java
+++ b/core/java/android/os/FileUtils.java
@@ -20,6 +20,7 @@
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
+import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
@@ -226,4 +227,20 @@
input.close();
}
}
+
+ /**
+ * Writes string to file. Basically same as "echo -n $string > $filename"
+ *
+ * @param filename
+ * @param string
+ * @throws IOException
+ */
+ public static void stringToFile(String filename, String string) throws IOException {
+ FileWriter out = new FileWriter(filename);
+ try {
+ out.write(string);
+ } finally {
+ out.close();
+ }
+ }
}
diff --git a/core/java/android/provider/Calendar.java b/core/java/android/provider/Calendar.java
index 20614dc..0ef38bf 100644
--- a/core/java/android/provider/Calendar.java
+++ b/core/java/android/provider/Calendar.java
@@ -89,17 +89,17 @@
protected interface BaseSyncColumns {
/** Generic column for use by sync adapters. */
- public static final String SYNC1 = "sync1";
+ public static final String CAL_SYNC1 = "cal_sync1";
/** Generic column for use by sync adapters. */
- public static final String SYNC2 = "sync2";
+ public static final String CAL_SYNC2 = "cal_sync2";
/** Generic column for use by sync adapters. */
- public static final String SYNC3 = "sync3";
+ public static final String CAL_SYNC3 = "cal_sync3";
/** Generic column for use by sync adapters. */
- public static final String SYNC4 = "sync4";
+ public static final String CAL_SYNC4 = "cal_sync4";
/** Generic column for use by sync adapters. */
- public static final String SYNC5 = "sync5";
+ public static final String CAL_SYNC5 = "cal_sync5";
/** Generic column for use by sync adapters. */
- public static final String SYNC6 = "sync6";
+ public static final String CAL_SYNC6 = "cal_sync6";
}
/**
@@ -264,12 +264,12 @@
DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, _SYNC_TIME);
DatabaseUtils.cursorLongToContentValuesIfPresent(cursor, cv, DIRTY);
- DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, Calendars.SYNC1);
- DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, Calendars.SYNC2);
- DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, Calendars.SYNC3);
- DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, Calendars.SYNC4);
- DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, Calendars.SYNC5);
- DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, Calendars.SYNC6);
+ DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, Calendars.CAL_SYNC1);
+ DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, Calendars.CAL_SYNC2);
+ DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, Calendars.CAL_SYNC3);
+ DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, Calendars.CAL_SYNC4);
+ DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, Calendars.CAL_SYNC5);
+ DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, Calendars.CAL_SYNC6);
DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, Calendars.NAME);
DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv,
@@ -453,12 +453,11 @@
CALENDAR_TIMEZONE,
ACCESS_LEVEL,
DELETED,
- SYNC1,
- SYNC2,
- SYNC3,
- SYNC4,
- SYNC5,
- SYNC6,
+ CAL_SYNC1,
+ CAL_SYNC2,
+ CAL_SYNC3,
+ CAL_SYNC4,
+ CAL_SYNC5, CAL_SYNC6,
SYNC_STATE,
};
}
@@ -923,7 +922,12 @@
DatabaseUtils.cursorLongToContentValuesIfPresent(cursor, cv, DIRTY);
DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, _SYNC_VERSION);
DatabaseUtils.cursorIntToContentValuesIfPresent(cursor, cv, EventsColumns.DELETED);
- DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, SYNC1);
+ DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, CAL_SYNC1);
+ DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, CAL_SYNC2);
+ DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, CAL_SYNC3);
+ DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, CAL_SYNC4);
+ DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, CAL_SYNC5);
+ DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, CAL_SYNC6);
DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv,
Events.SYNC_DATA1);
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index 9ec3a26..5886c64 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -4144,10 +4144,12 @@
@Override
public boolean isLayoutRtl(Drawable who) {
if (who == null) return false;
- final TextView.Drawables drawables = mDrawables;
- if (who == drawables.mDrawableLeft || who == drawables.mDrawableRight ||
- who == drawables.mDrawableTop || who == drawables.mDrawableBottom) {
- return isLayoutRtl();
+ if (mDrawables != null) {
+ final Drawables drawables = mDrawables;
+ if (who == drawables.mDrawableLeft || who == drawables.mDrawableRight ||
+ who == drawables.mDrawableTop || who == drawables.mDrawableBottom) {
+ return isLayoutRtl();
+ }
}
return super.isLayoutRtl(who);
}
@@ -8785,10 +8787,22 @@
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
TypedArray styledAttributes = mContext.obtainStyledAttributes(R.styleable.Theme);
- mode.setTitle(mContext.getString(com.android.internal.R.string.textSelectionCABTitle));
+ boolean allowText = getContext().getResources().getBoolean(
+ com.android.internal.R.bool.allow_action_menu_item_text_with_icon);
+
+ mode.setTitle(allowText ?
+ mContext.getString(com.android.internal.R.string.textSelectionCABTitle) : null);
mode.setSubtitle(null);
+ int selectAllIconId = 0; // No icon by default
+ if (!allowText) {
+ // Provide an icon, text will not be displayed on smaller screens.
+ selectAllIconId = styledAttributes.getResourceId(
+ R.styleable.Theme_actionModeSelectAllDrawable, 0);
+ }
+
menu.add(0, ID_SELECT_ALL, 0, com.android.internal.R.string.selectAll).
+ setIcon(selectAllIconId).
setAlphabeticShortcut('a').
setShowAsAction(
MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
diff --git a/core/java/com/android/internal/view/menu/ActionMenuItemView.java b/core/java/com/android/internal/view/menu/ActionMenuItemView.java
index beacf75..479788d 100644
--- a/core/java/com/android/internal/view/menu/ActionMenuItemView.java
+++ b/core/java/com/android/internal/view/menu/ActionMenuItemView.java
@@ -18,6 +18,7 @@
import android.content.Context;
import android.graphics.drawable.Drawable;
+import android.text.TextUtils;
import android.util.AttributeSet;
import android.view.View;
import android.widget.Button;
@@ -103,6 +104,12 @@
// TODO Support checkable action items
}
+ private void updateTextButtonVisibility() {
+ boolean visible = !TextUtils.isEmpty(mTextButton.getText());
+ visible = visible && (mImageButton.getDrawable() == null || mItemData.showsTextAsAction());
+ mTextButton.setVisibility(visible ? VISIBLE : GONE);
+ }
+
public void setIcon(Drawable icon) {
mImageButton.setImageDrawable(icon);
if (icon != null) {
@@ -111,9 +118,9 @@
mImageButton.setVisibility(GONE);
}
- mTextButton.setVisibility(icon == null || mItemData.showsTextAsAction() ? VISIBLE : GONE);
+ updateTextButtonVisibility();
}
-
+
public boolean hasText() {
return mTextButton.getVisibility() != GONE;
}
@@ -128,10 +135,9 @@
// populate accessibility description with title
setContentDescription(title);
- if (mImageButton.getDrawable() == null || mItemData.showsTextAsAction()) {
- mTextButton.setText(mTitle);
- mTextButton.setVisibility(VISIBLE);
- }
+ mTextButton.setText(mTitle);
+
+ updateTextButtonVisibility();
}
public boolean showsIcon() {
diff --git a/core/java/com/android/internal/widget/ActionBarContextView.java b/core/java/com/android/internal/widget/ActionBarContextView.java
index c82323e..deed1c5 100644
--- a/core/java/com/android/internal/widget/ActionBarContextView.java
+++ b/core/java/com/android/internal/widget/ActionBarContextView.java
@@ -15,26 +15,26 @@
*/
package com.android.internal.widget;
-import com.android.internal.R;
-import com.android.internal.view.menu.ActionMenuPresenter;
-import com.android.internal.view.menu.ActionMenuView;
-import com.android.internal.view.menu.MenuBuilder;
-
import android.animation.Animator;
import android.animation.Animator.AnimatorListener;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.content.Context;
import android.content.res.TypedArray;
+import android.text.TextUtils;
import android.util.AttributeSet;
import android.view.ActionMode;
import android.view.LayoutInflater;
import android.view.View;
-import android.view.ViewGroup.LayoutParams;
import android.view.animation.DecelerateInterpolator;
import android.widget.LinearLayout;
import android.widget.TextView;
+import com.android.internal.R;
+import com.android.internal.view.menu.ActionMenuPresenter;
+import com.android.internal.view.menu.ActionMenuView;
+import com.android.internal.view.menu.MenuBuilder;
+
/**
* @hide
*/
@@ -130,26 +130,23 @@
mTitleLayout = (LinearLayout) getChildAt(getChildCount() - 1);
mTitleView = (TextView) mTitleLayout.findViewById(R.id.action_bar_title);
mSubtitleView = (TextView) mTitleLayout.findViewById(R.id.action_bar_subtitle);
- if (mTitle != null) {
- mTitleView.setText(mTitle);
- if (mTitleStyleRes != 0) {
- mTitleView.setTextAppearance(mContext, mTitleStyleRes);
- }
+ if (mTitleStyleRes != 0) {
+ mTitleView.setTextAppearance(mContext, mTitleStyleRes);
}
- if (mSubtitle != null) {
- mSubtitleView.setText(mSubtitle);
- if (mSubtitleStyleRes != 0) {
- mSubtitleView.setTextAppearance(mContext, mSubtitleStyleRes);
- }
- mSubtitleView.setVisibility(VISIBLE);
+ if (mSubtitleStyleRes != 0) {
+ mSubtitleView.setTextAppearance(mContext, mSubtitleStyleRes);
}
- } else {
- mTitleView.setText(mTitle);
- mSubtitleView.setText(mSubtitle);
- mSubtitleView.setVisibility(mSubtitle != null ? VISIBLE : GONE);
- if (mTitleLayout.getParent() == null) {
- addView(mTitleLayout);
- }
+ }
+
+ mTitleView.setText(mTitle);
+ mSubtitleView.setText(mSubtitle);
+
+ final boolean hasTitle = !TextUtils.isEmpty(mTitle);
+ final boolean hasSubtitle = !TextUtils.isEmpty(mSubtitle);
+ mSubtitleView.setVisibility(hasSubtitle ? VISIBLE : GONE);
+ mTitleLayout.setVisibility(hasTitle || hasSubtitle ? VISIBLE : GONE);
+ if (mTitleLayout.getParent() == null) {
+ addView(mTitleLayout);
}
}
@@ -228,6 +225,7 @@
mAnimateInOnLayout = false;
}
+ @Override
public boolean showOverflowMenu() {
if (mMenuPresenter != null) {
return mMenuPresenter.showOverflowMenu();
@@ -235,6 +233,7 @@
return false;
}
+ @Override
public boolean hideOverflowMenu() {
if (mMenuPresenter != null) {
return mMenuPresenter.hideOverflowMenu();
@@ -242,6 +241,7 @@
return false;
}
+ @Override
public boolean isOverflowMenuShowing() {
if (mMenuPresenter != null) {
return mMenuPresenter.isOverflowMenuShowing();
diff --git a/core/res/res/drawable-hdpi/dialog_middle_holo_light.9.png b/core/res/res/drawable-hdpi/dialog_middle_holo_light.9.png
index abaea2d..ee1054ef 100644
--- a/core/res/res/drawable-hdpi/dialog_middle_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/dialog_middle_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/dialog_top_holo_light.9.png b/core/res/res/drawable-hdpi/dialog_top_holo_light.9.png
index 8982396..b7ddbb4 100644
--- a/core/res/res/drawable-hdpi/dialog_top_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/dialog_top_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_selectall_holo_dark.png b/core/res/res/drawable-hdpi/ic_menu_selectall_holo_dark.png
new file mode 100644
index 0000000..5579443
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_menu_selectall_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_selectall_holo_light.png b/core/res/res/drawable-hdpi/ic_menu_selectall_holo_light.png
new file mode 100644
index 0000000..6674914
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_menu_selectall_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/dialog_middle_holo_light.9.png b/core/res/res/drawable-mdpi/dialog_middle_holo_light.9.png
index 68f9e57..ec06c17d 100644
--- a/core/res/res/drawable-mdpi/dialog_middle_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/dialog_middle_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/dialog_top_holo_light.9.png b/core/res/res/drawable-mdpi/dialog_top_holo_light.9.png
index 60aa8cb..7a2bf8d 100644
--- a/core/res/res/drawable-mdpi/dialog_top_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/dialog_top_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_selectall_holo_dark.png b/core/res/res/drawable-mdpi/ic_menu_selectall_holo_dark.png
new file mode 100644
index 0000000..caec299
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_menu_selectall_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_selectall_holo_light.png b/core/res/res/drawable-mdpi/ic_menu_selectall_holo_light.png
new file mode 100644
index 0000000..434f5d1
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_menu_selectall_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/dialog_middle_holo_light.9.png b/core/res/res/drawable-xhdpi/dialog_middle_holo_light.9.png
index 55c60b8..bdb6824 100644
--- a/core/res/res/drawable-xhdpi/dialog_middle_holo_light.9.png
+++ b/core/res/res/drawable-xhdpi/dialog_middle_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/dialog_top_holo_light.9.png b/core/res/res/drawable-xhdpi/dialog_top_holo_light.9.png
index d33d033..aa8401d 100644
--- a/core/res/res/drawable-xhdpi/dialog_top_holo_light.9.png
+++ b/core/res/res/drawable-xhdpi/dialog_top_holo_light.9.png
Binary files differ
diff --git a/core/res/res/layout-xlarge/status_bar_latest_event_ticker.xml b/core/res/res/layout-sw600dp/status_bar_latest_event_ticker.xml
similarity index 100%
rename from core/res/res/layout-xlarge/status_bar_latest_event_ticker.xml
rename to core/res/res/layout-sw600dp/status_bar_latest_event_ticker.xml
diff --git a/core/res/res/layout-xlarge/status_bar_latest_event_ticker_large_icon.xml b/core/res/res/layout-sw600dp/status_bar_latest_event_ticker_large_icon.xml
similarity index 100%
rename from core/res/res/layout-xlarge/status_bar_latest_event_ticker_large_icon.xml
rename to core/res/res/layout-sw600dp/status_bar_latest_event_ticker_large_icon.xml
diff --git a/core/res/res/layout/am_compat_mode_dialog.xml b/core/res/res/layout/am_compat_mode_dialog.xml
new file mode 100644
index 0000000..a8d39cf
--- /dev/null
+++ b/core/res/res/layout/am_compat_mode_dialog.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent" android:layout_height="match_parent"
+ android:layout_marginLeft="40dp" android:layout_marginRight="40dp"
+ android:layout_marginTop="15dp" android:layout_marginBottom="15dp"
+ android:orientation="vertical">
+ <LinearLayout
+ android:layout_width="wrap_content" android:layout_height="wrap_content"
+ android:layout_gravity="center_horizontal"
+ android:orientation="horizontal" android:baselineAligned="true">
+ <TextView android:layout_width="wrap_content" android:layout_height="wrap_content"
+ android:layout_marginLeft="10dp" android:layout_marginRight="10dp"
+ android:textColor="?android:attr/textColorPrimary"
+ android:textSize="18sp"
+ android:text="@string/screen_compat_mode_scale"
+ />
+ <Switch
+ android:id="@+id/compat_checkbox"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_vertical"
+ android:layout_marginRight="10dp"
+ />
+ </LinearLayout>
+
+ <View android:layout_width="wrap_content" android:layout_height="1dp"
+ android:layout_marginTop="10dp" android:layout_marginBottom="10dp"
+ android:background="@android:drawable/divider_horizontal_dark"
+ />
+
+ <CheckBox android:id="@+id/ask_checkbox"
+ android:layout_width="wrap_content" android:layout_height="wrap_content"
+ android:layout_gravity="center_horizontal"
+ android:text="@string/screen_compat_mode_show"
+ />
+ <TextView
+ android:id="@+id/reask_hint"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:gravity="center"
+ android:visibility="invisible"
+ android:text="@string/screen_compat_mode_hint" />
+</LinearLayout>
diff --git a/core/res/res/values-sw600dp/dimens.xml b/core/res/res/values-sw600dp/dimens.xml
new file mode 100644
index 0000000..df1597c
--- /dev/null
+++ b/core/res/res/values-sw600dp/dimens.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/* //device/apps/common/assets/res/any/dimens.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+<resources>
+ <!-- Height of the status bar -->
+ <dimen name="status_bar_height">48dip</dimen>
+ <!-- Width and height of a single notification icon in the status bar -->
+ <dimen name="status_bar_icon_size">32dip</dimen>
+ <!-- Size of the giant number (unread count) in the notifications -->
+ <dimen name="status_bar_content_number_size">48sp</dimen>
+</resources>
+
diff --git a/core/res/res/values-xlarge/styles.xml b/core/res/res/values-sw600dp/styles.xml
similarity index 100%
rename from core/res/res/values-xlarge/styles.xml
rename to core/res/res/values-sw600dp/styles.xml
diff --git a/core/res/res/values-xlarge/dimens.xml b/core/res/res/values-xlarge/dimens.xml
index b906e1a..c15770d 100644
--- a/core/res/res/values-xlarge/dimens.xml
+++ b/core/res/res/values-xlarge/dimens.xml
@@ -18,13 +18,6 @@
*/
-->
<resources>
- <!-- Height of the status bar -->
- <dimen name="status_bar_height">48dip</dimen>
- <!-- Width and height of a single notification icon in the status bar -->
- <dimen name="status_bar_icon_size">32dip</dimen>
- <!-- Size of the giant number (unread count) in the notifications -->
- <dimen name="status_bar_content_number_size">48sp</dimen>
-
<!-- Default height of a key in the password keyboard for alpha -->
<dimen name="password_keyboard_key_height_alpha">75dip</dimen>
<!-- Default height of a key in the password keyboard for numeric -->
diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml
index e325b8d..db76211 100755
--- a/core/res/res/values/attrs.xml
+++ b/core/res/res/values/attrs.xml
@@ -619,6 +619,8 @@
<attr name="actionModeCopyDrawable" format="reference" />
<!-- Drawable to use for the Paste action button in Contextual Action Bar -->
<attr name="actionModePasteDrawable" format="reference" />
+ <!-- Drawable to use for the Select all action button in Contextual Action Bar -->
+ <attr name="actionModeSelectAllDrawable" format="reference" />
<!-- Drawable to use for the Share action button in WebView selection action modes -->
<attr name="actionModeShareDrawable" format="reference" />
<!-- Drawable to use for the Find action button in WebView selection action modes -->
diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml
index 41a566c..4c3cfc1 100644
--- a/core/res/res/values/public.xml
+++ b/core/res/res/values/public.xml
@@ -1684,6 +1684,7 @@
<public type="attr" name="layout_rowWeight" />
<public type="attr" name="layout_columnSpan" />
<public type="attr" name="layout_columnWeight" />
+ <public type="attr" name="actionModeSelectAllDrawable" />
<public type="attr" name="isAuxiliary" />
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index 816546b..b8a4443 100755
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -2360,6 +2360,12 @@
<string name="launch_warning_replace"><xliff:g id="app_name">%1$s</xliff:g> is now running.</string>
<!-- [CHAR LIMIT=50] Title of the alert when application launches on top of another. -->
<string name="launch_warning_original"><xliff:g id="app_name">%1$s</xliff:g> was originally launched.</string>
+ <!-- [CHAR LIMIT=50] Compat mode dialog: compat mode switch label. -->
+ <string name="screen_compat_mode_scale">Scale</string>
+ <!-- [CHAR LIMIT=50] Compat mode dialog: compat mode switch label. -->
+ <string name="screen_compat_mode_show">Always show</string>
+ <!-- [CHAR LIMIT=200] Compat mode dialog: hint to re-enable compat mode dialog. -->
+ <string name="screen_compat_mode_hint">Re-enable this with Settings > Applications > Manage applications.</string>
<!-- Text of the alert that is displayed when an application has violated StrictMode. -->
<string name="smv_application">The application <xliff:g id="application">%1$s</xliff:g>
diff --git a/core/res/res/values/themes.xml b/core/res/res/values/themes.xml
index 0a614b2..4f39da4 100644
--- a/core/res/res/values/themes.xml
+++ b/core/res/res/values/themes.xml
@@ -267,6 +267,7 @@
<item name="actionModeCutDrawable">@android:drawable/ic_menu_cut_holo_dark</item>
<item name="actionModeCopyDrawable">@android:drawable/ic_menu_copy_holo_dark</item>
<item name="actionModePasteDrawable">@android:drawable/ic_menu_paste_holo_dark</item>
+ <item name="actionModeSelectAllDrawable">@android:drawable/ic_menu_selectall_holo_dark</item>
<item name="actionModeShareDrawable">@android:drawable/ic_menu_share_holo_dark</item>
<item name="actionModeFindDrawable">@android:drawable/ic_menu_find_holo_dark</item>
<item name="actionModeWebSearchDrawable">@android:drawable/ic_menu_search</item>
@@ -396,6 +397,7 @@
<item name="actionModeCutDrawable">@android:drawable/ic_menu_cut_holo_light</item>
<item name="actionModeCopyDrawable">@android:drawable/ic_menu_copy_holo_light</item>
<item name="actionModePasteDrawable">@android:drawable/ic_menu_paste_holo_light</item>
+ <item name="actionModeSelectAllDrawable">@android:drawable/ic_menu_selectall_holo_light</item>
<item name="actionModeShareDrawable">@android:drawable/ic_menu_share_holo_light</item>
<item name="actionModeFindDrawable">@android:drawable/ic_menu_find_holo_light</item>
<item name="actionModeWebSearchDrawable">@android:drawable/ic_menu_search_holo_light</item>
@@ -1029,6 +1031,7 @@
<item name="actionModeCutDrawable">@android:drawable/ic_menu_cut_holo_dark</item>
<item name="actionModeCopyDrawable">@android:drawable/ic_menu_copy_holo_dark</item>
<item name="actionModePasteDrawable">@android:drawable/ic_menu_paste_holo_dark</item>
+ <item name="actionModeSelectAllDrawable">@android:drawable/ic_menu_selectall_holo_dark</item>
<item name="actionModeShareDrawable">@android:drawable/ic_menu_share_holo_dark</item>
<item name="actionModeFindDrawable">@android:drawable/ic_menu_find_holo_dark</item>
<item name="actionModeWebSearchDrawable">@android:drawable/ic_menu_search_holo_dark</item>
@@ -1316,6 +1319,7 @@
<item name="actionModeCutDrawable">@android:drawable/ic_menu_cut_holo_light</item>
<item name="actionModeCopyDrawable">@android:drawable/ic_menu_copy_holo_light</item>
<item name="actionModePasteDrawable">@android:drawable/ic_menu_paste_holo_light</item>
+ <item name="actionModeSelectAllDrawable">@android:drawable/ic_menu_selectall_holo_light</item>
<item name="actionModeShareDrawable">@android:drawable/ic_menu_share_holo_light</item>
<item name="actionModeFindDrawable">@android:drawable/ic_menu_find_holo_light</item>
<item name="actionModeWebSearchDrawable">@android:drawable/ic_menu_search_holo_light</item>
diff --git a/core/tests/coretests/AndroidManifest.xml b/core/tests/coretests/AndroidManifest.xml
index fadf1ec..6dc5c21 100644
--- a/core/tests/coretests/AndroidManifest.xml
+++ b/core/tests/coretests/AndroidManifest.xml
@@ -1035,12 +1035,6 @@
</intent-filter>
</activity>
- <service android:name="android.accessibilityservice.AccessibilityTestService">
- <intent-filter>
- <action android:name="android.accessibilityservice.AccessibilityService" />
- </intent-filter>
- </service>
-
<service android:name="android.webkit.AccessibilityInjectorTest$MockAccessibilityService">
<intent-filter>
<action android:name="android.accessibilityservice.AccessibilityService" />
diff --git a/docs/html/sdk/android-2.3.3.jd b/docs/html/sdk/android-2.3.3.jd
index 6d60fcc..10fc049 100644
--- a/docs/html/sdk/android-2.3.3.jd
+++ b/docs/html/sdk/android-2.3.3.jd
@@ -141,8 +141,8 @@
<li>NFC-F (JIS 6319-4)</li>
<li>NFC-V (ISO 15693)</li>
<li>ISO-DEP (ISO 14443-4)</li>
-<li>Mifare Classic</li>
-<li>Mifare Ultralight</li>
+<li>MIFARE Classic</li>
+<li>MIFARE Ultralight</li>
<li>NFC Forum NDEF tags</li>
</ul>
diff --git a/graphics/java/android/graphics/drawable/AnimationDrawable.java b/graphics/java/android/graphics/drawable/AnimationDrawable.java
index e275ba8..2220f96 100644
--- a/graphics/java/android/graphics/drawable/AnimationDrawable.java
+++ b/graphics/java/android/graphics/drawable/AnimationDrawable.java
@@ -62,7 +62,7 @@
* AnimationDrawable frameAnimation = (AnimationDrawable) img.getBackground();
*
* // Start the animation (looped playback by default).
- * frameAnimation.start()
+ * frameAnimation.start();
* </pre>
* <p>For more information, see the guide to <a
* href="{@docRoot}guide/topics/resources/animation-resource.html">Animation Resources</a>.</p>
@@ -192,6 +192,9 @@
*/
public void addFrame(Drawable frame, int duration) {
mAnimationState.addFrame(frame, duration);
+ if (mCurFrame < 0) {
+ setFrame(0, true, false);
+ }
}
private void nextFrame(boolean unschedule) {
diff --git a/include/media/mediaplayer.h b/include/media/mediaplayer.h
index 50a378f..ea5a9d3 100644
--- a/include/media/mediaplayer.h
+++ b/include/media/mediaplayer.h
@@ -100,6 +100,9 @@
MEDIA_INFO_BUFFERING_START = 701,
// MediaPlayer is resuming playback after filling buffers.
MEDIA_INFO_BUFFERING_END = 702,
+ // Bandwidth in recent past
+ MEDIA_INFO_NETWORK_BANDWIDTH = 703,
+
// 8xx
// Bad interleaving means that a media has been improperly interleaved or not
// interleaved at all, e.g has all the video samples first then all the audio
@@ -128,6 +131,9 @@
enum media_set_parameter_keys {
KEY_PARAMETER_TIMED_TEXT_TRACK_INDEX = 1000,
KEY_PARAMETER_TIMED_TEXT_ADD_OUT_OF_BAND_SOURCE = 1001,
+
+ // Streaming/buffering parameters
+ KEY_PARAMETER_CACHE_STAT_COLLECT_FREQ_MS = 1100,
};
// ----------------------------------------------------------------------------
// ref-counted object for callbacks
diff --git a/media/java/android/media/MediaRecorder.java b/media/java/android/media/MediaRecorder.java
index 38202f2..1478a6d 100644
--- a/media/java/android/media/MediaRecorder.java
+++ b/media/java/android/media/MediaRecorder.java
@@ -716,6 +716,12 @@
/**
* Stops recording. Call this after start(). Once recording is stopped,
* you will have to configure it again as if it has just been constructed.
+ * Note that a RuntimeException is intentionally thrown to the
+ * application, if no valid audio/video data has been received when stop()
+ * is called. This happens if stop() is called immediately after
+ * start(). The failure lets the application take action accordingly to
+ * clean up the output file (delete the output file, for instance), since
+ * the output file is not properly constructed when this happens.
*
* @throws IllegalStateException if it is called before start()
*/
diff --git a/media/libstagefright/AwesomePlayer.cpp b/media/libstagefright/AwesomePlayer.cpp
index 3d270f89..07a47e5 100644
--- a/media/libstagefright/AwesomePlayer.cpp
+++ b/media/libstagefright/AwesomePlayer.cpp
@@ -634,6 +634,7 @@
mFlags |= CACHE_UNDERRUN;
pause_l();
ensureCacheIsFetching_l();
+ sendCacheStats();
notifyListener_l(MEDIA_INFO, MEDIA_INFO_BUFFERING_START);
} else if (eos || cachedDataRemaining > kHighWaterMarkBytes) {
if (mFlags & CACHE_UNDERRUN) {
@@ -692,6 +693,7 @@
mFlags |= CACHE_UNDERRUN;
pause_l();
ensureCacheIsFetching_l();
+ sendCacheStats();
notifyListener_l(MEDIA_INFO, MEDIA_INFO_BUFFERING_START);
} else if (eos || cachedDurationUs > highWaterMarkUs) {
if (mFlags & CACHE_UNDERRUN) {
@@ -711,6 +713,18 @@
postBufferingEvent_l();
}
+void AwesomePlayer::sendCacheStats() {
+ sp<MediaPlayerBase> listener = mListener.promote();
+ if (listener != NULL) {
+ int32_t kbps = 0;
+ status_t err = mCachedSource->getEstimatedBandwidthKbps(&kbps);
+ if (err == OK) {
+ listener->sendEvent(
+ MEDIA_INFO, MEDIA_INFO_NETWORK_BANDWIDTH, kbps);
+ }
+ }
+}
+
void AwesomePlayer::onStreamDone() {
// Posted whenever any stream finishes playing.
@@ -2083,6 +2097,10 @@
return mTextPlayer->setParameter(key, request);
}
+ case KEY_PARAMETER_CACHE_STAT_COLLECT_FREQ_MS:
+ {
+ return setCacheStatCollectFreq(request);
+ }
default:
{
return ERROR_UNSUPPORTED;
@@ -2090,6 +2108,16 @@
}
}
+status_t AwesomePlayer::setCacheStatCollectFreq(const Parcel &request) {
+ if (mCachedSource != NULL) {
+ int32_t freqMs = request.readInt32();
+ LOGD("Request to keep cache stats in the past %d ms",
+ freqMs);
+ return mCachedSource->setCacheStatCollectFreq(freqMs);
+ }
+ return ERROR_UNSUPPORTED;
+}
+
status_t AwesomePlayer::getParameter(int key, Parcel *reply) {
return OK;
}
diff --git a/media/libstagefright/HTTPBase.cpp b/media/libstagefright/HTTPBase.cpp
index 58b17a7..c0ae29d 100644
--- a/media/libstagefright/HTTPBase.cpp
+++ b/media/libstagefright/HTTPBase.cpp
@@ -14,6 +14,10 @@
* limitations under the License.
*/
+//#define LOG_NDEBUG 0
+#define LOG_TAG "HTTPBase"
+#include <utils/Log.h>
+
#include "include/HTTPBase.h"
#if CHROMIUM_AVAILABLE
@@ -22,11 +26,19 @@
#include "include/NuHTTPDataSource.h"
+#include <media/stagefright/foundation/ALooper.h>
#include <cutils/properties.h>
namespace android {
-HTTPBase::HTTPBase() {}
+HTTPBase::HTTPBase()
+ : mNumBandwidthHistoryItems(0),
+ mTotalTransferTimeUs(0),
+ mTotalTransferBytes(0),
+ mPrevBandwidthMeasureTimeUs(0),
+ mPrevEstimatedBandWidthKbps(0),
+ mBandWidthCollectFreqMs(5000) {
+}
// static
sp<HTTPBase> HTTPBase::Create(uint32_t flags) {
@@ -42,4 +54,69 @@
}
}
+void HTTPBase::addBandwidthMeasurement(
+ size_t numBytes, int64_t delayUs) {
+ Mutex::Autolock autoLock(mLock);
+
+ BandwidthEntry entry;
+ entry.mDelayUs = delayUs;
+ entry.mNumBytes = numBytes;
+ mTotalTransferTimeUs += delayUs;
+ mTotalTransferBytes += numBytes;
+
+ mBandwidthHistory.push_back(entry);
+ if (++mNumBandwidthHistoryItems > 100) {
+ BandwidthEntry *entry = &*mBandwidthHistory.begin();
+ mTotalTransferTimeUs -= entry->mDelayUs;
+ mTotalTransferBytes -= entry->mNumBytes;
+ mBandwidthHistory.erase(mBandwidthHistory.begin());
+ --mNumBandwidthHistoryItems;
+
+ int64_t timeNowUs = ALooper::GetNowUs();
+ if (timeNowUs - mPrevBandwidthMeasureTimeUs >=
+ mBandWidthCollectFreqMs * 1000LL) {
+
+ if (mPrevBandwidthMeasureTimeUs != 0) {
+ mPrevEstimatedBandWidthKbps =
+ (mTotalTransferBytes * 8E3 / mTotalTransferTimeUs);
+ }
+ mPrevBandwidthMeasureTimeUs = timeNowUs;
+ }
+ }
+
+}
+
+bool HTTPBase::estimateBandwidth(int32_t *bandwidth_bps) {
+ Mutex::Autolock autoLock(mLock);
+
+ if (mNumBandwidthHistoryItems < 2) {
+ return false;
+ }
+
+ *bandwidth_bps = ((double)mTotalTransferBytes * 8E6 / mTotalTransferTimeUs);
+
+ return true;
+}
+
+status_t HTTPBase::getEstimatedBandwidthKbps(int32_t *kbps) {
+ Mutex::Autolock autoLock(mLock);
+ *kbps = mPrevEstimatedBandWidthKbps;
+ return OK;
+}
+
+status_t HTTPBase::setBandwidthStatCollectFreq(int32_t freqMs) {
+ Mutex::Autolock autoLock(mLock);
+
+ if (freqMs < kMinBandwidthCollectFreqMs
+ || freqMs > kMaxBandwidthCollectFreqMs) {
+
+ LOGE("frequency (%d ms) is out of range [1000, 60000]", freqMs);
+ return BAD_VALUE;
+ }
+
+ LOGI("frequency set to %d ms", freqMs);
+ mBandWidthCollectFreqMs = freqMs;
+ return OK;
+}
+
} // namespace android
diff --git a/media/libstagefright/NuCachedSource2.cpp b/media/libstagefright/NuCachedSource2.cpp
index 81f2e47..b2ed427 100644
--- a/media/libstagefright/NuCachedSource2.cpp
+++ b/media/libstagefright/NuCachedSource2.cpp
@@ -19,6 +19,7 @@
#include <utils/Log.h>
#include "include/NuCachedSource2.h"
+#include "include/HTTPBase.h"
#include <media/stagefright/foundation/ADebug.h>
#include <media/stagefright/foundation/AMessage.h>
@@ -201,6 +202,16 @@
mCache = NULL;
}
+status_t NuCachedSource2::getEstimatedBandwidthKbps(int32_t *kbps) {
+ HTTPBase* source = static_cast<HTTPBase *>(mSource.get());
+ return source->getEstimatedBandwidthKbps(kbps);
+}
+
+status_t NuCachedSource2::setCacheStatCollectFreq(int32_t freqMs) {
+ HTTPBase *source = static_cast<HTTPBase *>(mSource.get());
+ return source->setBandwidthStatCollectFreq(freqMs);
+}
+
status_t NuCachedSource2::initCheck() const {
return mSource->initCheck();
}
diff --git a/media/libstagefright/NuHTTPDataSource.cpp b/media/libstagefright/NuHTTPDataSource.cpp
index 821ba9b..c3b5e8f 100644
--- a/media/libstagefright/NuHTTPDataSource.cpp
+++ b/media/libstagefright/NuHTTPDataSource.cpp
@@ -97,9 +97,6 @@
mContentLengthValid(false),
mHasChunkedTransferEncoding(false),
mChunkDataBytesLeft(0),
- mNumBandwidthHistoryItems(0),
- mTotalTransferTimeUs(0),
- mTotalTransferBytes(0),
mDecryptHandle(NULL),
mDrmManagerClient(NULL) {
}
@@ -431,7 +428,7 @@
}
int64_t delayUs = ALooper::GetNowUs() - startTimeUs;
- addBandwidthMeasurement_l(n, delayUs);
+ addBandwidthMeasurement(n, delayUs);
numBytesRead += (size_t)n;
@@ -517,36 +514,6 @@
}
}
-bool NuHTTPDataSource::estimateBandwidth(int32_t *bandwidth_bps) {
- Mutex::Autolock autoLock(mLock);
-
- if (mNumBandwidthHistoryItems < 2) {
- return false;
- }
-
- *bandwidth_bps = ((double)mTotalTransferBytes * 8E6 / mTotalTransferTimeUs);
-
- return true;
-}
-
-void NuHTTPDataSource::addBandwidthMeasurement_l(
- size_t numBytes, int64_t delayUs) {
- BandwidthEntry entry;
- entry.mDelayUs = delayUs;
- entry.mNumBytes = numBytes;
- mTotalTransferTimeUs += delayUs;
- mTotalTransferBytes += numBytes;
-
- mBandwidthHistory.push_back(entry);
- if (++mNumBandwidthHistoryItems > 100) {
- BandwidthEntry *entry = &*mBandwidthHistory.begin();
- mTotalTransferTimeUs -= entry->mDelayUs;
- mTotalTransferBytes -= entry->mNumBytes;
- mBandwidthHistory.erase(mBandwidthHistory.begin());
- --mNumBandwidthHistoryItems;
- }
-}
-
sp<DecryptHandle> NuHTTPDataSource::DrmInitialization() {
if (mDrmManagerClient == NULL) {
mDrmManagerClient = new DrmManagerClient();
diff --git a/media/libstagefright/chromium_http/ChromiumHTTPDataSource.cpp b/media/libstagefright/chromium_http/ChromiumHTTPDataSource.cpp
index 1096717..ad1f342 100644
--- a/media/libstagefright/chromium_http/ChromiumHTTPDataSource.cpp
+++ b/media/libstagefright/chromium_http/ChromiumHTTPDataSource.cpp
@@ -34,9 +34,6 @@
mCurrentOffset(0),
mIOResult(OK),
mContentSize(-1),
- mNumBandwidthHistoryItems(0),
- mTotalTransferTimeUs(0),
- mTotalTransferBytes(0),
mDecryptHandle(NULL),
mDrmManagerClient(NULL) {
mDelegate->setOwner(this);
@@ -188,7 +185,7 @@
// The read operation was successful, mIOResult contains
// the number of bytes read.
- addBandwidthMeasurement_l(mIOResult, delayUs);
+ addBandwidthMeasurement(mIOResult, delayUs);
mCurrentOffset += mIOResult;
return mIOResult;
@@ -246,36 +243,6 @@
clearDRMState_l();
}
-void ChromiumHTTPDataSource::addBandwidthMeasurement_l(
- size_t numBytes, int64_t delayUs) {
- BandwidthEntry entry;
- entry.mDelayUs = delayUs;
- entry.mNumBytes = numBytes;
- mTotalTransferTimeUs += delayUs;
- mTotalTransferBytes += numBytes;
-
- mBandwidthHistory.push_back(entry);
- if (++mNumBandwidthHistoryItems > 100) {
- BandwidthEntry *entry = &*mBandwidthHistory.begin();
- mTotalTransferTimeUs -= entry->mDelayUs;
- mTotalTransferBytes -= entry->mNumBytes;
- mBandwidthHistory.erase(mBandwidthHistory.begin());
- --mNumBandwidthHistoryItems;
- }
-}
-
-bool ChromiumHTTPDataSource::estimateBandwidth(int32_t *bandwidth_bps) {
- Mutex::Autolock autoLock(mLock);
-
- if (mNumBandwidthHistoryItems < 2) {
- return false;
- }
-
- *bandwidth_bps = ((double)mTotalTransferBytes * 8E6 / mTotalTransferTimeUs);
-
- return true;
-}
-
sp<DecryptHandle> ChromiumHTTPDataSource::DrmInitialization() {
Mutex::Autolock autoLock(mLock);
diff --git a/media/libstagefright/include/AwesomePlayer.h b/media/libstagefright/include/AwesomePlayer.h
index a9e8e95..aebcdd1 100644
--- a/media/libstagefright/include/AwesomePlayer.h
+++ b/media/libstagefright/include/AwesomePlayer.h
@@ -93,6 +93,7 @@
status_t setParameter(int key, const Parcel &request);
status_t getParameter(int key, Parcel *reply);
+ status_t setCacheStatCollectFreq(const Parcel &request);
status_t seekTo(int64_t timeUs);
@@ -291,6 +292,7 @@
void setNativeWindow_l(const sp<ANativeWindow> &native);
bool isStreamingHTTP() const;
+ void sendCacheStats();
AwesomePlayer(const AwesomePlayer &);
AwesomePlayer &operator=(const AwesomePlayer &);
diff --git a/media/libstagefright/include/ChromiumHTTPDataSource.h b/media/libstagefright/include/ChromiumHTTPDataSource.h
index 0e2927d..d833e2e 100644
--- a/media/libstagefright/include/ChromiumHTTPDataSource.h
+++ b/media/libstagefright/include/ChromiumHTTPDataSource.h
@@ -43,8 +43,6 @@
virtual status_t getSize(off64_t *size);
virtual uint32_t flags();
- virtual bool estimateBandwidth(int32_t *bandwidth_bps);
-
virtual sp<DecryptHandle> DrmInitialization();
virtual void getDrmInfo(sp<DecryptHandle> &handle, DrmManagerClient **client);
@@ -67,11 +65,6 @@
DISCONNECTING
};
- struct BandwidthEntry {
- int64_t mDelayUs;
- size_t mNumBytes;
- };
-
const uint32_t mFlags;
mutable Mutex mLock;
@@ -94,11 +87,6 @@
String8 mContentType;
- List<BandwidthEntry> mBandwidthHistory;
- size_t mNumBandwidthHistoryItems;
- int64_t mTotalTransferTimeUs;
- size_t mTotalTransferBytes;
-
sp<DecryptHandle> mDecryptHandle;
DrmManagerClient *mDrmManagerClient;
@@ -121,8 +109,6 @@
void onReadCompleted(ssize_t size);
void onDisconnectComplete();
- void addBandwidthMeasurement_l(size_t numBytes, int64_t delayUs);
-
void clearDRMState_l();
DISALLOW_EVIL_CONSTRUCTORS(ChromiumHTTPDataSource);
diff --git a/media/libstagefright/include/HTTPBase.h b/media/libstagefright/include/HTTPBase.h
index 6cec390..3a7fbb6 100644
--- a/media/libstagefright/include/HTTPBase.h
+++ b/media/libstagefright/include/HTTPBase.h
@@ -20,6 +20,8 @@
#include <media/stagefright/foundation/ABase.h>
#include <media/stagefright/DataSource.h>
+#include <media/stagefright/MediaErrors.h>
+#include <utils/threads.h>
namespace android {
@@ -40,11 +42,41 @@
// Returns true if bandwidth could successfully be estimated,
// false otherwise.
- virtual bool estimateBandwidth(int32_t *bandwidth_bps) = 0;
+ virtual bool estimateBandwidth(int32_t *bandwidth_bps);
+
+ virtual status_t getEstimatedBandwidthKbps(int32_t *kbps);
+
+ virtual status_t setBandwidthStatCollectFreq(int32_t freqMs);
static sp<HTTPBase> Create(uint32_t flags = 0);
+protected:
+ void addBandwidthMeasurement(size_t numBytes, int64_t delayUs);
+
private:
+
+ struct BandwidthEntry {
+ int64_t mDelayUs;
+ size_t mNumBytes;
+ };
+
+ Mutex mLock;
+
+ List<BandwidthEntry> mBandwidthHistory;
+ size_t mNumBandwidthHistoryItems;
+ int64_t mTotalTransferTimeUs;
+ size_t mTotalTransferBytes;
+
+ enum {
+ kMinBandwidthCollectFreqMs = 1000, // 1 second
+ kMaxBandwidthCollectFreqMs = 60000, // one minute
+ };
+
+ int64_t mPrevBandwidthMeasureTimeUs;
+ int32_t mPrevEstimatedBandWidthKbps;
+ int32_t mBandWidthCollectFreqMs;
+
+
DISALLOW_EVIL_CONSTRUCTORS(HTTPBase);
};
diff --git a/media/libstagefright/include/NuCachedSource2.h b/media/libstagefright/include/NuCachedSource2.h
index ed3e265c..31fc0e5 100644
--- a/media/libstagefright/include/NuCachedSource2.h
+++ b/media/libstagefright/include/NuCachedSource2.h
@@ -47,8 +47,10 @@
size_t cachedSize();
size_t approxDataRemaining(status_t *finalStatus);
+ status_t setCacheStatCollectFreq(int32_t freqMs);
void resumeFetchingIfNecessary();
+ status_t getEstimatedBandwidthKbps(int32_t *kbps);
protected:
virtual ~NuCachedSource2();
diff --git a/media/libstagefright/include/NuHTTPDataSource.h b/media/libstagefright/include/NuHTTPDataSource.h
index 2ab1f19..c265b3a 100644
--- a/media/libstagefright/include/NuHTTPDataSource.h
+++ b/media/libstagefright/include/NuHTTPDataSource.h
@@ -43,10 +43,6 @@
virtual status_t getSize(off64_t *size);
virtual uint32_t flags();
- // Returns true if bandwidth could successfully be estimated,
- // false otherwise.
- virtual bool estimateBandwidth(int32_t *bandwidth_bps);
-
virtual sp<DecryptHandle> DrmInitialization();
virtual void getDrmInfo(sp<DecryptHandle> &handle, DrmManagerClient **client);
virtual String8 getUri();
@@ -63,11 +59,6 @@
CONNECTED
};
- struct BandwidthEntry {
- int64_t mDelayUs;
- size_t mNumBytes;
- };
-
Mutex mLock;
uint32_t mFlags;
@@ -93,11 +84,6 @@
// chunk header (or -1 if no more chunks).
ssize_t mChunkDataBytesLeft;
- List<BandwidthEntry> mBandwidthHistory;
- size_t mNumBandwidthHistoryItems;
- int64_t mTotalTransferTimeUs;
- size_t mTotalTransferBytes;
-
sp<DecryptHandle> mDecryptHandle;
DrmManagerClient *mDrmManagerClient;
@@ -114,7 +100,6 @@
ssize_t internalRead(void *data, size_t size);
void applyTimeoutResponse();
- void addBandwidthMeasurement_l(size_t numBytes, int64_t delayUs);
static void MakeFullHeaders(
const KeyedVector<String8, String8> *overrides,
diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/app_icon.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/app_icon.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-hdpi/app_icon.png
rename to packages/SystemUI/res/drawable-sw600dp-hdpi/app_icon.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/recents_bg_protect_tile.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/recents_bg_protect_tile.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-hdpi/recents_bg_protect_tile.png
rename to packages/SystemUI/res/drawable-sw600dp-hdpi/recents_bg_protect_tile.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_1x.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_1x.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_1x.png
rename to packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_1x.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_3g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_3g.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_3g.png
rename to packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_3g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_4g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_4g.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_4g.png
rename to packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_4g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_e.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_e.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_e.png
rename to packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_e.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_g.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_g.png
rename to packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_h.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_h.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_h.png
rename to packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_h.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_in_1x.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_in_1x.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_in_1x.png
rename to packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_in_1x.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_in_3g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_in_3g.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_in_3g.png
rename to packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_in_3g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_in_4g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_in_4g.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_in_4g.png
rename to packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_in_4g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_in_e.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_in_e.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_in_e.png
rename to packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_in_e.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_in_g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_in_g.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_in_g.png
rename to packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_in_g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_in_h.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_in_h.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_in_h.png
rename to packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_in_h.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_inandout_1x.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_inandout_1x.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_inandout_1x.png
rename to packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_inandout_1x.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_inandout_3g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_inandout_3g.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_inandout_3g.png
rename to packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_inandout_3g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_inandout_4g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_inandout_4g.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_inandout_4g.png
rename to packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_inandout_4g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_inandout_e.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_inandout_e.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_inandout_e.png
rename to packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_inandout_e.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_inandout_g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_inandout_g.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_inandout_g.png
rename to packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_inandout_g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_inandout_h.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_inandout_h.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_inandout_h.png
rename to packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_inandout_h.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_out_1x.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_out_1x.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_out_1x.png
rename to packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_out_1x.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_out_3g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_out_3g.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_out_3g.png
rename to packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_out_3g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_out_4g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_out_4g.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_out_4g.png
rename to packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_out_4g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_out_e.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_out_e.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_out_e.png
rename to packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_out_e.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_out_g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_out_g.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_out_g.png
rename to packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_out_g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_out_h.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_out_h.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_out_h.png
rename to packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_out_h.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_roam.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_roam.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_roam.png
rename to packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_roam.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_connected_1x.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_1x.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_connected_1x.png
rename to packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_1x.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_connected_3g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_3g.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_connected_3g.png
rename to packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_3g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_connected_4g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_4g.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_connected_4g.png
rename to packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_4g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_connected_e.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_e.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_connected_e.png
rename to packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_e.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_connected_g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_g.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_connected_g.png
rename to packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_connected_h.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_h.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_connected_h.png
rename to packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_h.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_in_1x.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_in_1x.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_in_1x.png
rename to packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_in_1x.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_in_3g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_in_3g.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_in_3g.png
rename to packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_in_3g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_in_4g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_in_4g.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_in_4g.png
rename to packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_in_4g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_in_e.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_in_e.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_in_e.png
rename to packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_in_e.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_in_g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_in_g.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_in_g.png
rename to packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_in_g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_in_h.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_in_h.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_in_h.png
rename to packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_in_h.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_inandout_1x.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_inandout_1x.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_inandout_1x.png
rename to packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_inandout_1x.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_inandout_3g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_inandout_3g.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_inandout_3g.png
rename to packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_inandout_3g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_inandout_4g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_inandout_4g.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_inandout_4g.png
rename to packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_inandout_4g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_inandout_e.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_inandout_e.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_inandout_e.png
rename to packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_inandout_e.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_inandout_g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_inandout_g.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_inandout_g.png
rename to packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_inandout_g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_inandout_h.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_inandout_h.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_inandout_h.png
rename to packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_inandout_h.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_out_1x.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_out_1x.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_out_1x.png
rename to packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_out_1x.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_out_3g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_out_3g.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_out_3g.png
rename to packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_out_3g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_out_4g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_out_4g.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_out_4g.png
rename to packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_out_4g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_out_e.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_out_e.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_out_e.png
rename to packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_out_e.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_out_g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_out_g.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_out_g.png
rename to packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_out_g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_out_h.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_out_h.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_out_h.png
rename to packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_out_h.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/app_icon.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/app_icon.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-mdpi/app_icon.png
rename to packages/SystemUI/res/drawable-sw600dp-mdpi/app_icon.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/recents_bg_protect_tile.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/recents_bg_protect_tile.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-mdpi/recents_bg_protect_tile.png
rename to packages/SystemUI/res/drawable-sw600dp-mdpi/recents_bg_protect_tile.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/recents_blue_glow.9.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/recents_blue_glow.9.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-mdpi/recents_blue_glow.9.png
rename to packages/SystemUI/res/drawable-sw600dp-mdpi/recents_blue_glow.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/recents_callout_line.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/recents_callout_line.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-mdpi/recents_callout_line.png
rename to packages/SystemUI/res/drawable-sw600dp-mdpi/recents_callout_line.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/recents_thumbnail_bg.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/recents_thumbnail_bg.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-mdpi/recents_thumbnail_bg.png
rename to packages/SystemUI/res/drawable-sw600dp-mdpi/recents_thumbnail_bg.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/recents_thumbnail_bg_press.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/recents_thumbnail_bg_press.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-mdpi/recents_thumbnail_bg_press.png
rename to packages/SystemUI/res/drawable-sw600dp-mdpi/recents_thumbnail_bg_press.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_1x.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_1x.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_1x.png
rename to packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_1x.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_3g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_3g.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_3g.png
rename to packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_3g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_4g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_4g.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_4g.png
rename to packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_4g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_e.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_e.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_e.png
rename to packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_e.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_g.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_g.png
rename to packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_h.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_h.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_h.png
rename to packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_h.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_in_1x.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_in_1x.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_in_1x.png
rename to packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_in_1x.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_in_3g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_in_3g.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_in_3g.png
rename to packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_in_3g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_in_4g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_in_4g.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_in_4g.png
rename to packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_in_4g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_in_e.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_in_e.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_in_e.png
rename to packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_in_e.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_in_g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_in_g.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_in_g.png
rename to packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_in_g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_in_h.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_in_h.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_in_h.png
rename to packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_in_h.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_inandout_1x.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_inandout_1x.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_inandout_1x.png
rename to packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_inandout_1x.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_inandout_3g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_inandout_3g.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_inandout_3g.png
rename to packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_inandout_3g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_inandout_4g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_inandout_4g.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_inandout_4g.png
rename to packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_inandout_4g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_inandout_e.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_inandout_e.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_inandout_e.png
rename to packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_inandout_e.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_inandout_g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_inandout_g.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_inandout_g.png
rename to packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_inandout_g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_inandout_h.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_inandout_h.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_inandout_h.png
rename to packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_inandout_h.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_out_1x.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_out_1x.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_out_1x.png
rename to packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_out_1x.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_out_3g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_out_3g.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_out_3g.png
rename to packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_out_3g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_out_4g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_out_4g.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_out_4g.png
rename to packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_out_4g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_out_e.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_out_e.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_out_e.png
rename to packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_out_e.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_out_g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_out_g.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_out_g.png
rename to packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_out_g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_out_h.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_out_h.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_out_h.png
rename to packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_out_h.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_roam.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_roam.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_roam.png
rename to packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_roam.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_connected_1x.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_1x.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_connected_1x.png
rename to packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_1x.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_connected_3g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_3g.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_connected_3g.png
rename to packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_3g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_connected_4g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_4g.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_connected_4g.png
rename to packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_4g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_connected_e.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_e.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_connected_e.png
rename to packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_e.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_connected_g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_g.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_connected_g.png
rename to packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_connected_h.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_h.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_connected_h.png
rename to packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_h.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_in_1x.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_in_1x.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_in_1x.png
rename to packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_in_1x.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_in_3g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_in_3g.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_in_3g.png
rename to packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_in_3g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_in_4g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_in_4g.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_in_4g.png
rename to packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_in_4g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_in_e.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_in_e.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_in_e.png
rename to packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_in_e.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_in_g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_in_g.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_in_g.png
rename to packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_in_g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_in_h.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_in_h.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_in_h.png
rename to packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_in_h.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_inandout_1x.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_inandout_1x.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_inandout_1x.png
rename to packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_inandout_1x.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_inandout_3g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_inandout_3g.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_inandout_3g.png
rename to packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_inandout_3g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_inandout_4g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_inandout_4g.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_inandout_4g.png
rename to packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_inandout_4g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_inandout_e.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_inandout_e.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_inandout_e.png
rename to packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_inandout_e.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_inandout_g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_inandout_g.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_inandout_g.png
rename to packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_inandout_g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_inandout_h.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_inandout_h.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_inandout_h.png
rename to packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_inandout_h.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_out_1x.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_out_1x.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_out_1x.png
rename to packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_out_1x.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_out_3g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_out_3g.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_out_3g.png
rename to packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_out_3g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_out_4g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_out_4g.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_out_4g.png
rename to packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_out_4g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_out_e.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_out_e.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_out_e.png
rename to packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_out_e.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_out_g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_out_g.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_out_g.png
rename to packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_out_g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_out_h.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_out_h.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_out_h.png
rename to packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_out_h.png
Binary files differ
diff --git a/packages/SystemUI/res/values-xlarge-port/dimens.xml b/packages/SystemUI/res/values-sw600dp-port/dimens.xml
similarity index 99%
rename from packages/SystemUI/res/values-xlarge-port/dimens.xml
rename to packages/SystemUI/res/values-sw600dp-port/dimens.xml
index 56effa3..78dd8c4 100644
--- a/packages/SystemUI/res/values-xlarge-port/dimens.xml
+++ b/packages/SystemUI/res/values-sw600dp-port/dimens.xml
@@ -20,5 +20,3 @@
<dimen name="status_bar_icon_padding">2dp</dimen>
</resources>
-
-
diff --git a/packages/SystemUI/res/values-xlarge/colors.xml b/packages/SystemUI/res/values-sw600dp/colors.xml
similarity index 100%
rename from packages/SystemUI/res/values-xlarge/colors.xml
rename to packages/SystemUI/res/values-sw600dp/colors.xml
diff --git a/packages/SystemUI/res/values-xlarge/dimens.xml b/packages/SystemUI/res/values-sw600dp/dimens.xml
similarity index 81%
rename from packages/SystemUI/res/values-xlarge/dimens.xml
rename to packages/SystemUI/res/values-sw600dp/dimens.xml
index 9d89e21..dec8b67 100644
--- a/packages/SystemUI/res/values-xlarge/dimens.xml
+++ b/packages/SystemUI/res/values-sw600dp/dimens.xml
@@ -22,6 +22,9 @@
<dimen name="status_bar_panel_bottom_offset">36dp</dimen>
<!-- gap on either side of status bar notification icons -->
<dimen name="status_bar_icon_padding">8dp</dimen>
+ <!-- The width of the notification panel window -->
+ <dimen name="notification_panel_width">512dp</dimen>
+ <!-- The minimum height of the notification panel window -->
+ <dimen name="notification_panel_min_height">770dp</dimen>
</resources>
-
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java
index 91c3cc1..63bc9b7 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java
@@ -43,6 +43,7 @@
import android.text.TextUtils;
import android.util.Slog;
import android.view.accessibility.AccessibilityEvent;
+import android.view.Display;
import android.view.Gravity;
import android.view.IWindowManager;
import android.view.KeyEvent;
@@ -130,6 +131,7 @@
InputMethodButton mInputMethodSwitchButton;
NotificationPanel mNotificationPanel;
+ WindowManager.LayoutParams mNotificationPanelParams;
NotificationPeekPanel mNotificationPeekWindow;
ViewGroup mNotificationPeekRow;
int mNotificationPeekIndex;
@@ -170,6 +172,7 @@
protected void addPanelWindows() {
final Context context = mContext;
+ final Resources res = mContext.getResources();
// Notification Panel
mNotificationPanel = (NotificationPanel)View.inflate(context,
@@ -197,11 +200,12 @@
mStatusBarView.setIgnoreChildren(0, mNotificationTrigger, mNotificationPanel);
- WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
- 512, // ViewGroup.LayoutParams.MATCH_PARENT,
- ViewGroup.LayoutParams.MATCH_PARENT,
+ WindowManager.LayoutParams lp = mNotificationPanelParams = new WindowManager.LayoutParams(
+ res.getDimensionPixelSize(R.dimen.notification_panel_width),
+ getNotificationPanelHeight(),
WindowManager.LayoutParams.TYPE_STATUS_BAR_PANEL,
WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
+ | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS
| WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM
| WindowManager.LayoutParams.FLAG_SPLIT_TOUCH
| WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,
@@ -303,6 +307,13 @@
WindowManagerImpl.getDefault().addView(mInputMethodsPanel, lp);
}
+ private int getNotificationPanelHeight() {
+ final Resources res = mContext.getResources();
+ final Display d = WindowManagerImpl.getDefault().getDefaultDisplay();
+ return Math.max(res.getDimensionPixelSize(R.dimen.notification_panel_min_height),
+ d.getHeight());
+ }
+
@Override
public void start() {
super.start(); // will add the main bar view
@@ -311,6 +322,9 @@
@Override
protected void onConfigurationChanged(Configuration newConfig) {
loadDimens();
+ mNotificationPanelParams.height = getNotificationPanelHeight();
+ WindowManagerImpl.getDefault().updateViewLayout(mNotificationPanel,
+ mNotificationPanelParams);
}
protected void loadDimens() {
diff --git a/services/input/InputReader.cpp b/services/input/InputReader.cpp
index 25a2c78..35e08d4 100644
--- a/services/input/InputReader.cpp
+++ b/services/input/InputReader.cpp
@@ -1694,7 +1694,7 @@
mPointerController->setButtonState(mLocked.buttonState);
}
- mPointerController->unfade();
+ mPointerController->unfade(PointerControllerInterface::TRANSITION_IMMEDIATE);
}
float x, y;
@@ -1772,7 +1772,7 @@
{ // acquire lock
AutoMutex _l(mLock);
if (mPointerController != NULL) {
- mPointerController->fade();
+ mPointerController->fade(PointerControllerInterface::TRANSITION_GRADUAL);
}
} // release lock
}
@@ -1965,10 +1965,22 @@
mParameters.useJumpyTouchFilter = getPolicy()->filterJumpyTouchEvents();
mParameters.virtualKeyQuietTime = getPolicy()->getVirtualKeyQuietTime();
- // TODO: Make this configurable.
- //mParameters.gestureMode = Parameters::GESTURE_MODE_POINTER;
+ // TODO: select the default gesture mode based on whether the device supports
+ // distinct multitouch
mParameters.gestureMode = Parameters::GESTURE_MODE_SPOTS;
+ String8 gestureModeString;
+ if (getDevice()->getConfiguration().tryGetProperty(String8("touch.gestureMode"),
+ gestureModeString)) {
+ if (gestureModeString == "pointer") {
+ mParameters.gestureMode = Parameters::GESTURE_MODE_POINTER;
+ } else if (gestureModeString == "spots") {
+ mParameters.gestureMode = Parameters::GESTURE_MODE_SPOTS;
+ } else if (gestureModeString != "default") {
+ LOGW("Invalid value for touch.gestureMode: '%s'", gestureModeString.string());
+ }
+ }
+
if (getEventHub()->hasRelativeAxis(getDeviceId(), REL_X)
|| getEventHub()->hasRelativeAxis(getDeviceId(), REL_Y)) {
// The device is a cursor device with a touch pad attached.
@@ -1994,7 +2006,7 @@
mParameters.deviceType = Parameters::DEVICE_TYPE_TOUCH_PAD;
} else if (deviceTypeString == "pointer") {
mParameters.deviceType = Parameters::DEVICE_TYPE_POINTER;
- } else {
+ } else if (deviceTypeString != "default") {
LOGW("Invalid value for touch.deviceType: '%s'", deviceTypeString.string());
}
}
@@ -2012,6 +2024,17 @@
void TouchInputMapper::dumpParameters(String8& dump) {
dump.append(INDENT3 "Parameters:\n");
+ switch (mParameters.gestureMode) {
+ case Parameters::GESTURE_MODE_POINTER:
+ dump.append(INDENT4 "GestureMode: pointer\n");
+ break;
+ case Parameters::GESTURE_MODE_SPOTS:
+ dump.append(INDENT4 "GestureMode: spots\n");
+ break;
+ default:
+ assert(false);
+ }
+
switch (mParameters.deviceType) {
case Parameters::DEVICE_TYPE_TOUCH_SCREEN:
dump.append(INDENT4 "DeviceType: touchScreen\n");
@@ -3465,10 +3488,36 @@
return;
}
- // Show the pointer if needed.
- if (mPointerGesture.currentGestureMode != PointerGesture::NEUTRAL
- && mPointerGesture.currentGestureMode != PointerGesture::QUIET) {
- mPointerController->unfade();
+ // Show or hide the pointer if needed.
+ switch (mPointerGesture.currentGestureMode) {
+ case PointerGesture::NEUTRAL:
+ case PointerGesture::QUIET:
+ if (mParameters.gestureMode == Parameters::GESTURE_MODE_SPOTS
+ && (mPointerGesture.lastGestureMode == PointerGesture::SWIPE
+ || mPointerGesture.lastGestureMode == PointerGesture::FREEFORM)) {
+ // Remind the user of where the pointer is after finishing a gesture with spots.
+ mPointerController->unfade(PointerControllerInterface::TRANSITION_GRADUAL);
+ }
+ break;
+ case PointerGesture::TAP:
+ case PointerGesture::TAP_DRAG:
+ case PointerGesture::BUTTON_CLICK_OR_DRAG:
+ case PointerGesture::HOVER:
+ case PointerGesture::PRESS:
+ // Unfade the pointer when the current gesture manipulates the
+ // area directly under the pointer.
+ mPointerController->unfade(PointerControllerInterface::TRANSITION_IMMEDIATE);
+ break;
+ case PointerGesture::SWIPE:
+ case PointerGesture::FREEFORM:
+ // Fade the pointer when the current gesture manipulates a different
+ // area and there are spots to guide the user experience.
+ if (mParameters.gestureMode == Parameters::GESTURE_MODE_SPOTS) {
+ mPointerController->fade(PointerControllerInterface::TRANSITION_GRADUAL);
+ } else {
+ mPointerController->unfade(PointerControllerInterface::TRANSITION_IMMEDIATE);
+ }
+ break;
}
// Send events!
@@ -4037,6 +4086,7 @@
*outFinishPreviousGesture = true;
mPointerGesture.currentGestureMode = PointerGesture::PRESS;
mPointerGesture.activeGestureId = 0;
+ mPointerGesture.referenceIdBits.clear();
if (settled && mParameters.gestureMode == Parameters::GESTURE_MODE_SPOTS
&& mLastTouch.idBits.hasBit(mPointerGesture.activeTouchId)) {
@@ -4167,6 +4217,17 @@
}
}
+ // Clear the reference deltas for fingers not yet included in the reference calculation.
+ for (BitSet32 idBits(mCurrentTouch.idBits.value & ~mPointerGesture.referenceIdBits.value);
+ !idBits.isEmpty(); ) {
+ uint32_t id = idBits.firstMarkedBit();
+ idBits.clearBit(id);
+
+ mPointerGesture.referenceDeltas[id].dx = 0;
+ mPointerGesture.referenceDeltas[id].dy = 0;
+ }
+ mPointerGesture.referenceIdBits = mCurrentTouch.idBits;
+
// Move the reference points based on the overall group motion of the fingers.
// The objective is to calculate a vector delta that is common to the movement
// of all fingers.
@@ -4180,27 +4241,39 @@
const PointerData& cpd = mCurrentTouch.pointers[mCurrentTouch.idToIndex[id]];
const PointerData& lpd = mLastTouch.pointers[mLastTouch.idToIndex[id]];
- float deltaX = cpd.x - lpd.x;
- float deltaY = cpd.y - lpd.y;
+ PointerGesture::Delta& delta = mPointerGesture.referenceDeltas[id];
+ delta.dx += cpd.x - lpd.x;
+ delta.dy += cpd.y - lpd.y;
if (first) {
- commonDeltaX = deltaX;
- commonDeltaY = deltaY;
+ commonDeltaX = delta.dx;
+ commonDeltaY = delta.dy;
} else {
- commonDeltaX = calculateCommonVector(commonDeltaX, deltaX);
- commonDeltaY = calculateCommonVector(commonDeltaY, deltaY);
+ commonDeltaX = calculateCommonVector(commonDeltaX, delta.dx);
+ commonDeltaY = calculateCommonVector(commonDeltaY, delta.dy);
}
}
- mPointerGesture.referenceTouchX += commonDeltaX;
- mPointerGesture.referenceTouchY += commonDeltaY;
- mPointerGesture.referenceGestureX +=
- commonDeltaX * mLocked.pointerGestureXMovementScale;
- mPointerGesture.referenceGestureY +=
- commonDeltaY * mLocked.pointerGestureYMovementScale;
- clampPositionUsingPointerBounds(mPointerController,
- &mPointerGesture.referenceGestureX,
- &mPointerGesture.referenceGestureY);
+ if (commonDeltaX || commonDeltaY) {
+ for (BitSet32 idBits(commonIdBits); !idBits.isEmpty(); ) {
+ uint32_t id = idBits.firstMarkedBit();
+ idBits.clearBit(id);
+
+ PointerGesture::Delta& delta = mPointerGesture.referenceDeltas[id];
+ delta.dx = 0;
+ delta.dy = 0;
+ }
+
+ mPointerGesture.referenceTouchX += commonDeltaX;
+ mPointerGesture.referenceTouchY += commonDeltaY;
+ mPointerGesture.referenceGestureX +=
+ commonDeltaX * mLocked.pointerGestureXMovementScale;
+ mPointerGesture.referenceGestureY +=
+ commonDeltaY * mLocked.pointerGestureYMovementScale;
+ clampPositionUsingPointerBounds(mPointerController,
+ &mPointerGesture.referenceGestureX,
+ &mPointerGesture.referenceGestureY);
+ }
}
// Report gestures.
@@ -4508,7 +4581,7 @@
{ // acquire lock
AutoMutex _l(mLock);
if (mPointerController != NULL) {
- mPointerController->fade();
+ mPointerController->fade(PointerControllerInterface::TRANSITION_GRADUAL);
}
} // release lock
}
diff --git a/services/input/InputReader.h b/services/input/InputReader.h
index 85338b6..671e194 100644
--- a/services/input/InputReader.h
+++ b/services/input/InputReader.h
@@ -1048,6 +1048,14 @@
float referenceGestureX; // reference gesture X/Y coordinates in pixels
float referenceGestureY;
+ // Distance that each pointer has traveled which has not yet been
+ // subsumed into the reference gesture position.
+ BitSet32 referenceIdBits;
+ struct Delta {
+ float dx, dy;
+ };
+ Delta referenceDeltas[MAX_POINTER_ID + 1];
+
// Describes how touch ids are mapped to gesture ids for freeform gestures.
uint32_t freeformTouchToGestureIdMap[MAX_POINTER_ID + 1];
diff --git a/services/input/PointerController.cpp b/services/input/PointerController.cpp
index b87c98d..c18ebcf 100644
--- a/services/input/PointerController.cpp
+++ b/services/input/PointerController.cpp
@@ -69,10 +69,10 @@
mLocked.inactivityTimeout = INACTIVITY_TIMEOUT_NORMAL;
- mLocked.pointerIsFading = true; // keep the pointer initially faded
+ mLocked.pointerFadeDirection = 0;
mLocked.pointerX = 0;
mLocked.pointerY = 0;
- mLocked.pointerAlpha = 0.0f;
+ mLocked.pointerAlpha = 0.0f; // pointer is initially faded
mLocked.pointerSprite = mSpriteController->createSprite();
mLocked.pointerIconChanged = false;
@@ -191,23 +191,37 @@
*outY = mLocked.pointerY;
}
-void PointerController::fade() {
+void PointerController::fade(Transition transition) {
AutoMutex _l(mLock);
- sendImmediateInactivityTimeoutLocked();
+ // Remove the inactivity timeout, since we are fading now.
+ removeInactivityTimeoutLocked();
+
+ // Start fading.
+ if (transition == TRANSITION_IMMEDIATE) {
+ mLocked.pointerFadeDirection = 0;
+ mLocked.pointerAlpha = 0.0f;
+ updatePointerLocked();
+ } else {
+ mLocked.pointerFadeDirection = -1;
+ startAnimationLocked();
+ }
}
-void PointerController::unfade() {
+void PointerController::unfade(Transition transition) {
AutoMutex _l(mLock);
// Always reset the inactivity timer.
resetInactivityTimeoutLocked();
- // Unfade immediately if needed.
- if (mLocked.pointerIsFading) {
- mLocked.pointerIsFading = false;
+ // Start unfading.
+ if (transition == TRANSITION_IMMEDIATE) {
+ mLocked.pointerFadeDirection = 0;
mLocked.pointerAlpha = 1.0f;
updatePointerLocked();
+ } else {
+ mLocked.pointerFadeDirection = 1;
+ startAnimationLocked();
}
}
@@ -401,10 +415,20 @@
nsecs_t frameDelay = systemTime(SYSTEM_TIME_MONOTONIC) - mLocked.animationTime;
// Animate pointer fade.
- if (mLocked.pointerIsFading) {
+ if (mLocked.pointerFadeDirection < 0) {
mLocked.pointerAlpha -= float(frameDelay) / POINTER_FADE_DURATION;
- if (mLocked.pointerAlpha <= 0) {
- mLocked.pointerAlpha = 0;
+ if (mLocked.pointerAlpha <= 0.0f) {
+ mLocked.pointerAlpha = 0.0f;
+ mLocked.pointerFadeDirection = 0;
+ } else {
+ keepAnimating = true;
+ }
+ updatePointerLocked();
+ } else if (mLocked.pointerFadeDirection > 0) {
+ mLocked.pointerAlpha += float(frameDelay) / POINTER_FADE_DURATION;
+ if (mLocked.pointerAlpha >= 1.0f) {
+ mLocked.pointerAlpha = 1.0f;
+ mLocked.pointerFadeDirection = 0;
} else {
keepAnimating = true;
}
@@ -432,12 +456,7 @@
}
void PointerController::doInactivityTimeout() {
- AutoMutex _l(mLock);
-
- if (!mLocked.pointerIsFading) {
- mLocked.pointerIsFading = true;
- startAnimationLocked();
- }
+ fade(TRANSITION_GRADUAL);
}
void PointerController::startAnimationLocked() {
@@ -456,9 +475,8 @@
mLooper->sendMessageDelayed(timeout, mHandler, MSG_INACTIVITY_TIMEOUT);
}
-void PointerController::sendImmediateInactivityTimeoutLocked() {
+void PointerController::removeInactivityTimeoutLocked() {
mLooper->removeMessages(mHandler, MSG_INACTIVITY_TIMEOUT);
- mLooper->sendMessage(mHandler, MSG_INACTIVITY_TIMEOUT);
}
void PointerController::updatePointerLocked() {
diff --git a/services/input/PointerController.h b/services/input/PointerController.h
index c7435ee..1c21db1 100644
--- a/services/input/PointerController.h
+++ b/services/input/PointerController.h
@@ -64,14 +64,21 @@
/* Gets the absolute location of the pointer. */
virtual void getPosition(float* outX, float* outY) const = 0;
+ enum Transition {
+ // Fade/unfade immediately.
+ TRANSITION_IMMEDIATE,
+ // Fade/unfade gradually.
+ TRANSITION_GRADUAL,
+ };
+
/* Fades the pointer out now. */
- virtual void fade() = 0;
+ virtual void fade(Transition transition) = 0;
/* Makes the pointer visible if it has faded out.
* The pointer never unfades itself automatically. This method must be called
* by the client whenever the pointer is moved or a button is pressed and it
* wants to ensure that the pointer becomes visible again. */
- virtual void unfade() = 0;
+ virtual void unfade(Transition transition) = 0;
enum Presentation {
// Show the mouse pointer.
@@ -187,8 +194,8 @@
virtual int32_t getButtonState() const;
virtual void setPosition(float x, float y);
virtual void getPosition(float* outX, float* outY) const;
- virtual void fade();
- virtual void unfade();
+ virtual void fade(Transition transition);
+ virtual void unfade(Transition transition);
virtual void setPresentation(Presentation presentation);
virtual void setSpots(SpotGesture spotGesture,
@@ -250,7 +257,7 @@
Presentation presentation;
bool presentationChanged;
- bool pointerIsFading;
+ int32_t pointerFadeDirection;
float pointerX;
float pointerY;
float pointerAlpha;
@@ -274,7 +281,7 @@
void startAnimationLocked();
void resetInactivityTimeoutLocked();
- void sendImmediateInactivityTimeoutLocked();
+ void removeInactivityTimeoutLocked();
void updatePointerLocked();
Spot* getSpotLocked(uint32_t id);
diff --git a/services/input/tests/InputReader_test.cpp b/services/input/tests/InputReader_test.cpp
index 1ab2a3e..78d1db65 100644
--- a/services/input/tests/InputReader_test.cpp
+++ b/services/input/tests/InputReader_test.cpp
@@ -92,10 +92,10 @@
*outY = 0;
}
- virtual void fade() {
+ virtual void fade(Transition transition) {
}
- virtual void unfade() {
+ virtual void unfade(Transition transition) {
}
virtual void setPresentation(Presentation presentation) {
diff --git a/services/java/com/android/server/ConnectivityService.java b/services/java/com/android/server/ConnectivityService.java
index d2fd04b..a564c2d 100644
--- a/services/java/com/android/server/ConnectivityService.java
+++ b/services/java/com/android/server/ConnectivityService.java
@@ -39,6 +39,7 @@
import android.net.vpn.VpnManager;
import android.net.wifi.WifiStateTracker;
import android.os.Binder;
+import android.os.FileUtils;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.IBinder;
@@ -58,7 +59,6 @@
import com.android.server.connectivity.Tethering;
import java.io.FileDescriptor;
-import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.InetAddress;
@@ -1552,12 +1552,12 @@
if (values.length == 6) {
final String prefix = "/sys/kernel/ipv4/tcp_";
- stringToFile(prefix + "rmem_min", values[0]);
- stringToFile(prefix + "rmem_def", values[1]);
- stringToFile(prefix + "rmem_max", values[2]);
- stringToFile(prefix + "wmem_min", values[3]);
- stringToFile(prefix + "wmem_def", values[4]);
- stringToFile(prefix + "wmem_max", values[5]);
+ FileUtils.stringToFile(prefix + "rmem_min", values[0]);
+ FileUtils.stringToFile(prefix + "rmem_def", values[1]);
+ FileUtils.stringToFile(prefix + "rmem_max", values[2]);
+ FileUtils.stringToFile(prefix + "wmem_min", values[3]);
+ FileUtils.stringToFile(prefix + "wmem_def", values[4]);
+ FileUtils.stringToFile(prefix + "wmem_max", values[5]);
} else {
loge("Invalid buffersize string: " + bufferSizes);
}
@@ -1566,23 +1566,6 @@
}
}
- /**
- * Writes string to file. Basically same as "echo -n $string > $filename"
- *
- * @param filename
- * @param string
- * @throws IOException
- */
- private void stringToFile(String filename, String string) throws IOException {
- FileWriter out = new FileWriter(filename);
- try {
- out.write(string);
- } finally {
- out.close();
- }
- }
-
-
/**
* Adjust the per-process dns entries (net.dns<x>.<pid>) based
* on the highest priority active net which this process requested.
diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java
index cf5592c..262e5ce 100644
--- a/services/java/com/android/server/am/ActivityManagerService.java
+++ b/services/java/com/android/server/am/ActivityManagerService.java
@@ -968,10 +968,12 @@
static final int CHECK_EXCESSIVE_WAKE_LOCKS_MSG = 27;
static final int CLEAR_DNS_CACHE = 28;
static final int UPDATE_HTTP_PROXY = 29;
- static final int DISPATCH_FOREGROUND_ACTIVITIES_CHANGED = 30;
- static final int DISPATCH_PROCESS_DIED = 31;
+ static final int SHOW_COMPAT_MODE_DIALOG_MSG = 30;
+ static final int DISPATCH_FOREGROUND_ACTIVITIES_CHANGED = 31;
+ static final int DISPATCH_PROCESS_DIED = 32;
AlertDialog mUidAlert;
+ CompatModeDialog mCompatModeDialog;
final Handler mHandler = new Handler() {
//public Handler() {
@@ -1270,6 +1272,34 @@
sendMessageDelayed(nmsg, POWER_CHECK_DELAY);
}
} break;
+ case SHOW_COMPAT_MODE_DIALOG_MSG: {
+ synchronized (ActivityManagerService.this) {
+ ActivityRecord ar = (ActivityRecord)msg.obj;
+ if (mCompatModeDialog != null) {
+ if (mCompatModeDialog.mAppInfo.packageName.equals(
+ ar.info.applicationInfo.packageName)) {
+ return;
+ }
+ mCompatModeDialog.dismiss();
+ mCompatModeDialog = null;
+ }
+ if (ar != null) {
+ if (mCompatModePackages.getPackageAskCompatModeLocked(
+ ar.packageName)) {
+ int mode = mCompatModePackages.computeCompatModeLocked(
+ ar.info.applicationInfo);
+ if (mode == ActivityManager.COMPAT_MODE_DISABLED
+ || mode == ActivityManager.COMPAT_MODE_ENABLED) {
+ mCompatModeDialog = new CompatModeDialog(
+ ActivityManagerService.this, mContext,
+ ar.info.applicationInfo);
+ mCompatModeDialog.show();
+ }
+ }
+ }
+ }
+ break;
+ }
case DISPATCH_FOREGROUND_ACTIVITIES_CHANGED: {
final ProcessRecord app = (ProcessRecord) msg.obj;
final boolean foregroundActivities = msg.arg1 != 0;
@@ -2112,6 +2142,18 @@
}
}
+ public boolean getPackageAskScreenCompat(String packageName) {
+ synchronized (this) {
+ return mCompatModePackages.getPackageAskCompatModeLocked(packageName);
+ }
+ }
+
+ public void setPackageAskScreenCompat(String packageName, boolean ask) {
+ synchronized (this) {
+ mCompatModePackages.setPackageAskCompatModeLocked(packageName, ask);
+ }
+ }
+
void reportResumedActivityLocked(ActivityRecord r) {
//Slog.i(TAG, "**** REPORT RESUME: " + r);
@@ -7948,8 +7990,14 @@
if (dumpAll) {
pw.println(" mConfigWillChange: " + mMainStack.mConfigWillChange);
if (mCompatModePackages.getPackages().size() > 0) {
- pw.print(" mScreenCompatPackages=");
- pw.println(mCompatModePackages.getPackages());
+ pw.println(" mScreenCompatPackages:");
+ for (Map.Entry<String, Integer> entry
+ : mCompatModePackages.getPackages().entrySet()) {
+ String pkg = entry.getKey();
+ int mode = entry.getValue();
+ pw.print(" "); pw.print(pkg); pw.print(": ");
+ pw.print(mode); pw.println();
+ }
}
}
pw.println(" mSleeping=" + mSleeping + " mShuttingDown=" + mShuttingDown);
diff --git a/services/java/com/android/server/am/ActivityStack.java b/services/java/com/android/server/am/ActivityStack.java
index d5ac19e..af69307 100644
--- a/services/java/com/android/server/am/ActivityStack.java
+++ b/services/java/com/android/server/am/ActivityStack.java
@@ -485,6 +485,13 @@
return null;
}
+ final void showAskCompatModeDialogLocked(ActivityRecord r) {
+ Message msg = Message.obtain();
+ msg.what = ActivityManagerService.SHOW_COMPAT_MODE_DIALOG_MSG;
+ msg.obj = r.task.askedCompatMode ? null : r;
+ mService.mHandler.sendMessage(msg);
+ }
+
final boolean realStartActivityLocked(ActivityRecord r,
ProcessRecord app, boolean andResume, boolean checkConfig)
throws RemoteException {
@@ -541,6 +548,7 @@
mService.ensurePackageDexOpt(r.intent.getComponent().getPackageName());
r.sleeping = false;
r.forceNewConfig = false;
+ showAskCompatModeDialogLocked(r);
app.thread.scheduleLaunchActivity(new Intent(r.intent), r,
System.identityHashCode(r),
r.info, mService.compatibilityInfoForPackageLocked(r.info.applicationInfo),
@@ -1430,6 +1438,7 @@
next.task.taskId, next.shortComponentName);
next.sleeping = false;
+ showAskCompatModeDialogLocked(next);
next.app.thread.scheduleResumeActivity(next,
mService.isNextTransitionForward());
diff --git a/services/java/com/android/server/am/CompatModeDialog.java b/services/java/com/android/server/am/CompatModeDialog.java
new file mode 100644
index 0000000..0442bda
--- /dev/null
+++ b/services/java/com/android/server/am/CompatModeDialog.java
@@ -0,0 +1,90 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.am;
+
+import android.app.ActivityManager;
+import android.app.Dialog;
+import android.content.Context;
+import android.content.pm.ApplicationInfo;
+import android.view.Gravity;
+import android.view.View;
+import android.view.Window;
+import android.view.WindowManager;
+import android.widget.CheckBox;
+import android.widget.CompoundButton;
+import android.widget.Switch;
+
+public class CompatModeDialog extends Dialog {
+ final ActivityManagerService mService;
+ final ApplicationInfo mAppInfo;
+
+ final Switch mCompatEnabled;
+ final CheckBox mAlwaysShow;
+ final View mHint;
+
+ public CompatModeDialog(ActivityManagerService service, Context context,
+ ApplicationInfo appInfo) {
+ super(context, com.android.internal.R.style.Theme_Holo_Dialog_MinWidth);
+ setCancelable(true);
+ setCanceledOnTouchOutside(true);
+ getWindow().requestFeature(Window.FEATURE_NO_TITLE);
+ getWindow().setType(WindowManager.LayoutParams.TYPE_PHONE);
+ getWindow().setGravity(Gravity.BOTTOM|Gravity.CENTER_HORIZONTAL);
+ mService = service;
+ mAppInfo = appInfo;
+
+ setContentView(com.android.internal.R.layout.am_compat_mode_dialog);
+ mCompatEnabled = (Switch)findViewById(com.android.internal.R.id.compat_checkbox);
+ mCompatEnabled.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
+ @Override
+ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
+ synchronized (mService) {
+ mService.mCompatModePackages.setPackageScreenCompatModeLocked(
+ mAppInfo.packageName,
+ mCompatEnabled.isChecked() ? ActivityManager.COMPAT_MODE_ENABLED
+ : ActivityManager.COMPAT_MODE_DISABLED);
+ updateControls();
+ }
+ }
+ });
+ mAlwaysShow = (CheckBox)findViewById(com.android.internal.R.id.ask_checkbox);
+ mAlwaysShow.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
+ @Override
+ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
+ synchronized (mService) {
+ mService.mCompatModePackages.setPackageAskCompatModeLocked(
+ mAppInfo.packageName, mAlwaysShow.isChecked());
+ updateControls();
+ }
+ }
+ });
+ mHint = findViewById(com.android.internal.R.id.reask_hint);
+
+ updateControls();
+ }
+
+ void updateControls() {
+ synchronized (mService) {
+ int mode = mService.mCompatModePackages.computeCompatModeLocked(mAppInfo);
+ mCompatEnabled.setChecked(mode == ActivityManager.COMPAT_MODE_ENABLED);
+ boolean ask = mService.mCompatModePackages.getPackageAskCompatModeLocked(
+ mAppInfo.packageName);
+ mAlwaysShow.setChecked(ask);
+ mHint.setVisibility(ask ? View.INVISIBLE : View.VISIBLE);
+ }
+ }
+}
diff --git a/services/java/com/android/server/am/CompatModePackages.java b/services/java/com/android/server/am/CompatModePackages.java
index 1faf8da..1277bca 100644
--- a/services/java/com/android/server/am/CompatModePackages.java
+++ b/services/java/com/android/server/am/CompatModePackages.java
@@ -3,8 +3,10 @@
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
+import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
+import java.util.Map;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
@@ -31,7 +33,12 @@
private final ActivityManagerService mService;
private final AtomicFile mFile;
- private final HashSet<String> mPackages = new HashSet<String>();
+ // Compatibility state: no longer ask user to select the mode.
+ public static final int COMPAT_FLAG_DONT_ASK = 1<<0;
+ // Compatibility state: compatibility mode is enabled.
+ public static final int COMPAT_FLAG_ENABLED = 1<<1;
+
+ private final HashMap<String, Integer> mPackages = new HashMap<String, Integer>();
private static final int MSG_WRITE = 1;
@@ -71,7 +78,15 @@
if ("pkg".equals(tagName)) {
String pkg = parser.getAttributeValue(null, "name");
if (pkg != null) {
- mPackages.add(pkg);
+ String mode = parser.getAttributeValue(null, "mode");
+ int modeInt = 0;
+ if (mode != null) {
+ try {
+ modeInt = Integer.parseInt(mode);
+ } catch (NumberFormatException e) {
+ }
+ }
+ mPackages.put(pkg, modeInt);
}
}
}
@@ -93,17 +108,22 @@
}
}
- public HashSet<String> getPackages() {
+ public HashMap<String, Integer> getPackages() {
return mPackages;
}
+ private int getPackageFlags(String packageName) {
+ Integer flags = mPackages.get(packageName);
+ return flags != null ? flags : 0;
+ }
+
public CompatibilityInfo compatibilityInfoForPackageLocked(ApplicationInfo ai) {
return new CompatibilityInfo(ai, mService.mConfiguration.screenLayout,
- mPackages.contains(ai.packageName));
+ (getPackageFlags(ai.packageName)&COMPAT_FLAG_ENABLED) != 0);
}
- private int computeCompatModeLocked(ApplicationInfo ai) {
- boolean enabled = mPackages.contains(ai.packageName);
+ public int computeCompatModeLocked(ApplicationInfo ai) {
+ boolean enabled = (getPackageFlags(ai.packageName)&COMPAT_FLAG_ENABLED) != 0;
CompatibilityInfo info = new CompatibilityInfo(ai,
mService.mConfiguration.screenLayout, enabled);
if (info.alwaysSupportsScreen()) {
@@ -116,6 +136,40 @@
: ActivityManager.COMPAT_MODE_DISABLED;
}
+ public boolean getFrontActivityAskCompatModeLocked() {
+ ActivityRecord r = mService.mMainStack.topRunningActivityLocked(null);
+ if (r == null) {
+ return false;
+ }
+ return getPackageAskCompatModeLocked(r.packageName);
+ }
+
+ public boolean getPackageAskCompatModeLocked(String packageName) {
+ return (getPackageFlags(packageName)&COMPAT_FLAG_DONT_ASK) == 0;
+ }
+
+ public void setFrontActivityAskCompatModeLocked(boolean ask) {
+ ActivityRecord r = mService.mMainStack.topRunningActivityLocked(null);
+ if (r != null) {
+ setPackageAskCompatModeLocked(r.packageName, ask);
+ }
+ }
+
+ public void setPackageAskCompatModeLocked(String packageName, boolean ask) {
+ int curFlags = getPackageFlags(packageName);
+ int newFlags = ask ? (curFlags&~COMPAT_FLAG_DONT_ASK) : (curFlags|COMPAT_FLAG_DONT_ASK);
+ if (curFlags != newFlags) {
+ if (newFlags != 0) {
+ mPackages.put(packageName, newFlags);
+ } else {
+ mPackages.remove(packageName);
+ }
+ mHandler.removeMessages(MSG_WRITE);
+ Message msg = mHandler.obtainMessage(MSG_WRITE);
+ mHandler.sendMessageDelayed(msg, 10000);
+ }
+ }
+
public int getFrontActivityScreenCompatModeLocked() {
ActivityRecord r = mService.mMainStack.topRunningActivityLocked(null);
if (r == null) {
@@ -161,7 +215,8 @@
private void setPackageScreenCompatModeLocked(ApplicationInfo ai, int mode) {
final String packageName = ai.packageName;
- boolean changed = false;
+ int curFlags = getPackageFlags(packageName);
+
boolean enable;
switch (mode) {
case ActivityManager.COMPAT_MODE_DISABLED:
@@ -171,24 +226,26 @@
enable = true;
break;
case ActivityManager.COMPAT_MODE_TOGGLE:
- enable = !mPackages.contains(packageName);
+ enable = (curFlags&COMPAT_FLAG_ENABLED) == 0;
break;
default:
Slog.w(TAG, "Unknown screen compat mode req #" + mode + "; ignoring");
return;
}
+
+ int newFlags = curFlags;
if (enable) {
- if (!mPackages.contains(packageName)) {
- changed = true;
- mPackages.add(packageName);
- }
+ newFlags |= COMPAT_FLAG_ENABLED;
} else {
- if (mPackages.contains(packageName)) {
- changed = true;
+ newFlags &= ~COMPAT_FLAG_ENABLED;
+ }
+
+ if (newFlags != curFlags) {
+ if (newFlags != 0) {
+ mPackages.put(packageName, newFlags);
+ } else {
mPackages.remove(packageName);
}
- }
- if (changed) {
CompatibilityInfo ci = compatibilityInfoForPackageLocked(ai);
if (ci.alwaysSupportsScreen()) {
Slog.w(TAG, "Ignoring compat mode change of " + packageName
@@ -241,9 +298,9 @@
}
void saveCompatModes() {
- HashSet<String> pkgs;
+ HashMap<String, Integer> pkgs;
synchronized (mService) {
- pkgs = new HashSet<String>(mPackages);
+ pkgs = new HashMap<String, Integer>(mPackages);
}
FileOutputStream fos = null;
@@ -258,9 +315,14 @@
final IPackageManager pm = AppGlobals.getPackageManager();
final int screenLayout = mService.mConfiguration.screenLayout;
- final Iterator<String> it = pkgs.iterator();
+ final Iterator<Map.Entry<String, Integer>> it = pkgs.entrySet().iterator();
while (it.hasNext()) {
- String pkg = it.next();
+ Map.Entry<String, Integer> entry = it.next();
+ String pkg = entry.getKey();
+ int mode = entry.getValue();
+ if (mode == 0) {
+ continue;
+ }
ApplicationInfo ai = null;
try {
ai = pm.getApplicationInfo(pkg, 0);
@@ -278,6 +340,7 @@
}
out.startTag(null, "pkg");
out.attribute(null, "name", pkg);
+ out.attribute(null, "mode", Integer.toString(mode));
out.endTag(null, "pkg");
}
diff --git a/services/java/com/android/server/am/TaskRecord.java b/services/java/com/android/server/am/TaskRecord.java
index e8c87e1..e61a7f4 100644
--- a/services/java/com/android/server/am/TaskRecord.java
+++ b/services/java/com/android/server/am/TaskRecord.java
@@ -34,6 +34,7 @@
long lastActiveTime; // Last time this task was active, including sleep.
boolean rootWasReset; // True if the intent at the root of the task had
// the FLAG_ACTIVITY_RESET_TASK_IF_NEEDED flag.
+ boolean askedCompatMode;// Have asked the user about compat mode for this task.
String stringName; // caching of toString() result.
@@ -112,6 +113,9 @@
pw.print(prefix); pw.print("realActivity=");
pw.println(realActivity.flattenToShortString());
}
+ if (!askedCompatMode) {
+ pw.print(prefix); pw.print("askedCompatMode="); pw.println(askedCompatMode);
+ }
pw.print(prefix); pw.print("lastActiveTime="); pw.print(lastActiveTime);
pw.print(" (inactive for ");
pw.print((getInactiveDuration()/1000)); pw.println("s)");
diff --git a/services/java/com/android/server/usb/UsbDeviceManager.java b/services/java/com/android/server/usb/UsbDeviceManager.java
new file mode 100644
index 0000000..3791cc4
--- /dev/null
+++ b/services/java/com/android/server/usb/UsbDeviceManager.java
@@ -0,0 +1,431 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions an
+ * limitations under the License.
+ */
+
+package com.android.server.usb;
+
+import android.app.PendingIntent;
+import android.content.BroadcastReceiver;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.pm.PackageManager;
+import android.hardware.usb.UsbAccessory;
+import android.hardware.usb.UsbManager;
+import android.net.Uri;
+import android.os.Binder;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
+import android.os.Parcelable;
+import android.os.ParcelFileDescriptor;
+import android.os.UEventObserver;
+import android.provider.Settings;
+import android.util.Log;
+import android.util.Slog;
+
+import java.io.File;
+import java.io.FileDescriptor;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * UsbDeviceManager manages USB state in device mode.
+ */
+public class UsbDeviceManager {
+ private static final String TAG = UsbDeviceManager.class.getSimpleName();
+ private static final boolean LOG = false;
+
+ private static final String USB_CONNECTED_MATCH =
+ "DEVPATH=/devices/virtual/switch/usb_connected";
+ private static final String USB_CONFIGURATION_MATCH =
+ "DEVPATH=/devices/virtual/switch/usb_configuration";
+ private static final String USB_FUNCTIONS_MATCH =
+ "DEVPATH=/devices/virtual/usb_composite/";
+ private static final String USB_CONNECTED_PATH =
+ "/sys/class/switch/usb_connected/state";
+ private static final String USB_CONFIGURATION_PATH =
+ "/sys/class/switch/usb_configuration/state";
+ private static final String USB_COMPOSITE_CLASS_PATH =
+ "/sys/class/usb_composite";
+
+ private static final int MSG_UPDATE_STATE = 0;
+ private static final int MSG_FUNCTION_ENABLED = 1;
+ private static final int MSG_FUNCTION_DISABLED = 2;
+
+ // Delay for debouncing USB disconnects.
+ // We often get rapid connect/disconnect events when enabling USB functions,
+ // which need debouncing.
+ private static final int UPDATE_DELAY = 1000;
+
+ // current connected and configuration state
+ private int mConnected;
+ private int mConfiguration;
+
+ // last broadcasted connected and configuration state
+ private int mLastConnected = -1;
+ private int mLastConfiguration = -1;
+
+ // lists of enabled and disabled USB functions
+ private final ArrayList<String> mEnabledFunctions = new ArrayList<String>();
+ private final ArrayList<String> mDisabledFunctions = new ArrayList<String>();
+
+ private boolean mSystemReady;
+
+ private UsbAccessory mCurrentAccessory;
+ // USB functions that are enabled by default, to restore after exiting accessory mode
+ private final ArrayList<String> mDefaultFunctions = new ArrayList<String>();
+
+ private final Context mContext;
+ private final Object mLock = new Object();
+ private final UsbSettingsManager mSettingsManager;
+ private final boolean mHasUsbAccessory;
+
+ private final void readCurrentAccessoryLocked() {
+ if (mHasUsbAccessory) {
+ String[] strings = nativeGetAccessoryStrings();
+ if (strings != null) {
+ mCurrentAccessory = new UsbAccessory(strings);
+ Log.d(TAG, "entering USB accessory mode: " + mCurrentAccessory);
+ if (mSystemReady) {
+ mSettingsManager.accessoryAttached(mCurrentAccessory);
+ }
+ } else {
+ Log.e(TAG, "nativeGetAccessoryStrings failed");
+ }
+ }
+ }
+
+ /*
+ * Handles USB function enable/disable events
+ */
+ private final void functionEnabledLocked(String function, boolean enabled) {
+ if (enabled) {
+ if (!mEnabledFunctions.contains(function)) {
+ mEnabledFunctions.add(function);
+ }
+ mDisabledFunctions.remove(function);
+
+ if (UsbManager.USB_FUNCTION_ACCESSORY.equals(function)) {
+ readCurrentAccessoryLocked();
+ }
+ } else {
+ if (!mDisabledFunctions.contains(function)) {
+ mDisabledFunctions.add(function);
+ }
+ mEnabledFunctions.remove(function);
+ }
+ }
+
+ /*
+ * Listens for uevent messages from the kernel to monitor the USB state
+ */
+ private final UEventObserver mUEventObserver = new UEventObserver() {
+ @Override
+ public void onUEvent(UEventObserver.UEvent event) {
+ if (Log.isLoggable(TAG, Log.VERBOSE)) {
+ Slog.v(TAG, "USB UEVENT: " + event.toString());
+ }
+
+ synchronized (mLock) {
+ String name = event.get("SWITCH_NAME");
+ String state = event.get("SWITCH_STATE");
+ if (name != null && state != null) {
+ try {
+ int intState = Integer.parseInt(state);
+ if ("usb_connected".equals(name)) {
+ mConnected = intState;
+ // trigger an Intent broadcast
+ if (mSystemReady) {
+ // debounce disconnects to avoid problems bringing up USB tethering
+ update(mConnected == 0);
+ }
+ } else if ("usb_configuration".equals(name)) {
+ mConfiguration = intState;
+ // trigger an Intent broadcast
+ if (mSystemReady) {
+ update(mConnected == 0);
+ }
+ }
+ } catch (NumberFormatException e) {
+ Slog.e(TAG, "Could not parse switch state from event " + event);
+ }
+ } else {
+ String function = event.get("FUNCTION");
+ String enabledStr = event.get("ENABLED");
+ if (function != null && enabledStr != null) {
+ // Note: we do not broadcast a change when a function is enabled or disabled.
+ // We just record the state change for the next broadcast.
+ int what = ("1".equals(enabledStr) ?
+ MSG_FUNCTION_ENABLED : MSG_FUNCTION_DISABLED);
+ Message msg = Message.obtain(mHandler, what);
+ msg.obj = function;
+ mHandler.sendMessage(msg);
+ }
+ }
+ }
+ }
+ };
+
+ private final BroadcastReceiver mBootCompletedReceiver = new BroadcastReceiver() {
+ public void onReceive(Context context, Intent intent) {
+ // handle accessories attached at boot time
+ synchronized (mLock) {
+ if (mCurrentAccessory != null) {
+ mSettingsManager.accessoryAttached(mCurrentAccessory);
+ }
+ }
+ }
+ };
+
+ public UsbDeviceManager(Context context, UsbSettingsManager settingsManager) {
+ mContext = context;
+ mSettingsManager = settingsManager;
+ PackageManager pm = mContext.getPackageManager();
+ mHasUsbAccessory = pm.hasSystemFeature(PackageManager.FEATURE_USB_ACCESSORY);
+
+ synchronized (mLock) {
+ init(); // set initial status
+
+ // Watch for USB configuration changes
+ if (mConfiguration >= 0) {
+ mUEventObserver.startObserving(USB_CONNECTED_MATCH);
+ mUEventObserver.startObserving(USB_CONFIGURATION_MATCH);
+ mUEventObserver.startObserving(USB_FUNCTIONS_MATCH);
+ }
+ }
+ }
+
+ private final void init() {
+ char[] buffer = new char[1024];
+ boolean inAccessoryMode = false;
+
+ // Read initial USB state
+ mConfiguration = -1;
+ try {
+ FileReader file = new FileReader(USB_CONNECTED_PATH);
+ int len = file.read(buffer, 0, 1024);
+ file.close();
+ mConnected = Integer.valueOf((new String(buffer, 0, len)).trim());
+
+ file = new FileReader(USB_CONFIGURATION_PATH);
+ len = file.read(buffer, 0, 1024);
+ file.close();
+ mConfiguration = Integer.valueOf((new String(buffer, 0, len)).trim());
+
+ } catch (FileNotFoundException e) {
+ Slog.i(TAG, "This kernel does not have USB configuration switch support");
+ } catch (Exception e) {
+ Slog.e(TAG, "" , e);
+ }
+ if (mConfiguration < 0) {
+ // This may happen in the emulator or devices without USB device mode support
+ return;
+ }
+
+ // Read initial list of enabled and disabled functions (device mode)
+ try {
+ File[] files = new File(USB_COMPOSITE_CLASS_PATH).listFiles();
+ for (int i = 0; i < files.length; i++) {
+ File file = new File(files[i], "enable");
+ FileReader reader = new FileReader(file);
+ int len = reader.read(buffer, 0, 1024);
+ reader.close();
+ int value = Integer.valueOf((new String(buffer, 0, len)).trim());
+ String functionName = files[i].getName();
+ if (value == 1) {
+ mEnabledFunctions.add(functionName);
+ if (UsbManager.USB_FUNCTION_ACCESSORY.equals(functionName)) {
+ // The USB accessory driver is on by default, but it might have been
+ // enabled before the USB service has initialized.
+ inAccessoryMode = true;
+ } else if (!UsbManager.USB_FUNCTION_ADB.equals(functionName)) {
+ // adb is enabled/disabled automatically by the adbd daemon,
+ // so don't treat it as a default function.
+ mDefaultFunctions.add(functionName);
+ }
+ } else {
+ mDisabledFunctions.add(functionName);
+ }
+ }
+ } catch (FileNotFoundException e) {
+ Slog.w(TAG, "This kernel does not have USB composite class support");
+ } catch (Exception e) {
+ Slog.e(TAG, "" , e);
+ }
+
+ // handle the case where an accessory switched the driver to accessory mode
+ // before the framework finished booting
+ if (inAccessoryMode) {
+ readCurrentAccessoryLocked();
+
+ // FIXME - if we booted in accessory mode, then we have no way to figure out
+ // which functions are enabled by default.
+ // For now, assume that MTP or mass storage are the only possibilities
+ if (mDisabledFunctions.contains(UsbManager.USB_FUNCTION_MTP)) {
+ mDefaultFunctions.add(UsbManager.USB_FUNCTION_MTP);
+ } else if (mDisabledFunctions.contains(UsbManager.USB_FUNCTION_MASS_STORAGE)) {
+ mDefaultFunctions.add(UsbManager.USB_FUNCTION_MASS_STORAGE);
+ }
+ }
+ }
+
+ public void systemReady() {
+ synchronized (mLock) {
+ update(false);
+ if (mCurrentAccessory != null) {
+ Log.d(TAG, "accessoryAttached at systemReady");
+ // its still too early to handle accessories, so add a BOOT_COMPLETED receiver
+ // to handle this later.
+ mContext.registerReceiver(mBootCompletedReceiver,
+ new IntentFilter(Intent.ACTION_BOOT_COMPLETED));
+ }
+ mSystemReady = true;
+ }
+ }
+
+ /*
+ * Sends a message to update the USB connected and configured state (device mode).
+ * If delayed is true, then we add a small delay in sending the message to debounce
+ * the USB connection when enabling USB tethering.
+ */
+ private final void update(boolean delayed) {
+ mHandler.removeMessages(MSG_UPDATE_STATE);
+ mHandler.sendEmptyMessageDelayed(MSG_UPDATE_STATE, delayed ? UPDATE_DELAY : 0);
+ }
+
+ /* returns the currently attached USB accessory (device mode) */
+ public UsbAccessory getCurrentAccessory() {
+ return mCurrentAccessory;
+ }
+
+ /* opens the currently attached USB accessory (device mode) */
+ public ParcelFileDescriptor openAccessory(UsbAccessory accessory) {
+ synchronized (mLock) {
+ if (mCurrentAccessory == null) {
+ throw new IllegalArgumentException("no accessory attached");
+ }
+ if (!mCurrentAccessory.equals(accessory)) {
+ Log.e(TAG, accessory.toString() + " does not match current accessory "
+ + mCurrentAccessory);
+ throw new IllegalArgumentException("accessory not attached");
+ }
+ mSettingsManager.checkPermission(mCurrentAccessory);
+ return nativeOpenAccessory();
+ }
+ }
+
+ /*
+ * This handler is for deferred handling of events related to device mode and accessories.
+ */
+ private final Handler mHandler = new Handler() {
+ private void addEnabledFunctionsLocked(Intent intent) {
+ // include state of all USB functions in our extras
+ for (int i = 0; i < mEnabledFunctions.size(); i++) {
+ intent.putExtra(mEnabledFunctions.get(i), UsbManager.USB_FUNCTION_ENABLED);
+ }
+ for (int i = 0; i < mDisabledFunctions.size(); i++) {
+ intent.putExtra(mDisabledFunctions.get(i), UsbManager.USB_FUNCTION_DISABLED);
+ }
+ }
+
+ @Override
+ public void handleMessage(Message msg) {
+ synchronized (mLock) {
+ switch (msg.what) {
+ case MSG_UPDATE_STATE:
+ if (mConnected != mLastConnected || mConfiguration != mLastConfiguration) {
+ if (mConnected == 0) {
+ if (UsbManager.isFunctionEnabled(
+ UsbManager.USB_FUNCTION_ACCESSORY)) {
+ // make sure accessory mode is off, and restore default functions
+ Log.d(TAG, "exited USB accessory mode");
+ if (!UsbManager.setFunctionEnabled
+ (UsbManager.USB_FUNCTION_ACCESSORY, false)) {
+ Log.e(TAG, "could not disable accessory function");
+ }
+ int count = mDefaultFunctions.size();
+ for (int i = 0; i < count; i++) {
+ String function = mDefaultFunctions.get(i);
+ if (!UsbManager.setFunctionEnabled(function, true)) {
+ Log.e(TAG, "could not reenable function " + function);
+ }
+ }
+
+ if (mCurrentAccessory != null) {
+ mSettingsManager.accessoryDetached(mCurrentAccessory);
+ mCurrentAccessory = null;
+ }
+ }
+ }
+
+ final ContentResolver cr = mContext.getContentResolver();
+ if (Settings.Secure.getInt(cr,
+ Settings.Secure.DEVICE_PROVISIONED, 0) == 0) {
+ Slog.i(TAG, "Device not provisioned, skipping USB broadcast");
+ return;
+ }
+
+ mLastConnected = mConnected;
+ mLastConfiguration = mConfiguration;
+
+ // send a sticky broadcast containing current USB state
+ Intent intent = new Intent(UsbManager.ACTION_USB_STATE);
+ intent.addFlags(Intent.FLAG_RECEIVER_REPLACE_PENDING);
+ intent.putExtra(UsbManager.USB_CONNECTED, mConnected != 0);
+ intent.putExtra(UsbManager.USB_CONFIGURATION, mConfiguration);
+ addEnabledFunctionsLocked(intent);
+ mContext.sendStickyBroadcast(intent);
+ }
+ break;
+ case MSG_FUNCTION_ENABLED:
+ case MSG_FUNCTION_DISABLED:
+ functionEnabledLocked((String)msg.obj, msg.what == MSG_FUNCTION_ENABLED);
+ break;
+ }
+ }
+ }
+ };
+
+ public void dump(FileDescriptor fd, PrintWriter pw) {
+ synchronized (mLock) {
+ pw.println(" USB Device State:");
+ pw.print(" Enabled Functions: ");
+ for (int i = 0; i < mEnabledFunctions.size(); i++) {
+ pw.print(mEnabledFunctions.get(i) + " ");
+ }
+ pw.println("");
+ pw.print(" Disabled Functions: ");
+ for (int i = 0; i < mDisabledFunctions.size(); i++) {
+ pw.print(mDisabledFunctions.get(i) + " ");
+ }
+ pw.println("");
+ pw.print(" Default Functions: ");
+ for (int i = 0; i < mDefaultFunctions.size(); i++) {
+ pw.print(mDefaultFunctions.get(i) + " ");
+ }
+ pw.println("");
+ pw.println(" mConnected: " + mConnected + ", mConfiguration: " + mConfiguration);
+ pw.println(" mCurrentAccessory: " + mCurrentAccessory);
+ }
+ }
+
+ private native String[] nativeGetAccessoryStrings();
+ private native ParcelFileDescriptor nativeOpenAccessory();
+}
diff --git a/services/java/com/android/server/usb/UsbHostManager.java b/services/java/com/android/server/usb/UsbHostManager.java
new file mode 100644
index 0000000..923b049
--- /dev/null
+++ b/services/java/com/android/server/usb/UsbHostManager.java
@@ -0,0 +1,222 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions an
+ * limitations under the License.
+ */
+
+package com.android.server.usb;
+
+import android.app.PendingIntent;
+import android.content.BroadcastReceiver;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.hardware.usb.IUsbManager;
+import android.hardware.usb.UsbConstants;
+import android.hardware.usb.UsbDevice;
+import android.hardware.usb.UsbEndpoint;
+import android.hardware.usb.UsbInterface;
+import android.hardware.usb.UsbManager;
+import android.net.Uri;
+import android.os.Binder;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
+import android.os.Parcelable;
+import android.os.ParcelFileDescriptor;
+import android.os.UEventObserver;
+import android.provider.Settings;
+import android.util.Log;
+import android.util.Slog;
+
+import java.io.File;
+import java.io.FileDescriptor;
+import java.io.FileReader;
+import java.io.PrintWriter;
+import java.util.HashMap;
+import java.util.List;
+
+/**
+ * UsbHostManager manages USB state in host mode.
+ */
+public class UsbHostManager {
+ private static final String TAG = UsbHostManager.class.getSimpleName();
+ private static final boolean LOG = false;
+
+ // contains all connected USB devices
+ private final HashMap<String,UsbDevice> mDevices = new HashMap<String,UsbDevice>();
+
+ // USB busses to exclude from USB host support
+ private final String[] mHostBlacklist;
+
+ private final Context mContext;
+ private final Object mLock = new Object();
+ private final UsbSettingsManager mSettingsManager;
+
+ public UsbHostManager(Context context, UsbSettingsManager settingsManager) {
+ mContext = context;
+ mSettingsManager = settingsManager;
+ mHostBlacklist = context.getResources().getStringArray(
+ com.android.internal.R.array.config_usbHostBlacklist);
+ }
+
+ private boolean isBlackListed(String deviceName) {
+ int count = mHostBlacklist.length;
+ for (int i = 0; i < count; i++) {
+ if (deviceName.startsWith(mHostBlacklist[i])) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /* returns true if the USB device should not be accessible by applications */
+ private boolean isBlackListed(int clazz, int subClass, int protocol) {
+ // blacklist hubs
+ if (clazz == UsbConstants.USB_CLASS_HUB) return true;
+
+ // blacklist HID boot devices (mouse and keyboard)
+ if (clazz == UsbConstants.USB_CLASS_HID &&
+ subClass == UsbConstants.USB_INTERFACE_SUBCLASS_BOOT) {
+ return true;
+ }
+
+ return false;
+ }
+
+ /* Called from JNI in monitorUsbHostBus() to report new USB devices */
+ private void usbDeviceAdded(String deviceName, int vendorID, int productID,
+ int deviceClass, int deviceSubclass, int deviceProtocol,
+ /* array of quintuples containing id, class, subclass, protocol
+ and number of endpoints for each interface */
+ int[] interfaceValues,
+ /* array of quadruples containing address, attributes, max packet size
+ and interval for each endpoint */
+ int[] endpointValues) {
+
+ if (isBlackListed(deviceName) ||
+ isBlackListed(deviceClass, deviceSubclass, deviceProtocol)) {
+ return;
+ }
+
+ synchronized (mLock) {
+ if (mDevices.get(deviceName) != null) {
+ Log.w(TAG, "device already on mDevices list: " + deviceName);
+ return;
+ }
+
+ int numInterfaces = interfaceValues.length / 5;
+ Parcelable[] interfaces = new UsbInterface[numInterfaces];
+ try {
+ // repackage interfaceValues as an array of UsbInterface
+ int intf, endp, ival = 0, eval = 0;
+ for (intf = 0; intf < numInterfaces; intf++) {
+ int interfaceId = interfaceValues[ival++];
+ int interfaceClass = interfaceValues[ival++];
+ int interfaceSubclass = interfaceValues[ival++];
+ int interfaceProtocol = interfaceValues[ival++];
+ int numEndpoints = interfaceValues[ival++];
+
+ Parcelable[] endpoints = new UsbEndpoint[numEndpoints];
+ for (endp = 0; endp < numEndpoints; endp++) {
+ int address = endpointValues[eval++];
+ int attributes = endpointValues[eval++];
+ int maxPacketSize = endpointValues[eval++];
+ int interval = endpointValues[eval++];
+ endpoints[endp] = new UsbEndpoint(address, attributes,
+ maxPacketSize, interval);
+ }
+
+ // don't allow if any interfaces are blacklisted
+ if (isBlackListed(interfaceClass, interfaceSubclass, interfaceProtocol)) {
+ return;
+ }
+ interfaces[intf] = new UsbInterface(interfaceId, interfaceClass,
+ interfaceSubclass, interfaceProtocol, endpoints);
+ }
+ } catch (Exception e) {
+ // beware of index out of bound exceptions, which might happen if
+ // a device does not set bNumEndpoints correctly
+ Log.e(TAG, "error parsing USB descriptors", e);
+ return;
+ }
+
+ UsbDevice device = new UsbDevice(deviceName, vendorID, productID,
+ deviceClass, deviceSubclass, deviceProtocol, interfaces);
+ mDevices.put(deviceName, device);
+ mSettingsManager.deviceAttached(device);
+ }
+ }
+
+ /* Called from JNI in monitorUsbHostBus to report USB device removal */
+ private void usbDeviceRemoved(String deviceName) {
+ synchronized (mLock) {
+ UsbDevice device = mDevices.remove(deviceName);
+ if (device != null) {
+ mSettingsManager.deviceDetached(device);
+ }
+ }
+ }
+
+ public void systemReady() {
+ synchronized (mLock) {
+ // Create a thread to call into native code to wait for USB host events.
+ // This thread will call us back on usbDeviceAdded and usbDeviceRemoved.
+ Runnable runnable = new Runnable() {
+ public void run() {
+ monitorUsbHostBus();
+ }
+ };
+ new Thread(null, runnable, "UsbService host thread").start();
+ }
+ }
+
+ /* Returns a list of all currently attached USB devices */
+ public void getDeviceList(Bundle devices) {
+ synchronized (mLock) {
+ for (String name : mDevices.keySet()) {
+ devices.putParcelable(name, mDevices.get(name));
+ }
+ }
+ }
+
+ /* Opens the specified USB device */
+ public ParcelFileDescriptor openDevice(String deviceName) {
+ synchronized (mLock) {
+ if (isBlackListed(deviceName)) {
+ throw new SecurityException("USB device is on a restricted bus");
+ }
+ UsbDevice device = mDevices.get(deviceName);
+ if (device == null) {
+ // if it is not in mDevices, it either does not exist or is blacklisted
+ throw new IllegalArgumentException(
+ "device " + deviceName + " does not exist or is restricted");
+ }
+ mSettingsManager.checkPermission(device);
+ return nativeOpenDevice(deviceName);
+ }
+ }
+
+ public void dump(FileDescriptor fd, PrintWriter pw) {
+ synchronized (mLock) {
+ pw.println(" USB Host State:");
+ for (String name : mDevices.keySet()) {
+ pw.println(" " + name + ": " + mDevices.get(name));
+ }
+ }
+ }
+
+ private native void monitorUsbHostBus();
+ private native ParcelFileDescriptor nativeOpenDevice(String deviceName);
+}
diff --git a/services/java/com/android/server/usb/UsbService.java b/services/java/com/android/server/usb/UsbService.java
index a151af0..21e5997c 100644
--- a/services/java/com/android/server/usb/UsbService.java
+++ b/services/java/com/android/server/usb/UsbService.java
@@ -10,608 +10,142 @@
* 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
+ * See the License for the specific language governing permissions an
* limitations under the License.
*/
package com.android.server.usb;
import android.app.PendingIntent;
-import android.content.BroadcastReceiver;
-import android.content.ContentResolver;
import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.hardware.usb.IUsbManager;
import android.hardware.usb.UsbAccessory;
-import android.hardware.usb.UsbConstants;
import android.hardware.usb.UsbDevice;
-import android.hardware.usb.UsbEndpoint;
-import android.hardware.usb.UsbInterface;
-import android.hardware.usb.UsbManager;
import android.net.Uri;
import android.os.Binder;
import android.os.Bundle;
-import android.os.Handler;
-import android.os.Message;
-import android.os.Parcelable;
import android.os.ParcelFileDescriptor;
-import android.os.UEventObserver;
-import android.provider.Settings;
-import android.util.Log;
-import android.util.Slog;
import java.io.File;
import java.io.FileDescriptor;
-import java.io.FileNotFoundException;
-import java.io.FileReader;
import java.io.PrintWriter;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
/**
- * UsbService monitors for changes to USB state.
- * This includes code for both USB host support (where the android device is the host)
- * as well as USB device support (android device is connected to a USB host).
- * Accessory mode is a special case of USB device mode, where the android device is
- * connected to a USB host that supports the android accessory protocol.
+ * UsbService manages all USB related state, including both host and device support.
+ * Host related events and calls are delegated to UsbHostManager, and device related
+ * support is delegated to UsbDeviceManager.
*/
public class UsbService extends IUsbManager.Stub {
- private static final String TAG = UsbService.class.getSimpleName();
- private static final boolean LOG = false;
-
- private static final String USB_CONNECTED_MATCH =
- "DEVPATH=/devices/virtual/switch/usb_connected";
- private static final String USB_CONFIGURATION_MATCH =
- "DEVPATH=/devices/virtual/switch/usb_configuration";
- private static final String USB_FUNCTIONS_MATCH =
- "DEVPATH=/devices/virtual/usb_composite/";
- private static final String USB_CONNECTED_PATH =
- "/sys/class/switch/usb_connected/state";
- private static final String USB_CONFIGURATION_PATH =
- "/sys/class/switch/usb_configuration/state";
- private static final String USB_COMPOSITE_CLASS_PATH =
- "/sys/class/usb_composite";
-
- private static final int MSG_UPDATE_STATE = 0;
- private static final int MSG_FUNCTION_ENABLED = 1;
- private static final int MSG_FUNCTION_DISABLED = 2;
-
- // Delay for debouncing USB disconnects.
- // We often get rapid connect/disconnect events when enabling USB functions,
- // which need debouncing.
- private static final int UPDATE_DELAY = 1000;
-
- // current connected and configuration state
- private int mConnected;
- private int mConfiguration;
-
- // last broadcasted connected and configuration state
- private int mLastConnected = -1;
- private int mLastConfiguration = -1;
-
- // lists of enabled and disabled USB functions (for USB device mode)
- private final ArrayList<String> mEnabledFunctions = new ArrayList<String>();
- private final ArrayList<String> mDisabledFunctions = new ArrayList<String>();
-
- // contains all connected USB devices (for USB host mode)
- private final HashMap<String,UsbDevice> mDevices = new HashMap<String,UsbDevice>();
-
- // USB busses to exclude from USB host support
- private final String[] mHostBlacklist;
-
- private boolean mSystemReady;
-
- private UsbAccessory mCurrentAccessory;
- // USB functions that are enabled by default, to restore after exiting accessory mode
- private final ArrayList<String> mDefaultFunctions = new ArrayList<String>();
-
private final Context mContext;
- private final Object mLock = new Object();
- private final UsbDeviceSettingsManager mDeviceManager;
- private final boolean mHasUsbHost;
- private final boolean mHasUsbAccessory;
+ private UsbDeviceManager mDeviceManager;
+ private UsbHostManager mHostManager;
+ private final UsbSettingsManager mSettingsManager;
- private final void readCurrentAccessoryLocked() {
- if (mHasUsbAccessory) {
- String[] strings = nativeGetAccessoryStrings();
- if (strings != null) {
- mCurrentAccessory = new UsbAccessory(strings);
- Log.d(TAG, "entering USB accessory mode: " + mCurrentAccessory);
- if (mSystemReady) {
- mDeviceManager.accessoryAttached(mCurrentAccessory);
- }
- } else {
- Log.e(TAG, "nativeGetAccessoryStrings failed");
- }
- }
- }
-
- /*
- * Handles USB function enable/disable events (device mode)
- */
- private final void functionEnabledLocked(String function, boolean enabled) {
- if (enabled) {
- if (!mEnabledFunctions.contains(function)) {
- mEnabledFunctions.add(function);
- }
- mDisabledFunctions.remove(function);
-
- if (UsbManager.USB_FUNCTION_ACCESSORY.equals(function)) {
- readCurrentAccessoryLocked();
- }
- } else {
- if (!mDisabledFunctions.contains(function)) {
- mDisabledFunctions.add(function);
- }
- mEnabledFunctions.remove(function);
- }
- }
-
- /*
- * Listens for uevent messages from the kernel to monitor the USB state (device mode)
- */
- private final UEventObserver mUEventObserver = new UEventObserver() {
- @Override
- public void onUEvent(UEventObserver.UEvent event) {
- if (Log.isLoggable(TAG, Log.VERBOSE)) {
- Slog.v(TAG, "USB UEVENT: " + event.toString());
- }
-
- synchronized (mLock) {
- String name = event.get("SWITCH_NAME");
- String state = event.get("SWITCH_STATE");
- if (name != null && state != null) {
- try {
- int intState = Integer.parseInt(state);
- if ("usb_connected".equals(name)) {
- mConnected = intState;
- // trigger an Intent broadcast
- if (mSystemReady) {
- // debounce disconnects to avoid problems bringing up USB tethering
- update(mConnected == 0);
- }
- } else if ("usb_configuration".equals(name)) {
- mConfiguration = intState;
- // trigger an Intent broadcast
- if (mSystemReady) {
- update(mConnected == 0);
- }
- }
- } catch (NumberFormatException e) {
- Slog.e(TAG, "Could not parse switch state from event " + event);
- }
- } else {
- String function = event.get("FUNCTION");
- String enabledStr = event.get("ENABLED");
- if (function != null && enabledStr != null) {
- // Note: we do not broadcast a change when a function is enabled or disabled.
- // We just record the state change for the next broadcast.
- int what = ("1".equals(enabledStr) ?
- MSG_FUNCTION_ENABLED : MSG_FUNCTION_DISABLED);
- Message msg = Message.obtain(mHandler, what);
- msg.obj = function;
- mHandler.sendMessage(msg);
- }
- }
- }
- }
- };
-
- private final BroadcastReceiver mBootCompletedReceiver = new BroadcastReceiver() {
- public void onReceive(Context context, Intent intent) {
- // handle accessories attached at boot time
- synchronized (mLock) {
- if (mCurrentAccessory != null) {
- mDeviceManager.accessoryAttached(mCurrentAccessory);
- }
- }
- }
- };
public UsbService(Context context) {
mContext = context;
- mDeviceManager = new UsbDeviceSettingsManager(context);
+ mSettingsManager = new UsbSettingsManager(context);
PackageManager pm = mContext.getPackageManager();
- mHasUsbHost = pm.hasSystemFeature(PackageManager.FEATURE_USB_HOST);
- mHasUsbAccessory = pm.hasSystemFeature(PackageManager.FEATURE_USB_ACCESSORY);
-
- mHostBlacklist = context.getResources().getStringArray(
- com.android.internal.R.array.config_usbHostBlacklist);
-
- synchronized (mLock) {
- init(); // set initial status
-
- // Watch for USB configuration changes
- if (mConfiguration >= 0) {
- mUEventObserver.startObserving(USB_CONNECTED_MATCH);
- mUEventObserver.startObserving(USB_CONFIGURATION_MATCH);
- mUEventObserver.startObserving(USB_FUNCTIONS_MATCH);
- }
+ if (pm.hasSystemFeature(PackageManager.FEATURE_USB_HOST)) {
+ mHostManager = new UsbHostManager(context, mSettingsManager);
}
- }
-
- private final void init() {
- char[] buffer = new char[1024];
- boolean inAccessoryMode = false;
-
- // Read initial USB state (device mode)
- mConfiguration = -1;
- try {
- FileReader file = new FileReader(USB_CONNECTED_PATH);
- int len = file.read(buffer, 0, 1024);
- file.close();
- mConnected = Integer.valueOf((new String(buffer, 0, len)).trim());
-
- file = new FileReader(USB_CONFIGURATION_PATH);
- len = file.read(buffer, 0, 1024);
- file.close();
- mConfiguration = Integer.valueOf((new String(buffer, 0, len)).trim());
-
- } catch (FileNotFoundException e) {
- Slog.i(TAG, "This kernel does not have USB configuration switch support");
- } catch (Exception e) {
- Slog.e(TAG, "" , e);
+ if (new File("/sys/class/usb_composite").exists()) {
+ mDeviceManager = new UsbDeviceManager(context, mSettingsManager);
}
- if (mConfiguration < 0) {
- // This may happen in the emulator or devices without USB device mode support
- return;
- }
-
- // Read initial list of enabled and disabled functions (device mode)
- try {
- File[] files = new File(USB_COMPOSITE_CLASS_PATH).listFiles();
- for (int i = 0; i < files.length; i++) {
- File file = new File(files[i], "enable");
- FileReader reader = new FileReader(file);
- int len = reader.read(buffer, 0, 1024);
- reader.close();
- int value = Integer.valueOf((new String(buffer, 0, len)).trim());
- String functionName = files[i].getName();
- if (value == 1) {
- mEnabledFunctions.add(functionName);
- if (UsbManager.USB_FUNCTION_ACCESSORY.equals(functionName)) {
- // The USB accessory driver is on by default, but it might have been
- // enabled before the USB service has initialized.
- inAccessoryMode = true;
- } else if (!UsbManager.USB_FUNCTION_ADB.equals(functionName)) {
- // adb is enabled/disabled automatically by the adbd daemon,
- // so don't treat it as a default function.
- mDefaultFunctions.add(functionName);
- }
- } else {
- mDisabledFunctions.add(functionName);
- }
- }
- } catch (FileNotFoundException e) {
- Slog.w(TAG, "This kernel does not have USB composite class support");
- } catch (Exception e) {
- Slog.e(TAG, "" , e);
- }
-
- // handle the case where an accessory switched the driver to accessory mode
- // before the framework finished booting
- if (inAccessoryMode) {
- readCurrentAccessoryLocked();
-
- // FIXME - if we booted in accessory mode, then we have no way to figure out
- // which functions are enabled by default.
- // For now, assume that MTP or mass storage are the only possibilities
- if (mDisabledFunctions.contains(UsbManager.USB_FUNCTION_MTP)) {
- mDefaultFunctions.add(UsbManager.USB_FUNCTION_MTP);
- } else if (mDisabledFunctions.contains(UsbManager.USB_FUNCTION_MASS_STORAGE)) {
- mDefaultFunctions.add(UsbManager.USB_FUNCTION_MASS_STORAGE);
- }
- }
- }
-
- private boolean isBlackListed(String deviceName) {
- int count = mHostBlacklist.length;
- for (int i = 0; i < count; i++) {
- if (deviceName.startsWith(mHostBlacklist[i])) {
- return true;
- }
- }
- return false;
- }
-
- /* returns true if the USB device should not be accessible by applications (host mode) */
- private boolean isBlackListed(int clazz, int subClass, int protocol) {
- // blacklist hubs
- if (clazz == UsbConstants.USB_CLASS_HUB) return true;
-
- // blacklist HID boot devices (mouse and keyboard)
- if (clazz == UsbConstants.USB_CLASS_HID &&
- subClass == UsbConstants.USB_INTERFACE_SUBCLASS_BOOT) {
- return true;
- }
-
- return false;
- }
-
- /* Called from JNI in monitorUsbHostBus() to report new USB devices (host mode) */
- private void usbDeviceAdded(String deviceName, int vendorID, int productID,
- int deviceClass, int deviceSubclass, int deviceProtocol,
- /* array of quintuples containing id, class, subclass, protocol
- and number of endpoints for each interface */
- int[] interfaceValues,
- /* array of quadruples containing address, attributes, max packet size
- and interval for each endpoint */
- int[] endpointValues) {
-
- if (isBlackListed(deviceName) ||
- isBlackListed(deviceClass, deviceSubclass, deviceProtocol)) {
- return;
- }
-
- synchronized (mLock) {
- if (mDevices.get(deviceName) != null) {
- Log.w(TAG, "device already on mDevices list: " + deviceName);
- return;
- }
-
- int numInterfaces = interfaceValues.length / 5;
- Parcelable[] interfaces = new UsbInterface[numInterfaces];
- try {
- // repackage interfaceValues as an array of UsbInterface
- int intf, endp, ival = 0, eval = 0;
- for (intf = 0; intf < numInterfaces; intf++) {
- int interfaceId = interfaceValues[ival++];
- int interfaceClass = interfaceValues[ival++];
- int interfaceSubclass = interfaceValues[ival++];
- int interfaceProtocol = interfaceValues[ival++];
- int numEndpoints = interfaceValues[ival++];
-
- Parcelable[] endpoints = new UsbEndpoint[numEndpoints];
- for (endp = 0; endp < numEndpoints; endp++) {
- int address = endpointValues[eval++];
- int attributes = endpointValues[eval++];
- int maxPacketSize = endpointValues[eval++];
- int interval = endpointValues[eval++];
- endpoints[endp] = new UsbEndpoint(address, attributes,
- maxPacketSize, interval);
- }
-
- // don't allow if any interfaces are blacklisted
- if (isBlackListed(interfaceClass, interfaceSubclass, interfaceProtocol)) {
- return;
- }
- interfaces[intf] = new UsbInterface(interfaceId, interfaceClass,
- interfaceSubclass, interfaceProtocol, endpoints);
- }
- } catch (Exception e) {
- // beware of index out of bound exceptions, which might happen if
- // a device does not set bNumEndpoints correctly
- Log.e(TAG, "error parsing USB descriptors", e);
- return;
- }
-
- UsbDevice device = new UsbDevice(deviceName, vendorID, productID,
- deviceClass, deviceSubclass, deviceProtocol, interfaces);
- mDevices.put(deviceName, device);
- mDeviceManager.deviceAttached(device);
- }
- }
-
- /* Called from JNI in monitorUsbHostBus to report USB device removal (host mode) */
- private void usbDeviceRemoved(String deviceName) {
- synchronized (mLock) {
- UsbDevice device = mDevices.remove(deviceName);
- if (device != null) {
- mDeviceManager.deviceDetached(device);
- }
- }
- }
-
- private void initHostSupport() {
- // Create a thread to call into native code to wait for USB host events.
- // This thread will call us back on usbDeviceAdded and usbDeviceRemoved.
- Runnable runnable = new Runnable() {
- public void run() {
- monitorUsbHostBus();
- }
- };
- new Thread(null, runnable, "UsbService host thread").start();
}
public void systemReady() {
- synchronized (mLock) {
- if (mHasUsbHost) {
- // start monitoring for connected USB devices
- initHostSupport();
- }
-
- update(false);
- if (mCurrentAccessory != null) {
- Log.d(TAG, "accessoryAttached at systemReady");
- // its still too early to handle accessories, so add a BOOT_COMPLETED receiver
- // to handle this later.
- mContext.registerReceiver(mBootCompletedReceiver,
- new IntentFilter(Intent.ACTION_BOOT_COMPLETED));
- }
- mSystemReady = true;
+ if (mDeviceManager != null) {
+ mDeviceManager.systemReady();
}
- }
-
- /*
- * Sends a message to update the USB connected and configured state (device mode).
- * If delayed is true, then we add a small delay in sending the message to debounce
- * the USB connection when enabling USB tethering.
- */
- private final void update(boolean delayed) {
- mHandler.removeMessages(MSG_UPDATE_STATE);
- mHandler.sendEmptyMessageDelayed(MSG_UPDATE_STATE, delayed ? UPDATE_DELAY : 0);
+ if (mHostManager != null) {
+ mHostManager.systemReady();
+ }
}
/* Returns a list of all currently attached USB devices (host mdoe) */
public void getDeviceList(Bundle devices) {
- synchronized (mLock) {
- for (String name : mDevices.keySet()) {
- devices.putParcelable(name, mDevices.get(name));
- }
+ if (mHostManager != null) {
+ mHostManager.getDeviceList(devices);
}
}
/* Opens the specified USB device (host mode) */
public ParcelFileDescriptor openDevice(String deviceName) {
- synchronized (mLock) {
- if (isBlackListed(deviceName)) {
- throw new SecurityException("USB device is on a restricted bus");
- }
- UsbDevice device = mDevices.get(deviceName);
- if (device == null) {
- // if it is not in mDevices, it either does not exist or is blacklisted
- throw new IllegalArgumentException(
- "device " + deviceName + " does not exist or is restricted");
- }
- mDeviceManager.checkPermission(device);
- return nativeOpenDevice(deviceName);
+ if (mHostManager != null) {
+ return mHostManager.openDevice(deviceName);
+ } else {
+ return null;
}
}
/* returns the currently attached USB accessory (device mode) */
public UsbAccessory getCurrentAccessory() {
- return mCurrentAccessory;
+ if (mDeviceManager != null) {
+ return mDeviceManager.getCurrentAccessory();
+ } else {
+ return null;
+ }
}
/* opens the currently attached USB accessory (device mode) */
public ParcelFileDescriptor openAccessory(UsbAccessory accessory) {
- synchronized (mLock) {
- if (mCurrentAccessory == null) {
- throw new IllegalArgumentException("no accessory attached");
- }
- if (!mCurrentAccessory.equals(accessory)) {
- Log.e(TAG, accessory.toString() + " does not match current accessory "
- + mCurrentAccessory);
- throw new IllegalArgumentException("accessory not attached");
- }
- mDeviceManager.checkPermission(mCurrentAccessory);
- return nativeOpenAccessory();
+ if (mDeviceManager != null) {
+ return openAccessory(accessory);
+ } else {
+ return null;
}
}
public void setDevicePackage(UsbDevice device, String packageName) {
mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USB, null);
- mDeviceManager.setDevicePackage(device, packageName);
+ mSettingsManager.setDevicePackage(device, packageName);
}
public void setAccessoryPackage(UsbAccessory accessory, String packageName) {
mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USB, null);
- mDeviceManager.setAccessoryPackage(accessory, packageName);
+ mSettingsManager.setAccessoryPackage(accessory, packageName);
}
public boolean hasDevicePermission(UsbDevice device) {
- return mDeviceManager.hasPermission(device);
+ return mSettingsManager.hasPermission(device);
}
public boolean hasAccessoryPermission(UsbAccessory accessory) {
- return mDeviceManager.hasPermission(accessory);
+ return mSettingsManager.hasPermission(accessory);
}
public void requestDevicePermission(UsbDevice device, String packageName,
PendingIntent pi) {
- mDeviceManager.requestPermission(device, packageName, pi);
+ mSettingsManager.requestPermission(device, packageName, pi);
}
public void requestAccessoryPermission(UsbAccessory accessory, String packageName,
PendingIntent pi) {
- mDeviceManager.requestPermission(accessory, packageName, pi);
+ mSettingsManager.requestPermission(accessory, packageName, pi);
}
public void grantDevicePermission(UsbDevice device, int uid) {
mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USB, null);
- mDeviceManager.grantDevicePermission(device, uid);
+ mSettingsManager.grantDevicePermission(device, uid);
}
public void grantAccessoryPermission(UsbAccessory accessory, int uid) {
mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USB, null);
- mDeviceManager.grantAccessoryPermission(accessory, uid);
+ mSettingsManager.grantAccessoryPermission(accessory, uid);
}
public boolean hasDefaults(String packageName) {
mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USB, null);
- return mDeviceManager.hasDefaults(packageName);
+ return mSettingsManager.hasDefaults(packageName);
}
public void clearDefaults(String packageName) {
mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USB, null);
- mDeviceManager.clearDefaults(packageName);
+ mSettingsManager.clearDefaults(packageName);
}
- /*
- * This handler is for deferred handling of events related to device mode and accessories.
- */
- private final Handler mHandler = new Handler() {
- private void addEnabledFunctionsLocked(Intent intent) {
- // include state of all USB functions in our extras
- for (int i = 0; i < mEnabledFunctions.size(); i++) {
- intent.putExtra(mEnabledFunctions.get(i), UsbManager.USB_FUNCTION_ENABLED);
- }
- for (int i = 0; i < mDisabledFunctions.size(); i++) {
- intent.putExtra(mDisabledFunctions.get(i), UsbManager.USB_FUNCTION_DISABLED);
- }
- }
-
- @Override
- public void handleMessage(Message msg) {
- synchronized (mLock) {
- switch (msg.what) {
- case MSG_UPDATE_STATE:
- if (mConnected != mLastConnected || mConfiguration != mLastConfiguration) {
- if (mConnected == 0) {
- if (UsbManager.isFunctionEnabled(
- UsbManager.USB_FUNCTION_ACCESSORY)) {
- // make sure accessory mode is off, and restore default functions
- Log.d(TAG, "exited USB accessory mode");
- if (!UsbManager.setFunctionEnabled
- (UsbManager.USB_FUNCTION_ACCESSORY, false)) {
- Log.e(TAG, "could not disable accessory function");
- }
- int count = mDefaultFunctions.size();
- for (int i = 0; i < count; i++) {
- String function = mDefaultFunctions.get(i);
- if (!UsbManager.setFunctionEnabled(function, true)) {
- Log.e(TAG, "could not reenable function " + function);
- }
- }
-
- if (mCurrentAccessory != null) {
- mDeviceManager.accessoryDetached(mCurrentAccessory);
- mCurrentAccessory = null;
- }
- }
- }
-
- final ContentResolver cr = mContext.getContentResolver();
- if (Settings.Secure.getInt(cr,
- Settings.Secure.DEVICE_PROVISIONED, 0) == 0) {
- Slog.i(TAG, "Device not provisioned, skipping USB broadcast");
- return;
- }
-
- mLastConnected = mConnected;
- mLastConfiguration = mConfiguration;
-
- // send a sticky broadcast containing current USB state
- Intent intent = new Intent(UsbManager.ACTION_USB_STATE);
- intent.addFlags(Intent.FLAG_RECEIVER_REPLACE_PENDING);
- intent.putExtra(UsbManager.USB_CONNECTED, mConnected != 0);
- intent.putExtra(UsbManager.USB_CONFIGURATION, mConfiguration);
- addEnabledFunctionsLocked(intent);
- mContext.sendStickyBroadcast(intent);
- }
- break;
- case MSG_FUNCTION_ENABLED:
- case MSG_FUNCTION_DISABLED:
- functionEnabledLocked((String)msg.obj, msg.what == MSG_FUNCTION_ENABLED);
- break;
- }
- }
- }
- };
-
@Override
public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.DUMP)
@@ -622,40 +156,14 @@
return;
}
- synchronized (mLock) {
- pw.println("USB Manager State:");
+ pw.println("USB Manager State:");
- pw.println(" USB Device State:");
- pw.print(" Enabled Functions: ");
- for (int i = 0; i < mEnabledFunctions.size(); i++) {
- pw.print(mEnabledFunctions.get(i) + " ");
- }
- pw.println("");
- pw.print(" Disabled Functions: ");
- for (int i = 0; i < mDisabledFunctions.size(); i++) {
- pw.print(mDisabledFunctions.get(i) + " ");
- }
- pw.println("");
- pw.print(" Default Functions: ");
- for (int i = 0; i < mDefaultFunctions.size(); i++) {
- pw.print(mDefaultFunctions.get(i) + " ");
- }
- pw.println("");
- pw.println(" mConnected: " + mConnected + ", mConfiguration: " + mConfiguration);
- pw.println(" mCurrentAccessory: " + mCurrentAccessory);
-
- pw.println(" USB Host State:");
- for (String name : mDevices.keySet()) {
- pw.println(" " + name + ": " + mDevices.get(name));
- }
+ if (mDeviceManager != null) {
mDeviceManager.dump(fd, pw);
}
+ if (mHostManager != null) {
+ mHostManager.dump(fd, pw);
+ }
+ mSettingsManager.dump(fd, pw);
}
-
- // host support
- private native void monitorUsbHostBus();
- private native ParcelFileDescriptor nativeOpenDevice(String deviceName);
- // accessory support
- private native String[] nativeGetAccessoryStrings();
- private native ParcelFileDescriptor nativeOpenAccessory();
}
diff --git a/services/java/com/android/server/usb/UsbDeviceSettingsManager.java b/services/java/com/android/server/usb/UsbSettingsManager.java
similarity index 99%
rename from services/java/com/android/server/usb/UsbDeviceSettingsManager.java
rename to services/java/com/android/server/usb/UsbSettingsManager.java
index de0b114..9113677 100644
--- a/services/java/com/android/server/usb/UsbDeviceSettingsManager.java
+++ b/services/java/com/android/server/usb/UsbSettingsManager.java
@@ -59,9 +59,9 @@
import java.util.HashMap;
import java.util.List;
-class UsbDeviceSettingsManager {
+class UsbSettingsManager {
- private static final String TAG = "UsbDeviceSettingsManager";
+ private static final String TAG = "UsbSettingsManager";
private static final File sSettingsFile = new File("/data/system/usb_device_manager.xml");
private final Context mContext;
@@ -363,7 +363,7 @@
}
MyPackageMonitor mPackageMonitor = new MyPackageMonitor();
- public UsbDeviceSettingsManager(Context context) {
+ public UsbSettingsManager(Context context) {
mContext = context;
mPackageManager = context.getPackageManager();
synchronized (mLock) {
diff --git a/services/jni/Android.mk b/services/jni/Android.mk
index 4e93fe2..a1c3283 100644
--- a/services/jni/Android.mk
+++ b/services/jni/Android.mk
@@ -12,7 +12,8 @@
com_android_server_LightsService.cpp \
com_android_server_PowerManagerService.cpp \
com_android_server_SystemServer.cpp \
- com_android_server_UsbService.cpp \
+ com_android_server_UsbDeviceManager.cpp \
+ com_android_server_UsbHostManager.cpp \
com_android_server_VibratorService.cpp \
com_android_server_location_GpsLocationProvider.cpp \
onload.cpp
diff --git a/services/jni/com_android_server_UsbDeviceManager.cpp b/services/jni/com_android_server_UsbDeviceManager.cpp
new file mode 100644
index 0000000..6954171
--- /dev/null
+++ b/services/jni/com_android_server_UsbDeviceManager.cpp
@@ -0,0 +1,128 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#define LOG_TAG "UsbDeviceManagerJNI"
+#include "utils/Log.h"
+
+#include "jni.h"
+#include "JNIHelp.h"
+#include "android_runtime/AndroidRuntime.h"
+
+#include <stdio.h>
+#include <asm/byteorder.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <sys/ioctl.h>
+#include <linux/usb/f_accessory.h>
+
+#define DRIVER_NAME "/dev/usb_accessory"
+
+namespace android
+{
+
+static struct parcel_file_descriptor_offsets_t
+{
+ jclass mClass;
+ jmethodID mConstructor;
+} gParcelFileDescriptorOffsets;
+
+static void checkAndClearExceptionFromCallback(JNIEnv* env, const char* methodName) {
+ if (env->ExceptionCheck()) {
+ LOGE("An exception was thrown by callback '%s'.", methodName);
+ LOGE_EX(env);
+ env->ExceptionClear();
+ }
+}
+
+static void set_accessory_string(JNIEnv *env, int fd, int cmd, jobjectArray strArray, int index)
+{
+ char buffer[256];
+
+ buffer[0] = 0;
+ int length = ioctl(fd, cmd, buffer);
+ if (buffer[0]) {
+ jstring obj = env->NewStringUTF(buffer);
+ env->SetObjectArrayElement(strArray, index, obj);
+ env->DeleteLocalRef(obj);
+ }
+}
+
+
+static jobjectArray android_server_UsbDeviceManager_getAccessoryStrings(JNIEnv *env, jobject thiz)
+{
+ int fd = open(DRIVER_NAME, O_RDWR);
+ if (fd < 0) {
+ LOGE("could not open %s", DRIVER_NAME);
+ return NULL;
+ }
+ jclass stringClass = env->FindClass("java/lang/String");
+ jobjectArray strArray = env->NewObjectArray(6, stringClass, NULL);
+ if (!strArray) goto out;
+ set_accessory_string(env, fd, ACCESSORY_GET_STRING_MANUFACTURER, strArray, 0);
+ set_accessory_string(env, fd, ACCESSORY_GET_STRING_MODEL, strArray, 1);
+ set_accessory_string(env, fd, ACCESSORY_GET_STRING_DESCRIPTION, strArray, 2);
+ set_accessory_string(env, fd, ACCESSORY_GET_STRING_VERSION, strArray, 3);
+ set_accessory_string(env, fd, ACCESSORY_GET_STRING_URI, strArray, 4);
+ set_accessory_string(env, fd, ACCESSORY_GET_STRING_SERIAL, strArray, 5);
+
+out:
+ close(fd);
+ return strArray;
+}
+
+static jobject android_server_UsbDeviceManager_openAccessory(JNIEnv *env, jobject thiz)
+{
+ int fd = open(DRIVER_NAME, O_RDWR);
+ if (fd < 0) {
+ LOGE("could not open %s", DRIVER_NAME);
+ return NULL;
+ }
+ jobject fileDescriptor = jniCreateFileDescriptor(env, fd);
+ if (fileDescriptor == NULL) {
+ return NULL;
+ }
+ return env->NewObject(gParcelFileDescriptorOffsets.mClass,
+ gParcelFileDescriptorOffsets.mConstructor, fileDescriptor);
+}
+
+static JNINativeMethod method_table[] = {
+ { "nativeGetAccessoryStrings", "()[Ljava/lang/String;",
+ (void*)android_server_UsbDeviceManager_getAccessoryStrings },
+ { "nativeOpenAccessory", "()Landroid/os/ParcelFileDescriptor;",
+ (void*)android_server_UsbDeviceManager_openAccessory },
+};
+
+int register_android_server_UsbDeviceManager(JNIEnv *env)
+{
+ jclass clazz = env->FindClass("com/android/server/usb/UsbDeviceManager");
+ if (clazz == NULL) {
+ LOGE("Can't find com/android/server/usb/UsbDeviceManager");
+ return -1;
+ }
+
+ clazz = env->FindClass("android/os/ParcelFileDescriptor");
+ LOG_FATAL_IF(clazz == NULL, "Unable to find class android.os.ParcelFileDescriptor");
+ gParcelFileDescriptorOffsets.mClass = (jclass) env->NewGlobalRef(clazz);
+ gParcelFileDescriptorOffsets.mConstructor = env->GetMethodID(clazz, "<init>", "(Ljava/io/FileDescriptor;)V");
+ LOG_FATAL_IF(gParcelFileDescriptorOffsets.mConstructor == NULL,
+ "Unable to find constructor for android.os.ParcelFileDescriptor");
+
+ return jniRegisterNativeMethods(env, "com/android/server/usb/UsbDeviceManager",
+ method_table, NELEM(method_table));
+}
+
+};
diff --git a/services/jni/com_android_server_UsbService.cpp b/services/jni/com_android_server_UsbHostManager.cpp
similarity index 71%
rename from services/jni/com_android_server_UsbService.cpp
rename to services/jni/com_android_server_UsbHostManager.cpp
index 9cd04f6..9506d75 100644
--- a/services/jni/com_android_server_UsbService.cpp
+++ b/services/jni/com_android_server_UsbHostManager.cpp
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-#define LOG_TAG "UsbService"
+#define LOG_TAG "UsbHostManagerJNI"
#include "utils/Log.h"
#include "jni.h"
@@ -30,9 +30,6 @@
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/ioctl.h>
-#include <linux/usb/f_accessory.h>
-
-#define DRIVER_NAME "/dev/usb_accessory"
namespace android
{
@@ -134,7 +131,7 @@
return 0;
}
-static void android_server_UsbService_monitorUsbHostBus(JNIEnv *env, jobject thiz)
+static void android_server_UsbHostManager_monitorUsbHostBus(JNIEnv *env, jobject thiz)
{
struct usb_host_context* context = usb_host_init();
if (!context) {
@@ -145,7 +142,7 @@
usb_host_run(context, usb_device_added, usb_device_removed, NULL, (void *)thiz);
}
-static jobject android_server_UsbService_openDevice(JNIEnv *env, jobject thiz, jstring deviceName)
+static jobject android_server_UsbHostManager_openDevice(JNIEnv *env, jobject thiz, jstring deviceName)
{
const char *deviceNameStr = env->GetStringUTFChars(deviceName, NULL);
struct usb_device* device = usb_device_open(deviceNameStr);
@@ -168,72 +165,17 @@
gParcelFileDescriptorOffsets.mConstructor, fileDescriptor);
}
-static void set_accessory_string(JNIEnv *env, int fd, int cmd, jobjectArray strArray, int index)
-{
- char buffer[256];
-
- buffer[0] = 0;
- int length = ioctl(fd, cmd, buffer);
- if (buffer[0]) {
- jstring obj = env->NewStringUTF(buffer);
- env->SetObjectArrayElement(strArray, index, obj);
- env->DeleteLocalRef(obj);
- }
-}
-
-
-static jobjectArray android_server_UsbService_getAccessoryStrings(JNIEnv *env, jobject thiz)
-{
- int fd = open(DRIVER_NAME, O_RDWR);
- if (fd < 0) {
- LOGE("could not open %s", DRIVER_NAME);
- return NULL;
- }
- jclass stringClass = env->FindClass("java/lang/String");
- jobjectArray strArray = env->NewObjectArray(6, stringClass, NULL);
- if (!strArray) goto out;
- set_accessory_string(env, fd, ACCESSORY_GET_STRING_MANUFACTURER, strArray, 0);
- set_accessory_string(env, fd, ACCESSORY_GET_STRING_MODEL, strArray, 1);
- set_accessory_string(env, fd, ACCESSORY_GET_STRING_DESCRIPTION, strArray, 2);
- set_accessory_string(env, fd, ACCESSORY_GET_STRING_VERSION, strArray, 3);
- set_accessory_string(env, fd, ACCESSORY_GET_STRING_URI, strArray, 4);
- set_accessory_string(env, fd, ACCESSORY_GET_STRING_SERIAL, strArray, 5);
-
-out:
- close(fd);
- return strArray;
-}
-
-static jobject android_server_UsbService_openAccessory(JNIEnv *env, jobject thiz)
-{
- int fd = open(DRIVER_NAME, O_RDWR);
- if (fd < 0) {
- LOGE("could not open %s", DRIVER_NAME);
- return NULL;
- }
- jobject fileDescriptor = jniCreateFileDescriptor(env, fd);
- if (fileDescriptor == NULL) {
- return NULL;
- }
- return env->NewObject(gParcelFileDescriptorOffsets.mClass,
- gParcelFileDescriptorOffsets.mConstructor, fileDescriptor);
-}
-
static JNINativeMethod method_table[] = {
- { "monitorUsbHostBus", "()V", (void*)android_server_UsbService_monitorUsbHostBus },
+ { "monitorUsbHostBus", "()V", (void*)android_server_UsbHostManager_monitorUsbHostBus },
{ "nativeOpenDevice", "(Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;",
- (void*)android_server_UsbService_openDevice },
- { "nativeGetAccessoryStrings", "()[Ljava/lang/String;",
- (void*)android_server_UsbService_getAccessoryStrings },
- { "nativeOpenAccessory","()Landroid/os/ParcelFileDescriptor;",
- (void*)android_server_UsbService_openAccessory },
+ (void*)android_server_UsbHostManager_openDevice },
};
-int register_android_server_UsbService(JNIEnv *env)
+int register_android_server_UsbHostManager(JNIEnv *env)
{
- jclass clazz = env->FindClass("com/android/server/usb/UsbService");
+ jclass clazz = env->FindClass("com/android/server/usb/UsbHostManager");
if (clazz == NULL) {
- LOGE("Can't find com/android/server/usb/UsbService");
+ LOGE("Can't find com/android/server/usb/UsbHostManager");
return -1;
}
method_usbDeviceAdded = env->GetMethodID(clazz, "usbDeviceAdded", "(Ljava/lang/String;IIIII[I[I)V");
@@ -254,7 +196,7 @@
LOG_FATAL_IF(gParcelFileDescriptorOffsets.mConstructor == NULL,
"Unable to find constructor for android.os.ParcelFileDescriptor");
- return jniRegisterNativeMethods(env, "com/android/server/usb/UsbService",
+ return jniRegisterNativeMethods(env, "com/android/server/usb/UsbHostManager",
method_table, NELEM(method_table));
}
diff --git a/services/jni/onload.cpp b/services/jni/onload.cpp
index 0c46eee..469e818 100644
--- a/services/jni/onload.cpp
+++ b/services/jni/onload.cpp
@@ -29,7 +29,8 @@
int register_android_server_InputManager(JNIEnv* env);
int register_android_server_LightsService(JNIEnv* env);
int register_android_server_PowerManagerService(JNIEnv* env);
-int register_android_server_UsbService(JNIEnv* env);
+int register_android_server_UsbDeviceManager(JNIEnv* env);
+int register_android_server_UsbHostManager(JNIEnv* env);
int register_android_server_VibratorService(JNIEnv* env);
int register_android_server_SystemServer(JNIEnv* env);
int register_android_server_location_GpsLocationProvider(JNIEnv* env);
@@ -57,7 +58,8 @@
register_android_server_LightsService(env);
register_android_server_AlarmManagerService(env);
register_android_server_BatteryService(env);
- register_android_server_UsbService(env);
+ register_android_server_UsbDeviceManager(env);
+ register_android_server_UsbHostManager(env);
register_android_server_VibratorService(env);
register_android_server_SystemServer(env);
register_android_server_location_GpsLocationProvider(env);
diff --git a/telephony/java/com/android/internal/telephony/DataConnection.java b/telephony/java/com/android/internal/telephony/DataConnection.java
index 3636baa..e8d4f98 100644
--- a/telephony/java/com/android/internal/telephony/DataConnection.java
+++ b/telephony/java/com/android/internal/telephony/DataConnection.java
@@ -62,6 +62,7 @@
*/
public abstract class DataConnection extends StateMachine {
protected static final boolean DBG = true;
+ protected static final boolean VDBG = false;
protected static Object mCountLock = new Object();
protected static int mCount;
@@ -290,7 +291,7 @@
lastFailTime = timeStamp;
AsyncResult.forMessage(connectionCompletedMsg, cause, new Exception());
}
- if (DBG) log("notifyConnection at " + timeStamp + " cause=" + cause);
+ if (DBG) log("notifyConnectionCompleted at " + timeStamp + " cause=" + cause);
connectionCompletedMsg.sendToTarget();
}
@@ -301,12 +302,14 @@
* @param dp is the DisconnectParams.
*/
private void notifyDisconnectCompleted(DisconnectParams dp) {
- if (DBG) log("NotifyDisconnectCompleted");
+ if (VDBG) log("NotifyDisconnectCompleted");
if (dp.onCompletedMsg != null) {
Message msg = dp.onCompletedMsg;
- log(String.format("msg=%s msg.obj=%s", msg.toString(),
+ if (VDBG) {
+ log(String.format("msg=%s msg.obj=%s", msg.toString(),
((msg.obj instanceof String) ? (String) msg.obj : "<no-reason>")));
+ }
AsyncResult.forMessage(msg);
msg.sendToTarget();
}
@@ -472,7 +475,7 @@
result = DataCallState.SetupResult.ERR_RilError;
result.mFailCause = FailCause.fromInt(response.status);
} else {
- log("onSetupConnectionCompleted received DataCallState: " + response);
+ if (DBG) log("onSetupConnectionCompleted received DataCallState: " + response);
cid = response.cid;
// set link properties based on data call response
result = setLinkProperties(response, mLinkProperties);
@@ -558,53 +561,53 @@
switch (msg.what) {
case AsyncChannel.CMD_CHANNEL_FULL_CONNECTION: {
if (mAc != null) {
- log("Disconnecting to previous connection mAc=" + mAc);
+ if (VDBG) log("Disconnecting to previous connection mAc=" + mAc);
mAc.replyToMessage(msg, AsyncChannel.CMD_CHANNEL_FULLY_CONNECTED,
AsyncChannel.STATUS_FULL_CONNECTION_REFUSED_ALREADY_CONNECTED);
} else {
mAc = new AsyncChannel();
mAc.connected(null, getHandler(), msg.replyTo);
- log("DcDefaultState: FULL_CONNECTION reply connected");
+ if (VDBG) log("DcDefaultState: FULL_CONNECTION reply connected");
mAc.replyToMessage(msg, AsyncChannel.CMD_CHANNEL_FULLY_CONNECTED,
AsyncChannel.STATUS_SUCCESSFUL, mId, "hi");
}
break;
}
case AsyncChannel.CMD_CHANNEL_DISCONNECT: {
- log("CMD_CHANNEL_DISCONNECT");
+ if (VDBG) log("CMD_CHANNEL_DISCONNECT");
mAc.disconnect();
break;
}
case AsyncChannel.CMD_CHANNEL_DISCONNECTED: {
- log("CMD_CHANNEL_DISCONNECTED");
+ if (VDBG) log("CMD_CHANNEL_DISCONNECTED");
mAc = null;
break;
}
case DataConnectionAc.REQ_IS_INACTIVE: {
boolean val = getCurrentState() == mInactiveState;
- log("REQ_IS_INACTIVE isInactive=" + val);
+ if (VDBG) log("REQ_IS_INACTIVE isInactive=" + val);
mAc.replyToMessage(msg, DataConnectionAc.RSP_IS_INACTIVE, val ? 1 : 0);
break;
}
case DataConnectionAc.REQ_GET_CID: {
- log("REQ_GET_CID cid=" + cid);
+ if (VDBG) log("REQ_GET_CID cid=" + cid);
mAc.replyToMessage(msg, DataConnectionAc.RSP_GET_CID, cid);
break;
}
case DataConnectionAc.REQ_GET_APNSETTING: {
- log("REQ_GET_APNSETTING apnSetting=" + mApn);
+ if (VDBG) log("REQ_GET_APNSETTING apnSetting=" + mApn);
mAc.replyToMessage(msg, DataConnectionAc.RSP_GET_APNSETTING, mApn);
break;
}
case DataConnectionAc.REQ_GET_LINK_PROPERTIES: {
LinkProperties lp = new LinkProperties(mLinkProperties);
- log("REQ_GET_LINK_PROPERTIES linkProperties" + lp);
+ if (VDBG) log("REQ_GET_LINK_PROPERTIES linkProperties" + lp);
mAc.replyToMessage(msg, DataConnectionAc.RSP_GET_LINK_PROPERTIES, lp);
break;
}
case DataConnectionAc.REQ_SET_LINK_PROPERTIES_HTTP_PROXY: {
ProxyProperties proxy = (ProxyProperties) msg.obj;
- log("REQ_SET_LINK_PROPERTIES_HTTP_PROXY proxy=" + proxy);
+ if (VDBG) log("REQ_SET_LINK_PROPERTIES_HTTP_PROXY proxy=" + proxy);
mLinkProperties.setHttpProxy(proxy);
mAc.replyToMessage(msg, DataConnectionAc.RSP_SET_LINK_PROPERTIES_HTTP_PROXY);
break;
@@ -612,7 +615,7 @@
case DataConnectionAc.REQ_UPDATE_LINK_PROPERTIES_DATA_CALL_STATE: {
DataCallState newState = (DataCallState) msg.obj;
DataConnectionAc.LinkPropertyChangeAction action = updateLinkProperty(newState);
- if (DBG) {
+ if (VDBG) {
log("REQ_UPDATE_LINK_PROPERTIES_DATA_CALL_STATE action="
+ action + " newState=" + newState);
}
@@ -623,18 +626,18 @@
}
case DataConnectionAc.REQ_GET_LINK_CAPABILITIES: {
LinkCapabilities lc = new LinkCapabilities(mCapabilities);
- log("REQ_GET_LINK_CAPABILITIES linkCapabilities" + lc);
+ if (VDBG) log("REQ_GET_LINK_CAPABILITIES linkCapabilities" + lc);
mAc.replyToMessage(msg, DataConnectionAc.RSP_GET_LINK_CAPABILITIES, lc);
break;
}
case DataConnectionAc.REQ_RESET:
- if (DBG) log("DcDefaultState: msg.what=REQ_RESET");
+ if (VDBG) log("DcDefaultState: msg.what=REQ_RESET");
clearSettings();
mAc.replyToMessage(msg, DataConnectionAc.RSP_RESET);
transitionTo(mInactiveState);
break;
case DataConnectionAc.REQ_GET_REFCOUNT: {
- log("REQ_GET_REFCOUNT refCount=" + mRefCount);
+ if (VDBG) log("REQ_GET_REFCOUNT refCount=" + mRefCount);
mAc.replyToMessage(msg, DataConnectionAc.RSP_GET_REFCOUNT, mRefCount);
break;
}
@@ -666,7 +669,8 @@
default:
if (DBG) {
- log("DcDefaultState: shouldn't happen but ignore msg.what=" + msg.what);
+ log("DcDefaultState: shouldn't happen but ignore msg.what=0x" +
+ Integer.toHexString(msg.what));
}
break;
}
@@ -685,13 +689,13 @@
private DisconnectParams mDisconnectParams = null;
public void setEnterNotificationParams(ConnectionParams cp, FailCause cause) {
- log("DcInactiveState: setEnterNoticationParams cp,cause");
+ if (VDBG) log("DcInactiveState: setEnterNoticationParams cp,cause");
mConnectionParams = cp;
mFailCause = cause;
}
public void setEnterNotificationParams(DisconnectParams dp) {
- log("DcInactiveState: setEnterNoticationParams dp");
+ if (VDBG) log("DcInactiveState: setEnterNoticationParams dp");
mDisconnectParams = dp;
}
@@ -707,11 +711,11 @@
* call to isInactive.
*/
if ((mConnectionParams != null) && (mFailCause != null)) {
- log("DcInactiveState: enter notifyConnectCompleted");
+ if (VDBG) log("DcInactiveState: enter notifyConnectCompleted");
notifyConnectCompleted(mConnectionParams, mFailCause);
}
if (mDisconnectParams != null) {
- log("DcInactiveState: enter notifyDisconnectCompleted");
+ if (VDBG) log("DcInactiveState: enter notifyDisconnectCompleted");
notifyDisconnectCompleted(mDisconnectParams);
}
}
@@ -751,7 +755,10 @@
break;
default:
- if (DBG) log("DcInactiveState nothandled msg.what=" + msg.what);
+ if (VDBG) {
+ log("DcInactiveState nothandled msg.what=0x" +
+ Integer.toHexString(msg.what));
+ }
retVal = NOT_HANDLED;
break;
}
@@ -856,7 +863,10 @@
break;
default:
- if (DBG) log("DcActivatingState not handled msg.what=" + msg.what);
+ if (VDBG) {
+ log("DcActivatingState not handled msg.what=0x" +
+ Integer.toHexString(msg.what));
+ }
retVal = NOT_HANDLED;
break;
}
@@ -873,7 +883,7 @@
private FailCause mFailCause = null;
public void setEnterNotificationParams(ConnectionParams cp, FailCause cause) {
- log("DcInactiveState: setEnterNoticationParams cp,cause");
+ if (VDBG) log("DcInactiveState: setEnterNoticationParams cp,cause");
mConnectionParams = cp;
mFailCause = cause;
}
@@ -887,7 +897,7 @@
* call to isActive.
*/
if ((mConnectionParams != null) && (mFailCause != null)) {
- log("DcActiveState: enter notifyConnectCompleted");
+ if (VDBG) log("DcActiveState: enter notifyConnectCompleted");
notifyConnectCompleted(mConnectionParams, mFailCause);
}
}
@@ -930,7 +940,10 @@
break;
default:
- if (DBG) log("DcActiveState nothandled msg.what=" + msg.what);
+ if (VDBG) {
+ log("DcActiveState not handled msg.what=0x" +
+ Integer.toHexString(msg.what));
+ }
retVal = NOT_HANDLED;
break;
}
@@ -972,7 +985,10 @@
break;
default:
- if (DBG) log("DcDisconnectingState not handled msg.what=" + msg.what);
+ if (VDBG) {
+ log("DcDisconnectingState not handled msg.what=0x" +
+ Integer.toHexString(msg.what));
+ }
retVal = NOT_HANDLED;
break;
}
@@ -1014,9 +1030,9 @@
break;
default:
- if (DBG) {
- log("DcDisconnectionErrorCreatingConnection not handled msg.what="
- + msg.what);
+ if (VDBG) {
+ log("DcDisconnectionErrorCreatingConnection not handled msg.what=0x"
+ + Integer.toHexString(msg.what));
}
retVal = NOT_HANDLED;
break;
diff --git a/telephony/java/com/android/internal/telephony/DataConnectionAc.java b/telephony/java/com/android/internal/telephony/DataConnectionAc.java
index a0d9b0f..62b90ae 100644
--- a/telephony/java/com/android/internal/telephony/DataConnectionAc.java
+++ b/telephony/java/com/android/internal/telephony/DataConnectionAc.java
@@ -28,7 +28,7 @@
* AsyncChannel to a DataConnection
*/
public class DataConnectionAc extends AsyncChannel {
- private static final boolean DBG = true;
+ private static final boolean DBG = false;
private String mLogTag;
public DataConnection dataConnection;
@@ -367,7 +367,7 @@
if ((response != null) && (response.what == RSP_RESET)) {
if (DBG) log("restSync ok");
} else {
- if (DBG) log("restSync error response=" + response);
+ log("restSync error response=" + response);
}
}
diff --git a/telephony/java/com/android/internal/telephony/RIL.java b/telephony/java/com/android/internal/telephony/RIL.java
index 0621cfd..2c04b30 100644
--- a/telephony/java/com/android/internal/telephony/RIL.java
+++ b/telephony/java/com/android/internal/telephony/RIL.java
@@ -2888,7 +2888,7 @@
String s = p.readString();
- if (RILJ_LOGD) riljLog("< iccIO: "
+ if (RILJ_LOGV) riljLog("< iccIO: "
+ " 0x" + Integer.toHexString(sw1)
+ " 0x" + Integer.toHexString(sw2) + " "
+ s);
@@ -3051,7 +3051,7 @@
responseSetupDataCall(Parcel p) {
int ver = p.readInt();
int num = p.readInt();
- if (RILJ_LOGD) riljLog("responseSetupDataCall ver=" + ver + " num=" + num);
+ if (RILJ_LOGV) riljLog("responseSetupDataCall ver=" + ver + " num=" + num);
DataCallState dataCall;