diff options
142 files changed, 3168 insertions, 1473 deletions
@@ -141,16 +141,35 @@ package android { public static final class Manifest.permission_group { ctor public Manifest.permission_group(); field public static final java.lang.String ACCOUNTS = "android.permission-group.ACCOUNTS"; + field public static final java.lang.String AFFECTS_BATTERY = "android.permission-group.AFFECTS_BATTERY"; + field public static final java.lang.String APP_INFO = "android.permission-group.APP_INFO"; + field public static final java.lang.String AUDIO_SETTINGS = "android.permission-group.AUDIO_SETTINGS"; + field public static final java.lang.String BLUETOOTH_NETWORK = "android.permission-group.BLUETOOTH_NETWORK"; + field public static final java.lang.String BOOKMARKS = "android.permission-group.BOOKMARKS"; + field public static final java.lang.String CALENDAR = "android.permission-group.CALENDAR"; + field public static final java.lang.String CAMERA = "android.permission-group.CAMERA"; field public static final java.lang.String COST_MONEY = "android.permission-group.COST_MONEY"; field public static final java.lang.String DEVELOPMENT_TOOLS = "android.permission-group.DEVELOPMENT_TOOLS"; + field public static final java.lang.String DEVICE_ALARMS = "android.permission-group.DEVICE_ALARMS"; + field public static final java.lang.String DISPLAY = "android.permission-group.DISPLAY"; field public static final java.lang.String HARDWARE_CONTROLS = "android.permission-group.HARDWARE_CONTROLS"; field public static final java.lang.String LOCATION = "android.permission-group.LOCATION"; field public static final java.lang.String MESSAGES = "android.permission-group.MESSAGES"; + field public static final java.lang.String MICROPHONE = "android.permission-group.MICROPHONE"; field public static final java.lang.String NETWORK = "android.permission-group.NETWORK"; field public static final java.lang.String PERSONAL_INFO = "android.permission-group.PERSONAL_INFO"; field public static final java.lang.String PHONE_CALLS = "android.permission-group.PHONE_CALLS"; + field public static final java.lang.String SCREENLOCK = "android.permission-group.SCREENLOCK"; + field public static final java.lang.String SOCIAL_INFO = "android.permission-group.SOCIAL_INFO"; + field public static final java.lang.String STATUS_BAR = "android.permission-group.STATUS_BAR"; field public static final java.lang.String STORAGE = "android.permission-group.STORAGE"; + field public static final java.lang.String SYNC_SETTINGS = "android.permission-group.SYNC_SETTINGS"; + field public static final java.lang.String SYSTEM_CLOCK = "android.permission-group.SYSTEM_CLOCK"; field public static final java.lang.String SYSTEM_TOOLS = "android.permission-group.SYSTEM_TOOLS"; + field public static final java.lang.String USER_DICTIONARY = "android.permission-group.USER_DICTIONARY"; + field public static final java.lang.String VOICEMAIL = "android.permission-group.VOICEMAIL"; + field public static final java.lang.String WALLPAPER = "android.permission-group.WALLPAPER"; + field public static final java.lang.String WRITE_USER_DICTIONARY = "android.permission-group.WRITE_USER_DICTIONARY"; } public final class R { @@ -551,6 +570,7 @@ package android { field public static final int indicatorRight = 16843022; // 0x101010e field public static final int inflatedId = 16842995; // 0x10100f3 field public static final int initOrder = 16842778; // 0x101001a + field public static final int initialKeyguardLayout = 16843714; // 0x10103c2 field public static final int initialLayout = 16843345; // 0x1010251 field public static final int innerRadius = 16843359; // 0x101025f field public static final int innerRadiusRatio = 16843163; // 0x101019b @@ -594,6 +614,7 @@ package android { field public static final int keycode = 16842949; // 0x10100c5 field public static final int killAfterRestore = 16843420; // 0x101029c field public static final int label = 16842753; // 0x1010001 + field public static final int labelFor = 16843718; // 0x10103c6 field public static final int labelTextSize = 16843317; // 0x1010235 field public static final int largeHeap = 16843610; // 0x101035a field public static final int largeScreens = 16843398; // 0x1010286 @@ -602,15 +623,20 @@ package android { field public static final int layerType = 16843604; // 0x1010354 field public static final int layout = 16842994; // 0x10100f2 field public static final int layoutAnimation = 16842988; // 0x10100ec + field public static final int layoutDirection = 16843698; // 0x10103b2 field public static final int layout_above = 16843140; // 0x1010184 field public static final int layout_alignBaseline = 16843142; // 0x1010186 field public static final int layout_alignBottom = 16843146; // 0x101018a + field public static final int layout_alignEnd = 16843706; // 0x10103ba field public static final int layout_alignLeft = 16843143; // 0x1010187 field public static final int layout_alignParentBottom = 16843150; // 0x101018e + field public static final int layout_alignParentEnd = 16843708; // 0x10103bc field public static final int layout_alignParentLeft = 16843147; // 0x101018b field public static final int layout_alignParentRight = 16843149; // 0x101018d + field public static final int layout_alignParentStart = 16843707; // 0x10103bb field public static final int layout_alignParentTop = 16843148; // 0x101018c field public static final int layout_alignRight = 16843145; // 0x1010189 + field public static final int layout_alignStart = 16843705; // 0x10103b9 field public static final int layout_alignTop = 16843144; // 0x1010188 field public static final int layout_alignWithParentIfMissing = 16843154; // 0x1010192 field public static final int layout_below = 16843141; // 0x1010185 @@ -623,15 +649,19 @@ package android { field public static final int layout_height = 16842997; // 0x10100f5 field public static final int layout_margin = 16842998; // 0x10100f6 field public static final int layout_marginBottom = 16843002; // 0x10100fa + field public static final int layout_marginEnd = 16843702; // 0x10103b6 field public static final int layout_marginLeft = 16842999; // 0x10100f7 field public static final int layout_marginRight = 16843001; // 0x10100f9 + field public static final int layout_marginStart = 16843701; // 0x10103b5 field public static final int layout_marginTop = 16843000; // 0x10100f8 field public static final int layout_row = 16843643; // 0x101037b field public static final int layout_rowSpan = 16843644; // 0x101037c field public static final int layout_scale = 16843155; // 0x1010193 field public static final int layout_span = 16843085; // 0x101014d + field public static final int layout_toEndOf = 16843704; // 0x10103b8 field public static final int layout_toLeftOf = 16843138; // 0x1010182 field public static final int layout_toRightOf = 16843139; // 0x1010183 + field public static final int layout_toStartOf = 16843703; // 0x10103b7 field public static final int layout_weight = 16843137; // 0x1010181 field public static final int layout_width = 16842996; // 0x10100f4 field public static final int layout_x = 16843135; // 0x101017f @@ -650,8 +680,10 @@ package android { field public static final int listPreferredItemHeight = 16842829; // 0x101004d field public static final int listPreferredItemHeightLarge = 16843654; // 0x1010386 field public static final int listPreferredItemHeightSmall = 16843655; // 0x1010387 + field public static final int listPreferredItemPaddingEnd = 16843710; // 0x10103be field public static final int listPreferredItemPaddingLeft = 16843683; // 0x10103a3 field public static final int listPreferredItemPaddingRight = 16843684; // 0x10103a4 + field public static final int listPreferredItemPaddingStart = 16843709; // 0x10103bd field public static final int listSelector = 16843003; // 0x10100fb field public static final int listSeparatorTextViewStyle = 16843272; // 0x1010208 field public static final int listViewStyle = 16842868; // 0x1010074 @@ -722,8 +754,10 @@ package android { field public static final int packageNames = 16843649; // 0x1010381 field public static final int padding = 16842965; // 0x10100d5 field public static final int paddingBottom = 16842969; // 0x10100d9 + field public static final int paddingEnd = 16843700; // 0x10103b4 field public static final int paddingLeft = 16842966; // 0x10100d6 field public static final int paddingRight = 16842968; // 0x10100d8 + field public static final int paddingStart = 16843699; // 0x10103b3 field public static final int paddingTop = 16842967; // 0x10100d7 field public static final int panelBackground = 16842846; // 0x101005e field public static final int panelColorBackground = 16842849; // 0x1010061 @@ -736,7 +770,9 @@ package android { field public static final int pathPattern = 16842796; // 0x101002c field public static final int pathPrefix = 16842795; // 0x101002b field public static final int permission = 16842758; // 0x1010006 + field public static final int permissionFlags = 16843719; // 0x10103c7 field public static final int permissionGroup = 16842762; // 0x101000a + field public static final int permissionGroupFlags = 16843717; // 0x10103c5 field public static final int persistent = 16842765; // 0x101000d field public static final int persistentDrawingCache = 16842990; // 0x10100ee field public static final deprecated int phoneNumber = 16843111; // 0x1010167 @@ -756,6 +792,7 @@ package android { field public static final int preferenceLayoutChild = 16842900; // 0x1010094 field public static final int preferenceScreenStyle = 16842891; // 0x101008b field public static final int preferenceStyle = 16842894; // 0x101008e + field public static final int presentationTheme = 16843712; // 0x10103c0 field public static final int previewImage = 16843482; // 0x10102da field public static final int priority = 16842780; // 0x101001c field public static final int privateImeOptions = 16843299; // 0x1010223 @@ -879,6 +916,7 @@ package android { field public static final int shownWeekCount = 16843585; // 0x1010341 field public static final int shrinkColumns = 16843082; // 0x101014a field public static final deprecated int singleLine = 16843101; // 0x101015d + field public static final int singleUser = 16843711; // 0x10103bf field public static final int smallIcon = 16843422; // 0x101029e field public static final int smallScreens = 16843396; // 0x1010284 field public static final int smoothScrollbar = 16843313; // 0x1010231 @@ -928,6 +966,7 @@ package android { field public static final int subtitle = 16843473; // 0x10102d1 field public static final int subtitleTextStyle = 16843513; // 0x10102f9 field public static final int subtypeExtraValue = 16843674; // 0x101039a + field public static final int subtypeId = 16843713; // 0x10103c1 field public static final int subtypeLocale = 16843673; // 0x1010399 field public static final int suggestActionMsg = 16843228; // 0x10101dc field public static final int suggestActionMsgColumn = 16843229; // 0x10101dd @@ -935,6 +974,7 @@ package android { field public static final int summaryColumn = 16843426; // 0x10102a2 field public static final int summaryOff = 16843248; // 0x10101f0 field public static final int summaryOn = 16843247; // 0x10101ef + field public static final int supportsRtl = 16843695; // 0x10103af field public static final int supportsUploading = 16843419; // 0x101029b field public static final int switchMinWidth = 16843632; // 0x1010370 field public static final int switchPadding = 16843633; // 0x1010371 @@ -965,6 +1005,7 @@ package android { field public static final int tension = 16843370; // 0x101026a field public static final int testOnly = 16843378; // 0x1010272 field public static final int text = 16843087; // 0x101014f + field public static final int textAlignment = 16843697; // 0x10103b1 field public static final int textAllCaps = 16843660; // 0x101038c field public static final int textAppearance = 16842804; // 0x1010034 field public static final int textAppearanceButton = 16843271; // 0x1010207 @@ -1004,6 +1045,7 @@ package android { field public static final int textColorTertiary = 16843282; // 0x1010212 field public static final int textColorTertiaryInverse = 16843283; // 0x1010213 field public static final int textCursorDrawable = 16843618; // 0x1010362 + field public static final int textDirection = 16843696; // 0x10103b0 field public static final int textEditNoPasteWindowLayout = 16843541; // 0x1010315 field public static final int textEditPasteWindowLayout = 16843540; // 0x1010314 field public static final int textEditSideNoPasteWindowLayout = 16843615; // 0x101035f @@ -1097,6 +1139,8 @@ package android { field public static final int weekNumberColor = 16843589; // 0x1010345 field public static final int weekSeparatorLineColor = 16843590; // 0x1010346 field public static final int weightSum = 16843048; // 0x1010128 + field public static final int widgetCategory = 16843716; // 0x10103c4 + field public static final int widgetFeatures = 16843715; // 0x10103c3 field public static final int widgetLayout = 16843243; // 0x10101eb field public static final int width = 16843097; // 0x1010159 field public static final int windowActionBar = 16843469; // 0x10102cd @@ -2022,6 +2066,7 @@ package android.accessibilityservice { field public static final int GLOBAL_ACTION_BACK = 1; // 0x1 field public static final int GLOBAL_ACTION_HOME = 2; // 0x2 field public static final int GLOBAL_ACTION_NOTIFICATIONS = 4; // 0x4 + field public static final int GLOBAL_ACTION_QUICK_SETTINGS = 5; // 0x5 field public static final int GLOBAL_ACTION_RECENTS = 3; // 0x3 field public static final java.lang.String SERVICE_INTERFACE = "android.accessibilityservice.AccessibilityService"; field public static final java.lang.String SERVICE_META_DATA = "android.accessibilityservice"; @@ -2043,6 +2088,7 @@ package android.accessibilityservice { field public static final int DEFAULT = 1; // 0x1 field public static final int FEEDBACK_ALL_MASK = -1; // 0xffffffff field public static final int FEEDBACK_AUDIBLE = 4; // 0x4 + field public static final int FEEDBACK_BRAILLE = 32; // 0x20 field public static final int FEEDBACK_GENERIC = 16; // 0x10 field public static final int FEEDBACK_HAPTIC = 2; // 0x2 field public static final int FEEDBACK_SPOKEN = 1; // 0x1 @@ -2992,6 +3038,7 @@ package android.app { method public android.app.AlertDialog.Builder setNeutralButton(int, android.content.DialogInterface.OnClickListener); method public android.app.AlertDialog.Builder setNeutralButton(java.lang.CharSequence, android.content.DialogInterface.OnClickListener); method public android.app.AlertDialog.Builder setOnCancelListener(android.content.DialogInterface.OnCancelListener); + method public android.app.AlertDialog.Builder setOnDismissListener(android.content.DialogInterface.OnDismissListener); method public android.app.AlertDialog.Builder setOnItemSelectedListener(android.widget.AdapterView.OnItemSelectedListener); method public android.app.AlertDialog.Builder setOnKeyListener(android.content.DialogInterface.OnKeyListener); method public android.app.AlertDialog.Builder setPositiveButton(int, android.content.DialogInterface.OnClickListener); @@ -3324,9 +3371,11 @@ package android.app { method public final boolean equals(java.lang.Object); method public final android.app.Activity getActivity(); method public final android.os.Bundle getArguments(); + method public final android.app.FragmentManager getChildFragmentManager(); method public final android.app.FragmentManager getFragmentManager(); method public final int getId(); method public android.app.LoaderManager getLoaderManager(); + method public final android.app.Fragment getParentFragment(); method public final android.content.res.Resources getResources(); method public final boolean getRetainInstance(); method public final java.lang.String getString(int); @@ -3375,6 +3424,7 @@ package android.app { method public void onStop(); method public void onTrimMemory(int); method public void onViewCreated(android.view.View, android.os.Bundle); + method public void onViewStateRestored(android.os.Bundle); method public void registerForContextMenu(android.view.View); method public void setArguments(android.os.Bundle); method public void setHasOptionsMenu(boolean); @@ -3799,6 +3849,7 @@ package android.app { method public android.app.Notification.Builder setOnlyAlertOnce(boolean); method public android.app.Notification.Builder setPriority(int); method public android.app.Notification.Builder setProgress(int, int, boolean); + method public android.app.Notification.Builder setShowWhen(boolean); method public android.app.Notification.Builder setSmallIcon(int); method public android.app.Notification.Builder setSmallIcon(int, int); method public android.app.Notification.Builder setSound(android.net.Uri); @@ -3848,9 +3899,12 @@ package android.app { method public static android.app.PendingIntent getActivity(android.content.Context, int, android.content.Intent, int); method public static android.app.PendingIntent getActivity(android.content.Context, int, android.content.Intent, int, android.os.Bundle); method public static android.app.PendingIntent getBroadcast(android.content.Context, int, android.content.Intent, int); + method public java.lang.String getCreatorPackage(); + method public int getCreatorUid(); + method public android.os.UserHandle getCreatorUserHandle(); method public android.content.IntentSender getIntentSender(); method public static android.app.PendingIntent getService(android.content.Context, int, android.content.Intent, int); - method public java.lang.String getTargetPackage(); + method public deprecated java.lang.String getTargetPackage(); method public static android.app.PendingIntent readPendingIntentOrNullFromParcel(android.os.Parcel); method public void send() throws android.app.PendingIntent.CanceledException; method public void send(int) throws android.app.PendingIntent.CanceledException; @@ -3877,6 +3931,15 @@ package android.app { method public abstract void onSendFinished(android.app.PendingIntent, android.content.Intent, int, java.lang.String, android.os.Bundle); } + public class Presentation extends android.app.Dialog { + ctor public Presentation(android.content.Context, android.view.Display); + ctor public Presentation(android.content.Context, android.view.Display, int); + method public android.view.Display getDisplay(); + method public android.content.res.Resources getResources(); + method public void onDisplayChanged(); + method public void onDisplayRemoved(); + } + public class ProgressDialog extends android.app.AlertDialog { ctor public ProgressDialog(android.content.Context); ctor public ProgressDialog(android.content.Context, int); @@ -4105,6 +4168,7 @@ package android.app { method public android.graphics.drawable.Drawable getFastDrawable(); method public static android.app.WallpaperManager getInstance(android.content.Context); method public android.app.WallpaperInfo getWallpaperInfo(); + method public boolean hasResourceWallpaper(int); method public android.graphics.drawable.Drawable peekDrawable(); method public android.graphics.drawable.Drawable peekFastDrawable(); method public void sendWallpaperCommand(android.os.IBinder, java.lang.String, int, int, int, android.os.Bundle); @@ -4145,6 +4209,7 @@ package android.app.admin { field public static final android.os.Parcelable.Creator CREATOR; field public static final int USES_ENCRYPTED_STORAGE = 7; // 0x7 field public static final int USES_POLICY_DISABLE_CAMERA = 8; // 0x8 + field public static final int USES_POLICY_DISABLE_KEYGUARD_FEATURES = 9; // 0x9 field public static final int USES_POLICY_EXPIRE_PASSWORD = 6; // 0x6 field public static final int USES_POLICY_FORCE_LOCK = 3; // 0x3 field public static final int USES_POLICY_LIMIT_PASSWORD = 0; // 0x0 @@ -4180,6 +4245,7 @@ package android.app.admin { method public java.util.List<android.content.ComponentName> getActiveAdmins(); method public boolean getCameraDisabled(android.content.ComponentName); method public int getCurrentFailedPasswordAttempts(); + method public int getKeyguardDisabledFeatures(android.content.ComponentName); method public int getMaximumFailedPasswordsForWipe(android.content.ComponentName); method public long getMaximumTimeToLock(android.content.ComponentName); method public long getPasswordExpiration(android.content.ComponentName); @@ -4203,6 +4269,7 @@ package android.app.admin { method public void removeActiveAdmin(android.content.ComponentName); method public boolean resetPassword(java.lang.String, int); method public void setCameraDisabled(android.content.ComponentName, boolean); + method public void setKeyguardDisabledFeatures(android.content.ComponentName, int); method public void setMaximumFailedPasswordsForWipe(android.content.ComponentName, int); method public void setMaximumTimeToLock(android.content.ComponentName, long); method public void setPasswordExpirationTimeout(android.content.ComponentName, long); @@ -4226,6 +4293,10 @@ package android.app.admin { field public static final int ENCRYPTION_STATUS_UNSUPPORTED = 0; // 0x0 field public static final java.lang.String EXTRA_ADD_EXPLANATION = "android.app.extra.ADD_EXPLANATION"; field public static final java.lang.String EXTRA_DEVICE_ADMIN = "android.app.extra.DEVICE_ADMIN"; + field public static final int KEYGUARD_DISABLE_FEATURES_ALL = 2147483647; // 0x7fffffff + field public static final int KEYGUARD_DISABLE_FEATURES_NONE = 0; // 0x0 + field public static final int KEYGUARD_DISABLE_SECURE_CAMERA = 2; // 0x2 + field public static final int KEYGUARD_DISABLE_WIDGETS_ALL = 1; // 0x1 field public static final int PASSWORD_QUALITY_ALPHABETIC = 262144; // 0x40000 field public static final int PASSWORD_QUALITY_ALPHANUMERIC = 327680; // 0x50000 field public static final int PASSWORD_QUALITY_BIOMETRIC_WEAK = 32768; // 0x8000 @@ -4333,6 +4404,7 @@ package android.appwidget { method public void deleteHost(); method protected android.appwidget.AppWidgetHostView onCreateView(android.content.Context, int, android.appwidget.AppWidgetProviderInfo); method protected void onProviderChanged(int, android.appwidget.AppWidgetProviderInfo); + method protected void onProvidersChanged(); method public void startListening(); method public void stopListening(); } @@ -4354,6 +4426,7 @@ package android.appwidget { public class AppWidgetManager { method public boolean bindAppWidgetIdIfAllowed(int, android.content.ComponentName); + method public boolean bindAppWidgetIdIfAllowed(int, android.content.ComponentName, android.os.Bundle); method public int[] getAppWidgetIds(android.content.ComponentName); method public android.appwidget.AppWidgetProviderInfo getAppWidgetInfo(int); method public android.os.Bundle getAppWidgetOptions(int); @@ -4383,6 +4456,7 @@ package android.appwidget { field public static final java.lang.String EXTRA_CUSTOM_INFO = "customInfo"; field public static final int INVALID_APPWIDGET_ID = 0; // 0x0 field public static final java.lang.String META_DATA_APPWIDGET_PROVIDER = "android.appwidget.provider"; + field public static final java.lang.String OPTION_APPWIDGET_HOST_CATEGORY = "appWidgetCategory"; field public static final java.lang.String OPTION_APPWIDGET_MAX_HEIGHT = "appWidgetMaxHeight"; field public static final java.lang.String OPTION_APPWIDGET_MAX_WIDTH = "appWidgetMaxWidth"; field public static final java.lang.String OPTION_APPWIDGET_MIN_HEIGHT = "appWidgetMinHeight"; @@ -4402,6 +4476,7 @@ package android.appwidget { public class AppWidgetProviderInfo implements android.os.Parcelable { ctor public AppWidgetProviderInfo(); ctor public AppWidgetProviderInfo(android.os.Parcel); + method public android.appwidget.AppWidgetProviderInfo clone(); method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); field public static final android.os.Parcelable.Creator CREATOR; @@ -4409,9 +4484,14 @@ package android.appwidget { field public static final int RESIZE_HORIZONTAL = 1; // 0x1 field public static final int RESIZE_NONE = 0; // 0x0 field public static final int RESIZE_VERTICAL = 2; // 0x2 + field public static final int WIDGET_CATEGORY_HOME_SCREEN = 1; // 0x1 + field public static final int WIDGET_CATEGORY_KEYGUARD = 2; // 0x2 + field public static final int WIDGET_FEATURES_NONE = 0; // 0x0 + field public static final int WIDGET_FEATURES_STATUS = 1; // 0x1 field public int autoAdvanceViewId; field public android.content.ComponentName configure; field public int icon; + field public int initialKeyguardLayout; field public int initialLayout; field public java.lang.String label; field public int minHeight; @@ -4422,6 +4502,8 @@ package android.appwidget { field public android.content.ComponentName provider; field public int resizeMode; field public int updatePeriodMillis; + field public int widgetCategory; + field public int widgetFeatures; } } @@ -4429,6 +4511,7 @@ package android.appwidget { package android.bluetooth { public final class BluetoothA2dp implements android.bluetooth.BluetoothProfile { + method public void finalize(); method public java.util.List<android.bluetooth.BluetoothDevice> getConnectedDevices(); method public int getConnectionState(android.bluetooth.BluetoothDevice); method public java.util.List<android.bluetooth.BluetoothDevice> getDevicesMatchingConnectionStates(int[]); @@ -5054,6 +5137,7 @@ package android.content { public class ContentProviderClient { method public android.content.ContentProviderResult[] applyBatch(java.util.ArrayList<android.content.ContentProviderOperation>) throws android.content.OperationApplicationException, android.os.RemoteException; method public int bulkInsert(android.net.Uri, android.content.ContentValues[]) throws android.os.RemoteException; + method public android.os.Bundle call(java.lang.String, java.lang.String, android.os.Bundle) throws android.os.RemoteException; method public int delete(android.net.Uri, java.lang.String, java.lang.String[]) throws android.os.RemoteException; method public android.content.ContentProvider getLocalContentProvider(); method public java.lang.String[] getStreamTypes(android.net.Uri, java.lang.String) throws android.os.RemoteException; @@ -5240,6 +5324,8 @@ package android.content { method public abstract int checkUriPermission(android.net.Uri, int, int, int); method public abstract int checkUriPermission(android.net.Uri, java.lang.String, java.lang.String, int, int, int); method public abstract deprecated void clearWallpaper() throws java.io.IOException; + method public abstract android.content.Context createConfigurationContext(android.content.res.Configuration); + method public abstract android.content.Context createDisplayContext(android.view.Display); method public abstract android.content.Context createPackageContext(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException; method public abstract java.lang.String[] databaseList(); method public abstract boolean deleteDatabase(java.lang.String); @@ -5295,13 +5381,19 @@ package android.content { method public abstract android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter); method public abstract android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter, java.lang.String, android.os.Handler); method public abstract void removeStickyBroadcast(android.content.Intent); + method public abstract void removeStickyBroadcastAsUser(android.content.Intent, android.os.UserHandle); method public abstract void revokeUriPermission(android.net.Uri, int); method public abstract void sendBroadcast(android.content.Intent); method public abstract void sendBroadcast(android.content.Intent, java.lang.String); + method public abstract void sendBroadcastAsUser(android.content.Intent, android.os.UserHandle); + method public abstract void sendBroadcastAsUser(android.content.Intent, android.os.UserHandle, java.lang.String); method public abstract void sendOrderedBroadcast(android.content.Intent, java.lang.String); method public abstract void sendOrderedBroadcast(android.content.Intent, java.lang.String, android.content.BroadcastReceiver, android.os.Handler, int, java.lang.String, android.os.Bundle); + method public abstract void sendOrderedBroadcastAsUser(android.content.Intent, android.os.UserHandle, java.lang.String, android.content.BroadcastReceiver, android.os.Handler, int, java.lang.String, android.os.Bundle); method public abstract void sendStickyBroadcast(android.content.Intent); + method public abstract void sendStickyBroadcastAsUser(android.content.Intent, android.os.UserHandle); method public abstract void sendStickyOrderedBroadcast(android.content.Intent, android.content.BroadcastReceiver, android.os.Handler, int, java.lang.String, android.os.Bundle); + method public abstract void sendStickyOrderedBroadcastAsUser(android.content.Intent, android.os.UserHandle, android.content.BroadcastReceiver, android.os.Handler, int, java.lang.String, android.os.Bundle); method public abstract void setTheme(int); method public abstract deprecated void setWallpaper(android.graphics.Bitmap) throws java.io.IOException; method public abstract deprecated void setWallpaper(java.io.InputStream) throws java.io.IOException; @@ -5336,6 +5428,7 @@ package android.content { field public static final int CONTEXT_INCLUDE_CODE = 1; // 0x1 field public static final int CONTEXT_RESTRICTED = 4; // 0x4 field public static final java.lang.String DEVICE_POLICY_SERVICE = "device_policy"; + field public static final java.lang.String DISPLAY_SERVICE = "display"; field public static final java.lang.String DOWNLOAD_SERVICE = "download"; field public static final java.lang.String DROPBOX_SERVICE = "dropbox"; field public static final java.lang.String INPUT_METHOD_SERVICE = "input_method"; @@ -5348,8 +5441,8 @@ package android.content { field public static final int MODE_ENABLE_WRITE_AHEAD_LOGGING = 8; // 0x8 field public static final int MODE_MULTI_PROCESS = 4; // 0x4 field public static final int MODE_PRIVATE = 0; // 0x0 - field public static final int MODE_WORLD_READABLE = 1; // 0x1 - field public static final int MODE_WORLD_WRITEABLE = 2; // 0x2 + field public static final deprecated int MODE_WORLD_READABLE = 1; // 0x1 + field public static final deprecated int MODE_WORLD_WRITEABLE = 2; // 0x2 field public static final java.lang.String NFC_SERVICE = "nfc"; field public static final java.lang.String NOTIFICATION_SERVICE = "notification"; field public static final java.lang.String NSD_SERVICE = "servicediscovery"; @@ -5361,6 +5454,7 @@ package android.content { field public static final java.lang.String TEXT_SERVICES_MANAGER_SERVICE = "textservices"; field public static final java.lang.String UI_MODE_SERVICE = "uimode"; field public static final java.lang.String USB_SERVICE = "usb"; + field public static final java.lang.String USER_SERVICE = "user"; field public static final java.lang.String VIBRATOR_SERVICE = "vibrator"; field public static final java.lang.String WALLPAPER_SERVICE = "wallpaper"; field public static final java.lang.String WIFI_P2P_SERVICE = "wifip2p"; @@ -5380,6 +5474,8 @@ package android.content { method public int checkUriPermission(android.net.Uri, int, int, int); method public int checkUriPermission(android.net.Uri, java.lang.String, java.lang.String, int, int, int); method public void clearWallpaper() throws java.io.IOException; + method public android.content.Context createConfigurationContext(android.content.res.Configuration); + method public android.content.Context createDisplayContext(android.view.Display); method public android.content.Context createPackageContext(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException; method public java.lang.String[] databaseList(); method public boolean deleteDatabase(java.lang.String); @@ -5427,13 +5523,19 @@ package android.content { method public android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter); method public android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter, java.lang.String, android.os.Handler); method public void removeStickyBroadcast(android.content.Intent); + method public void removeStickyBroadcastAsUser(android.content.Intent, android.os.UserHandle); method public void revokeUriPermission(android.net.Uri, int); method public void sendBroadcast(android.content.Intent); method public void sendBroadcast(android.content.Intent, java.lang.String); + method public void sendBroadcastAsUser(android.content.Intent, android.os.UserHandle); + method public void sendBroadcastAsUser(android.content.Intent, android.os.UserHandle, java.lang.String); method public void sendOrderedBroadcast(android.content.Intent, java.lang.String); method public void sendOrderedBroadcast(android.content.Intent, java.lang.String, android.content.BroadcastReceiver, android.os.Handler, int, java.lang.String, android.os.Bundle); + method public void sendOrderedBroadcastAsUser(android.content.Intent, android.os.UserHandle, java.lang.String, android.content.BroadcastReceiver, android.os.Handler, int, java.lang.String, android.os.Bundle); method public void sendStickyBroadcast(android.content.Intent); + method public void sendStickyBroadcastAsUser(android.content.Intent, android.os.UserHandle); method public void sendStickyOrderedBroadcast(android.content.Intent, android.content.BroadcastReceiver, android.os.Handler, int, java.lang.String, android.os.Bundle); + method public void sendStickyOrderedBroadcastAsUser(android.content.Intent, android.os.UserHandle, android.content.BroadcastReceiver, android.os.Handler, int, java.lang.String, android.os.Bundle); method public void setTheme(int); method public void setWallpaper(android.graphics.Bitmap) throws java.io.IOException; method public void setWallpaper(java.io.InputStream) throws java.io.IOException; @@ -5674,6 +5776,8 @@ package android.content { field public static final java.lang.String ACTION_DEVICE_STORAGE_OK = "android.intent.action.DEVICE_STORAGE_OK"; field public static final java.lang.String ACTION_DIAL = "android.intent.action.DIAL"; field public static final java.lang.String ACTION_DOCK_EVENT = "android.intent.action.DOCK_EVENT"; + field public static final java.lang.String ACTION_DREAMING_STARTED = "android.intent.action.DREAMING_STARTED"; + field public static final java.lang.String ACTION_DREAMING_STOPPED = "android.intent.action.DREAMING_STOPPED"; field public static final java.lang.String ACTION_EDIT = "android.intent.action.EDIT"; field public static final java.lang.String ACTION_EXTERNAL_APPLICATIONS_AVAILABLE = "android.intent.action.EXTERNAL_APPLICATIONS_AVAILABLE"; field public static final java.lang.String ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE = "android.intent.action.EXTERNAL_APPLICATIONS_UNAVAILABLE"; @@ -5715,6 +5819,7 @@ package android.content { field public static final java.lang.String ACTION_PACKAGE_REMOVED = "android.intent.action.PACKAGE_REMOVED"; field public static final java.lang.String ACTION_PACKAGE_REPLACED = "android.intent.action.PACKAGE_REPLACED"; field public static final java.lang.String ACTION_PACKAGE_RESTARTED = "android.intent.action.PACKAGE_RESTARTED"; + field public static final java.lang.String ACTION_PACKAGE_VERIFIED = "android.intent.action.PACKAGE_VERIFIED"; field public static final java.lang.String ACTION_PASTE = "android.intent.action.PASTE"; field public static final java.lang.String ACTION_PICK = "android.intent.action.PICK"; field public static final java.lang.String ACTION_PICK_ACTIVITY = "android.intent.action.PICK_ACTIVITY"; @@ -5742,6 +5847,9 @@ package android.content { field public static final deprecated java.lang.String ACTION_UMS_CONNECTED = "android.intent.action.UMS_CONNECTED"; field public static final deprecated java.lang.String ACTION_UMS_DISCONNECTED = "android.intent.action.UMS_DISCONNECTED"; field public static final java.lang.String ACTION_UNINSTALL_PACKAGE = "android.intent.action.UNINSTALL_PACKAGE"; + field public static final java.lang.String ACTION_USER_BACKGROUND = "android.intent.action.USER_BACKGROUND"; + field public static final java.lang.String ACTION_USER_FOREGROUND = "android.intent.action.USER_FOREGROUND"; + field public static final java.lang.String ACTION_USER_INITIALIZE = "android.intent.action.USER_INITIALIZE"; field public static final java.lang.String ACTION_USER_PRESENT = "android.intent.action.USER_PRESENT"; field public static final java.lang.String ACTION_VIEW = "android.intent.action.VIEW"; field public static final java.lang.String ACTION_VOICE_COMMAND = "android.intent.action.VOICE_COMMAND"; @@ -5805,7 +5913,9 @@ package android.content { field public static final java.lang.String EXTRA_KEY_EVENT = "android.intent.extra.KEY_EVENT"; field public static final java.lang.String EXTRA_LOCAL_ONLY = "android.intent.extra.LOCAL_ONLY"; field public static final java.lang.String EXTRA_NOT_UNKNOWN_SOURCE = "android.intent.extra.NOT_UNKNOWN_SOURCE"; + field public static final java.lang.String EXTRA_ORIGINATING_URI = "android.intent.extra.ORIGINATING_URI"; field public static final java.lang.String EXTRA_PHONE_NUMBER = "android.intent.extra.PHONE_NUMBER"; + field public static final java.lang.String EXTRA_REFERRER = "android.intent.extra.REFERRER"; field public static final java.lang.String EXTRA_REMOTE_INTENT_TOKEN = "android.intent.extra.remote_intent_token"; field public static final java.lang.String EXTRA_REPLACING = "android.intent.extra.REPLACING"; field public static final java.lang.String EXTRA_RETURN_RESULT = "android.intent.extra.RETURN_RESULT"; @@ -5953,7 +6063,10 @@ package android.content { public class IntentSender implements android.os.Parcelable { method public int describeContents(); - method public java.lang.String getTargetPackage(); + method public java.lang.String getCreatorPackage(); + method public int getCreatorUid(); + method public android.os.UserHandle getCreatorUserHandle(); + method public deprecated java.lang.String getTargetPackage(); method public static android.content.IntentSender readIntentSenderOrNullFromParcel(android.os.Parcel); method public void sendIntent(android.content.Context, int, android.content.Intent, android.content.IntentSender.OnFinished, android.os.Handler) throws android.content.IntentSender.SendIntentException; method public void sendIntent(android.content.Context, int, android.content.Intent, android.content.IntentSender.OnFinished, android.os.Handler, java.lang.String) throws android.content.IntentSender.SendIntentException; @@ -6186,9 +6299,11 @@ package android.content.pm { method public int describeContents(); method public void dump(android.util.Printer, java.lang.String); method public final int getThemeResource(); + field public static final int CONFIG_DENSITY = 4096; // 0x1000 field public static final int CONFIG_FONT_SCALE = 1073741824; // 0x40000000 field public static final int CONFIG_KEYBOARD = 16; // 0x10 field public static final int CONFIG_KEYBOARD_HIDDEN = 32; // 0x20 + field public static final int CONFIG_LAYOUT_DIRECTION = 8192; // 0x2000 field public static final int CONFIG_LOCALE = 4; // 0x4 field public static final int CONFIG_MCC = 1; // 0x1 field public static final int CONFIG_MNC = 2; // 0x2 @@ -6209,6 +6324,7 @@ package android.content.pm { field public static final int FLAG_HARDWARE_ACCELERATED = 512; // 0x200 field public static final int FLAG_MULTIPROCESS = 1; // 0x1 field public static final int FLAG_NO_HISTORY = 128; // 0x80 + field public static final int FLAG_SINGLE_USER = 1073741824; // 0x40000000 field public static final int FLAG_STATE_NOT_NEEDED = 16; // 0x10 field public static final int LAUNCH_MULTIPLE = 0; // 0x0 field public static final int LAUNCH_SINGLE_INSTANCE = 3; // 0x3 @@ -6254,6 +6370,8 @@ package android.content.pm { field public static final int FLAG_EXTERNAL_STORAGE = 262144; // 0x40000 field public static final int FLAG_FACTORY_TEST = 16; // 0x10 field public static final int FLAG_HAS_CODE = 4; // 0x4 + field public static final int FLAG_INSTALLED = 8388608; // 0x800000 + field public static final int FLAG_IS_DATA_ONLY = 16777216; // 0x1000000 field public static final int FLAG_KILL_AFTER_RESTORE = 65536; // 0x10000 field public static final int FLAG_LARGE_HEAP = 1048576; // 0x100000 field public static final int FLAG_PERSISTENT = 8; // 0x8 @@ -6262,6 +6380,7 @@ package android.content.pm { field public static final int FLAG_STOPPED = 2097152; // 0x200000 field public static final int FLAG_SUPPORTS_LARGE_SCREENS = 2048; // 0x800 field public static final int FLAG_SUPPORTS_NORMAL_SCREENS = 1024; // 0x400 + field public static final int FLAG_SUPPORTS_RTL = 4194304; // 0x400000 field public static final int FLAG_SUPPORTS_SCREEN_DENSITIES = 8192; // 0x2000 field public static final int FLAG_SUPPORTS_SMALL_SCREENS = 512; // 0x200 field public static final int FLAG_SUPPORTS_XLARGE_SCREENS = 524288; // 0x80000 @@ -6434,6 +6553,7 @@ package android.content.pm { method public abstract int checkSignatures(int, int); method public abstract void clearPackagePreferredActivities(java.lang.String); method public abstract java.lang.String[] currentToCanonicalPackageNames(java.lang.String[]); + method public abstract void extendVerificationTimeout(int, int, long); method public abstract android.graphics.drawable.Drawable getActivityIcon(android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException; method public abstract android.graphics.drawable.Drawable getActivityIcon(android.content.Intent) throws android.content.pm.PackageManager.NameNotFoundException; method public abstract android.content.pm.ActivityInfo getActivityInfo(android.content.ComponentName, int) throws android.content.pm.PackageManager.NameNotFoundException; @@ -6498,9 +6618,11 @@ package android.content.pm { field public static final int COMPONENT_ENABLED_STATE_ENABLED = 1; // 0x1 field public static final int DONT_KILL_APP = 1; // 0x1 field public static final java.lang.String EXTRA_VERIFICATION_ID = "android.content.pm.extra.VERIFICATION_ID"; + field public static final java.lang.String EXTRA_VERIFICATION_RESULT = "android.content.pm.extra.VERIFICATION_RESULT"; field public static final java.lang.String FEATURE_AUDIO_LOW_LATENCY = "android.hardware.audio.low_latency"; field public static final java.lang.String FEATURE_BLUETOOTH = "android.hardware.bluetooth"; field public static final java.lang.String FEATURE_CAMERA = "android.hardware.camera"; + field public static final java.lang.String FEATURE_CAMERA_ANY = "android.hardware.camera.any"; field public static final java.lang.String FEATURE_CAMERA_AUTOFOCUS = "android.hardware.camera.autofocus"; field public static final java.lang.String FEATURE_CAMERA_FLASH = "android.hardware.camera.flash"; field public static final java.lang.String FEATURE_CAMERA_FRONT = "android.hardware.camera.front"; @@ -6552,6 +6674,7 @@ package android.content.pm { field public static final int GET_UNINSTALLED_PACKAGES = 8192; // 0x2000 field public static final int GET_URI_PERMISSION_PATTERNS = 2048; // 0x800 field public static final int MATCH_DEFAULT_ONLY = 65536; // 0x10000 + field public static final long MAXIMUM_VERIFICATION_TIMEOUT = 3600000L; // 0x36ee80L field public static final int PERMISSION_DENIED = -1; // 0xffffffff field public static final int PERMISSION_GRANTED = 0; // 0x0 field public static final int SIGNATURE_FIRST_NOT_SIGNED = -1; // 0xffffffff @@ -6601,8 +6724,11 @@ package android.content.pm { method public int describeContents(); method public java.lang.CharSequence loadDescription(android.content.pm.PackageManager); field public static final android.os.Parcelable.Creator CREATOR; + field public static final int FLAG_PERSONAL_INFO = 1; // 0x1 field public int descriptionRes; + field public int flags; field public java.lang.CharSequence nonLocalizedDescription; + field public int priority; } public class PermissionInfo extends android.content.pm.PackageItemInfo implements android.os.Parcelable { @@ -6611,6 +6737,7 @@ package android.content.pm { method public int describeContents(); method public java.lang.CharSequence loadDescription(android.content.pm.PackageManager); field public static final android.os.Parcelable.Creator CREATOR; + field public static final int FLAG_COSTS_MONEY = 1; // 0x1 field public static final int PROTECTION_DANGEROUS = 1; // 0x1 field public static final int PROTECTION_FLAG_DEVELOPMENT = 32; // 0x20 field public static final int PROTECTION_FLAG_SYSTEM = 16; // 0x10 @@ -6620,6 +6747,7 @@ package android.content.pm { field public static final int PROTECTION_SIGNATURE = 2; // 0x2 field public static final int PROTECTION_SIGNATURE_OR_SYSTEM = 3; // 0x3 field public int descriptionRes; + field public int flags; field public java.lang.String group; field public java.lang.CharSequence nonLocalizedDescription; field public int protectionLevel; @@ -6630,7 +6758,9 @@ package android.content.pm { ctor public ProviderInfo(android.content.pm.ProviderInfo); method public int describeContents(); field public static final android.os.Parcelable.Creator CREATOR; + field public static final int FLAG_SINGLE_USER = 1073741824; // 0x40000000 field public java.lang.String authority; + field public int flags; field public boolean grantUriPermissions; field public int initOrder; field public deprecated boolean isSyncable; @@ -6643,6 +6773,7 @@ package android.content.pm { public class ResolveInfo implements android.os.Parcelable { ctor public ResolveInfo(); + ctor public ResolveInfo(android.content.pm.ResolveInfo); method public int describeContents(); method public void dump(android.util.Printer, java.lang.String); method public final int getIconResource(); @@ -6676,6 +6807,7 @@ package android.content.pm { method public void dump(android.util.Printer, java.lang.String); field public static final android.os.Parcelable.Creator CREATOR; field public static final int FLAG_ISOLATED_PROCESS = 2; // 0x2 + field public static final int FLAG_SINGLE_USER = 1073741824; // 0x40000000 field public static final int FLAG_STOP_WITH_TASK = 1; // 0x1 field public int flags; field public java.lang.String permission; @@ -6771,14 +6903,18 @@ package android.content.res { method public int describeContents(); method public int diff(android.content.res.Configuration); method public boolean equals(android.content.res.Configuration); + method public int getLayoutDirection(); method public boolean isLayoutSizeAtLeast(int); method public static boolean needNewResources(int, int); method public void readFromParcel(android.os.Parcel); + method public void setLayoutDirection(java.util.Locale); + method public void setLocale(java.util.Locale); method public void setTo(android.content.res.Configuration); method public void setToDefaults(); method public int updateFrom(android.content.res.Configuration); method public void writeToParcel(android.os.Parcel, int); field public static final android.os.Parcelable.Creator CREATOR; + field public static final int DENSITY_DPI_UNDEFINED = 0; // 0x0 field public static final int HARDKEYBOARDHIDDEN_NO = 1; // 0x1 field public static final int HARDKEYBOARDHIDDEN_UNDEFINED = 0; // 0x0 field public static final int HARDKEYBOARDHIDDEN_YES = 2; // 0x2 @@ -6801,6 +6937,11 @@ package android.content.res { field public static final int ORIENTATION_PORTRAIT = 1; // 0x1 field public static final deprecated int ORIENTATION_SQUARE = 3; // 0x3 field public static final int ORIENTATION_UNDEFINED = 0; // 0x0 + field public static final int SCREENLAYOUT_LAYOUTDIR_LTR = 64; // 0x40 + field public static final int SCREENLAYOUT_LAYOUTDIR_MASK = 192; // 0xc0 + field public static final int SCREENLAYOUT_LAYOUTDIR_RTL = 128; // 0x80 + field public static final int SCREENLAYOUT_LAYOUTDIR_SHIFT = 6; // 0x6 + field public static final int SCREENLAYOUT_LAYOUTDIR_UNDEFINED = 0; // 0x0 field public static final int SCREENLAYOUT_LONG_MASK = 48; // 0x30 field public static final int SCREENLAYOUT_LONG_NO = 16; // 0x10 field public static final int SCREENLAYOUT_LONG_UNDEFINED = 0; // 0x0 @@ -6811,6 +6952,7 @@ package android.content.res { field public static final int SCREENLAYOUT_SIZE_SMALL = 1; // 0x1 field public static final int SCREENLAYOUT_SIZE_UNDEFINED = 0; // 0x0 field public static final int SCREENLAYOUT_SIZE_XLARGE = 4; // 0x4 + field public static final int SCREENLAYOUT_UNDEFINED = 0; // 0x0 field public static final int SCREEN_HEIGHT_DP_UNDEFINED = 0; // 0x0 field public static final int SCREEN_WIDTH_DP_UNDEFINED = 0; // 0x0 field public static final int SMALLEST_SCREEN_WIDTH_DP_UNDEFINED = 0; // 0x0 @@ -6829,6 +6971,7 @@ package android.content.res { field public static final int UI_MODE_TYPE_NORMAL = 1; // 0x1 field public static final int UI_MODE_TYPE_TELEVISION = 4; // 0x4 field public static final int UI_MODE_TYPE_UNDEFINED = 0; // 0x0 + field public int densityDpi; field public float fontScale; field public int hardKeyboardHidden; field public int keyboard; @@ -6942,7 +7085,7 @@ package android.content.res { method public int getIndexCount(); method public int getInt(int, int); method public int getInteger(int, int); - method public int getLayoutDimension(int, java.lang.String); + method public deprecated int getLayoutDimension(int, java.lang.String); method public int getLayoutDimension(int, int); method public java.lang.String getNonResourceString(int); method public java.lang.String getPositionDescription(); @@ -7307,7 +7450,7 @@ package android.database { field public static final int STATEMENT_UPDATE = 2; // 0x2 } - public static class DatabaseUtils.InsertHelper { + public static deprecated class DatabaseUtils.InsertHelper { ctor public DatabaseUtils.InsertHelper(android.database.sqlite.SQLiteDatabase, java.lang.String); method public void bind(int, double); method public void bind(int, float); @@ -8084,8 +8227,11 @@ package android.graphics { method public static android.graphics.Bitmap createBitmap(android.graphics.Bitmap, int, int, int, int); method public static android.graphics.Bitmap createBitmap(android.graphics.Bitmap, int, int, int, int, android.graphics.Matrix, boolean); method public static android.graphics.Bitmap createBitmap(int, int, android.graphics.Bitmap.Config); + method public static android.graphics.Bitmap createBitmap(android.util.DisplayMetrics, int, int, android.graphics.Bitmap.Config); method public static android.graphics.Bitmap createBitmap(int[], int, int, int, int, android.graphics.Bitmap.Config); + method public static android.graphics.Bitmap createBitmap(android.util.DisplayMetrics, int[], int, int, int, int, android.graphics.Bitmap.Config); method public static android.graphics.Bitmap createBitmap(int[], int, int, android.graphics.Bitmap.Config); + method public static android.graphics.Bitmap createBitmap(android.util.DisplayMetrics, int[], int, int, android.graphics.Bitmap.Config); method public static android.graphics.Bitmap createScaledBitmap(android.graphics.Bitmap, int, int, boolean); method public int describeContents(); method public void eraseColor(int); @@ -8109,6 +8255,7 @@ package android.graphics { method public final int getWidth(); method public final boolean hasAlpha(); method public final boolean isMutable(); + method public final boolean isPremultiplied(); method public final boolean isRecycled(); method public void prepareToDraw(); method public void recycle(); @@ -8598,6 +8745,7 @@ package android.graphics { method public android.graphics.Paint.Align getTextAlign(); method public void getTextBounds(java.lang.String, int, int, android.graphics.Rect); method public void getTextBounds(char[], int, int, android.graphics.Rect); + method public java.util.Locale getTextLocale(); method public void getTextPath(char[], int, int, float, float, android.graphics.Path); method public void getTextPath(java.lang.String, int, int, float, float, android.graphics.Path); method public float getTextScaleX(); @@ -8647,6 +8795,7 @@ package android.graphics { method public void setStyle(android.graphics.Paint.Style); method public void setSubpixelText(boolean); method public void setTextAlign(android.graphics.Paint.Align); + method public void setTextLocale(java.util.Locale); method public void setTextScaleX(float); method public void setTextSize(float); method public void setTextSkewX(float); @@ -9546,6 +9695,7 @@ package android.hardware { method public final void addCallbackBuffer(byte[]); method public final void autoFocus(android.hardware.Camera.AutoFocusCallback); method public final void cancelAutoFocus(); + method public final boolean enableShutterSound(boolean); method public static void getCameraInfo(int, android.hardware.Camera.CameraInfo); method public static int getNumberOfCameras(); method public android.hardware.Camera.Parameters getParameters(); @@ -9598,6 +9748,7 @@ package android.hardware { ctor public Camera.CameraInfo(); field public static final int CAMERA_FACING_BACK = 0; // 0x0 field public static final int CAMERA_FACING_FRONT = 1; // 0x1 + field public boolean canDisableShutterSound; field public int facing; field public int orientation; } @@ -9753,6 +9904,7 @@ package android.hardware { field public static final java.lang.String SCENE_MODE_BEACH = "beach"; field public static final java.lang.String SCENE_MODE_CANDLELIGHT = "candlelight"; field public static final java.lang.String SCENE_MODE_FIREWORKS = "fireworks"; + field public static final java.lang.String SCENE_MODE_HDR = "hdr"; field public static final java.lang.String SCENE_MODE_LANDSCAPE = "landscape"; field public static final java.lang.String SCENE_MODE_NIGHT = "night"; field public static final java.lang.String SCENE_MODE_NIGHT_PORTRAIT = "night-portrait"; @@ -9925,6 +10077,23 @@ package android.hardware { } +package android.hardware.display { + + public final class DisplayManager { + method public android.view.Display getDisplay(int); + method public android.view.Display[] getDisplays(); + method public void registerDisplayListener(android.hardware.display.DisplayManager.DisplayListener, android.os.Handler); + method public void unregisterDisplayListener(android.hardware.display.DisplayManager.DisplayListener); + } + + public static abstract interface DisplayManager.DisplayListener { + method public abstract void onDisplayAdded(int); + method public abstract void onDisplayChanged(int); + method public abstract void onDisplayRemoved(int); + } + +} + package android.hardware.input { public final class InputManager { @@ -10088,6 +10257,7 @@ package android.inputmethodservice { method public final android.os.IBinder onBind(android.content.Intent); method public abstract android.inputmethodservice.AbstractInputMethodService.AbstractInputMethodImpl onCreateInputMethodInterface(); method public abstract android.inputmethodservice.AbstractInputMethodService.AbstractInputMethodSessionImpl onCreateInputMethodSessionInterface(); + method public boolean onGenericMotionEvent(android.view.MotionEvent); method public boolean onTrackballEvent(android.view.MotionEvent); } @@ -10100,6 +10270,7 @@ package android.inputmethodservice { public abstract class AbstractInputMethodService.AbstractInputMethodSessionImpl implements android.view.inputmethod.InputMethodSession { ctor public AbstractInputMethodService.AbstractInputMethodSessionImpl(); + method public void dispatchGenericMotionEvent(int, android.view.MotionEvent, android.view.inputmethod.InputMethodSession.EventCallback); method public void dispatchKeyEvent(int, android.view.KeyEvent, android.view.inputmethod.InputMethodSession.EventCallback); method public void dispatchTrackballEvent(int, android.view.MotionEvent, android.view.inputmethod.InputMethodSession.EventCallback); method public boolean isEnabled(); @@ -10119,6 +10290,7 @@ package android.inputmethodservice { public class InputMethodService extends android.inputmethodservice.AbstractInputMethodService { ctor public InputMethodService(); + method public boolean enableHardwareAcceleration(); method public int getBackDisposition(); method public int getCandidatesHiddenVisibility(); method public android.view.inputmethod.InputBinding getCurrentInputBinding(); @@ -10398,7 +10570,7 @@ package android.location { field public static final android.os.Parcelable.Creator CREATOR; } - public class Criteria implements android.os.Parcelable { + public deprecated class Criteria implements android.os.Parcelable { ctor public Criteria(); ctor public Criteria(android.location.Criteria); method public int describeContents(); @@ -10444,6 +10616,13 @@ package android.location { method public static boolean isPresent(); } + public final class Geofence implements android.os.Parcelable { + method public static android.location.Geofence createCircle(double, double, float); + method public int describeContents(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + public final class GpsSatellite { method public float getAzimuth(); method public float getElevation(); @@ -10485,10 +10664,11 @@ package android.location { method public float getAccuracy(); method public double getAltitude(); method public float getBearing(); + method public long getElapsedRealtimeNanos(); method public android.os.Bundle getExtras(); method public double getLatitude(); method public double getLongitude(); - method public java.lang.String getProvider(); + method public deprecated java.lang.String getProvider(); method public float getSpeed(); method public long getTime(); method public boolean hasAccuracy(); @@ -10504,6 +10684,7 @@ package android.location { method public void setAccuracy(float); method public void setAltitude(double); method public void setBearing(float); + method public void setElapsedRealtimeNanos(long); method public void setExtras(android.os.Bundle); method public void setLatitude(double); method public void setLongitude(double); @@ -10525,67 +10706,97 @@ package android.location { } public class LocationManager { + method public void addGeofence(android.location.LocationRequest, android.location.Geofence, android.app.PendingIntent); method public boolean addGpsStatusListener(android.location.GpsStatus.Listener); method public boolean addNmeaListener(android.location.GpsStatus.NmeaListener); - method public void addProximityAlert(double, double, float, long, android.app.PendingIntent); - method public void addTestProvider(java.lang.String, boolean, boolean, boolean, boolean, boolean, boolean, boolean, int, int); - method public void clearTestProviderEnabled(java.lang.String); - method public void clearTestProviderLocation(java.lang.String); - method public void clearTestProviderStatus(java.lang.String); - method public java.util.List<java.lang.String> getAllProviders(); - method public java.lang.String getBestProvider(android.location.Criteria, boolean); + method public deprecated void addProximityAlert(double, double, float, long, android.app.PendingIntent); + method public deprecated void addTestProvider(java.lang.String, boolean, boolean, boolean, boolean, boolean, boolean, boolean, int, int); + method public deprecated void clearTestProviderEnabled(java.lang.String); + method public deprecated void clearTestProviderLocation(java.lang.String); + method public deprecated void clearTestProviderStatus(java.lang.String); + method public deprecated java.util.List<java.lang.String> getAllProviders(); + method public deprecated java.lang.String getBestProvider(android.location.Criteria, boolean); method public android.location.GpsStatus getGpsStatus(android.location.GpsStatus); - method public android.location.Location getLastKnownLocation(java.lang.String); - method public android.location.LocationProvider getProvider(java.lang.String); - method public java.util.List<java.lang.String> getProviders(boolean); - method public java.util.List<java.lang.String> getProviders(android.location.Criteria, boolean); - method public boolean isProviderEnabled(java.lang.String); + method public deprecated android.location.Location getLastKnownLocation(java.lang.String); + method public android.location.Location getLastLocation(); + method public deprecated android.location.LocationProvider getProvider(java.lang.String); + method public deprecated java.util.List<java.lang.String> getProviders(boolean); + method public deprecated java.util.List<java.lang.String> getProviders(android.location.Criteria, boolean); + method public deprecated boolean isProviderEnabled(java.lang.String); + method public void removeAllGeofences(android.app.PendingIntent); + method public void removeGeofence(android.location.Geofence, android.app.PendingIntent); method public void removeGpsStatusListener(android.location.GpsStatus.Listener); method public void removeNmeaListener(android.location.GpsStatus.NmeaListener); - method public void removeProximityAlert(android.app.PendingIntent); - method public void removeTestProvider(java.lang.String); + method public deprecated void removeProximityAlert(android.app.PendingIntent); + method public deprecated void removeTestProvider(java.lang.String); method public void removeUpdates(android.location.LocationListener); method public void removeUpdates(android.app.PendingIntent); - method public void requestLocationUpdates(java.lang.String, long, float, android.location.LocationListener); - method public void requestLocationUpdates(java.lang.String, long, float, android.location.LocationListener, android.os.Looper); - method public void requestLocationUpdates(long, float, android.location.Criteria, android.location.LocationListener, android.os.Looper); - method public void requestLocationUpdates(java.lang.String, long, float, android.app.PendingIntent); - method public void requestLocationUpdates(long, float, android.location.Criteria, android.app.PendingIntent); - method public void requestSingleUpdate(java.lang.String, android.location.LocationListener, android.os.Looper); - method public void requestSingleUpdate(android.location.Criteria, android.location.LocationListener, android.os.Looper); - method public void requestSingleUpdate(java.lang.String, android.app.PendingIntent); - method public void requestSingleUpdate(android.location.Criteria, android.app.PendingIntent); - method public boolean sendExtraCommand(java.lang.String, java.lang.String, android.os.Bundle); - method public void setTestProviderEnabled(java.lang.String, boolean); - method public void setTestProviderLocation(java.lang.String, android.location.Location); - method public void setTestProviderStatus(java.lang.String, int, android.os.Bundle, long); - field public static final java.lang.String GPS_PROVIDER = "gps"; + method public deprecated void requestLocationUpdates(java.lang.String, long, float, android.location.LocationListener); + method public deprecated void requestLocationUpdates(java.lang.String, long, float, android.location.LocationListener, android.os.Looper); + method public deprecated void requestLocationUpdates(long, float, android.location.Criteria, android.location.LocationListener, android.os.Looper); + method public deprecated void requestLocationUpdates(java.lang.String, long, float, android.app.PendingIntent); + method public deprecated void requestLocationUpdates(long, float, android.location.Criteria, android.app.PendingIntent); + method public void requestLocationUpdates(android.location.LocationRequest, android.location.LocationListener, android.os.Looper); + method public void requestLocationUpdates(android.location.LocationRequest, android.app.PendingIntent); + method public deprecated void requestSingleUpdate(java.lang.String, android.location.LocationListener, android.os.Looper); + method public deprecated void requestSingleUpdate(android.location.Criteria, android.location.LocationListener, android.os.Looper); + method public deprecated void requestSingleUpdate(java.lang.String, android.app.PendingIntent); + method public deprecated void requestSingleUpdate(android.location.Criteria, android.app.PendingIntent); + method public deprecated boolean sendExtraCommand(java.lang.String, java.lang.String, android.os.Bundle); + method public deprecated void setTestProviderEnabled(java.lang.String, boolean); + method public deprecated void setTestProviderLocation(java.lang.String, android.location.Location); + method public deprecated void setTestProviderStatus(java.lang.String, int, android.os.Bundle, long); + field public static final deprecated java.lang.String GPS_PROVIDER = "gps"; field public static final java.lang.String KEY_LOCATION_CHANGED = "location"; - field public static final java.lang.String KEY_PROVIDER_ENABLED = "providerEnabled"; + field public static final deprecated java.lang.String KEY_PROVIDER_ENABLED = "providerEnabled"; field public static final java.lang.String KEY_PROXIMITY_ENTERING = "entering"; - field public static final java.lang.String KEY_STATUS_CHANGED = "status"; - field public static final java.lang.String NETWORK_PROVIDER = "network"; - field public static final java.lang.String PASSIVE_PROVIDER = "passive"; - field public static final java.lang.String PROVIDERS_CHANGED_ACTION = "android.location.PROVIDERS_CHANGED"; + field public static final deprecated java.lang.String KEY_STATUS_CHANGED = "status"; + field public static final deprecated java.lang.String NETWORK_PROVIDER = "network"; + field public static final deprecated java.lang.String PASSIVE_PROVIDER = "passive"; + field public static final deprecated java.lang.String PROVIDERS_CHANGED_ACTION = "android.location.PROVIDERS_CHANGED"; } - public abstract class LocationProvider { - method public abstract int getAccuracy(); + public deprecated class LocationProvider { + method public int getAccuracy(); method public java.lang.String getName(); - method public abstract int getPowerRequirement(); - method public abstract boolean hasMonetaryCost(); + method public int getPowerRequirement(); + method public boolean hasMonetaryCost(); method public boolean meetsCriteria(android.location.Criteria); - method public abstract boolean requiresCell(); - method public abstract boolean requiresNetwork(); - method public abstract boolean requiresSatellite(); - method public abstract boolean supportsAltitude(); - method public abstract boolean supportsBearing(); - method public abstract boolean supportsSpeed(); + method public boolean requiresCell(); + method public boolean requiresNetwork(); + method public boolean requiresSatellite(); + method public boolean supportsAltitude(); + method public boolean supportsBearing(); + method public boolean supportsSpeed(); field public static final int AVAILABLE = 2; // 0x2 field public static final int OUT_OF_SERVICE = 0; // 0x0 field public static final int TEMPORARILY_UNAVAILABLE = 1; // 0x1 } + public final class LocationRequest implements android.os.Parcelable { + method public static android.location.LocationRequest create(); + method public int describeContents(); + method public long getExpireAt(); + method public long getFastestInterval(); + method public long getInterval(); + method public int getNumUpdates(); + method public int getQuality(); + method public android.location.LocationRequest setExpireAt(long); + method public android.location.LocationRequest setExpireIn(long); + method public android.location.LocationRequest setFastestInterval(long); + method public android.location.LocationRequest setInterval(long); + method public android.location.LocationRequest setNumUpdates(int); + method public android.location.LocationRequest setQuality(int); + method public void writeToParcel(android.os.Parcel, int); + field public static final int ACCURACY_BLOCK = 102; // 0x66 + field public static final int ACCURACY_CITY = 104; // 0x68 + field public static final int ACCURACY_FINE = 100; // 0x64 + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int POWER_HIGH = 203; // 0xcb + field public static final int POWER_LOW = 201; // 0xc9 + field public static final int POWER_NONE = 200; // 0xc8 + } + } package android.media { @@ -10649,6 +10860,7 @@ package android.media { method public void adjustVolume(int, int); method public int getMode(); method public java.lang.String getParameters(java.lang.String); + method public java.lang.String getProperty(java.lang.String); method public int getRingerMode(); method public deprecated int getRouting(int); method public int getStreamMaxVolume(int); @@ -10726,6 +10938,8 @@ package android.media { field public static final int MODE_NORMAL = 0; // 0x0 field public static final int MODE_RINGTONE = 1; // 0x1 field public static final deprecated int NUM_STREAMS = 5; // 0x5 + field public static final java.lang.String PROPERTY_OUTPUT_FRAMES_PER_BUFFER = "android.media.property.OUTPUT_FRAMES_PER_BUFFER"; + field public static final java.lang.String PROPERTY_OUTPUT_SAMPLE_RATE = "android.media.property.OUTPUT_SAMPLE_RATE"; field public static final java.lang.String RINGER_MODE_CHANGED_ACTION = "android.media.RINGER_MODE_CHANGED"; field public static final int RINGER_MODE_NORMAL = 2; // 0x2 field public static final int RINGER_MODE_SILENT = 0; // 0x0 @@ -11304,6 +11518,7 @@ package android.media { field public static final int METADATA_KEY_NUM_TRACKS = 10; // 0xa field public static final int METADATA_KEY_TITLE = 7; // 0x7 field public static final int METADATA_KEY_VIDEO_HEIGHT = 19; // 0x13 + field public static final int METADATA_KEY_VIDEO_ROTATION = 24; // 0x18 field public static final int METADATA_KEY_VIDEO_WIDTH = 18; // 0x12 field public static final int METADATA_KEY_WRITER = 11; // 0xb field public static final int METADATA_KEY_YEAR = 8; // 0x8 @@ -11365,15 +11580,20 @@ package android.media { method public void setWakeMode(android.content.Context, int); method public void start() throws java.lang.IllegalStateException; method public void stop() throws java.lang.IllegalStateException; + field public static final int MEDIA_ERROR_IO = -1004; // 0xfffffc14 + field public static final int MEDIA_ERROR_MALFORMED = -1007; // 0xfffffc11 field public static final int MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK = 200; // 0xc8 field public static final int MEDIA_ERROR_SERVER_DIED = 100; // 0x64 + field public static final int MEDIA_ERROR_TIMED_OUT = -110; // 0xffffff92 field public static final int MEDIA_ERROR_UNKNOWN = 1; // 0x1 + field public static final int MEDIA_ERROR_UNSUPPORTED = -1010; // 0xfffffc0e field public static final int MEDIA_INFO_BAD_INTERLEAVING = 800; // 0x320 field public static final int MEDIA_INFO_BUFFERING_END = 702; // 0x2be field public static final int MEDIA_INFO_BUFFERING_START = 701; // 0x2bd field public static final int MEDIA_INFO_METADATA_UPDATE = 802; // 0x322 field public static final int MEDIA_INFO_NOT_SEEKABLE = 801; // 0x321 field public static final int MEDIA_INFO_UNKNOWN = 1; // 0x1 + field public static final int MEDIA_INFO_VIDEO_RENDERING_START = 3; // 0x3 field public static final int MEDIA_INFO_VIDEO_TRACK_LAGGING = 700; // 0x2bc field public static final java.lang.String MEDIA_MIMETYPE_TEXT_SUBRIP = "application/x-subrip"; field public static final int VIDEO_SCALING_MODE_SCALE_TO_FIT = 1; // 0x1 @@ -11455,6 +11675,7 @@ package android.media { method public void setVideoSource(int) throws java.lang.IllegalStateException; method public void start() throws java.lang.IllegalStateException; method public void stop() throws java.lang.IllegalStateException; + field public static final int MEDIA_ERROR_SERVER_DIED = 100; // 0x64 field public static final int MEDIA_RECORDER_ERROR_UNKNOWN = 1; // 0x1 field public static final int MEDIA_RECORDER_INFO_MAX_DURATION_REACHED = 800; // 0x320 field public static final int MEDIA_RECORDER_INFO_MAX_FILESIZE_REACHED = 801; // 0x321 @@ -11527,6 +11748,7 @@ package android.media { method public void removeUserRoute(android.media.MediaRouter.UserRouteInfo); method public void selectRoute(int, android.media.MediaRouter.RouteInfo); field public static final int ROUTE_TYPE_LIVE_AUDIO = 1; // 0x1 + field public static final int ROUTE_TYPE_LIVE_VIDEO = 2; // 0x2 field public static final int ROUTE_TYPE_USER = 8388608; // 0x800000 } @@ -11575,6 +11797,7 @@ package android.media { method public int getVolume(); method public int getVolumeHandling(); method public int getVolumeMax(); + method public boolean isEnabled(); method public void requestSetVolume(int); method public void requestUpdateVolume(int); method public void setTag(java.lang.Object); @@ -12352,6 +12575,7 @@ package android.net { field public static final java.lang.String EXTRA_EXTRA_INFO = "extraInfo"; field public static final java.lang.String EXTRA_IS_FAILOVER = "isFailover"; field public static final deprecated java.lang.String EXTRA_NETWORK_INFO = "networkInfo"; + field public static final java.lang.String EXTRA_NETWORK_TYPE = "networkType"; field public static final java.lang.String EXTRA_NO_CONNECTIVITY = "noConnectivity"; field public static final java.lang.String EXTRA_OTHER_NETWORK_INFO = "otherNetwork"; field public static final java.lang.String EXTRA_REASON = "reason"; @@ -12396,7 +12620,7 @@ package android.net { method public android.net.LocalSocketAddress getLocalSocketAddress(); } - public class LocalSocket { + public class LocalSocket implements java.io.Closeable { ctor public LocalSocket(); method public void bind(android.net.LocalSocketAddress) throws java.io.IOException; method public void close() throws java.io.IOException; @@ -12474,6 +12698,7 @@ package android.net { 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 BLOCKED; + enum_constant public static final android.net.NetworkInfo.DetailedState CAPTIVE_PORTAL_CHECK; 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; @@ -12524,9 +12749,11 @@ package android.net { method public static javax.net.ssl.SSLSocketFactory getInsecure(int, android.net.SSLSessionCache); method public byte[] getNpnSelectedProtocol(java.net.Socket); method public java.lang.String[] getSupportedCipherSuites(); + method public void setHostname(java.net.Socket, java.lang.String); method public void setKeyManagers(javax.net.ssl.KeyManager[]); method public void setNpnProtocols(byte[][]); method public void setTrustManagers(javax.net.ssl.TrustManager[]); + method public void setUseSessionTickets(java.net.Socket, boolean); } public final class SSLSessionCache { @@ -12811,6 +13038,11 @@ package android.net.http { field public static final int SSL_UNTRUSTED = 3; // 0x3 } + public class X509TrustManagerExtensions { + ctor public X509TrustManagerExtensions(javax.net.ssl.X509TrustManager) throws java.lang.IllegalArgumentException; + method public java.util.List<java.security.cert.X509Certificate> checkServerTrusted(java.security.cert.X509Certificate[], java.lang.String, java.lang.String) throws java.security.cert.CertificateException; + } + } package android.net.nsd { @@ -13113,6 +13345,7 @@ package android.net.wifi { field public java.lang.String capabilities; field public int frequency; field public int level; + field public long timestamp; } public final class SupplicantState extends java.lang.Enum implements android.os.Parcelable { @@ -13717,6 +13950,14 @@ package android.nfc.tech { method public byte[] transceive(byte[]) throws java.io.IOException; } + public final class NfcBarcode extends android.nfc.tech.BasicTagTechnology { + method public static android.nfc.tech.NfcBarcode get(android.nfc.Tag); + method public byte[] getBarcode(); + method public int getType(); + field public static final int TYPE_KOVIO = 1; // 0x1 + field public static final int TYPE_UNKNOWN = -1; // 0xffffffff + } + public final class NfcF extends android.nfc.tech.BasicTagTechnology { method public static android.nfc.tech.NfcF get(android.nfc.Tag); method public byte[] getManufacturer(); @@ -13746,6 +13987,174 @@ package android.nfc.tech { package android.opengl { + public class EGL14 { + ctor public EGL14(); + method public static boolean eglBindAPI(int); + method public static boolean eglBindTexImage(android.opengl.EGLDisplay, android.opengl.EGLSurface, int); + method public static boolean eglChooseConfig(android.opengl.EGLDisplay, int[], int, android.opengl.EGLConfig[], int, int, int[], int); + method public static boolean eglCopyBuffers(android.opengl.EGLDisplay, android.opengl.EGLSurface, int); + method public static android.opengl.EGLContext eglCreateContext(android.opengl.EGLDisplay, android.opengl.EGLConfig, android.opengl.EGLContext, int[], int); + method public static android.opengl.EGLSurface eglCreatePbufferFromClientBuffer(android.opengl.EGLDisplay, int, int, android.opengl.EGLConfig, int[], int); + method public static android.opengl.EGLSurface eglCreatePbufferSurface(android.opengl.EGLDisplay, android.opengl.EGLConfig, int[], int); + method public static android.opengl.EGLSurface eglCreatePixmapSurface(android.opengl.EGLDisplay, android.opengl.EGLConfig, int, int[], int); + method public static android.opengl.EGLSurface eglCreateWindowSurface(android.opengl.EGLDisplay, android.opengl.EGLConfig, java.lang.Object, int[], int); + method public static boolean eglDestroyContext(android.opengl.EGLDisplay, android.opengl.EGLContext); + method public static boolean eglDestroySurface(android.opengl.EGLDisplay, android.opengl.EGLSurface); + method public static boolean eglGetConfigAttrib(android.opengl.EGLDisplay, android.opengl.EGLConfig, int, int[], int); + method public static boolean eglGetConfigs(android.opengl.EGLDisplay, android.opengl.EGLConfig[], int, int, int[], int); + method public static android.opengl.EGLContext eglGetCurrentContext(); + method public static android.opengl.EGLDisplay eglGetCurrentDisplay(); + method public static android.opengl.EGLSurface eglGetCurrentSurface(int); + method public static android.opengl.EGLDisplay eglGetDisplay(int); + method public static int eglGetError(); + method public static boolean eglInitialize(android.opengl.EGLDisplay, int[], int, int[], int); + method public static boolean eglMakeCurrent(android.opengl.EGLDisplay, android.opengl.EGLSurface, android.opengl.EGLSurface, android.opengl.EGLContext); + method public static int eglQueryAPI(); + method public static boolean eglQueryContext(android.opengl.EGLDisplay, android.opengl.EGLContext, int, int[], int); + method public static java.lang.String eglQueryString(android.opengl.EGLDisplay, int); + method public static boolean eglQuerySurface(android.opengl.EGLDisplay, android.opengl.EGLSurface, int, int[], int); + method public static boolean eglReleaseTexImage(android.opengl.EGLDisplay, android.opengl.EGLSurface, int); + method public static boolean eglReleaseThread(); + method public static boolean eglSurfaceAttrib(android.opengl.EGLDisplay, android.opengl.EGLSurface, int, int); + method public static boolean eglSwapBuffers(android.opengl.EGLDisplay, android.opengl.EGLSurface); + method public static boolean eglSwapInterval(android.opengl.EGLDisplay, int); + method public static boolean eglTerminate(android.opengl.EGLDisplay); + method public static boolean eglWaitClient(); + method public static boolean eglWaitGL(); + method public static boolean eglWaitNative(int); + field public static final int EGL_ALPHA_MASK_SIZE = 12350; // 0x303e + field public static final int EGL_ALPHA_SIZE = 12321; // 0x3021 + field public static final int EGL_BACK_BUFFER = 12420; // 0x3084 + field public static final int EGL_BAD_ACCESS = 12290; // 0x3002 + field public static final int EGL_BAD_ALLOC = 12291; // 0x3003 + field public static final int EGL_BAD_ATTRIBUTE = 12292; // 0x3004 + field public static final int EGL_BAD_CONFIG = 12293; // 0x3005 + field public static final int EGL_BAD_CONTEXT = 12294; // 0x3006 + field public static final int EGL_BAD_CURRENT_SURFACE = 12295; // 0x3007 + field public static final int EGL_BAD_DISPLAY = 12296; // 0x3008 + field public static final int EGL_BAD_MATCH = 12297; // 0x3009 + field public static final int EGL_BAD_NATIVE_PIXMAP = 12298; // 0x300a + field public static final int EGL_BAD_NATIVE_WINDOW = 12299; // 0x300b + field public static final int EGL_BAD_PARAMETER = 12300; // 0x300c + field public static final int EGL_BAD_SURFACE = 12301; // 0x300d + field public static final int EGL_BIND_TO_TEXTURE_RGB = 12345; // 0x3039 + field public static final int EGL_BIND_TO_TEXTURE_RGBA = 12346; // 0x303a + field public static final int EGL_BLUE_SIZE = 12322; // 0x3022 + field public static final int EGL_BUFFER_DESTROYED = 12437; // 0x3095 + field public static final int EGL_BUFFER_PRESERVED = 12436; // 0x3094 + field public static final int EGL_BUFFER_SIZE = 12320; // 0x3020 + field public static final int EGL_CLIENT_APIS = 12429; // 0x308d + field public static final int EGL_COLOR_BUFFER_TYPE = 12351; // 0x303f + field public static final int EGL_CONFIG_CAVEAT = 12327; // 0x3027 + field public static final int EGL_CONFIG_ID = 12328; // 0x3028 + field public static final int EGL_CONFORMANT = 12354; // 0x3042 + field public static final int EGL_CONTEXT_CLIENT_TYPE = 12439; // 0x3097 + field public static final int EGL_CONTEXT_CLIENT_VERSION = 12440; // 0x3098 + field public static final int EGL_CONTEXT_LOST = 12302; // 0x300e + field public static final int EGL_CORE_NATIVE_ENGINE = 12379; // 0x305b + field public static final int EGL_DEFAULT_DISPLAY = 0; // 0x0 + field public static final int EGL_DEPTH_SIZE = 12325; // 0x3025 + field public static final int EGL_DISPLAY_SCALING = 10000; // 0x2710 + field public static final int EGL_DRAW = 12377; // 0x3059 + field public static final int EGL_EXTENSIONS = 12373; // 0x3055 + field public static final int EGL_FALSE = 0; // 0x0 + field public static final int EGL_GREEN_SIZE = 12323; // 0x3023 + field public static final int EGL_HEIGHT = 12374; // 0x3056 + field public static final int EGL_HORIZONTAL_RESOLUTION = 12432; // 0x3090 + field public static final int EGL_LARGEST_PBUFFER = 12376; // 0x3058 + field public static final int EGL_LEVEL = 12329; // 0x3029 + field public static final int EGL_LUMINANCE_BUFFER = 12431; // 0x308f + field public static final int EGL_LUMINANCE_SIZE = 12349; // 0x303d + field public static final int EGL_MATCH_NATIVE_PIXMAP = 12353; // 0x3041 + field public static final int EGL_MAX_PBUFFER_HEIGHT = 12330; // 0x302a + field public static final int EGL_MAX_PBUFFER_PIXELS = 12331; // 0x302b + field public static final int EGL_MAX_PBUFFER_WIDTH = 12332; // 0x302c + field public static final int EGL_MAX_SWAP_INTERVAL = 12348; // 0x303c + field public static final int EGL_MIN_SWAP_INTERVAL = 12347; // 0x303b + field public static final int EGL_MIPMAP_LEVEL = 12419; // 0x3083 + field public static final int EGL_MIPMAP_TEXTURE = 12418; // 0x3082 + field public static final int EGL_MULTISAMPLE_RESOLVE = 12441; // 0x3099 + field public static final int EGL_MULTISAMPLE_RESOLVE_BOX = 12443; // 0x309b + field public static final int EGL_MULTISAMPLE_RESOLVE_BOX_BIT = 512; // 0x200 + field public static final int EGL_MULTISAMPLE_RESOLVE_DEFAULT = 12442; // 0x309a + field public static final int EGL_NATIVE_RENDERABLE = 12333; // 0x302d + field public static final int EGL_NATIVE_VISUAL_ID = 12334; // 0x302e + field public static final int EGL_NATIVE_VISUAL_TYPE = 12335; // 0x302f + field public static final int EGL_NONE = 12344; // 0x3038 + field public static final int EGL_NON_CONFORMANT_CONFIG = 12369; // 0x3051 + field public static final int EGL_NOT_INITIALIZED = 12289; // 0x3001 + field public static android.opengl.EGLContext EGL_NO_CONTEXT; + field public static android.opengl.EGLDisplay EGL_NO_DISPLAY; + field public static android.opengl.EGLSurface EGL_NO_SURFACE; + field public static final int EGL_NO_TEXTURE = 12380; // 0x305c + field public static final int EGL_OPENGL_API = 12450; // 0x30a2 + field public static final int EGL_OPENGL_BIT = 8; // 0x8 + field public static final int EGL_OPENGL_ES2_BIT = 4; // 0x4 + field public static final int EGL_OPENGL_ES_API = 12448; // 0x30a0 + field public static final int EGL_OPENGL_ES_BIT = 1; // 0x1 + field public static final int EGL_OPENVG_API = 12449; // 0x30a1 + field public static final int EGL_OPENVG_BIT = 2; // 0x2 + field public static final int EGL_OPENVG_IMAGE = 12438; // 0x3096 + field public static final int EGL_PBUFFER_BIT = 1; // 0x1 + field public static final int EGL_PIXEL_ASPECT_RATIO = 12434; // 0x3092 + field public static final int EGL_PIXMAP_BIT = 2; // 0x2 + field public static final int EGL_READ = 12378; // 0x305a + field public static final int EGL_RED_SIZE = 12324; // 0x3024 + field public static final int EGL_RENDERABLE_TYPE = 12352; // 0x3040 + field public static final int EGL_RENDER_BUFFER = 12422; // 0x3086 + field public static final int EGL_RGB_BUFFER = 12430; // 0x308e + field public static final int EGL_SAMPLES = 12337; // 0x3031 + field public static final int EGL_SAMPLE_BUFFERS = 12338; // 0x3032 + field public static final int EGL_SINGLE_BUFFER = 12421; // 0x3085 + field public static final int EGL_SLOW_CONFIG = 12368; // 0x3050 + field public static final int EGL_STENCIL_SIZE = 12326; // 0x3026 + field public static final int EGL_SUCCESS = 12288; // 0x3000 + field public static final int EGL_SURFACE_TYPE = 12339; // 0x3033 + field public static final int EGL_SWAP_BEHAVIOR = 12435; // 0x3093 + field public static final int EGL_SWAP_BEHAVIOR_PRESERVED_BIT = 1024; // 0x400 + field public static final int EGL_TEXTURE_2D = 12383; // 0x305f + field public static final int EGL_TEXTURE_FORMAT = 12416; // 0x3080 + field public static final int EGL_TEXTURE_RGB = 12381; // 0x305d + field public static final int EGL_TEXTURE_RGBA = 12382; // 0x305e + field public static final int EGL_TEXTURE_TARGET = 12417; // 0x3081 + field public static final int EGL_TRANSPARENT_BLUE_VALUE = 12341; // 0x3035 + field public static final int EGL_TRANSPARENT_GREEN_VALUE = 12342; // 0x3036 + field public static final int EGL_TRANSPARENT_RED_VALUE = 12343; // 0x3037 + field public static final int EGL_TRANSPARENT_RGB = 12370; // 0x3052 + field public static final int EGL_TRANSPARENT_TYPE = 12340; // 0x3034 + field public static final int EGL_TRUE = 1; // 0x1 + field public static final int EGL_VENDOR = 12371; // 0x3053 + field public static final int EGL_VERSION = 12372; // 0x3054 + field public static final int EGL_VERTICAL_RESOLUTION = 12433; // 0x3091 + field public static final int EGL_VG_ALPHA_FORMAT = 12424; // 0x3088 + field public static final int EGL_VG_ALPHA_FORMAT_NONPRE = 12427; // 0x308b + field public static final int EGL_VG_ALPHA_FORMAT_PRE = 12428; // 0x308c + field public static final int EGL_VG_ALPHA_FORMAT_PRE_BIT = 64; // 0x40 + field public static final int EGL_VG_COLORSPACE = 12423; // 0x3087 + field public static final int EGL_VG_COLORSPACE_LINEAR = 12426; // 0x308a + field public static final int EGL_VG_COLORSPACE_LINEAR_BIT = 32; // 0x20 + field public static final int EGL_VG_COLORSPACE_sRGB = 12425; // 0x3089 + field public static final int EGL_WIDTH = 12375; // 0x3057 + field public static final int EGL_WINDOW_BIT = 4; // 0x4 + } + + public class EGLConfig extends android.opengl.EGLObjectHandle { + } + + public class EGLContext extends android.opengl.EGLObjectHandle { + } + + public class EGLDisplay extends android.opengl.EGLObjectHandle { + } + + public abstract class EGLObjectHandle { + ctor protected EGLObjectHandle(int); + method public int getHandle(); + } + + public class EGLSurface extends android.opengl.EGLObjectHandle { + } + public class ETC1 { ctor public ETC1(); method public static void decodeBlock(java.nio.Buffer, java.nio.Buffer); @@ -14653,8 +15062,12 @@ package android.opengl { method public static void glGenerateMipmap(int); method public static void glGetActiveAttrib(int, int, int, int[], int, int[], int, int[], int, byte[], int); method public static void glGetActiveAttrib(int, int, int, java.nio.IntBuffer, java.nio.IntBuffer, java.nio.IntBuffer, byte); + method public static java.lang.String glGetActiveAttrib(int, int, int[], int, int[], int); + method public static java.lang.String glGetActiveAttrib(int, int, java.nio.IntBuffer, java.nio.IntBuffer); method public static void glGetActiveUniform(int, int, int, int[], int, int[], int, int[], int, byte[], int); method public static void glGetActiveUniform(int, int, int, java.nio.IntBuffer, java.nio.IntBuffer, java.nio.IntBuffer, byte); + method public static java.lang.String glGetActiveUniform(int, int, int[], int, int[], int); + method public static java.lang.String glGetActiveUniform(int, int, java.nio.IntBuffer, java.nio.IntBuffer); method public static void glGetAttachedShaders(int, int, int[], int, int[], int); method public static void glGetAttachedShaders(int, int, java.nio.IntBuffer, java.nio.IntBuffer); method public static int glGetAttribLocation(int, java.lang.String); @@ -14679,6 +15092,7 @@ package android.opengl { method public static void glGetShaderPrecisionFormat(int, int, java.nio.IntBuffer, java.nio.IntBuffer); method public static void glGetShaderSource(int, int, int[], int, byte[], int); method public static void glGetShaderSource(int, int, java.nio.IntBuffer, byte); + method public static java.lang.String glGetShaderSource(int); method public static void glGetShaderiv(int, int, int[], int); method public static void glGetShaderiv(int, int, java.nio.IntBuffer); method public static java.lang.String glGetString(int); @@ -15238,6 +15652,7 @@ package android.os { field public static final int BATTERY_HEALTH_UNSPECIFIED_FAILURE = 6; // 0x6 field public static final int BATTERY_PLUGGED_AC = 1; // 0x1 field public static final int BATTERY_PLUGGED_USB = 2; // 0x2 + field public static final int BATTERY_PLUGGED_WIRELESS = 4; // 0x4 field public static final int BATTERY_STATUS_CHARGING = 2; // 0x2 field public static final int BATTERY_STATUS_DISCHARGING = 3; // 0x3 field public static final int BATTERY_STATUS_FULL = 5; // 0x5 @@ -15265,6 +15680,7 @@ package android.os { method public static final void flushPendingCommands(); method public static final int getCallingPid(); method public static final int getCallingUid(); + method public static final android.os.UserHandle getCallingUserHandle(); method public java.lang.String getInterfaceDescriptor(); method public boolean isBinderAlive(); method public static final void joinThreadPool(); @@ -15331,6 +15747,7 @@ package android.os { field public static final int ICE_CREAM_SANDWICH = 14; // 0xe field public static final int ICE_CREAM_SANDWICH_MR1 = 15; // 0xf field public static final int JELLY_BEAN = 16; // 0x10 + field public static final int JELLY_BEAN_MR1 = 17; // 0x11 } public final class Bundle implements java.lang.Cloneable android.os.Parcelable { @@ -15996,12 +16413,13 @@ package android.os { method public android.os.PowerManager.WakeLock newWakeLock(int, java.lang.String); method public void reboot(java.lang.String); method public void userActivity(long, boolean); + method public void wakeUp(long); field public static final int ACQUIRE_CAUSES_WAKEUP = 268435456; // 0x10000000 - field public static final int FULL_WAKE_LOCK = 26; // 0x1a + field public static final deprecated int FULL_WAKE_LOCK = 26; // 0x1a field public static final int ON_AFTER_RELEASE = 536870912; // 0x20000000 field public static final int PARTIAL_WAKE_LOCK = 1; // 0x1 field public static final deprecated int SCREEN_BRIGHT_WAKE_LOCK = 10; // 0xa - field public static final int SCREEN_DIM_WAKE_LOCK = 6; // 0x6 + field public static final deprecated int SCREEN_DIM_WAKE_LOCK = 6; // 0x6 } public final class PowerManager.WakeLock { @@ -16023,6 +16441,7 @@ package android.os { method public static final int myPid(); method public static final int myTid(); method public static final int myUid(); + method public static final android.os.UserHandle myUserHandle(); method public static final void sendSignal(int, int); method public static final void setThreadPriority(int, int) throws java.lang.IllegalArgumentException, java.lang.SecurityException; method public static final void setThreadPriority(int) throws java.lang.IllegalArgumentException, java.lang.SecurityException; @@ -16065,6 +16484,7 @@ package android.os { method public void finishBroadcast(); method public java.lang.Object getBroadcastCookie(int); method public E getBroadcastItem(int); + method public int getRegisteredCallbackCount(); method public void kill(); method public void onCallbackDied(E); method public void onCallbackDied(E, java.lang.Object); @@ -16155,6 +16575,7 @@ package android.os { public final class SystemClock { method public static long currentThreadTimeMillis(); method public static long elapsedRealtime(); + method public static long elapsedRealtimeNanos(); method public static boolean setCurrentTimeMillis(long); method public static void sleep(long); method public static long uptimeMillis(); @@ -16176,6 +16597,20 @@ package android.os { ctor public TransactionTooLargeException(); } + public final class UserHandle implements android.os.Parcelable { + ctor public UserHandle(android.os.Parcel); + method public int describeContents(); + method public static android.os.UserHandle readFromParcel(android.os.Parcel); + method public void writeToParcel(android.os.Parcel, int); + method public static void writeToParcel(android.os.UserHandle, android.os.Parcel); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public class UserManager { + method public java.lang.String getUserName(); + method public boolean isUserAGoat(); + } + public abstract class Vibrator { method public abstract void cancel(); method public abstract boolean hasVibrator(); @@ -16754,6 +17189,7 @@ package android.provider { field public static final int CAL_ACCESS_ROOT = 800; // 0x320 field public static final java.lang.String CAN_MODIFY_TIME_ZONE = "canModifyTimeZone"; field public static final java.lang.String CAN_ORGANIZER_RESPOND = "canOrganizerRespond"; + field public static final java.lang.String IS_PRIMARY = "isPrimary"; field public static final java.lang.String MAX_REMINDERS = "maxReminders"; field public static final java.lang.String OWNER_ACCOUNT = "ownerAccount"; field public static final java.lang.String SYNC_EVENTS = "sync_events"; @@ -16845,6 +17281,7 @@ package android.provider { field public static final java.lang.String HAS_ALARM = "hasAlarm"; field public static final java.lang.String HAS_ATTENDEE_DATA = "hasAttendeeData"; field public static final java.lang.String HAS_EXTENDED_PROPERTIES = "hasExtendedProperties"; + field public static final java.lang.String IS_ORGANIZER = "isOrganizer"; field public static final java.lang.String LAST_DATE = "lastDate"; field public static final java.lang.String LAST_SYNCED = "lastSynced"; field public static final java.lang.String ORGANIZER = "organizer"; @@ -16870,6 +17307,7 @@ package android.provider { field public static final java.lang.String SYNC_DATA8 = "sync_data8"; field public static final java.lang.String SYNC_DATA9 = "sync_data9"; field public static final java.lang.String TITLE = "title"; + field public static final java.lang.String UID_2445 = "uid2445"; } public static final class CalendarContract.EventsEntity implements android.provider.BaseColumns android.provider.CalendarContract.EventsColumns android.provider.CalendarContract.SyncColumns { @@ -16955,9 +17393,11 @@ package android.provider { field public static final java.lang.String DURATION = "duration"; field public static final int INCOMING_TYPE = 1; // 0x1 field public static final java.lang.String IS_READ = "is_read"; + field public static final java.lang.String LIMIT_PARAM_KEY = "limit"; field public static final int MISSED_TYPE = 3; // 0x3 field public static final java.lang.String NEW = "new"; field public static final java.lang.String NUMBER = "number"; + field public static final java.lang.String OFFSET_PARAM_KEY = "offset"; field public static final int OUTGOING_TYPE = 2; // 0x2 field public static final java.lang.String TYPE = "type"; } @@ -17991,6 +18431,7 @@ package android.provider { method public static android.net.Uri getMediaScannerUri(); method public static java.lang.String getVersion(android.content.Context); field public static final java.lang.String ACTION_IMAGE_CAPTURE = "android.media.action.IMAGE_CAPTURE"; + field public static final java.lang.String ACTION_IMAGE_CAPTURE_SECURE = "android.media.action.IMAGE_CAPTURE_SECURE"; field public static final java.lang.String ACTION_VIDEO_CAPTURE = "android.media.action.VIDEO_CAPTURE"; field public static final java.lang.String AUTHORITY = "media"; field public static final java.lang.String EXTRA_DURATION_LIMIT = "android.intent.extra.durationLimit"; @@ -18009,7 +18450,10 @@ package android.provider { field public static final java.lang.String INTENT_ACTION_MEDIA_SEARCH = "android.intent.action.MEDIA_SEARCH"; field public static final deprecated java.lang.String INTENT_ACTION_MUSIC_PLAYER = "android.intent.action.MUSIC_PLAYER"; field public static final java.lang.String INTENT_ACTION_STILL_IMAGE_CAMERA = "android.media.action.STILL_IMAGE_CAMERA"; + field public static final java.lang.String INTENT_ACTION_STILL_IMAGE_CAMERA_SECURE = "android.media.action.STILL_IMAGE_CAMERA_SECURE"; + field public static final java.lang.String INTENT_ACTION_TEXT_OPEN_FROM_SEARCH = "android.media.action.TEXT_OPEN_FROM_SEARCH"; field public static final java.lang.String INTENT_ACTION_VIDEO_CAMERA = "android.media.action.VIDEO_CAMERA"; + field public static final java.lang.String INTENT_ACTION_VIDEO_PLAY_FROM_SEARCH = "android.media.action.VIDEO_PLAY_FROM_SEARCH"; field public static final java.lang.String MEDIA_IGNORE_FILENAME = ".nomedia"; field public static final java.lang.String MEDIA_SCANNER_VOLUME = "volume"; field public static final java.lang.String UNKNOWN_STRING = "<unknown>"; @@ -18348,6 +18792,55 @@ package android.provider { field public static final java.lang.String EXTRA_INPUT_METHOD_ID = "input_method_id"; } + public static final class Settings.Global extends android.provider.Settings.NameValueTable { + ctor public Settings.Global(); + method public static float getFloat(android.content.ContentResolver, java.lang.String, float); + method public static float getFloat(android.content.ContentResolver, java.lang.String) throws android.provider.Settings.SettingNotFoundException; + method public static int getInt(android.content.ContentResolver, java.lang.String, int); + method public static int getInt(android.content.ContentResolver, java.lang.String) throws android.provider.Settings.SettingNotFoundException; + method public static long getLong(android.content.ContentResolver, java.lang.String, long); + method public static long getLong(android.content.ContentResolver, java.lang.String) throws android.provider.Settings.SettingNotFoundException; + method public static java.lang.String getString(android.content.ContentResolver, java.lang.String); + method public static android.net.Uri getUriFor(java.lang.String); + method public static boolean putFloat(android.content.ContentResolver, java.lang.String, float); + method public static boolean putInt(android.content.ContentResolver, java.lang.String, int); + method public static boolean putLong(android.content.ContentResolver, java.lang.String, long); + method public static boolean putString(android.content.ContentResolver, java.lang.String, java.lang.String); + field public static final java.lang.String ADB_ENABLED = "adb_enabled"; + field public static final java.lang.String AIRPLANE_MODE_ON = "airplane_mode_on"; + field public static final java.lang.String AIRPLANE_MODE_RADIOS = "airplane_mode_radios"; + field public static final java.lang.String AUTO_TIME = "auto_time"; + field public static final java.lang.String AUTO_TIME_ZONE = "auto_time_zone"; + field public static final java.lang.String BLUETOOTH_ON = "bluetooth_on"; + field public static final android.net.Uri CONTENT_URI; + field public static final java.lang.String DATA_ROAMING = "data_roaming"; + field public static final java.lang.String DEVELOPMENT_SETTINGS_ENABLED = "development_settings_enabled"; + field public static final java.lang.String DEVICE_PROVISIONED = "device_provisioned"; + field public static final java.lang.String HTTP_PROXY = "http_proxy"; + field public static final java.lang.String INSTALL_NON_MARKET_APPS = "install_non_market_apps"; + field public static final java.lang.String MODE_RINGER = "mode_ringer"; + field public static final java.lang.String NETWORK_PREFERENCE = "network_preference"; + field public static final java.lang.String RADIO_BLUETOOTH = "bluetooth"; + field public static final java.lang.String RADIO_CELL = "cell"; + field public static final java.lang.String RADIO_NFC = "nfc"; + field public static final java.lang.String RADIO_WIFI = "wifi"; + field public static final java.lang.String STAY_ON_WHILE_PLUGGED_IN = "stay_on_while_plugged_in"; + field public static final java.lang.String SYS_PROP_SETTING_VERSION = "sys.settings_global_version"; + field public static final java.lang.String USB_MASS_STORAGE_ENABLED = "usb_mass_storage_enabled"; + field public static final java.lang.String USE_GOOGLE_MAIL = "use_google_mail"; + field public static final java.lang.String WIFI_MAX_DHCP_RETRY_COUNT = "wifi_max_dhcp_retry_count"; + field public static final java.lang.String WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS = "wifi_mobile_data_transition_wakelock_timeout_ms"; + field public static final java.lang.String WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON = "wifi_networks_available_notification_on"; + field public static final java.lang.String WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY = "wifi_networks_available_repeat_delay"; + field public static final java.lang.String WIFI_NUM_OPEN_NETWORKS_KEPT = "wifi_num_open_networks_kept"; + field public static final java.lang.String WIFI_ON = "wifi_on"; + field public static final java.lang.String WIFI_SLEEP_POLICY = "wifi_sleep_policy"; + field public static final int WIFI_SLEEP_POLICY_DEFAULT = 0; // 0x0 + field public static final int WIFI_SLEEP_POLICY_NEVER = 2; // 0x2 + field public static final int WIFI_SLEEP_POLICY_NEVER_WHILE_PLUGGED = 1; // 0x1 + field public static final java.lang.String WIFI_WATCHDOG_ON = "wifi_watchdog_on"; + } + public static class Settings.NameValueTable implements android.provider.BaseColumns { ctor public Settings.NameValueTable(); method public static android.net.Uri getUriFor(android.net.Uri, java.lang.String); @@ -18364,7 +18857,7 @@ package android.provider { method public static int getInt(android.content.ContentResolver, java.lang.String) throws android.provider.Settings.SettingNotFoundException; method public static long getLong(android.content.ContentResolver, java.lang.String, long); method public static long getLong(android.content.ContentResolver, java.lang.String) throws android.provider.Settings.SettingNotFoundException; - method public static synchronized java.lang.String getString(android.content.ContentResolver, java.lang.String); + method public static java.lang.String getString(android.content.ContentResolver, java.lang.String); method public static android.net.Uri getUriFor(java.lang.String); method public static final boolean isLocationProviderEnabled(android.content.ContentResolver, java.lang.String); method public static boolean putFloat(android.content.ContentResolver, java.lang.String, float); @@ -18374,28 +18867,28 @@ package android.provider { method public static final void setLocationProviderEnabled(android.content.ContentResolver, java.lang.String, boolean); field public static final java.lang.String ACCESSIBILITY_ENABLED = "accessibility_enabled"; field public static final java.lang.String ACCESSIBILITY_SPEAK_PASSWORD = "speak_password"; - field public static final java.lang.String ADB_ENABLED = "adb_enabled"; + field public static final deprecated java.lang.String ADB_ENABLED = "adb_enabled"; field public static final java.lang.String ALLOWED_GEOLOCATION_ORIGINS = "allowed_geolocation_origins"; field public static final java.lang.String ALLOW_MOCK_LOCATION = "mock_location"; field public static final java.lang.String ANDROID_ID = "android_id"; field public static final deprecated java.lang.String BACKGROUND_DATA = "background_data"; - field public static final java.lang.String BLUETOOTH_ON = "bluetooth_on"; + field public static final deprecated java.lang.String BLUETOOTH_ON = "bluetooth_on"; field public static final android.net.Uri CONTENT_URI; - field public static final java.lang.String DATA_ROAMING = "data_roaming"; + field public static final deprecated java.lang.String DATA_ROAMING = "data_roaming"; field public static final java.lang.String DEFAULT_INPUT_METHOD = "default_input_method"; - field public static final java.lang.String DEVELOPMENT_SETTINGS_ENABLED = "development_settings_enabled"; - field public static final java.lang.String DEVICE_PROVISIONED = "device_provisioned"; + field public static final deprecated java.lang.String DEVELOPMENT_SETTINGS_ENABLED = "development_settings_enabled"; + field public static final deprecated java.lang.String DEVICE_PROVISIONED = "device_provisioned"; field public static final java.lang.String ENABLED_ACCESSIBILITY_SERVICES = "enabled_accessibility_services"; field public static final java.lang.String ENABLED_INPUT_METHODS = "enabled_input_methods"; - field public static final java.lang.String HTTP_PROXY = "http_proxy"; + field public static final deprecated java.lang.String HTTP_PROXY = "http_proxy"; field public static final java.lang.String INPUT_METHOD_SELECTOR_VISIBILITY = "input_method_selector_visibility"; - field public static final java.lang.String INSTALL_NON_MARKET_APPS = "install_non_market_apps"; + field public static final deprecated java.lang.String INSTALL_NON_MARKET_APPS = "install_non_market_apps"; field public static final java.lang.String LOCATION_PROVIDERS_ALLOWED = "location_providers_allowed"; field public static final java.lang.String LOCK_PATTERN_ENABLED = "lock_pattern_autolock"; field public static final java.lang.String LOCK_PATTERN_TACTILE_FEEDBACK_ENABLED = "lock_pattern_tactile_feedback_enabled"; field public static final java.lang.String LOCK_PATTERN_VISIBLE = "lock_pattern_visible_pattern"; field public static final deprecated java.lang.String LOGGING_ID = "logging_id"; - field public static final java.lang.String NETWORK_PREFERENCE = "network_preference"; + field public static final deprecated java.lang.String NETWORK_PREFERENCE = "network_preference"; field public static final java.lang.String PARENTAL_CONTROL_ENABLED = "parental_control_enabled"; field public static final java.lang.String PARENTAL_CONTROL_LAST_UPDATE = "parental_control_last_update"; field public static final java.lang.String PARENTAL_CONTROL_REDIRECT_URL = "parental_control_redirect_url"; @@ -18411,10 +18904,10 @@ package android.provider { field public static final deprecated java.lang.String TTS_DEFAULT_VARIANT = "tts_default_variant"; field public static final java.lang.String TTS_ENABLED_PLUGINS = "tts_enabled_plugins"; field public static final deprecated java.lang.String TTS_USE_DEFAULTS = "tts_use_defaults"; - field public static final java.lang.String USB_MASS_STORAGE_ENABLED = "usb_mass_storage_enabled"; - field public static final java.lang.String USE_GOOGLE_MAIL = "use_google_mail"; - field public static final java.lang.String WIFI_MAX_DHCP_RETRY_COUNT = "wifi_max_dhcp_retry_count"; - field public static final java.lang.String WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS = "wifi_mobile_data_transition_wakelock_timeout_ms"; + field public static final deprecated java.lang.String USB_MASS_STORAGE_ENABLED = "usb_mass_storage_enabled"; + field public static final deprecated java.lang.String USE_GOOGLE_MAIL = "use_google_mail"; + field public static final deprecated java.lang.String WIFI_MAX_DHCP_RETRY_COUNT = "wifi_max_dhcp_retry_count"; + field public static final deprecated java.lang.String WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS = "wifi_mobile_data_transition_wakelock_timeout_ms"; field public static final deprecated java.lang.String WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON = "wifi_networks_available_notification_on"; field public static final deprecated java.lang.String WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY = "wifi_networks_available_repeat_delay"; field public static final deprecated java.lang.String WIFI_NUM_OPEN_NETWORKS_KEPT = "wifi_num_open_networks_kept"; @@ -18426,7 +18919,7 @@ package android.provider { field public static final deprecated java.lang.String WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS = "wifi_watchdog_background_check_timeout_ms"; field public static final deprecated java.lang.String WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT = "wifi_watchdog_initial_ignored_ping_count"; field public static final deprecated java.lang.String WIFI_WATCHDOG_MAX_AP_CHECKS = "wifi_watchdog_max_ap_checks"; - field public static final java.lang.String WIFI_WATCHDOG_ON = "wifi_watchdog_on"; + field public static final deprecated java.lang.String WIFI_WATCHDOG_ON = "wifi_watchdog_on"; field public static final deprecated java.lang.String WIFI_WATCHDOG_PING_COUNT = "wifi_watchdog_ping_count"; field public static final deprecated java.lang.String WIFI_WATCHDOG_PING_DELAY_MS = "wifi_watchdog_ping_delay_ms"; field public static final deprecated java.lang.String WIFI_WATCHDOG_PING_TIMEOUT_MS = "wifi_watchdog_ping_timeout_ms"; @@ -18446,26 +18939,26 @@ package android.provider { method public static int getInt(android.content.ContentResolver, java.lang.String) throws android.provider.Settings.SettingNotFoundException; method public static long getLong(android.content.ContentResolver, java.lang.String, long); method public static long getLong(android.content.ContentResolver, java.lang.String) throws android.provider.Settings.SettingNotFoundException; - method public static boolean getShowGTalkServiceStatus(android.content.ContentResolver); - method public static synchronized java.lang.String getString(android.content.ContentResolver, java.lang.String); + method public static deprecated boolean getShowGTalkServiceStatus(android.content.ContentResolver); + method public static java.lang.String getString(android.content.ContentResolver, java.lang.String); method public static android.net.Uri getUriFor(java.lang.String); method public static boolean putConfiguration(android.content.ContentResolver, android.content.res.Configuration); method public static boolean putFloat(android.content.ContentResolver, java.lang.String, float); method public static boolean putInt(android.content.ContentResolver, java.lang.String, int); method public static boolean putLong(android.content.ContentResolver, java.lang.String, long); method public static boolean putString(android.content.ContentResolver, java.lang.String, java.lang.String); - method public static void setShowGTalkServiceStatus(android.content.ContentResolver, boolean); + method public static deprecated void setShowGTalkServiceStatus(android.content.ContentResolver, boolean); field public static final java.lang.String ACCELEROMETER_ROTATION = "accelerometer_rotation"; field public static final deprecated java.lang.String ADB_ENABLED = "adb_enabled"; - field public static final java.lang.String AIRPLANE_MODE_ON = "airplane_mode_on"; - field public static final java.lang.String AIRPLANE_MODE_RADIOS = "airplane_mode_radios"; + field public static final deprecated java.lang.String AIRPLANE_MODE_ON = "airplane_mode_on"; + field public static final deprecated java.lang.String AIRPLANE_MODE_RADIOS = "airplane_mode_radios"; field public static final java.lang.String ALARM_ALERT = "alarm_alert"; field public static final java.lang.String ALWAYS_FINISH_ACTIVITIES = "always_finish_activities"; field public static final deprecated java.lang.String ANDROID_ID = "android_id"; field public static final java.lang.String ANIMATOR_DURATION_SCALE = "animator_duration_scale"; field public static final java.lang.String APPEND_FOR_LAST_AUDIBLE = "_last_audible"; - field public static final java.lang.String AUTO_TIME = "auto_time"; - field public static final java.lang.String AUTO_TIME_ZONE = "auto_time_zone"; + field public static final deprecated java.lang.String AUTO_TIME = "auto_time"; + field public static final deprecated java.lang.String AUTO_TIME_ZONE = "auto_time_zone"; field public static final java.lang.String BLUETOOTH_DISCOVERABILITY = "bluetooth_discoverability"; field public static final java.lang.String BLUETOOTH_DISCOVERABILITY_TIMEOUT = "bluetooth_discoverability_timeout"; field public static final deprecated java.lang.String BLUETOOTH_ON = "bluetooth_on"; @@ -18477,7 +18970,7 @@ package android.provider { field public static final android.net.Uri DEFAULT_NOTIFICATION_URI; field public static final android.net.Uri DEFAULT_RINGTONE_URI; field public static final deprecated java.lang.String DEVICE_PROVISIONED = "device_provisioned"; - field public static final java.lang.String DIM_SCREEN = "dim_screen"; + field public static final deprecated java.lang.String DIM_SCREEN = "dim_screen"; field public static final java.lang.String DTMF_TONE_WHEN_DIALING = "dtmf_tone"; field public static final java.lang.String END_BUTTON_BEHAVIOR = "end_button_behavior"; field public static final java.lang.String FONT_SCALE = "font_scale"; @@ -18489,7 +18982,7 @@ package android.provider { field public static final deprecated java.lang.String LOCK_PATTERN_TACTILE_FEEDBACK_ENABLED = "lock_pattern_tactile_feedback_enabled"; field public static final deprecated java.lang.String LOCK_PATTERN_VISIBLE = "lock_pattern_visible_pattern"; field public static final deprecated java.lang.String LOGGING_ID = "logging_id"; - field public static final java.lang.String MODE_RINGER = "mode_ringer"; + field public static final deprecated java.lang.String MODE_RINGER = "mode_ringer"; field public static final java.lang.String MODE_RINGER_STREAMS_AFFECTED = "mode_ringer_streams_affected"; field public static final java.lang.String MUTE_STREAMS_AFFECTED = "mute_streams_affected"; field public static final deprecated java.lang.String NETWORK_PREFERENCE = "network_preference"; @@ -18498,10 +18991,10 @@ package android.provider { field public static final deprecated java.lang.String PARENTAL_CONTROL_ENABLED = "parental_control_enabled"; field public static final deprecated java.lang.String PARENTAL_CONTROL_LAST_UPDATE = "parental_control_last_update"; field public static final deprecated java.lang.String PARENTAL_CONTROL_REDIRECT_URL = "parental_control_redirect_url"; - field public static final java.lang.String RADIO_BLUETOOTH = "bluetooth"; - field public static final java.lang.String RADIO_CELL = "cell"; - field public static final java.lang.String RADIO_NFC = "nfc"; - field public static final java.lang.String RADIO_WIFI = "wifi"; + field public static final deprecated java.lang.String RADIO_BLUETOOTH = "bluetooth"; + field public static final deprecated java.lang.String RADIO_CELL = "cell"; + field public static final deprecated java.lang.String RADIO_NFC = "nfc"; + field public static final deprecated java.lang.String RADIO_WIFI = "wifi"; field public static final java.lang.String RINGTONE = "ringtone"; field public static final java.lang.String SCREEN_BRIGHTNESS = "screen_brightness"; field public static final java.lang.String SCREEN_BRIGHTNESS_MODE = "screen_brightness_mode"; @@ -18514,7 +19007,7 @@ package android.provider { field public static final java.lang.String SHOW_PROCESSES = "show_processes"; field public static final deprecated java.lang.String SHOW_WEB_SUGGESTIONS = "show_web_suggestions"; field public static final java.lang.String SOUND_EFFECTS_ENABLED = "sound_effects_enabled"; - field public static final java.lang.String STAY_ON_WHILE_PLUGGED_IN = "stay_on_while_plugged_in"; + field public static final deprecated java.lang.String STAY_ON_WHILE_PLUGGED_IN = "stay_on_while_plugged_in"; field public static final java.lang.String SYS_PROP_SETTING_VERSION = "sys.settings_system_version"; field public static final java.lang.String TEXT_AUTO_CAPS = "auto_caps"; field public static final java.lang.String TEXT_AUTO_PUNCTUATE = "auto_punctuate"; @@ -18542,16 +19035,16 @@ package android.provider { field public static final deprecated java.lang.String WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY = "wifi_networks_available_repeat_delay"; field public static final deprecated java.lang.String WIFI_NUM_OPEN_NETWORKS_KEPT = "wifi_num_open_networks_kept"; field public static final deprecated java.lang.String WIFI_ON = "wifi_on"; - field public static final java.lang.String WIFI_SLEEP_POLICY = "wifi_sleep_policy"; - field public static final int WIFI_SLEEP_POLICY_DEFAULT = 0; // 0x0 - field public static final int WIFI_SLEEP_POLICY_NEVER = 2; // 0x2 - field public static final int WIFI_SLEEP_POLICY_NEVER_WHILE_PLUGGED = 1; // 0x1 - field public static final java.lang.String WIFI_STATIC_DNS1 = "wifi_static_dns1"; - field public static final java.lang.String WIFI_STATIC_DNS2 = "wifi_static_dns2"; - field public static final java.lang.String WIFI_STATIC_GATEWAY = "wifi_static_gateway"; - field public static final java.lang.String WIFI_STATIC_IP = "wifi_static_ip"; - field public static final java.lang.String WIFI_STATIC_NETMASK = "wifi_static_netmask"; - field public static final java.lang.String WIFI_USE_STATIC_IP = "wifi_use_static_ip"; + field public static final deprecated java.lang.String WIFI_SLEEP_POLICY = "wifi_sleep_policy"; + field public static final deprecated int WIFI_SLEEP_POLICY_DEFAULT = 0; // 0x0 + field public static final deprecated int WIFI_SLEEP_POLICY_NEVER = 2; // 0x2 + field public static final deprecated int WIFI_SLEEP_POLICY_NEVER_WHILE_PLUGGED = 1; // 0x1 + field public static final deprecated java.lang.String WIFI_STATIC_DNS1 = "wifi_static_dns1"; + field public static final deprecated java.lang.String WIFI_STATIC_DNS2 = "wifi_static_dns2"; + field public static final deprecated java.lang.String WIFI_STATIC_GATEWAY = "wifi_static_gateway"; + field public static final deprecated java.lang.String WIFI_STATIC_IP = "wifi_static_ip"; + field public static final deprecated java.lang.String WIFI_STATIC_NETMASK = "wifi_static_netmask"; + field public static final deprecated java.lang.String WIFI_USE_STATIC_IP = "wifi_use_static_ip"; field public static final deprecated java.lang.String WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE = "wifi_watchdog_acceptable_packet_loss_percentage"; field public static final deprecated java.lang.String WIFI_WATCHDOG_AP_COUNT = "wifi_watchdog_ap_count"; field public static final deprecated java.lang.String WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS = "wifi_watchdog_background_check_delay_ms"; @@ -19545,6 +20038,8 @@ package android.renderscript { public class Script extends android.renderscript.BaseObj { method public void bindAllocation(android.renderscript.Allocation, int); + method protected android.renderscript.Script.FieldID createFieldID(int, android.renderscript.Element); + method protected android.renderscript.Script.KernelID createKernelID(int, int, android.renderscript.Element, android.renderscript.Element); method protected void forEach(int, android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.FieldPacker); method protected void invoke(int); method protected void invoke(int, android.renderscript.FieldPacker); @@ -19574,11 +20069,124 @@ package android.renderscript { field protected android.renderscript.Element mElement; } + public static final class Script.FieldID extends android.renderscript.BaseObj { + } + + public static final class Script.KernelID extends android.renderscript.BaseObj { + } + public class ScriptC extends android.renderscript.Script { ctor protected ScriptC(int, android.renderscript.RenderScript); ctor protected ScriptC(android.renderscript.RenderScript, android.content.res.Resources, int); } + public final class ScriptGroup extends android.renderscript.BaseObj { + method public void execute(); + method public void setInput(android.renderscript.Script.KernelID, android.renderscript.Allocation); + method public void setOutput(android.renderscript.Script.KernelID, android.renderscript.Allocation); + } + + public static final class ScriptGroup.Builder { + ctor public ScriptGroup.Builder(android.renderscript.RenderScript); + method public android.renderscript.ScriptGroup.Builder addConnection(android.renderscript.Type, android.renderscript.Script.KernelID, android.renderscript.Script.FieldID); + method public android.renderscript.ScriptGroup.Builder addConnection(android.renderscript.Type, android.renderscript.Script.KernelID, android.renderscript.Script.KernelID); + method public android.renderscript.ScriptGroup.Builder addKernel(android.renderscript.Script.KernelID); + method public android.renderscript.ScriptGroup create(); + } + + public abstract class ScriptIntrinsic extends android.renderscript.Script { + } + + public class ScriptIntrinsicBlend extends android.renderscript.ScriptIntrinsic { + method public static android.renderscript.ScriptIntrinsicBlend create(android.renderscript.RenderScript, android.renderscript.Element); + method public void forEachAdd(android.renderscript.Allocation, android.renderscript.Allocation); + method public void forEachClear(android.renderscript.Allocation, android.renderscript.Allocation); + method public void forEachDst(android.renderscript.Allocation, android.renderscript.Allocation); + method public void forEachDstAtop(android.renderscript.Allocation, android.renderscript.Allocation); + method public void forEachDstIn(android.renderscript.Allocation, android.renderscript.Allocation); + method public void forEachDstOut(android.renderscript.Allocation, android.renderscript.Allocation); + method public void forEachDstOver(android.renderscript.Allocation, android.renderscript.Allocation); + method public void forEachMultiply(android.renderscript.Allocation, android.renderscript.Allocation); + method public void forEachSrc(android.renderscript.Allocation, android.renderscript.Allocation); + method public void forEachSrcAtop(android.renderscript.Allocation, android.renderscript.Allocation); + method public void forEachSrcIn(android.renderscript.Allocation, android.renderscript.Allocation); + method public void forEachSrcOut(android.renderscript.Allocation, android.renderscript.Allocation); + method public void forEachSrcOver(android.renderscript.Allocation, android.renderscript.Allocation); + method public void forEachSubtract(android.renderscript.Allocation, android.renderscript.Allocation); + method public void forEachXor(android.renderscript.Allocation, android.renderscript.Allocation); + method public android.renderscript.Script.KernelID getKernelIDAdd(); + method public android.renderscript.Script.KernelID getKernelIDClear(); + method public android.renderscript.Script.KernelID getKernelIDDst(); + method public android.renderscript.Script.KernelID getKernelIDDstAtop(); + method public android.renderscript.Script.KernelID getKernelIDDstIn(); + method public android.renderscript.Script.KernelID getKernelIDDstOut(); + method public android.renderscript.Script.KernelID getKernelIDDstOver(); + method public android.renderscript.Script.KernelID getKernelIDMultiply(); + method public android.renderscript.Script.KernelID getKernelIDSrc(); + method public android.renderscript.Script.KernelID getKernelIDSrcAtop(); + method public android.renderscript.Script.KernelID getKernelIDSrcIn(); + method public android.renderscript.Script.KernelID getKernelIDSrcOut(); + method public android.renderscript.Script.KernelID getKernelIDSrcOver(); + method public android.renderscript.Script.KernelID getKernelIDSubtract(); + method public android.renderscript.Script.KernelID getKernelIDXor(); + } + + public final class ScriptIntrinsicBlur extends android.renderscript.ScriptIntrinsic { + method public static android.renderscript.ScriptIntrinsicBlur create(android.renderscript.RenderScript, android.renderscript.Element); + method public void forEach(android.renderscript.Allocation); + method public android.renderscript.Script.FieldID getFieldID_Input(); + method public android.renderscript.Script.KernelID getKernelID(); + method public void setInput(android.renderscript.Allocation); + method public void setRadius(float); + } + + public final class ScriptIntrinsicColorMatrix extends android.renderscript.ScriptIntrinsic { + method public static android.renderscript.ScriptIntrinsicColorMatrix create(android.renderscript.RenderScript, android.renderscript.Element); + method public void forEach(android.renderscript.Allocation, android.renderscript.Allocation); + method public android.renderscript.Script.KernelID getKernelID(); + method public void setColorMatrix(android.renderscript.Matrix4f); + method public void setColorMatrix(android.renderscript.Matrix3f); + method public void setGreyscale(); + method public void setRGBtoYUV(); + method public void setYUVtoRGB(); + } + + public final class ScriptIntrinsicConvolve3x3 extends android.renderscript.ScriptIntrinsic { + method public static android.renderscript.ScriptIntrinsicConvolve3x3 create(android.renderscript.RenderScript, android.renderscript.Element); + method public void forEach(android.renderscript.Allocation); + method public android.renderscript.Script.FieldID getFieldID_Input(); + method public android.renderscript.Script.KernelID getKernelID(); + method public void setCoefficients(float[]); + method public void setInput(android.renderscript.Allocation); + } + + public final class ScriptIntrinsicConvolve5x5 extends android.renderscript.ScriptIntrinsic { + method public static android.renderscript.ScriptIntrinsicConvolve5x5 create(android.renderscript.RenderScript, android.renderscript.Element); + method public void forEach(android.renderscript.Allocation); + method public android.renderscript.Script.FieldID getFieldID_Input(); + method public android.renderscript.Script.KernelID getKernelID(); + method public void setCoefficients(float[]); + method public void setInput(android.renderscript.Allocation); + } + + public final class ScriptIntrinsicLUT extends android.renderscript.ScriptIntrinsic { + method public static android.renderscript.ScriptIntrinsicLUT create(android.renderscript.RenderScript, android.renderscript.Element); + method public void forEach(android.renderscript.Allocation, android.renderscript.Allocation); + method public android.renderscript.Script.KernelID getKernelID(); + method public void setAlpha(int, int); + method public void setBlue(int, int); + method public void setGreen(int, int); + method public void setRed(int, int); + } + + public final class ScriptIntrinsicYuvToRGB extends android.renderscript.ScriptIntrinsic { + method public static android.renderscript.ScriptIntrinsicYuvToRGB create(android.renderscript.RenderScript, android.renderscript.Element); + method public void forEach(android.renderscript.Allocation); + method public android.renderscript.Script.FieldID getFieldID_Input(); + method public android.renderscript.Script.KernelID getKernelID(); + method public void setInput(android.renderscript.Allocation); + } + public class Short2 { ctor public Short2(); ctor public Short2(short, short); @@ -19705,6 +20313,55 @@ package android.security { } +package android.service.dreams { + + public class DreamService extends android.app.Service implements android.view.Window.Callback { + ctor public DreamService(); + method public void addContentView(android.view.View, android.view.ViewGroup.LayoutParams); + method public boolean dispatchGenericMotionEvent(android.view.MotionEvent); + method public boolean dispatchKeyEvent(android.view.KeyEvent); + method public boolean dispatchKeyShortcutEvent(android.view.KeyEvent); + method public boolean dispatchPopulateAccessibilityEvent(android.view.accessibility.AccessibilityEvent); + method public boolean dispatchTouchEvent(android.view.MotionEvent); + method public boolean dispatchTrackballEvent(android.view.MotionEvent); + method public android.view.View findViewById(int); + method public void finish(); + method public android.view.Window getWindow(); + method public android.view.WindowManager getWindowManager(); + method public boolean isFullscreen(); + method public boolean isInteractive(); + method public boolean isLowProfile(); + method public boolean isScreenBright(); + method public void onActionModeFinished(android.view.ActionMode); + method public void onActionModeStarted(android.view.ActionMode); + method public void onAttachedToWindow(); + method public final android.os.IBinder onBind(android.content.Intent); + method public void onContentChanged(); + method public boolean onCreatePanelMenu(int, android.view.Menu); + method public android.view.View onCreatePanelView(int); + method public void onDetachedFromWindow(); + method public boolean onMenuItemSelected(int, android.view.MenuItem); + method public boolean onMenuOpened(int, android.view.Menu); + method public void onPanelClosed(int, android.view.Menu); + method public boolean onPreparePanel(int, android.view.View, android.view.Menu); + method public boolean onSearchRequested(); + method public void onStart(); + method public void onWindowAttributesChanged(android.view.WindowManager.LayoutParams); + method public void onWindowFocusChanged(boolean); + method public android.view.ActionMode onWindowStartingActionMode(android.view.ActionMode.Callback); + method public void setContentView(int); + method public void setContentView(android.view.View); + method public void setContentView(android.view.View, android.view.ViewGroup.LayoutParams); + method public void setFullscreen(boolean); + method public void setInteractive(boolean); + method public void setLowProfile(boolean); + method public void setScreenBright(boolean); + field public static final java.lang.String DREAM_META_DATA = "android.service.dream"; + field public static final java.lang.String SERVICE_INTERFACE = "android.service.dreams.DreamService"; + } + +} + package android.service.textservice { public abstract class SpellCheckerService extends android.app.Service { @@ -19991,12 +20648,123 @@ package android.speech.tts { package android.telephony { + public final class CellIdentityCdma implements android.os.Parcelable { + method public int describeContents(); + method public int getBasestationId(); + method public int getLatitude(); + method public int getLongitude(); + method public int getNetworkId(); + method public int getSystemId(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public final class CellIdentityGsm implements android.os.Parcelable { + method public int describeContents(); + method public int getCid(); + method public int getLac(); + method public int getMcc(); + method public int getMnc(); + method public int getPsc(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public final class CellIdentityLte implements android.os.Parcelable { + method public int describeContents(); + method public int getCi(); + method public int getMcc(); + method public int getMnc(); + method public int getPci(); + method public int getTac(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public abstract class CellInfo implements android.os.Parcelable { + method public int describeContents(); + method public long getTimeStamp(); + method public boolean isRegistered(); + method public abstract void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public final class CellInfoCdma extends android.telephony.CellInfo implements android.os.Parcelable { + method public android.telephony.CellIdentityCdma getCellIdentity(); + method public android.telephony.CellSignalStrengthCdma getCellSignalStrength(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public final class CellInfoGsm extends android.telephony.CellInfo implements android.os.Parcelable { + method public android.telephony.CellIdentityGsm getCellIdentity(); + method public android.telephony.CellSignalStrengthGsm getCellSignalStrength(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public final class CellInfoLte extends android.telephony.CellInfo implements android.os.Parcelable { + method public android.telephony.CellIdentityLte getCellIdentity(); + method public android.telephony.CellSignalStrengthLte getCellSignalStrength(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + public abstract class CellLocation { ctor public CellLocation(); method public static android.telephony.CellLocation getEmpty(); method public static void requestLocationUpdate(); } + public abstract class CellSignalStrength { + method public abstract boolean equals(java.lang.Object); + method public abstract int getAsuLevel(); + method public abstract int getDbm(); + method public abstract int getLevel(); + method public abstract int hashCode(); + } + + public final class CellSignalStrengthCdma extends android.telephony.CellSignalStrength implements android.os.Parcelable { + method public int describeContents(); + method public boolean equals(java.lang.Object); + method public int getAsuLevel(); + method public int getCdmaDbm(); + method public int getCdmaEcio(); + method public int getCdmaLevel(); + method public int getDbm(); + method public int getEvdoDbm(); + method public int getEvdoEcio(); + method public int getEvdoLevel(); + method public int getEvdoSnr(); + method public int getLevel(); + method public int hashCode(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public final class CellSignalStrengthGsm extends android.telephony.CellSignalStrength implements android.os.Parcelable { + method public int describeContents(); + method public boolean equals(java.lang.Object); + method public int getAsuLevel(); + method public int getDbm(); + method public int getLevel(); + method public int hashCode(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public final class CellSignalStrengthLte extends android.telephony.CellSignalStrength implements android.os.Parcelable { + method public int describeContents(); + method public boolean equals(java.lang.Object); + method public int getAsuLevel(); + method public int getDbm(); + method public int getLevel(); + method public int getTimingAdvance(); + method public int hashCode(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + public class NeighboringCellInfo implements android.os.Parcelable { ctor public deprecated NeighboringCellInfo(); ctor public deprecated NeighboringCellInfo(int, int); @@ -20069,6 +20837,7 @@ package android.telephony { ctor public PhoneStateListener(); method public void onCallForwardingIndicatorChanged(boolean); method public void onCallStateChanged(int, java.lang.String); + method public void onCellInfoChanged(java.util.List<android.telephony.CellInfo>); method public void onCellLocationChanged(android.telephony.CellLocation); method public void onDataActivity(int); method public void onDataConnectionStateChanged(int); @@ -20079,6 +20848,7 @@ package android.telephony { method public void onSignalStrengthsChanged(android.telephony.SignalStrength); field public static final int LISTEN_CALL_FORWARDING_INDICATOR = 8; // 0x8 field public static final int LISTEN_CALL_STATE = 32; // 0x20 + field public static final int LISTEN_CELL_INFO = 1024; // 0x400 field public static final int LISTEN_CELL_LOCATION = 16; // 0x10 field public static final int LISTEN_DATA_ACTIVITY = 128; // 0x80 field public static final int LISTEN_DATA_CONNECTION_STATE = 64; // 0x40 @@ -20204,6 +20974,7 @@ package android.telephony { } public class TelephonyManager { + method public java.util.List<android.telephony.CellInfo> getAllCellInfo(); method public int getCallState(); method public android.telephony.CellLocation getCellLocation(); method public int getDataActivity(); @@ -20281,6 +21052,7 @@ package android.telephony.cdma { public class CdmaCellLocation extends android.telephony.CellLocation { ctor public CdmaCellLocation(); ctor public CdmaCellLocation(android.os.Bundle); + method public static double convertQuartSecToDecDegrees(int); method public void fillInNotifierBundle(android.os.Bundle); method public int getBaseStationId(); method public int getBaseStationLatitude(); @@ -20723,6 +21495,8 @@ package android.test.mock { method public int checkUriPermission(android.net.Uri, int, int, int); method public int checkUriPermission(android.net.Uri, java.lang.String, java.lang.String, int, int, int); method public void clearWallpaper(); + method public android.content.Context createConfigurationContext(android.content.res.Configuration); + method public android.content.Context createDisplayContext(android.view.Display); method public android.content.Context createPackageContext(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException; method public java.lang.String[] databaseList(); method public boolean deleteDatabase(java.lang.String); @@ -20769,13 +21543,19 @@ package android.test.mock { method public android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter); method public android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter, java.lang.String, android.os.Handler); method public void removeStickyBroadcast(android.content.Intent); + method public void removeStickyBroadcastAsUser(android.content.Intent, android.os.UserHandle); method public void revokeUriPermission(android.net.Uri, int); method public void sendBroadcast(android.content.Intent); method public void sendBroadcast(android.content.Intent, java.lang.String); + method public void sendBroadcastAsUser(android.content.Intent, android.os.UserHandle); + method public void sendBroadcastAsUser(android.content.Intent, android.os.UserHandle, java.lang.String); method public void sendOrderedBroadcast(android.content.Intent, java.lang.String); method public void sendOrderedBroadcast(android.content.Intent, java.lang.String, android.content.BroadcastReceiver, android.os.Handler, int, java.lang.String, android.os.Bundle); + method public void sendOrderedBroadcastAsUser(android.content.Intent, android.os.UserHandle, java.lang.String, android.content.BroadcastReceiver, android.os.Handler, int, java.lang.String, android.os.Bundle); method public void sendStickyBroadcast(android.content.Intent); + method public void sendStickyBroadcastAsUser(android.content.Intent, android.os.UserHandle); method public void sendStickyOrderedBroadcast(android.content.Intent, android.content.BroadcastReceiver, android.os.Handler, int, java.lang.String, android.os.Bundle); + method public void sendStickyOrderedBroadcastAsUser(android.content.Intent, android.os.UserHandle, android.content.BroadcastReceiver, android.os.Handler, int, java.lang.String, android.os.Bundle); method public void setTheme(int); method public void setWallpaper(android.graphics.Bitmap) throws java.io.IOException; method public void setWallpaper(java.io.InputStream) throws java.io.IOException; @@ -20853,6 +21633,7 @@ package android.test.mock { method public int checkSignatures(int, int); method public void clearPackagePreferredActivities(java.lang.String); method public java.lang.String[] currentToCanonicalPackageNames(java.lang.String[]); + method public void extendVerificationTimeout(int, int, long); method public android.graphics.drawable.Drawable getActivityIcon(android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException; method public android.graphics.drawable.Drawable getActivityIcon(android.content.Intent) throws android.content.pm.PackageManager.NameNotFoundException; method public android.content.pm.ActivityInfo getActivityInfo(android.content.ComponentName, int) throws android.content.pm.PackageManager.NameNotFoundException; @@ -21421,6 +22202,7 @@ package android.text { method public static java.lang.CharSequence expandTemplate(java.lang.CharSequence, java.lang.CharSequence...); method public static int getCapsMode(java.lang.CharSequence, int, int); method public static void getChars(java.lang.CharSequence, int, int, char[], int); + method public static int getLayoutDirectionFromLocale(java.util.Locale); method public static int getOffsetAfter(java.lang.CharSequence, int); method public static int getOffsetBefore(java.lang.CharSequence, int); method public static java.lang.CharSequence getReverse(java.lang.CharSequence, int, int); @@ -21511,6 +22293,7 @@ package android.text.format { field public static final char MONTH = 77; // 0x004d 'M' field public static final char QUOTE = 39; // 0x0027 '\'' field public static final char SECONDS = 115; // 0x0073 's' + field public static final char STANDALONE_MONTH = 76; // 0x004c 'L' field public static final char TIME_ZONE = 122; // 0x007a 'z' field public static final char YEAR = 121; // 0x0079 'y' } @@ -21524,9 +22307,9 @@ package android.text.format { method public static java.lang.String formatElapsedTime(long); method public static java.lang.String formatElapsedTime(java.lang.StringBuilder, long); method public static final java.lang.CharSequence formatSameDayTime(long, long, int, int); - method public static java.lang.String getAMPMString(int); - method public static java.lang.String getDayOfWeekString(int, int); - method public static java.lang.String getMonthString(int, int); + method public static deprecated java.lang.String getAMPMString(int); + method public static deprecated java.lang.String getDayOfWeekString(int, int); + method public static deprecated java.lang.String getMonthString(int, int); method public static java.lang.CharSequence getRelativeDateTimeString(android.content.Context, long, long, long, int); method public static java.lang.CharSequence getRelativeTimeSpanString(long); method public static java.lang.CharSequence getRelativeTimeSpanString(long, long, long); @@ -21534,24 +22317,24 @@ package android.text.format { method public static java.lang.CharSequence getRelativeTimeSpanString(android.content.Context, long, boolean); method public static java.lang.CharSequence getRelativeTimeSpanString(android.content.Context, long); method public static boolean isToday(long); - field public static final java.lang.String ABBREV_MONTH_FORMAT = "%b"; + field public static final deprecated java.lang.String ABBREV_MONTH_FORMAT = "%b"; field public static final java.lang.String ABBREV_WEEKDAY_FORMAT = "%a"; field public static final long DAY_IN_MILLIS = 86400000L; // 0x5265c00L - field public static final int FORMAT_12HOUR = 64; // 0x40 - field public static final int FORMAT_24HOUR = 128; // 0x80 + field public static final deprecated int FORMAT_12HOUR = 64; // 0x40 + field public static final deprecated int FORMAT_24HOUR = 128; // 0x80 field public static final int FORMAT_ABBREV_ALL = 524288; // 0x80000 field public static final int FORMAT_ABBREV_MONTH = 65536; // 0x10000 field public static final int FORMAT_ABBREV_RELATIVE = 262144; // 0x40000 field public static final int FORMAT_ABBREV_TIME = 16384; // 0x4000 field public static final int FORMAT_ABBREV_WEEKDAY = 32768; // 0x8000 - field public static final int FORMAT_CAP_AMPM = 256; // 0x100 - field public static final int FORMAT_CAP_MIDNIGHT = 4096; // 0x1000 - field public static final int FORMAT_CAP_NOON = 1024; // 0x400 - field public static final int FORMAT_CAP_NOON_MIDNIGHT = 5120; // 0x1400 + field public static final deprecated int FORMAT_CAP_AMPM = 256; // 0x100 + field public static final deprecated int FORMAT_CAP_MIDNIGHT = 4096; // 0x1000 + field public static final deprecated int FORMAT_CAP_NOON = 1024; // 0x400 + field public static final deprecated int FORMAT_CAP_NOON_MIDNIGHT = 5120; // 0x1400 field public static final int FORMAT_NO_MIDNIGHT = 2048; // 0x800 field public static final int FORMAT_NO_MONTH_DAY = 32; // 0x20 field public static final int FORMAT_NO_NOON = 512; // 0x200 - field public static final int FORMAT_NO_NOON_MIDNIGHT = 2560; // 0xa00 + field public static final deprecated int FORMAT_NO_NOON_MIDNIGHT = 2560; // 0xa00 field public static final int FORMAT_NO_YEAR = 8; // 0x8 field public static final int FORMAT_NUMERIC_DATE = 131072; // 0x20000 field public static final int FORMAT_SHOW_DATE = 16; // 0x10 @@ -21560,12 +22343,12 @@ package android.text.format { field public static final int FORMAT_SHOW_YEAR = 4; // 0x4 field public static final deprecated int FORMAT_UTC = 8192; // 0x2000 field public static final long HOUR_IN_MILLIS = 3600000L; // 0x36ee80L - field public static final java.lang.String HOUR_MINUTE_24 = "%H:%M"; - field public static final int LENGTH_LONG = 10; // 0xa - field public static final int LENGTH_MEDIUM = 20; // 0x14 - field public static final int LENGTH_SHORT = 30; // 0x1e - field public static final int LENGTH_SHORTER = 40; // 0x28 - field public static final int LENGTH_SHORTEST = 50; // 0x32 + field public static final deprecated java.lang.String HOUR_MINUTE_24 = "%H:%M"; + field public static final deprecated int LENGTH_LONG = 10; // 0xa + field public static final deprecated int LENGTH_MEDIUM = 20; // 0x14 + field public static final deprecated int LENGTH_SHORT = 30; // 0x1e + field public static final deprecated int LENGTH_SHORTER = 40; // 0x28 + field public static final deprecated int LENGTH_SHORTEST = 50; // 0x32 field public static final long MINUTE_IN_MILLIS = 60000L; // 0xea60L field public static final java.lang.String MONTH_DAY_FORMAT = "%-d"; field public static final java.lang.String MONTH_FORMAT = "%B"; @@ -21576,8 +22359,8 @@ package android.text.format { field public static final java.lang.String YEAR_FORMAT = "%Y"; field public static final java.lang.String YEAR_FORMAT_TWO_DIGITS = "%g"; field public static final long YEAR_IN_MILLIS = 31449600000L; // 0x7528ad000L - field public static final int[] sameMonthTable; - field public static final int[] sameYearTable; + field public static final deprecated int[] sameMonthTable; + field public static final deprecated int[] sameYearTable; } public final class Formatter { @@ -22049,6 +22832,17 @@ package android.text.style { method public abstract void chooseHeight(java.lang.CharSequence, int, int, int, int, android.graphics.Paint.FontMetricsInt, android.text.TextPaint); } + public class LocaleSpan extends android.text.style.MetricAffectingSpan implements android.text.ParcelableSpan { + ctor public LocaleSpan(java.util.Locale); + ctor public LocaleSpan(android.os.Parcel); + method public int describeContents(); + method public java.util.Locale getLocale(); + method public int getSpanTypeId(); + method public void updateDrawState(android.text.TextPaint); + method public void updateMeasureState(android.text.TextPaint); + method public void writeToParcel(android.os.Parcel, int); + } + public class MaskFilterSpan extends android.text.style.CharacterStyle implements android.text.style.UpdateAppearance { ctor public MaskFilterSpan(android.graphics.MaskFilter); method public android.graphics.MaskFilter getMaskFilter(); @@ -22310,6 +23104,17 @@ package android.util { ctor public AndroidRuntimeException(java.lang.Exception); } + public class AtomicFile { + ctor public AtomicFile(java.io.File); + method public void delete(); + method public void failWrite(java.io.FileOutputStream); + method public void finishWrite(java.io.FileOutputStream); + method public java.io.File getBaseFile(); + method public java.io.FileInputStream openRead() throws java.io.FileNotFoundException; + method public byte[] readFully() throws java.io.IOException; + method public java.io.FileOutputStream startWrite() throws java.io.IOException; + } + public abstract interface AttributeSet { method public abstract boolean getAttributeBooleanValue(java.lang.String, java.lang.String, boolean); method public abstract boolean getAttributeBooleanValue(int, boolean); @@ -22377,6 +23182,7 @@ package android.util { public class DisplayMetrics { ctor public DisplayMetrics(); + method public boolean equals(android.util.DisplayMetrics); method public void setTo(android.util.DisplayMetrics); method public void setToDefaults(); field public static final int DENSITY_DEFAULT = 160; // 0xa0 @@ -22428,7 +23234,10 @@ package android.util { public class FloatMath { method public static float ceil(float); method public static float cos(float); + method public static float exp(float); method public static float floor(float); + method public static float hypot(float, float); + method public static float pow(float, float); method public static float sin(float); method public static float sqrt(float); } @@ -22558,6 +23367,7 @@ package android.util { method protected int sizeOf(K, V); method public final synchronized java.util.Map<K, V> snapshot(); method public final synchronized java.lang.String toString(); + method public void trimToSize(int); } public final class MalformedJsonException extends java.io.IOException { @@ -22889,6 +23699,7 @@ package android.view { public class ContextThemeWrapper extends android.content.ContextWrapper { ctor public ContextThemeWrapper(); ctor public ContextThemeWrapper(android.content.Context, int); + method public void applyOverrideConfiguration(android.content.res.Configuration); method protected void onApplyThemeResource(android.content.res.Resources.Theme, int, boolean); } @@ -22897,13 +23708,17 @@ package android.view { method public int getDisplayId(); method public deprecated int getHeight(); method public void getMetrics(android.util.DisplayMetrics); + method public java.lang.String getName(); method public deprecated int getOrientation(); - method public int getPixelFormat(); + method public deprecated int getPixelFormat(); + method public void getRealMetrics(android.util.DisplayMetrics); + method public void getRealSize(android.graphics.Point); method public void getRectSize(android.graphics.Rect); method public float getRefreshRate(); method public int getRotation(); method public void getSize(android.graphics.Point); method public deprecated int getWidth(); + method public boolean isValid(); field public static final int DEFAULT_DISPLAY = 0; // 0x0 } @@ -22976,8 +23791,12 @@ package android.view { public class Gravity { ctor public Gravity(); method public static void apply(int, int, int, android.graphics.Rect, android.graphics.Rect); + method public static void apply(int, int, int, android.graphics.Rect, android.graphics.Rect, int); method public static void apply(int, int, int, android.graphics.Rect, int, int, android.graphics.Rect); + method public static void apply(int, int, int, android.graphics.Rect, int, int, android.graphics.Rect, int); method public static void applyDisplay(int, android.graphics.Rect, android.graphics.Rect); + method public static void applyDisplay(int, android.graphics.Rect, android.graphics.Rect, int); + method public static int getAbsoluteGravity(int, int); method public static boolean isHorizontal(int); method public static boolean isVertical(int); field public static final int AXIS_CLIP = 8; // 0x8 @@ -23890,7 +24709,7 @@ package android.view { method public android.graphics.Canvas lockCanvas(android.graphics.Rect) throws java.lang.IllegalArgumentException, android.view.Surface.OutOfResourcesException; method public void readFromParcel(android.os.Parcel); method public void release(); - method public void unlockCanvas(android.graphics.Canvas); + method public deprecated void unlockCanvas(android.graphics.Canvas); method public void unlockCanvasAndPost(android.graphics.Canvas); method public void writeToParcel(android.os.Parcel, int); field public static final android.os.Parcelable.Creator CREATOR; @@ -24072,6 +24891,7 @@ package android.view { method protected boolean fitSystemWindows(android.graphics.Rect); method public android.view.View focusSearch(int); method public void forceLayout(); + method public static int generateViewId(); method public android.view.accessibility.AccessibilityNodeProvider getAccessibilityNodeProvider(); method public float getAlpha(); method public android.view.animation.Animation getAnimation(); @@ -24086,6 +24906,7 @@ package android.view { method public final android.content.Context getContext(); method protected android.view.ContextMenu.ContextMenuInfo getContextMenuInfo(); method public static int getDefaultSize(int, int); + method public android.view.Display getDisplay(); method public final int[] getDrawableState(); method public android.graphics.Bitmap getDrawingCache(); method public android.graphics.Bitmap getDrawingCache(boolean); @@ -24108,7 +24929,9 @@ package android.view { method public int getImportantForAccessibility(); method public boolean getKeepScreenOn(); method public android.view.KeyEvent.DispatcherState getKeyDispatcherState(); + method public int getLabelFor(); method public int getLayerType(); + method public int getLayoutDirection(); method public android.view.ViewGroup.LayoutParams getLayoutParams(); method public final int getLeft(); method protected float getLeftFadingEdgeStrength(); @@ -24132,8 +24955,10 @@ package android.view { method public android.view.View.OnFocusChangeListener getOnFocusChangeListener(); method public int getOverScrollMode(); method public int getPaddingBottom(); + method public int getPaddingEnd(); method public int getPaddingLeft(); method public int getPaddingRight(); + method public int getPaddingStart(); method public int getPaddingTop(); method public final android.view.ViewParent getParent(); method public android.view.ViewParent getParentForAccessibility(); @@ -24161,6 +24986,8 @@ package android.view { method public int getSystemUiVisibility(); method public java.lang.Object getTag(); method public java.lang.Object getTag(int); + method public int getTextAlignment(); + method public int getTextDirection(); method public final int getTop(); method protected float getTopFadingEdgeStrength(); method protected int getTopPaddingOffset(); @@ -24214,6 +25041,7 @@ package android.view { method public boolean isLongClickable(); method public boolean isOpaque(); method protected boolean isPaddingOffsetRequired(); + method public boolean isPaddingRelative(); method public boolean isPressed(); method public boolean isSaveEnabled(); method public boolean isSaveFromParentEnabled(); @@ -24263,6 +25091,7 @@ package android.view { method protected void onOverScrolled(int, int, boolean, boolean); method public void onPopulateAccessibilityEvent(android.view.accessibility.AccessibilityEvent); method protected void onRestoreInstanceState(android.os.Parcelable); + method public void onRtlPropertiesChanged(int); method protected android.os.Parcelable onSaveInstanceState(); method public void onScreenStateChanged(int); method protected void onScrollChanged(int, int, int, int); @@ -24343,7 +25172,10 @@ package android.view { method public void setId(int); method public void setImportantForAccessibility(int); method public void setKeepScreenOn(boolean); + method public void setLabelFor(int); + method public void setLayerPaint(android.graphics.Paint); method public void setLayerType(int, android.graphics.Paint); + method public void setLayoutDirection(int); method public void setLayoutParams(android.view.ViewGroup.LayoutParams); method public final void setLeft(int); method public void setLongClickable(boolean); @@ -24367,6 +25199,7 @@ package android.view { method public void setOnTouchListener(android.view.View.OnTouchListener); method public void setOverScrollMode(int); method public void setPadding(int, int, int, int); + method public void setPaddingRelative(int, int, int, int); method public void setPivotX(float); method public void setPivotY(float); method public void setPressed(boolean); @@ -24391,6 +25224,8 @@ package android.view { method public void setSystemUiVisibility(int); method public void setTag(java.lang.Object); method public void setTag(int, java.lang.Object); + method public void setTextAlignment(int); + method public void setTextDirection(int); method public final void setTop(int); method public void setTouchDelegate(android.view.TouchDelegate); method public void setTranslationX(float); @@ -24449,6 +25284,10 @@ package android.view { field public static final int LAYER_TYPE_HARDWARE = 2; // 0x2 field public static final int LAYER_TYPE_NONE = 0; // 0x0 field public static final int LAYER_TYPE_SOFTWARE = 1; // 0x1 + field public static final int LAYOUT_DIRECTION_INHERIT = 2; // 0x2 + field public static final int LAYOUT_DIRECTION_LOCALE = 3; // 0x3 + field public static final int LAYOUT_DIRECTION_LTR = 0; // 0x0 + field public static final int LAYOUT_DIRECTION_RTL = 1; // 0x1 field public static final int MEASURED_HEIGHT_STATE_SHIFT = 16; // 0x10 field public static final int MEASURED_SIZE_MASK = 16777215; // 0xffffff field public static final int MEASURED_STATE_MASK = -16777216; // 0xff000000 @@ -24499,7 +25338,21 @@ package android.view { field public static final int SYSTEM_UI_FLAG_LOW_PROFILE = 1; // 0x1 field public static final int SYSTEM_UI_FLAG_VISIBLE = 0; // 0x0 field public static final int SYSTEM_UI_LAYOUT_FLAGS = 1536; // 0x600 + field public static final int TEXT_ALIGNMENT_CENTER = 4; // 0x4 + field public static int TEXT_ALIGNMENT_DEFAULT; + field public static final int TEXT_ALIGNMENT_GRAVITY = 1; // 0x1 field public static final int TEXT_ALIGNMENT_INHERIT = 0; // 0x0 + field public static final int TEXT_ALIGNMENT_TEXT_END = 3; // 0x3 + field public static final int TEXT_ALIGNMENT_TEXT_START = 2; // 0x2 + field public static final int TEXT_ALIGNMENT_VIEW_END = 6; // 0x6 + field public static final int TEXT_ALIGNMENT_VIEW_START = 5; // 0x5 + field public static final int TEXT_DIRECTION_ANY_RTL = 2; // 0x2 + field public static int TEXT_DIRECTION_DEFAULT; + field public static final int TEXT_DIRECTION_FIRST_STRONG = 1; // 0x1 + field public static final int TEXT_DIRECTION_INHERIT = 0; // 0x0 + field public static final int TEXT_DIRECTION_LOCALE = 5; // 0x5 + field public static final int TEXT_DIRECTION_LTR = 3; // 0x3 + field public static final int TEXT_DIRECTION_RTL = 4; // 0x4 field public static final android.util.Property TRANSLATION_X; field public static final android.util.Property TRANSLATION_Y; field protected static final java.lang.String VIEW_LOG_TAG = "View"; @@ -24803,6 +25656,7 @@ package android.view { ctor public ViewGroup.LayoutParams(android.content.Context, android.util.AttributeSet); ctor public ViewGroup.LayoutParams(int, int); ctor public ViewGroup.LayoutParams(android.view.ViewGroup.LayoutParams); + method public void onResolveLayoutDirection(int); method protected void setBaseAttributes(android.content.res.TypedArray, int, int); field public static final deprecated int FILL_PARENT = -1; // 0xffffffff field public static final int MATCH_PARENT = -1; // 0xffffffff @@ -24817,6 +25671,13 @@ package android.view { ctor public ViewGroup.MarginLayoutParams(int, int); ctor public ViewGroup.MarginLayoutParams(android.view.ViewGroup.MarginLayoutParams); ctor public ViewGroup.MarginLayoutParams(android.view.ViewGroup.LayoutParams); + method public int getLayoutDirection(); + method public int getMarginEnd(); + method public int getMarginStart(); + method public boolean isMarginRelative(); + method public void setLayoutDirection(int); + method public void setMarginEnd(int); + method public void setMarginStart(int); method public void setMargins(int, int, int, int); field public int bottomMargin; field public int leftMargin; @@ -25124,7 +25985,7 @@ package android.view { field public static final deprecated int FLAG_BLUR_BEHIND = 4; // 0x4 field public static final int FLAG_DIM_BEHIND = 2; // 0x2 field public static final int FLAG_DISMISS_KEYGUARD = 4194304; // 0x400000 - field public static final int FLAG_DITHER = 4096; // 0x1000 + field public static final deprecated int FLAG_DITHER = 4096; // 0x1000 field public static final int FLAG_FORCE_NOT_FULLSCREEN = 2048; // 0x800 field public static final int FLAG_FULLSCREEN = 1024; // 0x400 field public static final int FLAG_HARDWARE_ACCELERATED = 16777216; // 0x1000000 @@ -25247,9 +26108,13 @@ package android.view.accessibility { field public static final deprecated int MAX_TEXT_LENGTH = 500; // 0x1f4 field public static final int TYPES_ALL_MASK = -1; // 0xffffffff field public static final int TYPE_ANNOUNCEMENT = 16384; // 0x4000 + field public static final int TYPE_GESTURE_DETECTION_END = 524288; // 0x80000 + field public static final int TYPE_GESTURE_DETECTION_START = 262144; // 0x40000 field public static final int TYPE_NOTIFICATION_STATE_CHANGED = 64; // 0x40 field public static final int TYPE_TOUCH_EXPLORATION_GESTURE_END = 1024; // 0x400 field public static final int TYPE_TOUCH_EXPLORATION_GESTURE_START = 512; // 0x200 + field public static final int TYPE_TOUCH_INTERACTION_END = 2097152; // 0x200000 + field public static final int TYPE_TOUCH_INTERACTION_START = 1048576; // 0x100000 field public static final int TYPE_VIEW_ACCESSIBILITY_FOCUSED = 32768; // 0x8000 field public static final int TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED = 65536; // 0x10000 field public static final int TYPE_VIEW_CLICKED = 1; // 0x1 @@ -25302,6 +26167,8 @@ package android.view.accessibility { method public int getChildCount(); method public java.lang.CharSequence getClassName(); method public java.lang.CharSequence getContentDescription(); + method public android.view.accessibility.AccessibilityNodeInfo getLabelFor(); + method public android.view.accessibility.AccessibilityNodeInfo getLabeledBy(); method public int getMovementGranularities(); method public java.lang.CharSequence getPackageName(); method public android.view.accessibility.AccessibilityNodeInfo getParent(); @@ -25337,6 +26204,10 @@ package android.view.accessibility { method public void setEnabled(boolean); method public void setFocusable(boolean); method public void setFocused(boolean); + method public void setLabelFor(android.view.View); + method public void setLabelFor(android.view.View, int); + method public void setLabeledBy(android.view.View); + method public void setLabeledBy(android.view.View, int); method public void setLongClickable(boolean); method public void setMovementGranularities(int); method public void setPackageName(java.lang.CharSequence); @@ -25977,6 +26848,7 @@ package android.view.inputmethod { public abstract interface InputMethodSession { method public abstract void appPrivateCommand(java.lang.String, android.os.Bundle); + method public abstract void dispatchGenericMotionEvent(int, android.view.MotionEvent, android.view.inputmethod.InputMethodSession.EventCallback); method public abstract void dispatchKeyEvent(int, android.view.KeyEvent, android.view.inputmethod.InputMethodSession.EventCallback); method public abstract void dispatchTrackballEvent(int, android.view.MotionEvent, android.view.inputmethod.InputMethodSession.EventCallback); method public abstract void displayCompletions(android.view.inputmethod.CompletionInfo[]); @@ -25994,6 +26866,7 @@ package android.view.inputmethod { public final class InputMethodSubtype implements android.os.Parcelable { ctor public InputMethodSubtype(int, int, java.lang.String, java.lang.String, java.lang.String, boolean, boolean); + ctor public InputMethodSubtype(int, int, java.lang.String, java.lang.String, java.lang.String, boolean, boolean, int); method public boolean containsExtraValueKey(java.lang.String); method public int describeContents(); method public java.lang.CharSequence getDisplayName(android.content.Context, java.lang.String, android.content.pm.ApplicationInfo); @@ -26176,6 +27049,9 @@ package android.webkit { method public boolean useHttpAuthUsernamePassword(); } + public abstract class JavascriptInterface implements java.lang.annotation.Annotation { + } + public class JsPromptResult extends android.webkit.JsResult { method public void confirm(java.lang.String); } @@ -26252,7 +27128,7 @@ package android.webkit { method public boolean onJsBeforeUnload(android.webkit.WebView, java.lang.String, java.lang.String, android.webkit.JsResult); method public boolean onJsConfirm(android.webkit.WebView, java.lang.String, java.lang.String, android.webkit.JsResult); method public boolean onJsPrompt(android.webkit.WebView, java.lang.String, java.lang.String, java.lang.String, android.webkit.JsPromptResult); - method public boolean onJsTimeout(); + method public deprecated boolean onJsTimeout(); method public void onProgressChanged(android.webkit.WebView, int); method public void onReachedMaxAppCacheSize(long, long, android.webkit.WebStorage.QuotaUpdater); method public void onReceivedIcon(android.webkit.WebView, android.graphics.Bitmap); @@ -26299,7 +27175,7 @@ package android.webkit { } public abstract class WebSettings { - method public boolean enableSmoothTransition(); + method public deprecated boolean enableSmoothTransition(); method public boolean getAllowContentAccess(); method public boolean getAllowFileAccess(); method public abstract boolean getAllowFileAccessFromFileURLs(); @@ -26314,6 +27190,7 @@ package android.webkit { method public synchronized int getDefaultFixedFontSize(); method public synchronized int getDefaultFontSize(); method public synchronized java.lang.String getDefaultTextEncodingName(); + method public static java.lang.String getDefaultUserAgent(android.content.Context); method public android.webkit.WebSettings.ZoomDensity getDefaultZoom(); method public boolean getDisplayZoomControls(); method public synchronized boolean getDomStorageEnabled(); @@ -26325,6 +27202,7 @@ package android.webkit { method public boolean getLightTouchEnabled(); method public boolean getLoadWithOverviewMode(); method public synchronized boolean getLoadsImagesAutomatically(); + method public boolean getMediaPlaybackRequiresUserGesture(); method public synchronized int getMinimumFontSize(); method public synchronized int getMinimumLogicalFontSize(); method public synchronized android.webkit.WebSettings.PluginState getPluginState(); @@ -26359,7 +27237,7 @@ package android.webkit { method public void setDefaultZoom(android.webkit.WebSettings.ZoomDensity); method public void setDisplayZoomControls(boolean); method public synchronized void setDomStorageEnabled(boolean); - method public void setEnableSmoothTransition(boolean); + method public deprecated void setEnableSmoothTransition(boolean); method public synchronized void setFantasyFontFamily(java.lang.String); method public synchronized void setFixedFontFamily(java.lang.String); method public synchronized void setGeolocationDatabasePath(java.lang.String); @@ -26370,6 +27248,7 @@ package android.webkit { method public void setLightTouchEnabled(boolean); method public void setLoadWithOverviewMode(boolean); method public synchronized void setLoadsImagesAutomatically(boolean); + method public void setMediaPlaybackRequiresUserGesture(boolean); method public synchronized void setMinimumFontSize(int); method public synchronized void setMinimumLogicalFontSize(int); method public void setNeedInitialFocus(boolean); @@ -26393,7 +27272,7 @@ package android.webkit { field public static final int LOAD_CACHE_ELSE_NETWORK = 1; // 0x1 field public static final int LOAD_CACHE_ONLY = 3; // 0x3 field public static final int LOAD_DEFAULT = -1; // 0xffffffff - field public static final int LOAD_NORMAL = 0; // 0x0 + field public static final deprecated int LOAD_NORMAL = 0; // 0x0 field public static final int LOAD_NO_CACHE = 2; // 0x2 } @@ -26476,13 +27355,13 @@ package android.webkit { ctor public WebView(android.content.Context); ctor public WebView(android.content.Context, android.util.AttributeSet); ctor public WebView(android.content.Context, android.util.AttributeSet, int); - ctor public WebView(android.content.Context, android.util.AttributeSet, int, boolean); + ctor public deprecated WebView(android.content.Context, android.util.AttributeSet, int, boolean); method public void addJavascriptInterface(java.lang.Object, java.lang.String); method public boolean canGoBack(); method public boolean canGoBackOrForward(int); method public boolean canGoForward(); - method public boolean canZoomIn(); - method public boolean canZoomOut(); + method public deprecated boolean canZoomIn(); + method public deprecated boolean canZoomOut(); method public android.graphics.Picture capturePicture(); method public void clearCache(boolean); method public void clearFormData(); @@ -26506,7 +27385,7 @@ package android.webkit { method public java.lang.String[] getHttpAuthUsernamePassword(java.lang.String, java.lang.String); method public java.lang.String getOriginalUrl(); method public int getProgress(); - method public float getScale(); + method public deprecated float getScale(); method public android.webkit.WebSettings getSettings(); method public java.lang.String getTitle(); method public java.lang.String getUrl(); @@ -26540,13 +27419,13 @@ package android.webkit { method public android.webkit.WebBackForwardList saveState(android.os.Bundle); method public void saveWebArchive(java.lang.String); method public void saveWebArchive(java.lang.String, boolean, android.webkit.ValueCallback<java.lang.String>); - method public void setCertificate(android.net.http.SslCertificate); + method public deprecated void setCertificate(android.net.http.SslCertificate); method public void setDownloadListener(android.webkit.DownloadListener); method public void setFindListener(android.webkit.WebView.FindListener); method public void setHorizontalScrollbarOverlay(boolean); method public void setHttpAuthUsernamePassword(java.lang.String, java.lang.String, java.lang.String, java.lang.String); method public void setInitialScale(int); - method public void setMapTrackballToArrowKeys(boolean); + method public deprecated void setMapTrackballToArrowKeys(boolean); method public void setNetworkAvailable(boolean); method public void setVerticalScrollbarOverlay(boolean); method public void setWebChromeClient(android.webkit.WebChromeClient); @@ -26627,7 +27506,7 @@ package android.webkit { method public void clearFormData(); method public void clearHttpAuthUsernamePassword(); method public void clearUsernamePassword(); - method public static synchronized android.webkit.WebViewDatabase getInstance(android.content.Context); + method public static android.webkit.WebViewDatabase getInstance(android.content.Context); method public boolean hasFormData(); method public boolean hasHttpAuthUsernamePassword(); method public boolean hasUsernamePassword(); @@ -26994,13 +27873,19 @@ package android.widget { method public void setDropDownVerticalOffset(int); method public void setDropDownWidth(int); method public void setListSelection(int); + method public void setOnDismissListener(android.widget.AutoCompleteTextView.OnDismissListener); method public void setOnItemClickListener(android.widget.AdapterView.OnItemClickListener); method public void setOnItemSelectedListener(android.widget.AdapterView.OnItemSelectedListener); + method public void setText(java.lang.CharSequence, boolean); method public void setThreshold(int); method public void setValidator(android.widget.AutoCompleteTextView.Validator); method public void showDropDown(); } + public static abstract interface AutoCompleteTextView.OnDismissListener { + method public abstract void onDismiss(); + } + public static abstract interface AutoCompleteTextView.Validator { method public abstract java.lang.CharSequence fixText(java.lang.CharSequence); method public abstract boolean isValid(java.lang.CharSequence); @@ -27104,7 +27989,6 @@ package android.widget { ctor public CheckedTextView(android.content.Context, android.util.AttributeSet, int); method public android.graphics.drawable.Drawable getCheckMarkDrawable(); method public boolean isChecked(); - method public void onPaddingChanged(int); method public void setCheckMarkDrawable(int); method public void setCheckMarkDrawable(android.graphics.drawable.Drawable); method public void setChecked(boolean); @@ -27247,7 +28131,7 @@ package android.widget { field public static final int LETTERS_ONLY = 5; // 0x5 } - public class DigitalClock extends android.widget.TextView { + public deprecated class DigitalClock extends android.widget.TextView { ctor public DigitalClock(android.content.Context); ctor public DigitalClock(android.content.Context, android.util.AttributeSet); } @@ -27711,6 +28595,7 @@ package android.widget { method public void setHeight(int); method public void setHorizontalOffset(int); method public void setInputMethodMode(int); + method public void setLayoutDirection(int); method public void setListSelector(android.graphics.drawable.Drawable); method public void setModal(boolean); method public void setOnDismissListener(android.widget.PopupWindow.OnDismissListener); @@ -28063,19 +28948,25 @@ package android.widget { field public static final int ABOVE = 2; // 0x2 field public static final int ALIGN_BASELINE = 4; // 0x4 field public static final int ALIGN_BOTTOM = 8; // 0x8 + field public static final int ALIGN_END = 19; // 0x13 field public static final int ALIGN_LEFT = 5; // 0x5 field public static final int ALIGN_PARENT_BOTTOM = 12; // 0xc + field public static final int ALIGN_PARENT_END = 21; // 0x15 field public static final int ALIGN_PARENT_LEFT = 9; // 0x9 field public static final int ALIGN_PARENT_RIGHT = 11; // 0xb + field public static final int ALIGN_PARENT_START = 20; // 0x14 field public static final int ALIGN_PARENT_TOP = 10; // 0xa field public static final int ALIGN_RIGHT = 7; // 0x7 + field public static final int ALIGN_START = 18; // 0x12 field public static final int ALIGN_TOP = 6; // 0x6 field public static final int BELOW = 3; // 0x3 field public static final int CENTER_HORIZONTAL = 14; // 0xe field public static final int CENTER_IN_PARENT = 13; // 0xd field public static final int CENTER_VERTICAL = 15; // 0xf + field public static final int END_OF = 17; // 0x11 field public static final int LEFT_OF = 0; // 0x0 field public static final int RIGHT_OF = 1; // 0x1 + field public static final int START_OF = 16; // 0x10 field public static final int TRUE = -1; // 0xffffffff } @@ -28088,6 +28979,7 @@ package android.widget { method public void addRule(int, int); method public java.lang.String debug(java.lang.String); method public int[] getRules(); + method public void removeRule(int); field public boolean alignWithParent; } @@ -28121,6 +29013,7 @@ package android.widget { method public void setImageViewUri(int, android.net.Uri); method public void setInt(int, java.lang.String, int); method public void setIntent(int, java.lang.String, android.content.Intent); + method public void setLabelFor(int, int); method public void setLong(int, java.lang.String, long); method public void setOnClickFillInIntent(int, android.content.Intent); method public void setOnClickPendingIntent(int, android.app.PendingIntent); @@ -28389,7 +29282,7 @@ package android.widget { method public android.view.View newGroupView(boolean, android.view.ViewGroup); } - public class SlidingDrawer extends android.view.ViewGroup { + public deprecated class SlidingDrawer extends android.view.ViewGroup { ctor public SlidingDrawer(android.content.Context, android.util.AttributeSet); ctor public SlidingDrawer(android.content.Context, android.util.AttributeSet, int); method public void animateClose(); @@ -28616,9 +29509,12 @@ package android.widget { method public final int getAutoLinkMask(); method public int getCompoundDrawablePadding(); method public android.graphics.drawable.Drawable[] getCompoundDrawables(); + method public android.graphics.drawable.Drawable[] getCompoundDrawablesRelative(); method public int getCompoundPaddingBottom(); + method public int getCompoundPaddingEnd(); method public int getCompoundPaddingLeft(); method public int getCompoundPaddingRight(); + method public int getCompoundPaddingStart(); method public int getCompoundPaddingTop(); method public final int getCurrentHintTextColor(); method public final int getCurrentTextColor(); @@ -28675,11 +29571,14 @@ package android.widget { method public static int getTextColor(android.content.Context, android.content.res.TypedArray, int); method public final android.content.res.ColorStateList getTextColors(); method public static android.content.res.ColorStateList getTextColors(android.content.Context, android.content.res.TypedArray); + method public java.util.Locale getTextLocale(); method public float getTextScaleX(); method public float getTextSize(); method public int getTotalPaddingBottom(); + method public int getTotalPaddingEnd(); method public int getTotalPaddingLeft(); method public int getTotalPaddingRight(); + method public int getTotalPaddingStart(); method public int getTotalPaddingTop(); method public final android.text.method.TransformationMethod getTransformationMethod(); method public android.graphics.Typeface getTypeface(); @@ -28704,10 +29603,14 @@ package android.widget { method protected void onTextChanged(java.lang.CharSequence, int, int, int); method public boolean onTextContextMenuItem(int); method public void removeTextChangedListener(android.text.TextWatcher); + method protected void resetResolvedDrawables(); method public void setAllCaps(boolean); method public final void setAutoLinkMask(int); method public void setCompoundDrawablePadding(int); method public void setCompoundDrawables(android.graphics.drawable.Drawable, android.graphics.drawable.Drawable, android.graphics.drawable.Drawable, android.graphics.drawable.Drawable); + method public void setCompoundDrawablesRelative(android.graphics.drawable.Drawable, android.graphics.drawable.Drawable, android.graphics.drawable.Drawable, android.graphics.drawable.Drawable); + method public void setCompoundDrawablesRelativeWithIntrinsicBounds(int, int, int, int); + method public void setCompoundDrawablesRelativeWithIntrinsicBounds(android.graphics.drawable.Drawable, android.graphics.drawable.Drawable, android.graphics.drawable.Drawable, android.graphics.drawable.Drawable); method public void setCompoundDrawablesWithIntrinsicBounds(int, int, int, int); method public void setCompoundDrawablesWithIntrinsicBounds(android.graphics.drawable.Drawable, android.graphics.drawable.Drawable, android.graphics.drawable.Drawable, android.graphics.drawable.Drawable); method public void setCursorVisible(boolean); @@ -28751,7 +29654,6 @@ package android.widget { method public void setMinWidth(int); method public final void setMovementMethod(android.text.method.MovementMethod); method public void setOnEditorActionListener(android.widget.TextView.OnEditorActionListener); - method public void setPaddingRelative(int, int, int, int); method public void setPaintFlags(int); method public void setPrivateImeOptions(java.lang.String); method public void setRawInputType(int); @@ -28772,6 +29674,7 @@ package android.widget { method public void setTextIsSelectable(boolean); method public final void setTextKeepState(java.lang.CharSequence); method public final void setTextKeepState(java.lang.CharSequence, android.widget.TextView.BufferType); + method public void setTextLocale(java.util.Locale); method public void setTextScaleX(float); method public void setTextSize(float); method public void setTextSize(int, float); @@ -28847,7 +29750,7 @@ package android.widget { method public void setTextOn(java.lang.CharSequence); } - public class TwoLineListItem extends android.widget.RelativeLayout { + public deprecated class TwoLineListItem extends android.widget.RelativeLayout { ctor public TwoLineListItem(android.content.Context); ctor public TwoLineListItem(android.content.Context, android.util.AttributeSet); ctor public TwoLineListItem(android.content.Context, android.util.AttributeSet, int); @@ -28873,6 +29776,7 @@ package android.widget { method public void setMediaController(android.widget.MediaController); method public void setOnCompletionListener(android.media.MediaPlayer.OnCompletionListener); method public void setOnErrorListener(android.media.MediaPlayer.OnErrorListener); + method public void setOnInfoListener(android.media.MediaPlayer.OnInfoListener); method public void setOnPreparedListener(android.media.MediaPlayer.OnPreparedListener); method public void setVideoPath(java.lang.String); method public void setVideoURI(android.net.Uri); @@ -28884,6 +29788,7 @@ package android.widget { public class ViewAnimator extends android.widget.FrameLayout { ctor public ViewAnimator(android.content.Context); ctor public ViewAnimator(android.content.Context, android.util.AttributeSet); + method public boolean getAnimateFirstView(); method public android.view.View getCurrentView(); method public int getDisplayedChild(); method public android.view.animation.Animation getInAnimation(); diff --git a/api/current.txt b/api/current.txt index 1de68ed..5205856 100644 --- a/api/current.txt +++ b/api/current.txt @@ -331,6 +331,7 @@ package android { field public static final int checkboxStyle = 16842860; // 0x101006c field public static final int checked = 16843014; // 0x1010106 field public static final int checkedButton = 16843080; // 0x1010148 + field public static final int checkedTextViewStyle = 16843720; // 0x10103c8 field public static final int childDivider = 16843025; // 0x1010111 field public static final int childIndicator = 16843020; // 0x101010c field public static final int childIndicatorLeft = 16843023; // 0x101010f @@ -1789,6 +1790,7 @@ package android { field public static final int Widget_DeviceDefault_Button_Small = 16974146; // 0x1030142 field public static final int Widget_DeviceDefault_Button_Toggle = 16974148; // 0x1030144 field public static final int Widget_DeviceDefault_CalendarView = 16974190; // 0x103016e + field public static final int Widget_DeviceDefault_CheckedTextView = 16974299; // 0x10301db field public static final int Widget_DeviceDefault_CompoundButton_CheckBox = 16974152; // 0x1030148 field public static final int Widget_DeviceDefault_CompoundButton_RadioButton = 16974169; // 0x1030159 field public static final int Widget_DeviceDefault_CompoundButton_Star = 16974173; // 0x103015d @@ -1822,6 +1824,7 @@ package android { field public static final int Widget_DeviceDefault_Light_Button_Small = 16974198; // 0x1030176 field public static final int Widget_DeviceDefault_Light_Button_Toggle = 16974200; // 0x1030178 field public static final int Widget_DeviceDefault_Light_CalendarView = 16974238; // 0x103019e + field public static final int Widget_DeviceDefault_Light_CheckedTextView = 16974300; // 0x10301dc field public static final int Widget_DeviceDefault_Light_CompoundButton_CheckBox = 16974204; // 0x103017c field public static final int Widget_DeviceDefault_Light_CompoundButton_RadioButton = 16974224; // 0x1030190 field public static final int Widget_DeviceDefault_Light_CompoundButton_Star = 16974228; // 0x1030194 @@ -1907,6 +1910,7 @@ package android { field public static final int Widget_Holo_Button_Small = 16973964; // 0x103008c field public static final int Widget_Holo_Button_Toggle = 16973966; // 0x103008e field public static final int Widget_Holo_CalendarView = 16974060; // 0x10300ec + field public static final int Widget_Holo_CheckedTextView = 16974297; // 0x10301d9 field public static final int Widget_Holo_CompoundButton_CheckBox = 16973969; // 0x1030091 field public static final int Widget_Holo_CompoundButton_RadioButton = 16973986; // 0x10300a2 field public static final int Widget_Holo_CompoundButton_Star = 16973990; // 0x10300a6 @@ -1940,6 +1944,7 @@ package android { field public static final int Widget_Holo_Light_Button_Small = 16974007; // 0x10300b7 field public static final int Widget_Holo_Light_Button_Toggle = 16974009; // 0x10300b9 field public static final int Widget_Holo_Light_CalendarView = 16974061; // 0x10300ed + field public static final int Widget_Holo_Light_CheckedTextView = 16974298; // 0x10301da field public static final int Widget_Holo_Light_CompoundButton_CheckBox = 16974012; // 0x10300bc field public static final int Widget_Holo_Light_CompoundButton_RadioButton = 16974032; // 0x10300d0 field public static final int Widget_Holo_Light_CompoundButton_Star = 16974036; // 0x10300d4 @@ -4486,9 +4491,8 @@ package android.appwidget { field public static final int RESIZE_VERTICAL = 2; // 0x2 field public static final int WIDGET_CATEGORY_HOME_SCREEN = 1; // 0x1 field public static final int WIDGET_CATEGORY_KEYGUARD = 2; // 0x2 - field public static final int WIDGET_FEATURES_CLOCK = 1; // 0x1 field public static final int WIDGET_FEATURES_NONE = 0; // 0x0 - field public static final int WIDGET_FEATURES_STATUS = 2; // 0x2 + field public static final int WIDGET_FEATURES_STATUS = 1; // 0x1 field public int autoAdvanceViewId; field public android.content.ComponentName configure; field public int icon; @@ -9355,7 +9359,6 @@ package android.graphics.drawable { method public void scheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable, long); method public void setAlpha(int); method public void setColorFilter(android.graphics.ColorFilter); - method public void setLayoutDirection(int); method public void unscheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable); field public static final int HORIZONTAL = 1; // 0x1 field public static final int VERTICAL = 2; // 0x2 @@ -9547,7 +9550,6 @@ package android.graphics.drawable { method public boolean setDrawableByLayerId(int, android.graphics.drawable.Drawable); method public void setId(int, int); method public void setLayerInset(int, int, int, int, int); - method public void setLayoutDirection(int); method public void setOpacity(int); method public void unscheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable); } @@ -9641,7 +9643,6 @@ package android.graphics.drawable { public class StateListDrawable extends android.graphics.drawable.DrawableContainer { ctor public StateListDrawable(); method public void addState(int[], android.graphics.drawable.Drawable); - method public void setLayoutDirection(int); } public class TransitionDrawable extends android.graphics.drawable.LayerDrawable implements android.graphics.drawable.Drawable.Callback { @@ -25093,10 +25094,9 @@ package android.view { method protected void onLayout(boolean, int, int, int, int); method protected void onMeasure(int, int); method protected void onOverScrolled(int, int, boolean, boolean); - method public void onPaddingChanged(int); method public void onPopulateAccessibilityEvent(android.view.accessibility.AccessibilityEvent); method protected void onRestoreInstanceState(android.os.Parcelable); - method public void onRtlPropertiesChanged(); + method public void onRtlPropertiesChanged(int); method protected android.os.Parcelable onSaveInstanceState(); method public void onScreenStateChanged(int); method protected void onScrollChanged(int, int, int, int); diff --git a/cmds/installd/commands.c b/cmds/installd/commands.c index 396771f..a276225 100644 --- a/cmds/installd/commands.c +++ b/cmds/installd/commands.c @@ -271,11 +271,11 @@ int clone_persona_data(uid_t src_persona, uid_t target_persona, int copy) return 0; } -int delete_cache(const char *pkgname) +int delete_cache(const char *pkgname, uid_t persona) { char cachedir[PKG_PATH_MAX]; - if (create_pkg_path(cachedir, pkgname, CACHE_DIR_POSTFIX, 0)) + if (create_pkg_path(cachedir, pkgname, CACHE_DIR_POSTFIX, persona)) return -1; /* delete contents, not the directory, no exceptions */ diff --git a/cmds/installd/installd.c b/cmds/installd/installd.c index a099537..19298a3 100644 --- a/cmds/installd/installd.c +++ b/cmds/installd/installd.c @@ -72,7 +72,7 @@ static int do_free_cache(char **arg, char reply[REPLY_MAX]) /* TODO int:free_siz static int do_rm_cache(char **arg, char reply[REPLY_MAX]) { - return delete_cache(arg[0]); /* pkgname */ + return delete_cache(arg[0], atoi(arg[1])); /* pkgname, userid */ } static int do_get_size(char **arg, char reply[REPLY_MAX]) @@ -142,7 +142,7 @@ struct cmdinfo cmds[] = { { "rename", 2, do_rename }, { "fixuid", 3, do_fixuid }, { "freecache", 1, do_free_cache }, - { "rmcache", 1, do_rm_cache }, + { "rmcache", 2, do_rm_cache }, { "getsize", 5, do_get_size }, { "rmuserdata", 2, do_rm_user_data }, { "movefiles", 0, do_movefiles }, diff --git a/cmds/installd/installd.h b/cmds/installd/installd.h index a229b97..2540dbe 100644 --- a/cmds/installd/installd.h +++ b/cmds/installd/installd.h @@ -199,7 +199,7 @@ int delete_user_data(const char *pkgname, uid_t persona); int make_user_data(const char *pkgname, uid_t uid, uid_t persona); int delete_persona(uid_t persona); int clone_persona_data(uid_t src_persona, uid_t target_persona, int copy); -int delete_cache(const char *pkgname); +int delete_cache(const char *pkgname, uid_t persona); int move_dex(const char *src, const char *dst); int rm_dex(const char *path); int protect(char *pkgname, gid_t gid); diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index 6638433..6ef3651 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -3872,14 +3872,20 @@ public final class ActivityThread { final void applyNonDefaultDisplayMetricsToConfigurationLocked( DisplayMetrics dm, Configuration config) { - config.screenLayout = Configuration.SCREENLAYOUT_SIZE_XLARGE - | Configuration.SCREENLAYOUT_LONG_NO; config.touchscreen = Configuration.TOUCHSCREEN_NOTOUCH; - config.orientation = (dm.widthPixels >= dm.heightPixels) ? - Configuration.ORIENTATION_LANDSCAPE : Configuration.ORIENTATION_PORTRAIT; config.densityDpi = dm.densityDpi; config.screenWidthDp = (int)(dm.widthPixels / dm.density); config.screenHeightDp = (int)(dm.heightPixels / dm.density); + int sl = Configuration.resetScreenLayout(config.screenLayout); + if (dm.widthPixels > dm.heightPixels) { + config.orientation = Configuration.ORIENTATION_LANDSCAPE; + config.screenLayout = Configuration.reduceScreenLayout(sl, + config.screenWidthDp, config.screenHeightDp); + } else { + config.orientation = Configuration.ORIENTATION_PORTRAIT; + config.screenLayout = Configuration.reduceScreenLayout(sl, + config.screenHeightDp, config.screenWidthDp); + } config.smallestScreenWidthDp = config.screenWidthDp; // assume screen does not rotate config.compatScreenWidthDp = config.screenWidthDp; config.compatScreenHeightDp = config.screenHeightDp; diff --git a/core/java/android/app/MediaRouteButton.java b/core/java/android/app/MediaRouteButton.java index a9ccef0..3ecafc3 100644 --- a/core/java/android/app/MediaRouteButton.java +++ b/core/java/android/app/MediaRouteButton.java @@ -50,6 +50,7 @@ public class MediaRouteButton extends View { private boolean mRemoteActive; private boolean mToggleMode; private boolean mCheatSheetEnabled; + private boolean mIsConnecting; private int mMinWidth; private int mMinHeight; @@ -57,6 +58,10 @@ public class MediaRouteButton extends View { private OnClickListener mExtendedSettingsClickListener; private MediaRouteChooserDialogFragment mDialogFragment; + private static final int[] CHECKED_STATE_SET = { + R.attr.state_checked + }; + private static final int[] ACTIVATED_STATE_SET = { R.attr.state_activated }; @@ -210,10 +215,21 @@ public class MediaRouteButton extends View { } void updateRemoteIndicator() { - final boolean isRemote = - mRouter.getSelectedRoute(mRouteTypes) != mRouter.getSystemAudioRoute(); + final RouteInfo selected = mRouter.getSelectedRoute(mRouteTypes); + final boolean isRemote = selected != mRouter.getSystemAudioRoute(); + final boolean isConnecting = selected.getStatusCode() == RouteInfo.STATUS_CONNECTING; + + boolean needsRefresh = false; if (mRemoteActive != isRemote) { mRemoteActive = isRemote; + needsRefresh = true; + } + if (mIsConnecting != isConnecting) { + mIsConnecting = isConnecting; + needsRefresh = true; + } + + if (needsRefresh) { refreshDrawableState(); } } @@ -248,7 +264,14 @@ public class MediaRouteButton extends View { @Override protected int[] onCreateDrawableState(int extraSpace) { final int[] drawableState = super.onCreateDrawableState(extraSpace + 1); - if (mRemoteActive) { + + // Technically we should be handling this more completely, but these + // are implementation details here. Checked is used to express the connecting + // drawable state and it's mutually exclusive with activated for the purposes + // of state selection here. + if (mIsConnecting) { + mergeDrawableStates(drawableState, CHECKED_STATE_SET); + } else if (mRemoteActive) { mergeDrawableStates(drawableState, ACTIVATED_STATE_SET); } return drawableState; @@ -426,6 +449,11 @@ public class MediaRouteButton extends View { } @Override + public void onRouteChanged(MediaRouter router, RouteInfo info) { + updateRemoteIndicator(); + } + + @Override public void onRouteAdded(MediaRouter router, RouteInfo info) { updateRouteCount(); } diff --git a/core/java/android/app/PendingIntent.java b/core/java/android/app/PendingIntent.java index 9d57467..d36d99d 100644 --- a/core/java/android/app/PendingIntent.java +++ b/core/java/android/app/PendingIntent.java @@ -395,6 +395,31 @@ public final class PendingIntent implements Parcelable { } /** + * @hide + * Note that UserHandle.CURRENT will be interpreted at the time the + * activity is started, not when the pending intent is created. + */ + public static PendingIntent getActivitiesAsUser(Context context, int requestCode, + Intent[] intents, int flags, Bundle options, UserHandle user) { + String packageName = context.getPackageName(); + String[] resolvedTypes = new String[intents.length]; + for (int i=0; i<intents.length; i++) { + intents[i].setAllowFds(false); + resolvedTypes[i] = intents[i].resolveTypeIfNeeded(context.getContentResolver()); + } + try { + IIntentSender target = + ActivityManagerNative.getDefault().getIntentSender( + ActivityManager.INTENT_SENDER_ACTIVITY, packageName, + null, null, requestCode, intents, resolvedTypes, + flags, options, user.getIdentifier()); + return target != null ? new PendingIntent(target) : null; + } catch (RemoteException e) { + } + return null; + } + + /** * Retrieve a PendingIntent that will perform a broadcast, like calling * {@link Context#sendBroadcast(Intent) Context.sendBroadcast()}. * diff --git a/core/java/android/app/TaskStackBuilder.java b/core/java/android/app/TaskStackBuilder.java index 9d5bcc6..3e0ac7e 100644 --- a/core/java/android/app/TaskStackBuilder.java +++ b/core/java/android/app/TaskStackBuilder.java @@ -274,6 +274,20 @@ public class TaskStackBuilder { } /** + * @hide + */ + public PendingIntent getPendingIntent(int requestCode, int flags, Bundle options, + UserHandle user) { + if (mIntents.isEmpty()) { + throw new IllegalStateException( + "No intents added to TaskStackBuilder; cannot getPendingIntent"); + } + + return PendingIntent.getActivitiesAsUser(mSourceContext, requestCode, getIntents(), flags, + options, user); + } + + /** * Return an array containing the intents added to this builder. The intent at the * root of the task stack will appear as the first item in the array and the * intent at the top of the stack will appear as the last item. diff --git a/core/java/android/appwidget/AppWidgetProviderInfo.java b/core/java/android/appwidget/AppWidgetProviderInfo.java index 5074480..8b62931 100644 --- a/core/java/android/appwidget/AppWidgetProviderInfo.java +++ b/core/java/android/appwidget/AppWidgetProviderInfo.java @@ -59,17 +59,11 @@ public class AppWidgetProviderInfo implements Parcelable { public static final int WIDGET_FEATURES_NONE = 0; /** - * Indicates that the widget displays the current time. The host may use this as a hint to not - * display the time in other places. - */ - public static final int WIDGET_FEATURES_CLOCK = 1; - - /** * Indicates that the widget is output only, ie. has nothing clickable. This may be enforced by * the host. Presently, this flag is used by the keyguard to indicate that it can be placed * in the first position. */ - public static final int WIDGET_FEATURES_STATUS = 2; + public static final int WIDGET_FEATURES_STATUS = 1; /** * Identity of this AppWidget component. This component should be a {@link @@ -215,8 +209,7 @@ public class AppWidgetProviderInfo implements Parcelable { /** * A field which specifies any special features that this widget supports. See - * {@link #WIDGET_FEATURES_NONE}, {@link #WIDGET_FEATURES_CLOCK}, - * {@link #WIDGET_FEATURES_STATUS}. + * {@link #WIDGET_FEATURES_NONE}, {@link #WIDGET_FEATURES_STATUS}. * * <p>This field corresponds to the <code>widgetFeatures</code> attribute in * the AppWidget meta-data file. diff --git a/core/java/android/content/res/Configuration.java b/core/java/android/content/res/Configuration.java index 51b8d25..86d6ee7 100644 --- a/core/java/android/content/res/Configuration.java +++ b/core/java/android/content/res/Configuration.java @@ -172,7 +172,77 @@ public final class Configuration implements Parcelable, Comparable<Configuration * Multiple Screens</a> for more information. */ public int screenLayout; - + + /** @hide */ + static public int resetScreenLayout(int curLayout) { + return (curLayout&~(SCREENLAYOUT_LONG_MASK | SCREENLAYOUT_SIZE_MASK + | SCREENLAYOUT_COMPAT_NEEDED)) + | (SCREENLAYOUT_LONG_YES | SCREENLAYOUT_SIZE_XLARGE); + } + + /** @hide */ + static public int reduceScreenLayout(int curLayout, int longSizeDp, int shortSizeDp) { + int screenLayoutSize; + boolean screenLayoutLong; + boolean screenLayoutCompatNeeded; + + // These semi-magic numbers define our compatibility modes for + // applications with different screens. These are guarantees to + // app developers about the space they can expect for a particular + // configuration. DO NOT CHANGE! + if (longSizeDp < 470) { + // This is shorter than an HVGA normal density screen (which + // is 480 pixels on its long side). + screenLayoutSize = SCREENLAYOUT_SIZE_SMALL; + screenLayoutLong = false; + screenLayoutCompatNeeded = false; + } else { + // What size is this screen screen? + if (longSizeDp >= 960 && shortSizeDp >= 720) { + // 1.5xVGA or larger screens at medium density are the point + // at which we consider it to be an extra large screen. + screenLayoutSize = SCREENLAYOUT_SIZE_XLARGE; + } else if (longSizeDp >= 640 && shortSizeDp >= 480) { + // VGA or larger screens at medium density are the point + // at which we consider it to be a large screen. + screenLayoutSize = SCREENLAYOUT_SIZE_LARGE; + } else { + screenLayoutSize = SCREENLAYOUT_SIZE_NORMAL; + } + + // If this screen is wider than normal HVGA, or taller + // than FWVGA, then for old apps we want to run in size + // compatibility mode. + if (shortSizeDp > 321 || longSizeDp > 570) { + screenLayoutCompatNeeded = true; + } else { + screenLayoutCompatNeeded = false; + } + + // Is this a long screen? + if (((longSizeDp*3)/5) >= (shortSizeDp-1)) { + // Anything wider than WVGA (5:3) is considering to be long. + screenLayoutLong = true; + } else { + screenLayoutLong = false; + } + } + + // Now reduce the last screenLayout to not be better than what we + // have found. + if (!screenLayoutLong) { + curLayout = (curLayout&~SCREENLAYOUT_LONG_MASK) | SCREENLAYOUT_LONG_NO; + } + if (screenLayoutCompatNeeded) { + curLayout |= Configuration.SCREENLAYOUT_COMPAT_NEEDED; + } + int curSize = curLayout&SCREENLAYOUT_SIZE_MASK; + if (screenLayoutSize < curSize) { + curLayout = (curLayout&~SCREENLAYOUT_SIZE_MASK) | screenLayoutSize; + } + return curLayout; + } + /** * Check if the Configuration's current {@link #screenLayout} is at * least the given size. diff --git a/core/java/android/content/res/Resources.java b/core/java/android/content/res/Resources.java index 492e5e9..b316f23 100755 --- a/core/java/android/content/res/Resources.java +++ b/core/java/android/content/res/Resources.java @@ -1554,8 +1554,6 @@ public class Resources { public static void updateSystemConfiguration(Configuration config, DisplayMetrics metrics, CompatibilityInfo compat) { if (mSystem != null) { - // TODO: Remove once b/7094175 is fixed - Slog.v(TAG, "updateSystemConfiguration: b/7094175 config=" + config); mSystem.updateConfiguration(config, metrics, compat); //Log.i(TAG, "Updated system resources " + mSystem // + ": " + mSystem.getConfiguration()); diff --git a/core/java/android/os/Build.java b/core/java/android/os/Build.java index 8860e0a..a7f39d5 100644 --- a/core/java/android/os/Build.java +++ b/core/java/android/os/Build.java @@ -413,7 +413,7 @@ public class Build { public static final int JELLY_BEAN = 16; /** - * Moar jelly beans! + * Android 4.2: Moar jelly beans! * * <p>Applications targeting this or a later release will get these * new changes in behavior:</p> @@ -422,6 +422,12 @@ public class Build { * {@code false}. See * <a href="{@docRoot}guide/topics/manifest/provider-element.html#exported"> * the android:exported section</a> in the provider documentation for more details.</li> + * <li>{@link android.view.View#getLayoutDirection() View.getLayoutDirection()} + * can return different values than {@link android.view.View#LAYOUT_DIRECTION_LTR} + * based on the locale etc. + * <li> {@link android.webkit.WebView#addJavascriptInterface(Object, String) + * WebView.addJavascriptInterface} requires explicit annotations on methods + * for them to be accessible from Javascript. * </ul> */ public static final int JELLY_BEAN_MR1 = 17; diff --git a/core/java/android/os/IPowerManager.aidl b/core/java/android/os/IPowerManager.aidl index 8bfefd4..557d3f3 100644 --- a/core/java/android/os/IPowerManager.aidl +++ b/core/java/android/os/IPowerManager.aidl @@ -40,8 +40,6 @@ interface IPowerManager void reboot(String reason); void crash(String message); - void clearUserActivityTimeout(long now, long timeout); - void setPokeLock(int pokey, IBinder lock, String tag); void setStayOnSetting(int val); void setMaximumScreenOffTimeoutFromDeviceAdmin(int timeMs); diff --git a/core/java/android/os/LocalPowerManager.java b/core/java/android/os/LocalPowerManager.java deleted file mode 100644 index 519315c..0000000 --- a/core/java/android/os/LocalPowerManager.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright (C) 2007 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.os; - -/** @hide */ -public interface LocalPowerManager { - // FIXME: Replace poke locks with something else. - - public static final int POKE_LOCK_IGNORE_TOUCH_EVENTS = 0x1; - - public static final int POKE_LOCK_SHORT_TIMEOUT = 0x2; - public static final int POKE_LOCK_MEDIUM_TIMEOUT = 0x4; - public static final int POKE_LOCK_TIMEOUT_MASK = 0x6; -} diff --git a/core/java/android/os/PowerManager.java b/core/java/android/os/PowerManager.java index 58372f4..ae50ddb 100644 --- a/core/java/android/os/PowerManager.java +++ b/core/java/android/os/PowerManager.java @@ -340,6 +340,15 @@ public final class PowerManager { } /** + * Returns true if the twilight service should be used to adjust screen brightness + * policy. This setting is experimental and disabled by default. + * @hide + */ + public static boolean useTwilightAdjustmentFeature() { + return SystemProperties.getBoolean("persist.power.usetwilightadj", false); + } + + /** * Creates a new wake lock with the specified level and flags. * <p> * The {@code levelAndFlags} parameter specifies a wake lock level and optional flags diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index 8825f58..8f1210b 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -3078,30 +3078,6 @@ public final class Settings { public static final String BLUETOOTH_ON = Global.BLUETOOTH_ON; /** - * Get the key that retrieves a bluetooth headset's priority. - * @hide - */ - public static final String getBluetoothHeadsetPriorityKey(String address) { - return ("bluetooth_headset_priority_" + address.toUpperCase()); - } - - /** - * Get the key that retrieves a bluetooth a2dp sink's priority. - * @hide - */ - public static final String getBluetoothA2dpSinkPriorityKey(String address) { - return ("bluetooth_a2dp_sink_priority_" + address.toUpperCase()); - } - - /** - * Get the key that retrieves a bluetooth Input Device's priority. - * @hide - */ - public static final String getBluetoothInputDevicePriorityKey(String address) { - return ("bluetooth_input_device_priority_" + address.toUpperCase()); - } - - /** * @deprecated Use {@link android.provider.Settings.Global#DATA_ROAMING} instead */ @Deprecated @@ -5160,6 +5136,40 @@ public final class Settings { */ public static final String DEFAULT_DNS_SERVER = "default_dns_server"; + /** {@hide} */ + public static final String + BLUETOOTH_HEADSET_PRIORITY_PREFIX = "bluetooth_headset_priority_"; + /** {@hide} */ + public static final String + BLUETOOTH_A2DP_SINK_PRIORITY_PREFIX = "bluetooth_a2dp_sink_priority_"; + /** {@hide} */ + public static final String + BLUETOOTH_INPUT_DEVICE_PRIORITY_PREFIX = "bluetooth_input_device_priority_"; + + /** + * Get the key that retrieves a bluetooth headset's priority. + * @hide + */ + public static final String getBluetoothHeadsetPriorityKey(String address) { + return BLUETOOTH_HEADSET_PRIORITY_PREFIX + address.toUpperCase(); + } + + /** + * Get the key that retrieves a bluetooth a2dp sink's priority. + * @hide + */ + public static final String getBluetoothA2dpSinkPriorityKey(String address) { + return BLUETOOTH_A2DP_SINK_PRIORITY_PREFIX + address.toUpperCase(); + } + + /** + * Get the key that retrieves a bluetooth Input Device's priority. + * @hide + */ + public static final String getBluetoothInputDevicePriorityKey(String address) { + return BLUETOOTH_INPUT_DEVICE_PRIORITY_PREFIX + address.toUpperCase(); + } + // Populated lazily, guarded by class object: private static NameValueCache sNameValueCache = new NameValueCache( SYS_PROP_SETTING_VERSION, diff --git a/core/java/android/view/DisplayList.java b/core/java/android/view/DisplayList.java index a42e156..5e34a36 100644 --- a/core/java/android/view/DisplayList.java +++ b/core/java/android/view/DisplayList.java @@ -332,4 +332,11 @@ public abstract class DisplayList { * @see View#offsetTopAndBottom(int) */ public abstract void offsetTopBottom(int offset); + + /** + * Reset native resources. This is called when cleaning up the state of DisplayLists + * during destruction of hardware resources, to ensure that we do not hold onto + * obsolete resources after related resources are gone. + */ + public abstract void reset(); } diff --git a/core/java/android/view/GLES20DisplayList.java b/core/java/android/view/GLES20DisplayList.java index 3bdd5c0..e9bd0c4 100644 --- a/core/java/android/view/GLES20DisplayList.java +++ b/core/java/android/view/GLES20DisplayList.java @@ -87,6 +87,13 @@ class GLES20DisplayList extends DisplayList { } @Override + public void reset() { + if (hasNativeDisplayList()) { + nReset(mFinalizer.mNativeDisplayList); + } + } + + @Override public boolean isValid() { return mValid; } @@ -294,6 +301,7 @@ class GLES20DisplayList extends DisplayList { } } + private static native void nReset(int displayList); private static native void nOffsetTopBottom(int displayList, int offset); private static native void nOffsetLeftRight(int displayList, int offset); private static native void nSetLeftTopRightBottom(int displayList, int left, int top, diff --git a/core/java/android/view/HardwareRenderer.java b/core/java/android/view/HardwareRenderer.java index 28763b3..99987bf 100644 --- a/core/java/android/view/HardwareRenderer.java +++ b/core/java/android/view/HardwareRenderer.java @@ -1508,6 +1508,9 @@ public abstract class HardwareRenderer { @Override void destroyLayers(View view) { if (view != null && isEnabled() && checkCurrent() != SURFACE_STATE_ERROR) { + if (mCanvas != null) { + mCanvas.clearLayerUpdates(); + } destroyHardwareLayer(view); GLES20Canvas.flushCaches(GLES20Canvas.FLUSH_CACHES_LAYERS); } @@ -1556,6 +1559,9 @@ public abstract class HardwareRenderer { safelyRun(new Runnable() { @Override public void run() { + if (mCanvas != null) { + mCanvas.clearLayerUpdates(); + } destroyResources(view); GLES20Canvas.flushCaches(GLES20Canvas.FLUSH_CACHES_LAYERS); } diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index 1c12738..63ec577 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -2881,14 +2881,14 @@ public class View implements Drawable.Callback, KeyEvent.Callback, * * @hide */ - int mUserPaddingLeftInitial = UNDEFINED_PADDING; + int mUserPaddingLeftInitial = 0; /** * Cache initial right padding. * * @hide */ - int mUserPaddingRightInitial = UNDEFINED_PADDING; + int mUserPaddingRightInitial = 0; /** * Default undefined padding @@ -3643,26 +3643,41 @@ public class View implements Drawable.Callback, KeyEvent.Callback, mUserPaddingRightInitial = padding; } - // RTL compatibility mode: pre Jelly Bean MR1 case OR no RTL support case. - // left / right padding are used if defined (meaning here nothing to do). If they are not - // defined and start / end padding are defined (e.g. in Frameworks resources), then we use - // start / end and resolve them as left / right (layout direction is not taken into account). if (isRtlCompatibilityMode()) { + // RTL compatibility mode: pre Jelly Bean MR1 case OR no RTL support case. + // left / right padding are used if defined (meaning here nothing to do). If they are not + // defined and start / end padding are defined (e.g. in Frameworks resources), then we use + // start / end and resolve them as left / right (layout direction is not taken into account). + // Padding from the background drawable is stored at this point in mUserPaddingLeftInitial + // and mUserPaddingRightInitial) so drawable padding will be used as ultimate default if + // defined. if (!leftPaddingDefined && startPaddingDefined) { leftPadding = startPadding; } + mUserPaddingLeftInitial = (leftPadding >= 0) ? leftPadding : mUserPaddingLeftInitial; if (!rightPaddingDefined && endPaddingDefined) { rightPadding = endPadding; } + mUserPaddingRightInitial = (rightPadding >= 0) ? rightPadding : mUserPaddingRightInitial; + } else { + // Jelly Bean MR1 and after case: if start/end defined, they will override any left/right + // values defined. Otherwise, left /right values are used. + // Padding from the background drawable is stored at this point in mUserPaddingLeftInitial + // and mUserPaddingRightInitial) so drawable padding will be used as ultimate default if + // defined. + if (startPaddingDefined) { + mUserPaddingLeftInitial = startPadding; + } else if (leftPaddingDefined) { + mUserPaddingLeftInitial = leftPadding; + } + if (endPaddingDefined) { + mUserPaddingRightInitial = endPadding; + } + else if (rightPaddingDefined) { + mUserPaddingRightInitial = rightPadding; + } } - // If the user specified the padding (either with android:padding or - // android:paddingLeft/Top/Right/Bottom), use this padding, otherwise - // use the default padding or the padding from the background drawable - // (stored at this point in mPadding*). Padding resolution will happen later if - // RTL is supported. - mUserPaddingLeftInitial = leftPadding >= 0 ? leftPadding : mPaddingLeft; - mUserPaddingRightInitial = rightPadding >= 0 ? rightPadding : mPaddingRight; internalSetPadding( mUserPaddingLeftInitial, topPadding >= 0 ? topPadding : mPaddingTop, @@ -11560,7 +11575,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, } requestLayout(); invalidate(true); - onRtlPropertiesChanged(); + onRtlPropertiesChanged(getLayoutDirection()); } // Reset resolution of all RTL related properties. @@ -11622,8 +11637,13 @@ public class View implements Drawable.Callback, KeyEvent.Callback, * resolved layout direction, or to inform child views that inherit their layout direction. * * The default implementation does nothing. + * + * @param layoutDirection the direction of the layout + * + * @see #LAYOUT_DIRECTION_LTR + * @see #LAYOUT_DIRECTION_RTL */ - public void onRtlPropertiesChanged() { + public void onRtlPropertiesChanged(int layoutDirection) { } /** @@ -11740,10 +11760,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, // If start / end padding are not defined, use the left / right ones. int resolvedLayoutDirection = getLayoutDirection(); // Set user padding to initial values ... - mUserPaddingLeft = (mUserPaddingLeftInitial == UNDEFINED_PADDING) ? - 0 : mUserPaddingLeftInitial; - mUserPaddingRight = (mUserPaddingRightInitial == UNDEFINED_PADDING) ? - 0 : mUserPaddingRightInitial; + mUserPaddingLeft = mUserPaddingLeftInitial; + mUserPaddingRight = mUserPaddingRightInitial; // ... then resolve it. switch (resolvedLayoutDirection) { case LAYOUT_DIRECTION_RTL: @@ -11768,7 +11786,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, internalSetPadding(mUserPaddingLeft, mPaddingTop, mUserPaddingRight, mUserPaddingBottom); - onPaddingChanged(resolvedLayoutDirection); + onRtlPropertiesChanged(resolvedLayoutDirection); } mPrivateFlags2 |= PFLAG2_PADDING_RESOLVED; @@ -11784,19 +11802,6 @@ public class View implements Drawable.Callback, KeyEvent.Callback, } /** - * Resolve padding depending on the layout direction. Subclasses that care about - * padding resolution should override this method. The default implementation does - * nothing. - * - * @param layoutDirection the direction of the layout - * - * @see #LAYOUT_DIRECTION_LTR - * @see #LAYOUT_DIRECTION_RTL - */ - public void onPaddingChanged(int layoutDirection) { - } - - /** * This is called when the view is detached from a window. At this point it * no longer has a surface for drawing. * @@ -11827,7 +11832,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, mCurrentAnimation = null; resetRtlProperties(); - onRtlPropertiesChanged(); + onRtlPropertiesChanged(LAYOUT_DIRECTION_DEFAULT); resetAccessibilityStateChanged(); } @@ -12402,6 +12407,9 @@ public class View implements Drawable.Callback, KeyEvent.Callback, mHardwareLayer.destroy(); mHardwareLayer = null; + if (mDisplayList != null) { + mDisplayList.reset(); + } invalidate(true); invalidateParentCaches(); } @@ -12819,8 +12827,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, final boolean opaque = drawingCacheBackgroundColor != 0 || isOpaque(); final boolean use32BitCache = attachInfo != null && attachInfo.mUse32BitDrawingCache; - final int projectedBitmapSize = width * height * (opaque && !use32BitCache ? 2 : 4); - final int drawingCacheSize = + final long projectedBitmapSize = width * height * (opaque && !use32BitCache ? 2 : 4); + final long drawingCacheSize = ViewConfiguration.get(mContext).getScaledMaximumDrawingCacheSize(); if (width <= 0 || height <= 0 || projectedBitmapSize > drawingCacheSize) { if (width > 0 && height > 0) { @@ -14786,6 +14794,24 @@ public class View implements Drawable.Callback, KeyEvent.Callback, /** * @hide */ + public void resetPaddingToInitialValues() { + if (isRtlCompatibilityMode()) { + mPaddingLeft = mUserPaddingLeftInitial; + mPaddingRight = mUserPaddingRightInitial; + } else { + if (isLayoutRtl()) { + mPaddingLeft = mUserPaddingRightInitial; + mPaddingRight = mUserPaddingLeftInitial; + } else { + mPaddingLeft = mUserPaddingLeftInitial; + mPaddingRight = mUserPaddingRightInitial; + } + } + } + + /** + * @hide + */ public Insets getOpticalInsets() { if (mLayoutInsets == null) { mLayoutInsets = (mBackground == null) ? Insets.NONE : mBackground.getLayoutInsets(); @@ -16618,7 +16644,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, // Do resolution resolveTextDirection(); // Notify change - onRtlPropertiesChanged(); + onRtlPropertiesChanged(getLayoutDirection()); // Refresh requestLayout(); invalidate(true); @@ -16812,7 +16838,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, // Do resolution resolveTextAlignment(); // Notify change - onRtlPropertiesChanged(); + onRtlPropertiesChanged(getLayoutDirection()); // Refresh requestLayout(); invalidate(true); @@ -17208,7 +17234,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, * @return the measure specification based on size and mode */ public static int makeMeasureSpec(int size, int mode) { - return (size & ~MODE_MASK) | (mode & MODE_MASK); + return size + mode; } /** diff --git a/core/java/android/view/WindowManager.java b/core/java/android/view/WindowManager.java index fa2d4e8..6e51270 100644 --- a/core/java/android/view/WindowManager.java +++ b/core/java/android/view/WindowManager.java @@ -1176,14 +1176,42 @@ public interface WindowManager extends ViewManager { public static final int INPUT_FEATURE_NO_INPUT_CHANNEL = 0x00000002; /** + * When this window has focus, does not call user activity for all input events so + * the application will have to do it itself. Should only be used by + * the keyguard and phone app. + * <p> + * Should only be used by the keyguard and phone app. + * </p> + * + * @hide + */ + public static final int INPUT_FEATURE_DISABLE_USER_ACTIVITY = 0x00000004; + + /** * Control special features of the input subsystem. * * @see #INPUT_FEATURE_DISABLE_TOUCH_PAD_GESTURES * @see #INPUT_FEATURE_NO_INPUT_CHANNEL + * @see #INPUT_FEATURE_DISABLE_USER_ACTIVITY * @hide */ public int inputFeatures; + /** + * Sets the number of milliseconds before the user activity timeout occurs + * when this window has focus. A value of -1 uses the standard timeout. + * A value of 0 uses the minimum support display timeout. + * <p> + * This property can only be used to reduce the user specified display timeout; + * it can never make the timeout longer than it normally would be. + * </p><p> + * Should only be used by the keyguard and phone app. + * </p> + * + * @hide + */ + public long userActivityTimeout = -1; + public LayoutParams() { super(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); type = TYPE_APPLICATION; @@ -1268,6 +1296,7 @@ public interface WindowManager extends ViewManager { out.writeInt(subtreeSystemUiVisibility); out.writeInt(hasSystemUiListeners ? 1 : 0); out.writeInt(inputFeatures); + out.writeLong(userActivityTimeout); } public static final Parcelable.Creator<LayoutParams> CREATOR @@ -1308,6 +1337,7 @@ public interface WindowManager extends ViewManager { subtreeSystemUiVisibility = in.readInt(); hasSystemUiListeners = in.readInt() != 0; inputFeatures = in.readInt(); + userActivityTimeout = in.readLong(); } @SuppressWarnings({"PointlessBitwiseExpression"}) @@ -1334,6 +1364,8 @@ public interface WindowManager extends ViewManager { /** {@hide} */ public static final int PRIVATE_FLAGS_CHANGED = 1<<16; /** {@hide} */ + public static final int USER_ACTIVITY_TIMEOUT_CHANGED = 1<<17; + /** {@hide} */ public static final int EVERYTHING_CHANGED = 0xffffffff; // internal buffer to backup/restore parameters under compatibility mode. @@ -1455,6 +1487,11 @@ public interface WindowManager extends ViewManager { changes |= INPUT_FEATURES_CHANGED; } + if (userActivityTimeout != o.userActivityTimeout) { + userActivityTimeout = o.userActivityTimeout; + changes |= USER_ACTIVITY_TIMEOUT_CHANGED; + } + return changes; } @@ -1547,6 +1584,9 @@ public interface WindowManager extends ViewManager { if (inputFeatures != 0) { sb.append(" if=0x").append(Integer.toHexString(inputFeatures)); } + if (userActivityTimeout >= 0) { + sb.append(" userActivityTimeout=").append(userActivityTimeout); + } sb.append('}'); return sb.toString(); } diff --git a/core/java/android/widget/CheckedTextView.java b/core/java/android/widget/CheckedTextView.java index cea1fd5..e74e37c 100644 --- a/core/java/android/widget/CheckedTextView.java +++ b/core/java/android/widget/CheckedTextView.java @@ -46,9 +46,6 @@ public class CheckedTextView extends TextView implements Checkable { private int mCheckMarkWidth; private boolean mNeedRequestlayout; - private int initialPaddingLeft = -1; - private int initialPaddingRight = -1; - private static final int[] CHECKED_STATE_SET = { R.attr.state_checked }; @@ -58,7 +55,7 @@ public class CheckedTextView extends TextView implements Checkable { } public CheckedTextView(Context context, AttributeSet attrs) { - this(context, attrs, 0); + this(context, attrs, R.attr.checkedTextViewStyle); } public CheckedTextView(Context context, AttributeSet attrs, int defStyle) { @@ -104,7 +101,7 @@ public class CheckedTextView extends TextView implements Checkable { /** * Set the checkmark to a given Drawable, identified by its resourece id. This will be drawn * when {@link #isChecked()} is true. - * + * * @param resid The Drawable to use for the checkmark. * * @see #setCheckMarkDrawable(Drawable) @@ -147,7 +144,7 @@ public class CheckedTextView extends TextView implements Checkable { d.setVisible(getVisibility() == VISIBLE, false); d.setState(CHECKED_STATE_SET); setMinHeight(d.getIntrinsicHeight()); - + mCheckMarkWidth = d.getIntrinsicWidth(); d.setState(getDrawableState()); } else { @@ -179,22 +176,16 @@ public class CheckedTextView extends TextView implements Checkable { protected void internalSetPadding(int left, int top, int right, int bottom) { super.internalSetPadding(left, top, right, bottom); setBasePadding(isLayoutRtl()); - initialPaddingLeft = mPaddingLeft; - initialPaddingRight = mPaddingRight; - } - - @Override - public void onPaddingChanged(int layoutDirection) { - updatePadding(); } @Override - public void onRtlPropertiesChanged() { - super.onRtlPropertiesChanged(); + public void onRtlPropertiesChanged(int layoutDirection) { + super.onRtlPropertiesChanged(layoutDirection); updatePadding(); } private void updatePadding() { + resetPaddingToInitialValues(); int newPadding = (mCheckMarkDrawable != null) ? mCheckMarkWidth + mBasePadding : mBasePadding; mNeedRequestlayout |= (mPaddingRight != newPadding); diff --git a/core/java/android/widget/ImageView.java b/core/java/android/widget/ImageView.java index 1d465ce..87396fb 100644 --- a/core/java/android/widget/ImageView.java +++ b/core/java/android/widget/ImageView.java @@ -789,12 +789,6 @@ public class ImageView extends View { if (resizeWidth) { int newWidth = (int)(desiredAspect * (heightSize - ptop - pbottom)) + pleft + pright; - - // Allow the width to outgrow its original estimate if height is fixed. - if (!resizeHeight) { - widthSize = resolveAdjustedSize(newWidth, mMaxWidth, widthMeasureSpec); - } - if (newWidth <= widthSize) { widthSize = newWidth; done = true; @@ -805,13 +799,6 @@ public class ImageView extends View { if (!done && resizeHeight) { int newHeight = (int)((widthSize - pleft - pright) / desiredAspect) + ptop + pbottom; - - // Allow the height to outgrow its original estimate if width is fixed. - if (!resizeWidth) { - heightSize = resolveAdjustedSize(newHeight, mMaxHeight, - heightMeasureSpec); - } - if (newHeight <= heightSize) { heightSize = newHeight; } diff --git a/core/java/android/widget/SearchView.java b/core/java/android/widget/SearchView.java index c838973..cd8638d 100644 --- a/core/java/android/widget/SearchView.java +++ b/core/java/android/widget/SearchView.java @@ -1354,8 +1354,8 @@ public class SearchView extends LinearLayout implements CollapsibleActionView { }; @Override - public void onRtlPropertiesChanged() { - mQueryTextView.setLayoutDirection(getLayoutDirection()); + public void onRtlPropertiesChanged(int layoutDirection) { + mQueryTextView.setLayoutDirection(layoutDirection); } /** diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java index 2937166..410a0ca 100644 --- a/core/java/android/widget/TextView.java +++ b/core/java/android/widget/TextView.java @@ -5635,7 +5635,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener } @Override - public void onRtlPropertiesChanged() { + public void onRtlPropertiesChanged(int layoutDirection) { if (mLayoutAlignment != null) { if (mResolvedTextAlignment == TEXT_ALIGNMENT_VIEW_START || mResolvedTextAlignment == TEXT_ALIGNMENT_VIEW_END) { diff --git a/core/java/com/android/internal/statusbar/IStatusBarService.aidl b/core/java/com/android/internal/statusbar/IStatusBarService.aidl index 600c27a..04e5bc9 100644 --- a/core/java/com/android/internal/statusbar/IStatusBarService.aidl +++ b/core/java/com/android/internal/statusbar/IStatusBarService.aidl @@ -33,6 +33,7 @@ interface IStatusBarService void topAppWindowChanged(boolean menuVisible); void setImeWindowStatus(in IBinder token, int vis, int backDisposition); void expandSettingsPanel(); + void setCurrentUser(int newUserId); // ---- Methods below are for use by the status bar policy services ---- // You need the STATUS_BAR_SERVICE permission diff --git a/core/java/com/android/internal/widget/ActionBarView.java b/core/java/com/android/internal/widget/ActionBarView.java index 4715750..991c699 100644 --- a/core/java/com/android/internal/widget/ActionBarView.java +++ b/core/java/com/android/internal/widget/ActionBarView.java @@ -556,12 +556,16 @@ public class ActionBarView extends AbsActionBarView { // Make sure the home button has an accurate content description for accessibility. if (!enable) { mHomeLayout.setContentDescription(null); - } else if ((mDisplayOptions & ActionBar.DISPLAY_HOME_AS_UP) != 0) { - mHomeLayout.setContentDescription(mContext.getResources().getText( - R.string.action_bar_up_description)); + mHomeLayout.setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_NO); } else { - mHomeLayout.setContentDescription(mContext.getResources().getText( - R.string.action_bar_home_description)); + mHomeLayout.setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_AUTO); + if ((mDisplayOptions & ActionBar.DISPLAY_HOME_AS_UP) != 0) { + mHomeLayout.setContentDescription(mContext.getResources().getText( + R.string.action_bar_up_description)); + } else { + mHomeLayout.setContentDescription(mContext.getResources().getText( + R.string.action_bar_home_description)); + } } } @@ -624,12 +628,16 @@ public class ActionBarView extends AbsActionBarView { // Make sure the home button has an accurate content description for accessibility. if (!mHomeLayout.isEnabled()) { mHomeLayout.setContentDescription(null); - } else if ((options & ActionBar.DISPLAY_HOME_AS_UP) != 0) { - mHomeLayout.setContentDescription(mContext.getResources().getText( - R.string.action_bar_up_description)); + mHomeLayout.setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_NO); } else { - mHomeLayout.setContentDescription(mContext.getResources().getText( - R.string.action_bar_home_description)); + mHomeLayout.setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_AUTO); + if ((options & ActionBar.DISPLAY_HOME_AS_UP) != 0) { + mHomeLayout.setContentDescription(mContext.getResources().getText( + R.string.action_bar_up_description)); + } else { + mHomeLayout.setContentDescription(mContext.getResources().getText( + R.string.action_bar_home_description)); + } } } diff --git a/core/jni/AndroidRuntime.cpp b/core/jni/AndroidRuntime.cpp index 48fe7fa..9820e60 100644 --- a/core/jni/AndroidRuntime.cpp +++ b/core/jni/AndroidRuntime.cpp @@ -574,7 +574,7 @@ int AndroidRuntime::startVm(JavaVM** pJavaVM, JNIEnv** pEnv) strcpy(heaptargetutilizationOptsBuf, "-XX:HeapTargetUtilization="); property_get("dalvik.vm.heaptargetutilization", heaptargetutilizationOptsBuf+26, ""); - if (heapmaxfreeOptsBuf[26] != '\0') { + if (heaptargetutilizationOptsBuf[26] != '\0') { opt.optionString = heaptargetutilizationOptsBuf; mOptions.add(opt); } diff --git a/core/jni/android/graphics/Canvas.cpp b/core/jni/android/graphics/Canvas.cpp index 5c27602..2a02f7c 100644 --- a/core/jni/android/graphics/Canvas.cpp +++ b/core/jni/android/graphics/Canvas.cpp @@ -931,6 +931,9 @@ static void doDrawTextDecorations(SkCanvas* canvas, jfloat x, jfloat y, jfloat l SkIRect ir; bool result = canvas->getClipBounds(&r, SkCanvas::kBW_EdgeType); + if (!result) { + r.setEmpty(); + } r.round(&ir); (void)GraphicsJNI::irect_to_jrect(ir, env, bounds); return result; diff --git a/core/jni/android_view_GLES20DisplayList.cpp b/core/jni/android_view_GLES20DisplayList.cpp index b307a2f..c5f52df 100644 --- a/core/jni/android_view_GLES20DisplayList.cpp +++ b/core/jni/android_view_GLES20DisplayList.cpp @@ -36,6 +36,11 @@ using namespace uirenderer; */ #ifdef USE_OPENGL_RENDERER +static void android_view_GLES20DisplayList_reset(JNIEnv* env, + jobject clazz, DisplayList* displayList) { + displayList->reset(); +} + // ---------------------------------------------------------------------------- // DisplayList view properties // ---------------------------------------------------------------------------- @@ -185,6 +190,7 @@ const char* const kClassPathName = "android/view/GLES20DisplayList"; static JNINativeMethod gMethods[] = { #ifdef USE_OPENGL_RENDERER + { "nReset", "(I)V", (void*) android_view_GLES20DisplayList_reset }, { "nSetCaching", "(IZ)V", (void*) android_view_GLES20DisplayList_setCaching }, { "nSetStaticMatrix", "(II)V", (void*) android_view_GLES20DisplayList_setStaticMatrix }, { "nSetAnimationMatrix", "(II)V", (void*) android_view_GLES20DisplayList_setAnimationMatrix }, diff --git a/core/res/res/drawable-hdpi/ic_media_route_on_0_holo_dark.png b/core/res/res/drawable-hdpi/ic_media_route_on_0_holo_dark.png Binary files differnew file mode 100644 index 0000000..10fc8da --- /dev/null +++ b/core/res/res/drawable-hdpi/ic_media_route_on_0_holo_dark.png diff --git a/core/res/res/drawable-hdpi/ic_media_route_on_0_holo_light.png b/core/res/res/drawable-hdpi/ic_media_route_on_0_holo_light.png Binary files differnew file mode 100644 index 0000000..a0e5060 --- /dev/null +++ b/core/res/res/drawable-hdpi/ic_media_route_on_0_holo_light.png diff --git a/core/res/res/drawable-hdpi/ic_media_route_on_1_holo_dark.png b/core/res/res/drawable-hdpi/ic_media_route_on_1_holo_dark.png Binary files differnew file mode 100644 index 0000000..8364a36 --- /dev/null +++ b/core/res/res/drawable-hdpi/ic_media_route_on_1_holo_dark.png diff --git a/core/res/res/drawable-hdpi/ic_media_route_on_1_holo_light.png b/core/res/res/drawable-hdpi/ic_media_route_on_1_holo_light.png Binary files differnew file mode 100644 index 0000000..44b89e1 --- /dev/null +++ b/core/res/res/drawable-hdpi/ic_media_route_on_1_holo_light.png diff --git a/core/res/res/drawable-hdpi/ic_media_route_on_2_holo_dark.png b/core/res/res/drawable-hdpi/ic_media_route_on_2_holo_dark.png Binary files differnew file mode 100644 index 0000000..770bf78 --- /dev/null +++ b/core/res/res/drawable-hdpi/ic_media_route_on_2_holo_dark.png diff --git a/core/res/res/drawable-hdpi/ic_media_route_on_2_holo_light.png b/core/res/res/drawable-hdpi/ic_media_route_on_2_holo_light.png Binary files differnew file mode 100644 index 0000000..2a2467b --- /dev/null +++ b/core/res/res/drawable-hdpi/ic_media_route_on_2_holo_light.png diff --git a/core/res/res/drawable-ldrtl-hdpi/ic_ab_back_holo_dark.png b/core/res/res/drawable-ldrtl-hdpi/ic_ab_back_holo_dark.png Binary files differnew file mode 100644 index 0000000..9beeb0f --- /dev/null +++ b/core/res/res/drawable-ldrtl-hdpi/ic_ab_back_holo_dark.png diff --git a/core/res/res/drawable-ldrtl-hdpi/ic_ab_back_holo_light.png b/core/res/res/drawable-ldrtl-hdpi/ic_ab_back_holo_light.png Binary files differnew file mode 100644 index 0000000..844e38b --- /dev/null +++ b/core/res/res/drawable-ldrtl-hdpi/ic_ab_back_holo_light.png diff --git a/core/res/res/drawable-ldrtl-mdpi/ic_ab_back_holo_dark.png b/core/res/res/drawable-ldrtl-mdpi/ic_ab_back_holo_dark.png Binary files differnew file mode 100644 index 0000000..c22dc90 --- /dev/null +++ b/core/res/res/drawable-ldrtl-mdpi/ic_ab_back_holo_dark.png diff --git a/core/res/res/drawable-ldrtl-mdpi/ic_ab_back_holo_light.png b/core/res/res/drawable-ldrtl-mdpi/ic_ab_back_holo_light.png Binary files differnew file mode 100644 index 0000000..f49b715 --- /dev/null +++ b/core/res/res/drawable-ldrtl-mdpi/ic_ab_back_holo_light.png diff --git a/core/res/res/drawable-ldrtl-xhdpi/ic_ab_back_holo_dark.png b/core/res/res/drawable-ldrtl-xhdpi/ic_ab_back_holo_dark.png Binary files differnew file mode 100644 index 0000000..8dfb7d8 --- /dev/null +++ b/core/res/res/drawable-ldrtl-xhdpi/ic_ab_back_holo_dark.png diff --git a/core/res/res/drawable-ldrtl-xhdpi/ic_ab_back_holo_light.png b/core/res/res/drawable-ldrtl-xhdpi/ic_ab_back_holo_light.png Binary files differnew file mode 100644 index 0000000..29852ad --- /dev/null +++ b/core/res/res/drawable-ldrtl-xhdpi/ic_ab_back_holo_light.png diff --git a/core/res/res/drawable-mdpi/ic_media_route_on_0_holo_dark.png b/core/res/res/drawable-mdpi/ic_media_route_on_0_holo_dark.png Binary files differnew file mode 100644 index 0000000..fb2ac25 --- /dev/null +++ b/core/res/res/drawable-mdpi/ic_media_route_on_0_holo_dark.png diff --git a/core/res/res/drawable-mdpi/ic_media_route_on_0_holo_light.png b/core/res/res/drawable-mdpi/ic_media_route_on_0_holo_light.png Binary files differnew file mode 100644 index 0000000..0c20091 --- /dev/null +++ b/core/res/res/drawable-mdpi/ic_media_route_on_0_holo_light.png diff --git a/core/res/res/drawable-mdpi/ic_media_route_on_1_holo_dark.png b/core/res/res/drawable-mdpi/ic_media_route_on_1_holo_dark.png Binary files differnew file mode 100644 index 0000000..2f70cee --- /dev/null +++ b/core/res/res/drawable-mdpi/ic_media_route_on_1_holo_dark.png diff --git a/core/res/res/drawable-mdpi/ic_media_route_on_1_holo_light.png b/core/res/res/drawable-mdpi/ic_media_route_on_1_holo_light.png Binary files differnew file mode 100644 index 0000000..0b76d8e --- /dev/null +++ b/core/res/res/drawable-mdpi/ic_media_route_on_1_holo_light.png diff --git a/core/res/res/drawable-mdpi/ic_media_route_on_2_holo_dark.png b/core/res/res/drawable-mdpi/ic_media_route_on_2_holo_dark.png Binary files differnew file mode 100644 index 0000000..ae7b105 --- /dev/null +++ b/core/res/res/drawable-mdpi/ic_media_route_on_2_holo_dark.png diff --git a/core/res/res/drawable-mdpi/ic_media_route_on_2_holo_light.png b/core/res/res/drawable-mdpi/ic_media_route_on_2_holo_light.png Binary files differnew file mode 100644 index 0000000..8d37b99 --- /dev/null +++ b/core/res/res/drawable-mdpi/ic_media_route_on_2_holo_light.png diff --git a/core/res/res/drawable-xhdpi/ic_media_route_on_0_holo_dark.png b/core/res/res/drawable-xhdpi/ic_media_route_on_0_holo_dark.png Binary files differnew file mode 100644 index 0000000..483b612 --- /dev/null +++ b/core/res/res/drawable-xhdpi/ic_media_route_on_0_holo_dark.png diff --git a/core/res/res/drawable-xhdpi/ic_media_route_on_0_holo_light.png b/core/res/res/drawable-xhdpi/ic_media_route_on_0_holo_light.png Binary files differnew file mode 100644 index 0000000..c3507dc --- /dev/null +++ b/core/res/res/drawable-xhdpi/ic_media_route_on_0_holo_light.png diff --git a/core/res/res/drawable-xhdpi/ic_media_route_on_1_holo_dark.png b/core/res/res/drawable-xhdpi/ic_media_route_on_1_holo_dark.png Binary files differnew file mode 100644 index 0000000..24c6519 --- /dev/null +++ b/core/res/res/drawable-xhdpi/ic_media_route_on_1_holo_dark.png diff --git a/core/res/res/drawable-xhdpi/ic_media_route_on_1_holo_light.png b/core/res/res/drawable-xhdpi/ic_media_route_on_1_holo_light.png Binary files differnew file mode 100644 index 0000000..2be0380 --- /dev/null +++ b/core/res/res/drawable-xhdpi/ic_media_route_on_1_holo_light.png diff --git a/core/res/res/drawable-xhdpi/ic_media_route_on_2_holo_dark.png b/core/res/res/drawable-xhdpi/ic_media_route_on_2_holo_dark.png Binary files differnew file mode 100644 index 0000000..4fd69bd --- /dev/null +++ b/core/res/res/drawable-xhdpi/ic_media_route_on_2_holo_dark.png diff --git a/core/res/res/drawable-xhdpi/ic_media_route_on_2_holo_light.png b/core/res/res/drawable-xhdpi/ic_media_route_on_2_holo_light.png Binary files differnew file mode 100644 index 0000000..5158856 --- /dev/null +++ b/core/res/res/drawable-xhdpi/ic_media_route_on_2_holo_light.png diff --git a/core/res/res/drawable/ic_media_route_connecting_holo_dark.xml b/core/res/res/drawable/ic_media_route_connecting_holo_dark.xml new file mode 100644 index 0000000..36e01f6 --- /dev/null +++ b/core/res/res/drawable/ic_media_route_connecting_holo_dark.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* + * Copyright 2012, 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. + */ +--> +<animation-list + xmlns:android="http://schemas.android.com/apk/res/android" + android:oneshot="false"> + <item android:drawable="@drawable/ic_media_route_on_0_holo_dark" android:duration="500" /> + <item android:drawable="@drawable/ic_media_route_on_1_holo_dark" android:duration="500" /> + <item android:drawable="@drawable/ic_media_route_on_2_holo_dark" android:duration="500" /> + <item android:drawable="@drawable/ic_media_route_on_holo_dark" android:duration="500" /> + <item android:drawable="@drawable/ic_media_route_on_2_holo_dark" android:duration="500" /> + <item android:drawable="@drawable/ic_media_route_on_1_holo_dark" android:duration="500" /> +</animation-list> diff --git a/core/res/res/drawable/ic_media_route_connecting_holo_light.xml b/core/res/res/drawable/ic_media_route_connecting_holo_light.xml new file mode 100644 index 0000000..6683db8 --- /dev/null +++ b/core/res/res/drawable/ic_media_route_connecting_holo_light.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* + * Copyright 2012, 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. + */ +--> +<animation-list + xmlns:android="http://schemas.android.com/apk/res/android" + android:oneshot="false"> + <item android:drawable="@drawable/ic_media_route_on_0_holo_light" android:duration="500" /> + <item android:drawable="@drawable/ic_media_route_on_1_holo_light" android:duration="500" /> + <item android:drawable="@drawable/ic_media_route_on_2_holo_light" android:duration="500" /> + <item android:drawable="@drawable/ic_media_route_on_holo_light" android:duration="500" /> + <item android:drawable="@drawable/ic_media_route_on_2_holo_light" android:duration="500" /> + <item android:drawable="@drawable/ic_media_route_on_1_holo_light" android:duration="500" /> +</animation-list> diff --git a/core/res/res/drawable/ic_media_route_holo_dark.xml b/core/res/res/drawable/ic_media_route_holo_dark.xml index 0b267d7..b4c1fac 100644 --- a/core/res/res/drawable/ic_media_route_holo_dark.xml +++ b/core/res/res/drawable/ic_media_route_holo_dark.xml @@ -15,6 +15,7 @@ --> <selector xmlns:android="http://schemas.android.com/apk/res/android"> + <item android:state_checked="true" android:state_enabled="true" android:drawable="@android:drawable/ic_media_route_connecting_holo_dark" /> <item android:state_activated="true" android:state_enabled="true" android:drawable="@android:drawable/ic_media_route_on_holo_dark" /> <item android:state_enabled="true" android:drawable="@android:drawable/ic_media_route_off_holo_dark" /> <item android:drawable="@android:drawable/ic_media_route_disabled_holo_dark" /> diff --git a/core/res/res/drawable/ic_media_route_holo_light.xml b/core/res/res/drawable/ic_media_route_holo_light.xml index 377253a..553721d 100644 --- a/core/res/res/drawable/ic_media_route_holo_light.xml +++ b/core/res/res/drawable/ic_media_route_holo_light.xml @@ -15,6 +15,7 @@ --> <selector xmlns:android="http://schemas.android.com/apk/res/android"> + <item android:state_checked="true" android:state_enabled="true" android:drawable="@android:drawable/ic_media_route_connecting_holo_light" /> <item android:state_activated="true" android:state_enabled="true" android:drawable="@android:drawable/ic_media_route_on_holo_light" /> <item android:state_enabled="true" android:drawable="@android:drawable/ic_media_route_off_holo_light" /> <item android:drawable="@android:drawable/ic_media_route_disabled_holo_light" /> diff --git a/core/res/res/layout-land/keyguard_host_view.xml b/core/res/res/layout-land/keyguard_host_view.xml index 595762e..18e23f0 100644 --- a/core/res/res/layout-land/keyguard_host_view.xml +++ b/core/res/res/layout-land/keyguard_host_view.xml @@ -27,20 +27,10 @@ android:gravity="center_vertical" android:orientation="horizontal"> - <com.android.internal.policy.impl.keyguard.KeyguardWidgetPager - android:id="@+id/app_widget_container" + <include layout="@layout/keyguard_widget_region" android:layout_width="0dip" android:layout_height="230dip" - android:gravity="center" - android:layout_weight=".45" - android:visibility="gone"> - - <!-- TODO: Remove this once supported as a widget --> - <include layout="@layout/keyguard_status_view"/> - <include layout="@layout/keyguard_transport_control_view"/> - - </com.android.internal.policy.impl.keyguard.KeyguardWidgetPager> - + android:layout_weight=".45"/> <com.android.internal.policy.impl.keyguard.KeyguardSecurityViewFlipper android:id="@+id/view_flipper" diff --git a/core/res/res/layout-sw600dp-land/keyguard_host_view.xml b/core/res/res/layout-sw600dp-land/keyguard_host_view.xml index ea0b3ba..595c918 100644 --- a/core/res/res/layout-sw600dp-land/keyguard_host_view.xml +++ b/core/res/res/layout-sw600dp-land/keyguard_host_view.xml @@ -26,18 +26,10 @@ android:layout_height="match_parent" android:orientation="horizontal"> - <com.android.internal.policy.impl.keyguard.KeyguardWidgetPager - android:id="@+id/app_widget_container" + <include layout="@layout/keyguard_widget_region" android:layout_width="0dip" android:layout_height="match_parent" - android:layout_weight="1" - android:visibility="gone"> - - <!-- TODO: Remove this once supported as a widget --> - <include layout="@layout/keyguard_status_view"/> - <include layout="@layout/keyguard_transport_control_view"/> - - </com.android.internal.policy.impl.keyguard.KeyguardWidgetPager> + android:layout_weight="1"/> <FrameLayout android:layout_width="0dip" diff --git a/core/res/res/layout-sw600dp-port/keyguard_host_view.xml b/core/res/res/layout-sw600dp-port/keyguard_host_view.xml index 84b1b03..7cde7e1 100644 --- a/core/res/res/layout-sw600dp-port/keyguard_host_view.xml +++ b/core/res/res/layout-sw600dp-port/keyguard_host_view.xml @@ -27,18 +27,10 @@ android:layout_height="match_parent" android:gravity="center_horizontal"> - <com.android.internal.policy.impl.keyguard.KeyguardWidgetPager - android:id="@+id/app_widget_container" + <include layout="@layout/keyguard_widget_region" android:layout_width="match_parent" android:layout_height="0dip" - android:layout_weight="0.4" - android:visibility="gone"> - - <!-- TODO: Remove this once supported as a widget --> - <include layout="@layout/keyguard_status_view"/> - <include layout="@layout/keyguard_transport_control_view"/> - - </com.android.internal.policy.impl.keyguard.KeyguardWidgetPager> + android:layout_weight="0.4"/> <com.android.internal.policy.impl.keyguard.KeyguardSecurityViewFlipper android:id="@+id/view_flipper" diff --git a/core/res/res/layout-xlarge/select_dialog_holo.xml b/core/res/res/layout-xlarge/select_dialog_holo.xml deleted file mode 100644 index f931cf2..0000000 --- a/core/res/res/layout-xlarge/select_dialog_holo.xml +++ /dev/null @@ -1,36 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- -/* -** Copyright 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. -*/ ---> - -<!-- - This layout file is used by the AlertDialog when displaying a list of items. - This layout file is inflated and used as the ListView to display the items. - Assign an ID so its state will be saved/restored. ---> -<view class="com.android.internal.app.AlertController$RecycleListView" - xmlns:android="http://schemas.android.com/apk/res/android" - android:id="@+android:id/select_dialog_listview" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:layout_marginTop="5dip" - android:paddingStart="16dip" - android:paddingEnd="16dip" - android:cacheColorHint="@null" - android:divider="?android:attr/listDividerAlertDialog" - android:scrollbars="vertical" - android:overScrollMode="ifContentScrolls" /> diff --git a/core/res/res/layout/keyguard_selector_view.xml b/core/res/res/layout/keyguard_selector_view.xml index 8b2865e..710a78e 100644 --- a/core/res/res/layout/keyguard_selector_view.xml +++ b/core/res/res/layout/keyguard_selector_view.xml @@ -26,19 +26,13 @@ android:layout_height="match_parent" android:orientation="vertical"> - <com.android.internal.policy.impl.keyguard.KeyguardWidgetPager - android:id="@+id/app_widget_container" + <include layout="@layout/keyguard_widget_region" android:layout_width="match_parent" android:layout_height="0dip" android:layout_weight="0.45" android:layout_marginTop="35dip" android:layout_marginLeft="33dip" - android:layout_marginRight="33dip" - android:visibility="gone"> - <!-- TODO: Remove this when supported as a widget --> - <include layout="@layout/keyguard_status_view"/> - <include layout="@layout/keyguard_transport_control_view"/> - </com.android.internal.policy.impl.keyguard.KeyguardWidgetPager> + android:layout_marginRight="33dip"/> <RelativeLayout android:layout_width="wrap_content" diff --git a/core/res/res/layout/keyguard_widget_region.xml b/core/res/res/layout/keyguard_widget_region.xml new file mode 100644 index 0000000..123d105 --- /dev/null +++ b/core/res/res/layout/keyguard_widget_region.xml @@ -0,0 +1,68 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +** +** Copyright 2012, 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. +*/ +--> + +<!-- This is the selector widget that allows the user to select an action. --> +<com.android.internal.policy.impl.keyguard.KeyguardWidgetRegion + xmlns:prvandroid="http://schemas.android.com/apk/prv/res/android" + xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/kg_widget_region" + android:visibility="gone" + android:gravity="center" + android:orientation="vertical"> + <Space + android:layout_width="match_parent" + android:layout_height="0dip" + android:layout_weight="1" /> + <com.android.internal.policy.impl.keyguard.KeyguardWidgetPager + android:id="@+id/app_widget_container" + android:layout_width="match_parent" + android:layout_height="@dimen/kg_widget_container_height"> + <!-- TODO: Remove this when supported as a widget --> + <include layout="@layout/keyguard_status_view"/> + <include layout="@layout/keyguard_transport_control_view"/> + </com.android.internal.policy.impl.keyguard.KeyguardWidgetPager> + <LinearLayout + android:layout_width="match_parent" + android:layout_height="0dip" + android:layout_weight="1" + android:orientation="horizontal"> + <com.android.internal.policy.impl.keyguard.KeyguardGlowStripView + android:id="@+id/left_strip" + android:layout_width="0dip" + android:layout_height="match_parent" + android:layout_weight="1" + prvandroid:numDots="5" + prvandroid:dotSize="7dip" + prvandroid:leftToRight="false" + prvandroid:glowDot="@*android:drawable/ic_lockscreen_glowdot" /> + <Space + android:layout_width="0dip" + android:layout_height="match_parent" + android:layout_weight="1.6"/> + <com.android.internal.policy.impl.keyguard.KeyguardGlowStripView + android:id="@+id/right_strip" + android:layout_width="0dip" + android:layout_height="match_parent" + android:layout_weight="1" + prvandroid:numDots="5" + prvandroid:dotSize="7dip" + prvandroid:leftToRight="true" + prvandroid:glowDot="@*android:drawable/ic_lockscreen_glowdot" /> + </LinearLayout> +</com.android.internal.policy.impl.keyguard.KeyguardWidgetRegion>
\ No newline at end of file diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml index 7698624..9ce7f8a 100755 --- a/core/res/res/values/attrs.xml +++ b/core/res/res/values/attrs.xml @@ -483,6 +483,8 @@ <attr name="autoCompleteTextViewStyle" format="reference" /> <!-- Default Checkbox style. --> <attr name="checkboxStyle" format="reference" /> + <!-- Default CheckedTextView style. --> + <attr name="checkedTextViewStyle" format="reference" /> <!-- Default ListView style for drop downs. --> <attr name="dropDownListViewStyle" format="reference" /> <!-- Default EditText style. --> @@ -5215,8 +5217,7 @@ supports. Supports combined values using | operator. --> <attr name="widgetFeatures" format="integer"> <flag name="none" value="0x0" /> - <flag name="clock" value="0x1" /> - <flag name="status" value="0x2" /> + <flag name="status" value="0x1" /> </attr> </declare-styleable> @@ -5773,4 +5774,11 @@ <attr name="scrollIndicatorPaddingRight" format="dimension" /> </declare-styleable> + <declare-styleable name="KeyguardGlowStripView"> + <attr name="dotSize" format="dimension" /> + <attr name="numDots" format="integer" /> + <attr name="glowDot" format="reference" /> + <attr name="leftToRight" format="boolean" /> + </declare-styleable> + </resources> diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index ab183a3..f143d50 100755 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -960,4 +960,8 @@ --> <bool name="config_enableWifiDisplay">false</bool> + <!-- When true use the linux /dev/input/event subsystem to detect the switch changes + on the headphone/microphone jack. When false use the older uevent framework. --> + <bool name="config_useDevInputEventForAudioJack">false</bool> + </resources> diff --git a/core/res/res/values/dimens.xml b/core/res/res/values/dimens.xml index 63ed18e..01a35b0 100644 --- a/core/res/res/values/dimens.xml +++ b/core/res/res/values/dimens.xml @@ -285,6 +285,9 @@ <!-- Space reserved at the bottom of secure views (pin/pattern/password/SIM pin/SIM puk) --> <dimen name="kg_secure_padding_height">46dp</dimen> + <!-- The height of the widget container --> + <dimen name="kg_widget_container_height">200dp</dimen> + <!-- Touch slop for the global toggle accessibility gesture --> <dimen name="accessibility_touch_slop">80dip</dimen> diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml index f28fab1..ffc09de 100644 --- a/core/res/res/values/public.xml +++ b/core/res/res/values/public.xml @@ -1981,9 +1981,9 @@ <public type="attr" name="importantForAccessibility" id="0x010103aa" /> <public type="attr" name="keyboardLayout" id="0x010103ab" /> <public type="attr" name="fontFamily" id="0x010103ac" /> - <public type="attr" name="mediaRouteButtonStyle" id="0x010103ad" /> <public type="attr" name="mediaRouteTypes" id="0x010103ae" /> + <public type="style" name="Widget.Holo.MediaRouteButton" id="0x010301d5" /> <public type="style" name="Widget.Holo.Light.MediaRouteButton" id="0x010301d6" /> <public type="style" name="Widget.DeviceDefault.MediaRouteButton" id="0x010301d7" /> @@ -1993,30 +1993,35 @@ Resources added in version 17 of the platform (Jelly Bean MR1) =============================================================== --> <eat-comment /> - <public type="attr" name="supportsRtl" /> - <public type="attr" name="textDirection" /> - <public type="attr" name="textAlignment" /> - <public type="attr" name="layoutDirection" /> - <public type="attr" name="paddingStart"/> - <public type="attr" name="paddingEnd"/> - <public type="attr" name="layout_marginStart"/> - <public type="attr" name="layout_marginEnd"/> - <public type="attr" name="layout_toStartOf" /> - <public type="attr" name="layout_toEndOf" /> - <public type="attr" name="layout_alignStart" /> - <public type="attr" name="layout_alignEnd" /> - <public type="attr" name="layout_alignParentStart" /> - <public type="attr" name="layout_alignParentEnd" /> - <public type="attr" name="listPreferredItemPaddingStart" /> - <public type="attr" name="listPreferredItemPaddingEnd" /> - <public type="attr" name="singleUser" /> - <public type="attr" name="presentationTheme" /> - <public type="attr" name="subtypeId"/> - <public type="attr" name="initialKeyguardLayout" /> - <public type="attr" name="widgetFeatures" /> - <public type="attr" name="widgetCategory" /> - <public type="attr" name="permissionGroupFlags" /> - <public type="attr" name="labelFor" /> - <public type="attr" name="permissionFlags" /> - + <public type="attr" name="supportsRtl" id="0x010103af" /> + <public type="attr" name="textDirection" id="0x010103b0" /> + <public type="attr" name="textAlignment" id="0x010103b1" /> + <public type="attr" name="layoutDirection" id="0x010103b2" /> + <public type="attr" name="paddingStart" id="0x010103b3" /> + <public type="attr" name="paddingEnd" id="0x010103b4" /> + <public type="attr" name="layout_marginStart" id="0x010103b5" /> + <public type="attr" name="layout_marginEnd" id="0x010103b6" /> + <public type="attr" name="layout_toStartOf" id="0x010103b7" /> + <public type="attr" name="layout_toEndOf" id="0x010103b8" /> + <public type="attr" name="layout_alignStart" id="0x010103b9" /> + <public type="attr" name="layout_alignEnd" id="0x010103ba" /> + <public type="attr" name="layout_alignParentStart" id="0x010103bb" /> + <public type="attr" name="layout_alignParentEnd" id="0x010103bc" /> + <public type="attr" name="listPreferredItemPaddingStart" id="0x010103bd" /> + <public type="attr" name="listPreferredItemPaddingEnd" id="0x010103be" /> + <public type="attr" name="singleUser" id="0x010103bf" /> + <public type="attr" name="presentationTheme" id="0x010103c0" /> + <public type="attr" name="subtypeId" id="0x010103c1" /> + <public type="attr" name="initialKeyguardLayout" id="0x010103c2" /> + <public type="attr" name="widgetFeatures" id="0x010103c3" /> + <public type="attr" name="widgetCategory" id="0x010103c4" /> + <public type="attr" name="permissionGroupFlags" id="0x010103c5" /> + <public type="attr" name="labelFor" id="0x010103c6" /> + <public type="attr" name="permissionFlags" id="0x010103c7" /> + <public type="attr" name="checkedTextViewStyle" /> + <public type="style" name="Widget.Holo.CheckedTextView" /> + <public type="style" name="Widget.Holo.Light.CheckedTextView" /> + <public type="style" name="Widget.DeviceDefault.CheckedTextView" /> + <public type="style" name="Widget.DeviceDefault.Light.CheckedTextView" /> + </resources> diff --git a/core/res/res/values/styles.xml b/core/res/res/values/styles.xml index 74e2425..4371aec 100644 --- a/core/res/res/values/styles.xml +++ b/core/res/res/values/styles.xml @@ -464,7 +464,11 @@ please see styles_device_defaults.xml. <item name="android:textEditSuggestionItemLayout">?android:attr/textEditSuggestionItemLayout</item> <item name="android:textCursorDrawable">?android:attr/textCursorDrawable</item> </style> - + + <style name="Widget.CheckedTextView"> + <item name="android:textAlignment">viewStart</item> + </style> + <style name="Widget.TextView.ListSeparator"> <item name="android:background">@android:drawable/dark_header_dither</item> <item name="android:layout_width">match_parent</item> @@ -1589,6 +1593,9 @@ please see styles_device_defaults.xml. <style name="Widget.Holo.TextView" parent="Widget.TextView"> </style> + <style name="Widget.Holo.CheckedTextView" parent="Widget.CheckedTextView"> + </style> + <style name="Widget.Holo.TextView.ListSeparator" parent="Widget.TextView.ListSeparator"> <item name="android:background">@android:drawable/list_section_divider_holo_dark</item> <item name="android:textAllCaps">true</item> @@ -2017,6 +2024,9 @@ please see styles_device_defaults.xml. <style name="Widget.Holo.Light.TextView" parent="Widget.TextView"> </style> + <style name="Widget.Holo.Light.CheckedTextView" parent="Widget.CheckedTextView"> + </style> + <style name="Widget.Holo.Light.TextView.ListSeparator" parent="Widget.TextView.ListSeparator"> <item name="android:background">@android:drawable/list_section_divider_holo_light</item> <item name="android:textAllCaps">true</item> diff --git a/core/res/res/values/styles_device_defaults.xml b/core/res/res/values/styles_device_defaults.xml index d465356..edeba02 100644 --- a/core/res/res/values/styles_device_defaults.xml +++ b/core/res/res/values/styles_device_defaults.xml @@ -50,6 +50,9 @@ easier. <style name="Widget.DeviceDefault.TextView" parent="Widget.Holo.TextView" > </style> + <style name="Widget.DeviceDefault.CheckedTextView" parent="Widget.Holo.CheckedTextView" > + + </style> <style name="Widget.DeviceDefault.AutoCompleteTextView" parent="Widget.Holo.AutoCompleteTextView" > </style> @@ -288,6 +291,9 @@ easier. <style name="Widget.DeviceDefault.Light.TextView" parent="Widget.Holo.Light.TextView" > </style> + <style name="Widget.DeviceDefault.Light.CheckedTextView" parent="Widget.Holo.Light.CheckedTextView" > + + </style> <style name="Widget.DeviceDefault.Light.AutoCompleteTextView" parent="Widget.Holo.Light.AutoCompleteTextView" > </style> diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index 160495c..0b30324 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -271,7 +271,8 @@ <java-symbol type="bool" name="config_enableScreenshotChord" /> <java-symbol type="bool" name="config_bluetooth_default_profiles" /> <java-symbol type="bool" name="config_enableWifiDisplay" /> - + <java-symbol type="bool" name="config_useDevInputEventForAudioJack" /> + <java-symbol type="integer" name="config_cursorWindowSize" /> <java-symbol type="integer" name="config_longPressOnPowerBehavior" /> <java-symbol type="integer" name="config_max_pan_devices" /> @@ -1075,6 +1076,7 @@ <java-symbol type="layout" name="notification_template_inbox" /> <java-symbol type="layout" name="keyguard_multi_user_avatar" /> <java-symbol type="layout" name="keyguard_multi_user_selector_widget" /> + <java-symbol type="layout" name="keyguard_widget_region" /> <java-symbol type="layout" name="sms_short_code_confirmation_dialog" /> <java-symbol type="anim" name="slide_in_child_bottom" /> @@ -1283,6 +1285,10 @@ <java-symbol type="id" name="keyguard_users_grid" /> <java-symbol type="id" name="clock_text" /> <java-symbol type="id" name="clock_view" /> + <java-symbol type="id" name="kg_widget_region" /> + <java-symbol type="id" name="left_strip" /> + <java-symbol type="id" name="right_strip" /> + <java-symbol type="integer" name="config_carDockRotation" /> <java-symbol type="integer" name="config_defaultUiModeType" /> <java-symbol type="integer" name="config_deskDockRotation" /> diff --git a/core/res/res/values/themes.xml b/core/res/res/values/themes.xml index 215551b..75850dd 100644 --- a/core/res/res/values/themes.xml +++ b/core/res/res/values/themes.xml @@ -241,6 +241,7 @@ please see themes_device_defaults.xml. <item name="absListViewStyle">@android:style/Widget.AbsListView</item> <item name="autoCompleteTextViewStyle">@android:style/Widget.AutoCompleteTextView</item> <item name="checkboxStyle">@android:style/Widget.CompoundButton.CheckBox</item> + <item name="checkedTextViewStyle">@android:style/Widget.CheckedTextView</item> <item name="dropDownListViewStyle">@android:style/Widget.ListView.DropDown</item> <item name="editTextStyle">@android:style/Widget.EditText</item> <item name="expandableListViewStyle">@android:style/Widget.ExpandableListView</item> @@ -648,6 +649,8 @@ please see themes_device_defaults.xml. <item name="listPreferredItemPaddingRight">10dip</item> <item name="listPreferredItemPaddingStart">10dip</item> <item name="listPreferredItemPaddingEnd">10dip</item> + + <item name="preferencePanelStyle">@style/PreferencePanel.Dialog</item> </style> <!-- Variant of {@link Theme_Dialog} that does not include a frame (or background). @@ -874,12 +877,12 @@ please see themes_device_defaults.xml. <p>This is the default system theme for apps that target API level 11 - 13. Starting with API level 14, the default system theme is supplied by {@link #Theme_DeviceDefault}, which might apply a different style on different devices. If you want to ensure that your - app consistenly uses the Holo theme at all times, you must explicitly declare it in your + app consistently uses the Holo theme at all times, you must explicitly declare it in your manifest. For example, {@code <application android:theme="@android:style/Theme.Holo">}. For more information, read <a href="http://android-developers.blogspot.com/2012/01/holo-everywhere.html">Holo Everywhere</a>.</p> - <p>The widgets in the holographic theme are translucent on their brackground, so + <p>The widgets in the holographic theme are translucent on their background, so applications must ensure that any background they use with this theme is itself dark; otherwise, it will be difficult to see the widgets. This UI style also includes a full action bar by default.</p> @@ -1069,6 +1072,7 @@ please see themes_device_defaults.xml. <item name="absListViewStyle">@android:style/Widget.Holo.AbsListView</item> <item name="autoCompleteTextViewStyle">@android:style/Widget.Holo.AutoCompleteTextView</item> <item name="checkboxStyle">@android:style/Widget.Holo.CompoundButton.CheckBox</item> + <item name="checkedTextViewStyle">@android:style/Widget.Holo.CheckedTextView</item> <item name="dropDownListViewStyle">@android:style/Widget.Holo.ListView.DropDown</item> <item name="editTextStyle">@android:style/Widget.Holo.EditText</item> <item name="expandableListViewStyle">@android:style/Widget.Holo.ExpandableListView</item> @@ -1382,6 +1386,7 @@ please see themes_device_defaults.xml. <item name="absListViewStyle">@android:style/Widget.Holo.Light.AbsListView</item> <item name="autoCompleteTextViewStyle">@android:style/Widget.Holo.Light.AutoCompleteTextView</item> <item name="checkboxStyle">@android:style/Widget.Holo.Light.CompoundButton.CheckBox</item> + <item name="checkedTextViewStyle">@android:style/Widget.Holo.Light.CheckedTextView</item> <item name="dropDownListViewStyle">@android:style/Widget.Holo.ListView.DropDown</item> <item name="editTextStyle">@android:style/Widget.Holo.Light.EditText</item> <item name="expandableListViewStyle">@android:style/Widget.Holo.Light.ExpandableListView</item> @@ -1605,6 +1610,8 @@ please see themes_device_defaults.xml. <item name="listPreferredItemPaddingRight">16dip</item> <item name="listPreferredItemPaddingStart">16dip</item> <item name="listPreferredItemPaddingEnd">16dip</item> + + <item name="preferencePanelStyle">@style/PreferencePanel.Dialog</item> </style> <!-- Variant of Theme.Holo.Dialog that has a nice minimum width for @@ -1719,6 +1726,8 @@ please see themes_device_defaults.xml. <item name="listPreferredItemPaddingRight">16dip</item> <item name="listPreferredItemPaddingStart">16dip</item> <item name="listPreferredItemPaddingEnd">16dip</item> + + <item name="preferencePanelStyle">@style/PreferencePanel.Dialog</item> </style> <!-- Variant of Theme.Holo.Light.Dialog that has a nice minimum width for diff --git a/core/res/res/values/themes_device_defaults.xml b/core/res/res/values/themes_device_defaults.xml index 2a2b9e0..4178cc4 100644 --- a/core/res/res/values/themes_device_defaults.xml +++ b/core/res/res/values/themes_device_defaults.xml @@ -104,6 +104,7 @@ easier. <item name="absListViewStyle">@android:style/Widget.DeviceDefault.AbsListView</item> <item name="autoCompleteTextViewStyle">@android:style/Widget.DeviceDefault.AutoCompleteTextView</item> <item name="checkboxStyle">@android:style/Widget.DeviceDefault.CompoundButton.CheckBox</item> + <item name="checkedTextViewStyle">@android:style/Widget.DeviceDefault.CheckedTextView</item> <item name="dropDownListViewStyle">@android:style/Widget.DeviceDefault.ListView.DropDown</item> <item name="editTextStyle">@android:style/Widget.DeviceDefault.EditText</item> <item name="expandableListViewStyle">@android:style/Widget.DeviceDefault.ExpandableListView</item> @@ -261,7 +262,8 @@ easier. <item name="absListViewStyle">@android:style/Widget.DeviceDefault.Light.AbsListView</item> <item name="autoCompleteTextViewStyle">@android:style/Widget.DeviceDefault.Light.AutoCompleteTextView</item> <item name="checkboxStyle">@android:style/Widget.DeviceDefault.Light.CompoundButton.CheckBox</item> - <item name="dropDownListViewStyle">@android:style/Widget.DeviceDefault.ListView.DropDown</item> + <item name="checkedTextViewStyle">@android:style/Widget.DeviceDefault.Light.CheckedTextView</item> + <item name="dropDownListViewStyle">@android:style/Widget.DeviceDefault.Light.ListView.DropDown</item> <item name="editTextStyle">@android:style/Widget.DeviceDefault.Light.EditText</item> <item name="expandableListViewStyle">@android:style/Widget.DeviceDefault.Light.ExpandableListView</item> <item name="expandableListViewWhiteStyle">@android:style/Widget.DeviceDefault.Light.ExpandableListView.White</item> @@ -296,7 +298,7 @@ easier. <item name="webViewStyle">@android:style/Widget.DeviceDefault.Light.WebView</item> <item name="dropDownItemStyle">@android:style/Widget.DeviceDefault.Light.DropDownItem</item> <item name="spinnerDropDownItemStyle">@android:style/Widget.DeviceDefault.Light.DropDownItem.Spinner</item> - <item name="spinnerItemStyle">@android:style/Widget.DeviceDefault.TextView.SpinnerItem</item> + <item name="spinnerItemStyle">@android:style/Widget.DeviceDefault.Light.TextView.SpinnerItem</item> <item name="dropDownHintAppearance">@android:style/TextAppearance.DeviceDefault.Widget.DropDownHint</item> <item name="keyboardViewStyle">@android:style/Widget.DeviceDefault.KeyboardView</item> <item name="quickContactBadgeStyleWindowSmall">@android:style/Widget.DeviceDefault.QuickContactBadge.WindowSmall</item> diff --git a/docs/html/about/dashboards/index.jd b/docs/html/about/dashboards/index.jd index c3da3bf..6555733 100644 --- a/docs/html/about/dashboards/index.jd +++ b/docs/html/about/dashboards/index.jd @@ -30,33 +30,31 @@ Google Play within a 14-day period ending on the data collection date noted belo <th>API</th> <th>Distribution</th> </tr> -<tr><td><a href="/about/versions/android-1.5.html">1.5</a></td><td>Cupcake</td> <td>3</td><td>0.2%</td></tr> +<tr><td><a href="/about/versions/android-1.5.html">1.5</a></td><td>Cupcake</td> <td>3</td><td>0.1%</td></tr> <tr><td><a href="/about/versions/android-1.6.html">1.6</a></td><td>Donut</td> <td>4</td><td>0.4%</td></tr> -<tr><td><a href="/about/versions/android-2.1.html">2.1</a></td><td>Eclair</td> <td>7</td><td>3.7%</td></tr> -<tr><td><a href="/about/versions/android-2.2.html">2.2</a></td><td>Froyo</td> <td>8</td><td>14%</td></tr> +<tr><td><a href="/about/versions/android-2.1.html">2.1</a></td><td>Eclair</td> <td>7</td><td>3.4%</td></tr> +<tr><td><a href="/about/versions/android-2.2.html">2.2</a></td><td>Froyo</td> <td>8</td><td>12.9%</td></tr> <tr><td><a href="/about/versions/android-2.3.html">2.3 - 2.3.2</a> </td><td rowspan="2">Gingerbread</td> <td>9</td><td>0.3%</td></tr> <tr><td><a href="/about/versions/android-2.3.3.html">2.3.3 - 2.3.7 - </a></td><!-- Gingerbread --> <td>10</td><td>57.2%</td></tr> + </a></td><!-- Gingerbread --> <td>10</td><td>55.5%</td></tr> <tr><td><a href="/about/versions/android-3.1.html">3.1</a></td> - <td rowspan="2">Honeycomb</td> <td>12</td><td>0.5%</td></tr> -<tr><td><a href="/about/versions/android-3.2.html">3.2</a></td> <!-- Honeycomb --><td>13</td><td>1.6%</td></tr> -<tr><td><a href="/about/versions/android-4.0.html">4.0 - 4.0.2</a></td> - <td rowspan="2">Ice Cream Sandwich</td><td>14</td><td>0.1%</td></tr> + <td rowspan="2">Honeycomb</td> <td>12</td><td>0.4%</td></tr> +<tr><td><a href="/about/versions/android-3.2.html">3.2</a></td> <!-- Honeycomb --><td>13</td><td>1.5%</td></tr> <tr><td><a href="/about/versions/android-4.0.3.html">4.0.3 - 4.0.4</a></td> - <!-- ICS --> <td>15</td><td>20.8%</td></tr> -<tr><td><a href="/about/versions/android-4.1.html">4.1</a></td> <td>Jelly Bean</td><td>16</td><td>1.2%</td></tr> + <td>Ice Cream Sandwich</td><td>15</td><td>23.7%</td></tr> +<tr><td><a href="/about/versions/android-4.1.html">4.1</a></td> <td>Jelly Bean</td><td>16</td><td>1.8%</td></tr> </table> </div> <div class="col-8" style="margin-right:0"> <img alt="" -src="http://chart.apis.google.com/chart?&cht=p&chs=460x245&chd=t:4.3,14,57.5,2.1,20.9,1.2&chl=Eclair%20%26%20older|Froyo|Gingerbread|Honeycomb|Ice%20Cream%20Sandwich|Jelly%20Bean&chco=c4df9b,6fad0c&chf=bg,s,00000000" /> +src="http://chart.apis.google.com/chart?&cht=p&chs=460x245&chd=t:3.9,12.9,55.8,1.9,23.7,1.8&chl=Eclair%20%26%20older|Froyo|Gingerbread|Honeycomb|Ice%20Cream%20Sandwich|Jelly%20Bean&chco=c4df9b,6fad0c&chf=bg,s,00000000" /> </div><!-- end dashboard-panel --> -<p style="clear:both"><em>Data collected during a 14-day period ending on September 4, 2012</em></p> +<p style="clear:both"><em>Data collected during a 14-day period ending on October 1, 2012</em></p> <!-- <p style="font-size:.9em">* <em>Other: 0.1% of devices running obsolete versions</em></p> --> @@ -81,9 +79,9 @@ line for that version meets the y-axis on the right.</p> Google Play within a 14-day period ending on the date indicated on the x-axis.</p> <img alt="" height="250" width="660" -src="http://chart.apis.google.com/chart?&cht=lc&chs=660x250&chxt=x,x,y,r&chf=bg,s,00000000&chxr=0,0,12|1,0,12|2,0,100|3,0,100&chxl=0%3A%7C03/01%7C03/15%7C04/01%7C04/15%7C05/01%7C05/15%7C06/01%7C06/15%7C07/01%7C07/15%7C08/01%7C08/15%7C09/01%7C1%3A%7C2012%7C%7C%7C%7C%7C%7C%7C%7C%7C%7C%7C%7C2012%7C2%3A%7C0%25%7C25%25%7C50%25%7C75%25%7C100%25%7C3%3A%7C0%25%7C25%25%7C50%25%7C75%25%7C100%25&chxp=0,0,1,2,3,4,5,6,7,8,9,10,11,12&chxtc=0,5&chd=t:97.6,97.8,97.8,97.9,98.1,98.1,98.3,98.5,98.6,98.7,98.9,98.9,99.0|90.8,91.4,91.8,92.1,92.5,92.7,93.1,93.5,93.9,94.2,94.7,94.9,95.3|65.2,66.8,68.6,69.9,71.5,72.6,74.0,75.2,76.5,77.8,79.2,80.1,81.1|4.3,4.6,5.5,6.5,7.6,8.2,9.4,11.0,12.8,15.6,18.9,21.2,23.7|3.2,3.5,4.5,5.5,6.6,7.4,8.7,10.4,12.3,15.1,18.4,20.7,23.2|1.1,1.3,2.3,3.3,4.4,5.3,6.7,8.4,10.4,13.2,16.6,19.0,21.5|0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.8,0.9,1.1&chm=b,c3df9b,0,1,0|tAndroid%202.2,6c9729,1,0,15,,t::-5|b,b6dc7d,1,2,0|tAndroid%202.3.3,5b831d,2,0,15,,t::-5|b,aadb5e,2,3,0|b,9ddb3d,3,4,0|b,91da1e,4,5,0|tAndroid%204.0.3,253a06,5,8,15,,t::-5|b,80c414,5,6,0|B,6fad0c,6,7,0&chg=7,25&chdl=Android%202.1|Android%202.2|Android%202.3.3|Android%203.1|Android%203.2|Android%204.0.3|Android%204.1&chco=add274,a0d155,94d134,84c323,73ad18,62960f,507d08" /> +src="http://chart.apis.google.com/chart?&cht=lc&chs=660x250&chxt=x,x,y,r&chf=bg,s,00000000&chxr=0,0,12|1,0,12|2,0,100|3,0,100&chxl=0%3A%7C04/01%7C04/15%7C05/01%7C05/15%7C06/01%7C06/15%7C07/01%7C07/15%7C08/01%7C08/15%7C09/01%7C09/15%7C10/01%7C1%3A%7C2012%7C%7C%7C%7C%7C%7C%7C%7C%7C%7C%7C%7C2012%7C2%3A%7C0%25%7C25%25%7C50%25%7C75%25%7C100%25%7C3%3A%7C0%25%7C25%25%7C50%25%7C75%25%7C100%25&chxp=0,0,1,2,3,4,5,6,7,8,9,10,11,12&chxtc=0,5&chd=t:97.8,97.9,98.1,98.1,98.3,98.5,98.6,98.7,98.9,98.9,99.0,99.1,99.2|91.8,92.1,92.5,92.7,93.1,93.5,93.9,94.2,94.7,94.9,95.3,95.5,95.8|68.6,69.9,71.5,72.6,74.0,75.2,76.5,77.8,79.2,80.1,81.1,82.0,82.9|5.5,6.5,7.6,8.2,9.4,11.0,12.8,15.6,18.9,21.2,23.7,25.5,27.4|4.5,5.5,6.6,7.4,8.7,10.4,12.3,15.1,18.4,20.7,23.2,25.1,27.0|2.3,3.3,4.4,5.3,6.7,8.4,10.4,13.2,16.6,19.0,21.5,23.5,25.5|0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.8,0.9,1.1,1.4,1.8&chm=b,c3df9b,0,1,0|tAndroid%202.2,6c9729,1,0,15,,t::-5|b,b6dc7d,1,2,0|tAndroid%202.3.3,5b831d,2,0,15,,t::-5|b,aadb5e,2,3,0|b,9ddb3d,3,4,0|b,91da1e,4,5,0|tAndroid%204.0.3,253a06,5,6,15,,t::-5|b,80c414,5,6,0|B,6fad0c,6,7,0&chg=7,25&chdl=Android%202.1|Android%202.2|Android%202.3.3|Android%203.1|Android%203.2|Android%204.0.3|Android%204.1&chco=add274,a0d155,94d134,84c323,73ad18,62960f,507d08" /> -<p><em>Last historical dataset collected during a 14-day period ending on September 1, 2012</em></p> +<p><em>Last historical dataset collected during a 14-day period ending on October 1, 2012</em></p> @@ -112,11 +110,11 @@ src="http://chart.apis.google.com/chart?&cht=lc&chs=660x250&chxt=x,x,y,r&chf=bg, <img alt="" style="float:right;" -src="http://chart.googleapis.com/chart?cht=p&chs=400x250&chf=bg,s,00000000&chco=c4df9b,6fad0c&chl=Xlarge%7CLarge%7CNormal%7CSmall&chd=t%3A4.7,6.5,86,2.8" /> +src="http://chart.googleapis.com/chart?cht=p&chs=400x250&chf=bg,s,00000000&chco=c4df9b,6fad0c&chl=Xlarge%7CLarge%7CNormal%7CSmall&chd=t%3A4.6,6.1,86.6,2.7" /> <img alt="" style="float:right;clear:right" -src="http://chart.googleapis.com/chart?cht=p&chs=400x250&chf=bg,s,00000000&chco=c4df9b,6fad0c&chl=ldpi%7Cmdpi%7Chdpi%7Cxhdpi&chd=t%3A1.6,18.6,53.6,26.2" /> +src="http://chart.googleapis.com/chart?cht=p&chs=400x250&chf=bg,s,00000000&chco=c4df9b,6fad0c&chl=ldpi%7Cmdpi%7Chdpi%7Cxhdpi&chd=t%3A2.2,18,51.1,28.7" /> <p>This section provides data about the relative number of active devices that have a particular screen configuration, defined by a combination of screen size and density. To simplify the way that @@ -148,32 +146,32 @@ ending on the data collection date noted below.</p> <th scope="col">xhdpi</th> </tr> <tr><th scope="row">small</th> -<td>1.1%</td> <!-- small/ldpi --> +<td>1.7%</td> <!-- small/ldpi --> <td></td> <!-- small/mdpi --> -<td>1.7%</td> <!-- small/hdpi --> +<td>1.0%</td> <!-- small/hdpi --> <td></td> <!-- small/xhdpi --> </tr> <tr><th scope="row">normal</th> <td>0.4%</td> <!-- normal/ldpi --> -<td>11.4%</td> <!-- normal/mdpi --> -<td>51.9%</td> <!-- normal/hdpi --> -<td>22.3%</td> <!-- normal/xhdpi --> +<td>11%</td> <!-- normal/mdpi --> +<td>50.1%</td> <!-- normal/hdpi --> +<td>25.1%</td> <!-- normal/xhdpi --> </tr> <tr><th scope="row">large</th> <td>0.1%</td> <!-- large/ldpi --> -<td>2.5%</td> <!-- large/mdpi --> +<td>2.4%</td> <!-- large/mdpi --> <td></td> <!-- large/hdpi --> -<td>3.9%</td> <!-- large/xhdpi --> +<td>3.6%</td> <!-- large/xhdpi --> </tr> <tr><th scope="row">xlarge</th> <td></td> <!-- xlarge/ldpi --> -<td>4.7%</td> <!-- xlarge/mdpi --> +<td>4.6%</td> <!-- xlarge/mdpi --> <td></td> <!-- xlarge/hdpi --> <td></td> <!-- xlarge/xhdpi --> </tr> </table> -<p style="clear:both"><em>Data collected during a 7-day period ending on September 4, 2012</em></p> +<p style="clear:both"><em>Data collected during a 7-day period ending on October 1, 2012</em></p> @@ -225,4 +223,4 @@ ending on the data collection date noted below.</p> -<p style="clear:both"><em>Data collected during a 7-day period ending on September 4, 2012</em></p> +<p style="clear:both"><em>Data collected during a 7-day period ending on October 1, 2012</em></p> diff --git a/docs/html/distribute/googleplay/promote/brand.jd b/docs/html/distribute/googleplay/promote/brand.jd index 875794a..cb6bf48 100644 --- a/docs/html/distribute/googleplay/promote/brand.jd +++ b/docs/html/distribute/googleplay/promote/brand.jd @@ -95,7 +95,7 @@ in text.</p> <p>When referring to the mobile experience, use "Google Play" unless the text is clearly instructional for the user. For example, a marketing headline might read "Download our -games on Google Play™," but instructional text woud read "Download our games using the Google +games on Google Play™," but instructional text would read "Download our games using the Google Play™ Store app." <p>Any use of the Google Play name or icon needs to include this @@ -117,8 +117,9 @@ Play™ Store app." <p>You may use the Google Play Store icon, but you may not modify it.</p> -<p>When labeling or referring to the icon, the name can be either the full app -name, Google Play Store, or the app display name, Play Store.</p> +<p>As mentioned above, when referring to the Google Play Store app in copy, use the full name: +"Google Play Store." However, when labelling the Google Play Store icon directly, it's OK to use +"Play Store" without "Google" (which is how the icon is labelled on a device).</p> <h4>Google Play badge</h4> diff --git a/graphics/java/android/graphics/Paint.java b/graphics/java/android/graphics/Paint.java index f68f9dc..4170cfe 100644 --- a/graphics/java/android/graphics/Paint.java +++ b/graphics/java/android/graphics/Paint.java @@ -371,12 +371,30 @@ public class Paint { public void reset() { native_reset(mNativePaint); setFlags(DEFAULT_PAINT_FLAGS); + // TODO: Turning off hinting has undesirable side effects, we need to // revisit hinting once we add support for subpixel positioning // setHinting(DisplayMetrics.DENSITY_DEVICE >= DisplayMetrics.DENSITY_TV // ? HINTING_OFF : HINTING_ON); + + mColorFilter = null; + mMaskFilter = null; + mPathEffect = null; + mRasterizer = null; + mShader = null; + mTypeface = null; + mXfermode = null; + mHasCompatScaling = false; - mCompatScaling = mInvCompatScaling = 1; + mCompatScaling = 1; + mInvCompatScaling = 1; + + hasShadow = false; + shadowDx = 0; + shadowDy = 0; + shadowRadius = 0; + shadowColor = 0; + mBidiFlags = BIDI_DEFAULT_LTR; setTextLocale(Locale.getDefault()); } diff --git a/graphics/java/android/graphics/drawable/ClipDrawable.java b/graphics/java/android/graphics/drawable/ClipDrawable.java index 723db6e..b7429d4 100644 --- a/graphics/java/android/graphics/drawable/ClipDrawable.java +++ b/graphics/java/android/graphics/drawable/ClipDrawable.java @@ -239,6 +239,7 @@ public class ClipDrawable extends Drawable implements Drawable.Callback { return null; } + /** @hide */ @Override public void setLayoutDirection(int layoutDirection) { mClipState.mDrawable.setLayoutDirection(layoutDirection); diff --git a/graphics/java/android/graphics/drawable/LayerDrawable.java b/graphics/java/android/graphics/drawable/LayerDrawable.java index 03531ac..0351b71 100644 --- a/graphics/java/android/graphics/drawable/LayerDrawable.java +++ b/graphics/java/android/graphics/drawable/LayerDrawable.java @@ -590,6 +590,7 @@ public class LayerDrawable extends Drawable implements Drawable.Callback { return this; } + /** @hide */ @Override public void setLayoutDirection(int layoutDirection) { if (getLayoutDirection() != layoutDirection) { diff --git a/graphics/java/android/graphics/drawable/StateListDrawable.java b/graphics/java/android/graphics/drawable/StateListDrawable.java index a5c3614..f8f3ac9 100644 --- a/graphics/java/android/graphics/drawable/StateListDrawable.java +++ b/graphics/java/android/graphics/drawable/StateListDrawable.java @@ -261,6 +261,7 @@ public class StateListDrawable extends DrawableContainer { return this; } + /** @hide */ @Override public void setLayoutDirection(int layoutDirection) { final int numStates = getStateCount(); diff --git a/libs/hwui/Caches.cpp b/libs/hwui/Caches.cpp index e443294..7853ae4 100644 --- a/libs/hwui/Caches.cpp +++ b/libs/hwui/Caches.cpp @@ -268,8 +268,6 @@ void Caches::deleteDisplayListDeferred(DisplayList* displayList) { void Caches::flush(FlushMode mode) { FLUSH_LOGD("Flushing caches (mode %d)", mode); - clearGarbage(); - switch (mode) { case kFlushMode_Full: textureCache.clear(); @@ -293,6 +291,8 @@ void Caches::flush(FlushMode mode) { layerCache.clear(); break; } + + clearGarbage(); } /////////////////////////////////////////////////////////////////////////////// diff --git a/libs/hwui/DisplayListRenderer.cpp b/libs/hwui/DisplayListRenderer.cpp index f84c847..589d5c2 100644 --- a/libs/hwui/DisplayListRenderer.cpp +++ b/libs/hwui/DisplayListRenderer.cpp @@ -105,35 +105,6 @@ DisplayList::~DisplayList() { clearResources(); } -void DisplayList::initProperties() { - mLeft = 0; - mTop = 0; - mRight = 0; - mBottom = 0; - mClipChildren = true; - mAlpha = 1; - mMultipliedAlpha = 255; - mHasOverlappingRendering = true; - mTranslationX = 0; - mTranslationY = 0; - mRotation = 0; - mRotationX = 0; - mRotationY= 0; - mScaleX = 1; - mScaleY = 1; - mPivotX = 0; - mPivotY = 0; - mCameraDistance = 0; - mMatrixDirty = false; - mMatrixFlags = 0; - mPrevWidth = -1; - mPrevHeight = -1; - mWidth = 0; - mHeight = 0; - mPivotExplicitlySet = false; - mCaching = false; -} - void DisplayList::destroyDisplayListDeferred(DisplayList* displayList) { if (displayList) { DISPLAY_LIST_LOGD("Deferring display list destruction"); @@ -215,8 +186,12 @@ void DisplayList::clearResources() { mLayers.clear(); } +void DisplayList::reset() { + clearResources(); + init(); +} + void DisplayList::initFromDisplayListRenderer(const DisplayListRenderer& recorder, bool reusing) { - const SkWriter32& writer = recorder.writeStream(); if (reusing) { // re-using display list - clear out previous allocations @@ -224,8 +199,8 @@ void DisplayList::initFromDisplayListRenderer(const DisplayListRenderer& recorde } init(); - initProperties(); + const SkWriter32& writer = recorder.writeStream(); if (writer.size() == 0) { return; } @@ -303,6 +278,32 @@ void DisplayList::init() { mSize = 0; mIsRenderable = true; mFunctorCount = 0; + mLeft = 0; + mTop = 0; + mRight = 0; + mBottom = 0; + mClipChildren = true; + mAlpha = 1; + mMultipliedAlpha = 255; + mHasOverlappingRendering = true; + mTranslationX = 0; + mTranslationY = 0; + mRotation = 0; + mRotationX = 0; + mRotationY= 0; + mScaleX = 1; + mScaleY = 1; + mPivotX = 0; + mPivotY = 0; + mCameraDistance = 0; + mMatrixDirty = false; + mMatrixFlags = 0; + mPrevWidth = -1; + mPrevHeight = -1; + mWidth = 0; + mHeight = 0; + mPivotExplicitlySet = false; + mCaching = false; } size_t DisplayList::getSize() { diff --git a/libs/hwui/DisplayListRenderer.h b/libs/hwui/DisplayListRenderer.h index 39061f4..2610055 100644 --- a/libs/hwui/DisplayListRenderer.h +++ b/libs/hwui/DisplayListRenderer.h @@ -137,6 +137,8 @@ public: void output(OpenGLRenderer& renderer, uint32_t level = 0); + ANDROID_API void reset(); + void setRenderable(bool renderable) { mIsRenderable = renderable; } @@ -399,7 +401,6 @@ public: private: void init(); - void initProperties(); void clearResources(); diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp index c015077..c2e6ee3 100644 --- a/libs/hwui/OpenGLRenderer.cpp +++ b/libs/hwui/OpenGLRenderer.cpp @@ -1265,7 +1265,7 @@ bool OpenGLRenderer::quickRejectPreStroke(float left, float top, float right, fl } bool OpenGLRenderer::quickReject(float left, float top, float right, float bottom) { - if (mSnapshot->isIgnored()) { + if (mSnapshot->isIgnored() || bottom <= top || right <= left) { return true; } @@ -1951,6 +1951,11 @@ void OpenGLRenderer::drawConvexPath(const SkPath& path, SkPaint* paint) { // TODO: try clipping large paths to viewport PathRenderer::convexPathVertices(path, paint, mSnapshot->transform, vertexBuffer); + if (!vertexBuffer.getSize()) { + // no vertices to draw + return; + } + setupDraw(); setupDrawNoTexture(); if (isAA) setupDrawAA(); diff --git a/libs/hwui/PathRenderer.cpp b/libs/hwui/PathRenderer.cpp index 4a66c62..5b55c2b 100644 --- a/libs/hwui/PathRenderer.cpp +++ b/libs/hwui/PathRenderer.cpp @@ -323,6 +323,11 @@ void PathRenderer::convexPathVertices(const SkPath &path, const SkPaint* paint, convexPathPerimeterVertices(path, threshInvScaleX * threshInvScaleX, threshInvScaleY * threshInvScaleY, tempVertices); + if (!tempVertices.size()) { + // path was empty, return without allocating vertex buffer + return; + } + #if VERTEX_DEBUG for (unsigned int i = 0; i < tempVertices.size(); i++) { ALOGD("orig path: point at %f %f", tempVertices[i].position[0], tempVertices[i].position[1]); diff --git a/media/java/android/media/MediaRouter.java b/media/java/android/media/MediaRouter.java index 36c9c70..e5b9637 100644 --- a/media/java/android/media/MediaRouter.java +++ b/media/java/android/media/MediaRouter.java @@ -105,8 +105,13 @@ public class MediaRouter { mDefaultAudioVideo = new RouteInfo(mSystemCategory); mDefaultAudioVideo.mNameResId = com.android.internal.R.string.default_audio_route_name; mDefaultAudioVideo.mSupportedTypes = ROUTE_TYPE_LIVE_AUDIO | ROUTE_TYPE_LIVE_VIDEO; - addRoute(mDefaultAudioVideo); + addRouteStatic(mDefaultAudioVideo); + // This will select the active wifi display route if there is one. + updateWifiDisplayStatus(mDisplayService.getWifiDisplayStatus()); + + appContext.registerReceiver(new WifiDisplayStatusChangedReceiver(), + new IntentFilter(DisplayManager.ACTION_WIFI_DISPLAY_STATUS_CHANGED)); appContext.registerReceiver(new VolumeChangeReceiver(), new IntentFilter(AudioManager.VOLUME_CHANGED_ACTION)); @@ -116,13 +121,17 @@ public class MediaRouter { } catch (RemoteException e) { } if (newAudioRoutes != null) { + // This will select the active BT route if there is one and the current + // selected route is the default system route, or if there is no selected + // route yet. updateAudioRoutes(newAudioRoutes); } - updateWifiDisplayStatus(mDisplayService.getWifiDisplayStatus()); - - appContext.registerReceiver(new WifiDisplayStatusChangedReceiver(), - new IntentFilter(DisplayManager.ACTION_WIFI_DISPLAY_STATUS_CHANGED)); + // Select the default route if the above didn't sync us up + // appropriately with relevant system state. + if (mSelectedRoute == null) { + selectRouteStatic(mDefaultAudioVideo.getSupportedTypes(), mDefaultAudioVideo); + } } void updateAudioRoutes(AudioRoutesInfo newRoutes) { @@ -159,7 +168,7 @@ public class MediaRouter { info.mName = mCurAudioRoutesInfo.mBluetoothName; info.mSupportedTypes = ROUTE_TYPE_LIVE_AUDIO; sStatic.mBluetoothA2dpRoute = info; - addRoute(sStatic.mBluetoothA2dpRoute); + addRouteStatic(sStatic.mBluetoothA2dpRoute); } else { sStatic.mBluetoothA2dpRoute.mName = mCurAudioRoutesInfo.mBluetoothName; dispatchRouteChanged(sStatic.mBluetoothA2dpRoute); @@ -175,7 +184,8 @@ public class MediaRouter { mSelectedRoute == mBluetoothA2dpRoute) { selectRouteStatic(ROUTE_TYPE_LIVE_AUDIO, mDefaultAudioVideo); } else if (mCurAudioRoutesInfo.mMainType == AudioRoutesInfo.MAIN_SPEAKER && - mSelectedRoute == mDefaultAudioVideo && a2dpEnabled) { + (mSelectedRoute == mDefaultAudioVideo || mSelectedRoute == null) && + a2dpEnabled) { selectRouteStatic(ROUTE_TYPE_LIVE_AUDIO, mBluetoothA2dpRoute); } } @@ -393,22 +403,21 @@ public class MediaRouter { * @see #removeUserRoute(UserRouteInfo) */ public void addUserRoute(UserRouteInfo info) { - addRoute(info); + addRouteStatic(info); } /** * @hide Framework use only */ public void addRouteInt(RouteInfo info) { - addRoute(info); + addRouteStatic(info); } - static void addRoute(RouteInfo info) { + static void addRouteStatic(RouteInfo info) { final RouteCategory cat = info.getCategory(); if (!sStatic.mCategories.contains(cat)) { sStatic.mCategories.add(cat); } - final boolean onlyRoute = sStatic.mRoutes.isEmpty(); if (cat.isGroupable() && !(info instanceof RouteGroup)) { // Enforce that any added route in a groupable category must be in a group. final RouteGroup group = new RouteGroup(info.getCategory()); @@ -422,10 +431,6 @@ public class MediaRouter { sStatic.mRoutes.add(info); dispatchRouteAdded(info); } - - if (onlyRoute) { - selectRouteStatic(info.getSupportedTypes(), info); - } } /** @@ -693,18 +698,25 @@ public class MediaRouter { oldStatus.getRememberedDisplays() : new WifiDisplay[0]; WifiDisplay[] newDisplays = newStatus.getRememberedDisplays(); WifiDisplay[] availableDisplays = newStatus.getAvailableDisplays(); + WifiDisplay activeDisplay = newStatus.getActiveDisplay(); for (int i = 0; i < newDisplays.length; i++) { final WifiDisplay d = newDisplays[i]; final WifiDisplay oldRemembered = findMatchingDisplay(d, oldDisplays); if (oldRemembered == null) { - addRoute(makeWifiDisplayRoute(d)); + addRouteStatic(makeWifiDisplayRoute(d)); needScan = true; } else { final boolean available = findMatchingDisplay(d, availableDisplays) != null; final RouteInfo route = findWifiDisplayRoute(d); updateWifiDisplayRoute(route, d, available, newStatus); } + if (d.equals(activeDisplay)) { + final RouteInfo activeRoute = findWifiDisplayRoute(d); + if (activeRoute != null) { + selectRouteStatic(activeRoute.getSupportedTypes(), activeRoute); + } + } } for (int i = 0; i < oldDisplays.length; i++) { final WifiDisplay d = oldDisplays[i]; @@ -840,11 +852,11 @@ public class MediaRouter { // A predetermined connection status that can override mStatus private int mStatusCode; - static final int STATUS_NONE = 0; - static final int STATUS_SCANNING = 1; - static final int STATUS_CONNECTING = 2; - static final int STATUS_AVAILABLE = 3; - static final int STATUS_NOT_AVAILABLE = 4; + /** @hide */ public static final int STATUS_NONE = 0; + /** @hide */ public static final int STATUS_SCANNING = 1; + /** @hide */ public static final int STATUS_CONNECTING = 2; + /** @hide */ public static final int STATUS_AVAILABLE = 3; + /** @hide */ public static final int STATUS_NOT_AVAILABLE = 4; private Object mTag; @@ -941,6 +953,13 @@ public class MediaRouter { } /** + * @hide + */ + public int getStatusCode() { + return mStatusCode; + } + + /** * @return A media type flag set describing which types this route supports. */ public int getSupportedTypes() { diff --git a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java index c8ce3cd..06c8e11 100644 --- a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java +++ b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java @@ -68,7 +68,7 @@ public class DatabaseHelper extends SQLiteOpenHelper { // database gets upgraded properly. At a minimum, please confirm that 'upgradeVersion' // is properly propagated through your change. Not doing so will result in a loss of user // settings. - private static final int DATABASE_VERSION = 89; + private static final int DATABASE_VERSION = 90; private Context mContext; private int mUserHandle; @@ -1380,6 +1380,26 @@ public class DatabaseHelper extends SQLiteOpenHelper { upgradeVersion = 89; } + if (upgradeVersion == 89) { + if (mUserHandle == UserHandle.USER_OWNER) { + db.beginTransaction(); + try { + String[] prefixesToMove = { + Settings.Global.BLUETOOTH_HEADSET_PRIORITY_PREFIX, + Settings.Global.BLUETOOTH_A2DP_SINK_PRIORITY_PREFIX, + Settings.Global.BLUETOOTH_INPUT_DEVICE_PRIORITY_PREFIX, + }; + + movePrefixedSettingsToNewTable(db, TABLE_SECURE, TABLE_GLOBAL, prefixesToMove); + + db.setTransactionSuccessful(); + } finally { + db.endTransaction(); + } + } + upgradeVersion = 90; + } + // *** Remember to update DATABASE_VERSION above! if (upgradeVersion != currentVersion) { @@ -1446,6 +1466,44 @@ public class DatabaseHelper extends SQLiteOpenHelper { } } + /** + * Move any settings with the given prefixes from the source table to the + * destination table. + */ + private void movePrefixedSettingsToNewTable( + SQLiteDatabase db, String sourceTable, String destTable, String[] prefixesToMove) { + SQLiteStatement insertStmt = null; + SQLiteStatement deleteStmt = null; + + db.beginTransaction(); + try { + insertStmt = db.compileStatement("INSERT INTO " + destTable + + " (name,value) SELECT name,value FROM " + sourceTable + + " WHERE substr(name,0,?)=?"); + deleteStmt = db.compileStatement( + "DELETE FROM " + sourceTable + " WHERE substr(name,0,?)=?"); + + for (String prefix : prefixesToMove) { + insertStmt.bindLong(1, prefix.length() + 1); + insertStmt.bindString(2, prefix); + insertStmt.execute(); + + deleteStmt.bindLong(1, prefix.length() + 1); + deleteStmt.bindString(2, prefix); + deleteStmt.execute(); + } + db.setTransactionSuccessful(); + } finally { + db.endTransaction(); + if (insertStmt != null) { + insertStmt.close(); + } + if (deleteStmt != null) { + deleteStmt.close(); + } + } + } + private void upgradeLockPatternLocation(SQLiteDatabase db) { Cursor c = db.query(TABLE_SYSTEM, new String[] {"_id", "value"}, "name='lock_pattern'", null, null, null, null); diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_clock_hour.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_clock_hour.png Binary files differindex 979ca08..045a3d1 100644 --- a/packages/SystemUI/res/drawable-hdpi/ic_qs_clock_hour.png +++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_clock_hour.png diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_clock_hour.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_clock_hour.png Binary files differindex 4dca96a..ee887e9 100644 --- a/packages/SystemUI/res/drawable-mdpi/ic_qs_clock_hour.png +++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_clock_hour.png diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_clock_hour.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_clock_hour.png Binary files differindex a293c0b..d1d29dc 100644 --- a/packages/SystemUI/res/drawable-xhdpi/ic_qs_clock_hour.png +++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_clock_hour.png diff --git a/packages/SystemUI/res/values-af/strings.xml b/packages/SystemUI/res/values-af/strings.xml index e17505c..fe81191 100644 --- a/packages/SystemUI/res/values-af/strings.xml +++ b/packages/SystemUI/res/values-af/strings.xml @@ -153,7 +153,7 @@ <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Vliegtuigmodus"</string> <string name="quick_settings_battery_charging_label" msgid="490074774465309209">"Laai, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string> - <string name="quick_settings_battery_charged_label" msgid="8865413079414246081">"Gehef"</string> + <string name="quick_settings_battery_charged_label" msgid="8865413079414246081">"Gelaai"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> toestelle)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth af"</string> diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml index 16a412d..7dcbabf 100644 --- a/packages/SystemUI/res/values-ca/strings.xml +++ b/packages/SystemUI/res/values-ca/strings.xml @@ -173,7 +173,7 @@ <string name="quick_settings_wifi_label" msgid="9135344704899546041">"Wi-Fi"</string> <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Desconnectat"</string> <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"No hi ha cap xarxa"</string> - <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi desconnectat"</string> + <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi desconnectada"</string> <string name="quick_settings_wifi_display_label" msgid="6893592964463624333">"Pantalla Wi-Fi"</string> <string name="quick_settings_wifi_display_no_connection_label" msgid="7834964244709912066">"No hi ha cap connexió amb una pantalla Wi-Fi"</string> <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Brillantor"</string> diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml index fde9916..e2f0d44 100644 --- a/packages/SystemUI/res/values-da/strings.xml +++ b/packages/SystemUI/res/values-da/strings.xml @@ -168,17 +168,12 @@ <string name="quick_settings_settings_label" msgid="5326556592578065401">"Indstillinger"</string> <string name="quick_settings_time_label" msgid="4635969182239736408">"Tid"</string> <string name="quick_settings_user_label" msgid="5238995632130897840">"Mig"</string> - <!-- no translation found for quick_settings_wifi_label (9135344704899546041) --> - <skip /> - <!-- no translation found for quick_settings_wifi_not_connected (7171904845345573431) --> - <skip /> + <string name="quick_settings_wifi_label" msgid="9135344704899546041">"Wi-Fi"</string> + <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Ikke forbundet"</string> <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Intet netværk"</string> - <!-- no translation found for quick_settings_wifi_off_label (7558778100843885864) --> - <skip /> - <!-- no translation found for quick_settings_wifi_display_label (6893592964463624333) --> - <skip /> - <!-- no translation found for quick_settings_wifi_display_no_connection_label (7834964244709912066) --> - <skip /> + <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi slået fra"</string> + <string name="quick_settings_wifi_display_label" msgid="6893592964463624333">"Wi-Fi Display"</string> + <string name="quick_settings_wifi_display_no_connection_label" msgid="7834964244709912066">"Ingen forbindelse til Wi-Fi Display"</string> <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Lysstyrke"</string> <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTO"</string> </resources> diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml index 756f5e3..1bccbbc 100644 --- a/packages/SystemUI/res/values-es-rUS/strings.xml +++ b/packages/SystemUI/res/values-es-rUS/strings.xml @@ -154,8 +154,8 @@ <string name="start_dreams" msgid="870400522982252717">"Iniciar Dreams"</string> <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Modo de avión"</string> - <string name="quick_settings_battery_charging_label" msgid="490074774465309209">"Cargando <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string> - <string name="quick_settings_battery_charged_label" msgid="8865413079414246081">"Cobrado"</string> + <string name="quick_settings_battery_charging_label" msgid="490074774465309209">"Cargando (<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>)"</string> + <string name="quick_settings_battery_charged_label" msgid="8865413079414246081">"Cargada"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> dispositivos)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth desactivado"</string> diff --git a/packages/SystemUI/res/values-et/strings.xml b/packages/SystemUI/res/values-et/strings.xml index 8113e8d..ce1c578 100644 --- a/packages/SystemUI/res/values-et/strings.xml +++ b/packages/SystemUI/res/values-et/strings.xml @@ -172,8 +172,8 @@ <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Ühendus puudub"</string> <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Võrku pole"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"WiFi-ühendus on väljas"</string> - <string name="quick_settings_wifi_display_label" msgid="6893592964463624333">"WiFi kuva"</string> - <string name="quick_settings_wifi_display_no_connection_label" msgid="7834964244709912066">"WiFi-ühenduse puudumise kuva"</string> + <string name="quick_settings_wifi_display_label" msgid="6893592964463624333">"WiFi-ekraan"</string> + <string name="quick_settings_wifi_display_no_connection_label" msgid="7834964244709912066">"WiFi-ekraani ühendus puudub"</string> <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Heledus"</string> <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTOMAATNE"</string> </resources> diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml index bbf3aed..f74383e 100644 --- a/packages/SystemUI/res/values-nb/strings.xml +++ b/packages/SystemUI/res/values-nb/strings.xml @@ -168,17 +168,12 @@ <string name="quick_settings_settings_label" msgid="5326556592578065401">"Innstillinger"</string> <string name="quick_settings_time_label" msgid="4635969182239736408">"Tidspunkt"</string> <string name="quick_settings_user_label" msgid="5238995632130897840">"Meg"</string> - <!-- no translation found for quick_settings_wifi_label (9135344704899546041) --> - <skip /> - <!-- no translation found for quick_settings_wifi_not_connected (7171904845345573431) --> - <skip /> + <string name="quick_settings_wifi_label" msgid="9135344704899546041">"Wi-Fi"</string> + <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Ikke tilkoblet"</string> <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Ingen nettverk"</string> - <!-- no translation found for quick_settings_wifi_off_label (7558778100843885864) --> - <skip /> - <!-- no translation found for quick_settings_wifi_display_label (6893592964463624333) --> - <skip /> - <!-- no translation found for quick_settings_wifi_display_no_connection_label (7834964244709912066) --> - <skip /> + <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi er av"</string> + <string name="quick_settings_wifi_display_label" msgid="6893592964463624333">"Wi-Fi-skjerm"</string> + <string name="quick_settings_wifi_display_no_connection_label" msgid="7834964244709912066">"Ingen tilkobling til Wi-Fi-skjermen"</string> <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Lysstyrke"</string> <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTO"</string> </resources> diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml index 377a617..8730f80 100644 --- a/packages/SystemUI/res/values-pt/strings.xml +++ b/packages/SystemUI/res/values-pt/strings.xml @@ -170,17 +170,12 @@ <string name="quick_settings_settings_label" msgid="5326556592578065401">"Configurações"</string> <string name="quick_settings_time_label" msgid="4635969182239736408">"Hora"</string> <string name="quick_settings_user_label" msgid="5238995632130897840">"Eu"</string> - <!-- no translation found for quick_settings_wifi_label (9135344704899546041) --> - <skip /> - <!-- no translation found for quick_settings_wifi_not_connected (7171904845345573431) --> - <skip /> + <string name="quick_settings_wifi_label" msgid="9135344704899546041">"Wi-Fi"</string> + <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Não conectado"</string> <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Sem rede"</string> - <!-- no translation found for quick_settings_wifi_off_label (7558778100843885864) --> - <skip /> - <!-- no translation found for quick_settings_wifi_display_label (6893592964463624333) --> - <skip /> - <!-- no translation found for quick_settings_wifi_display_no_connection_label (7834964244709912066) --> - <skip /> + <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi desligado"</string> + <string name="quick_settings_wifi_display_label" msgid="6893592964463624333">"Wi-Fi Display"</string> + <string name="quick_settings_wifi_display_no_connection_label" msgid="7834964244709912066">"Sem conexão Wi-Fi Display"</string> <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Brilho"</string> <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTO"</string> </resources> diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml index 69ac9bc..8da1e80 100644 --- a/packages/SystemUI/res/values-ru/strings.xml +++ b/packages/SystemUI/res/values-ru/strings.xml @@ -170,17 +170,12 @@ <string name="quick_settings_settings_label" msgid="5326556592578065401">"Настройки"</string> <string name="quick_settings_time_label" msgid="4635969182239736408">"Время"</string> <string name="quick_settings_user_label" msgid="5238995632130897840">"Пользователь"</string> - <!-- no translation found for quick_settings_wifi_label (9135344704899546041) --> - <skip /> - <!-- no translation found for quick_settings_wifi_not_connected (7171904845345573431) --> - <skip /> + <string name="quick_settings_wifi_label" msgid="9135344704899546041">"Wi-Fi"</string> + <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Нет соединения"</string> <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Нет сети"</string> - <!-- no translation found for quick_settings_wifi_off_label (7558778100843885864) --> - <skip /> - <!-- no translation found for quick_settings_wifi_display_label (6893592964463624333) --> - <skip /> - <!-- no translation found for quick_settings_wifi_display_no_connection_label (7834964244709912066) --> - <skip /> + <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi выкл."</string> + <string name="quick_settings_wifi_display_label" msgid="6893592964463624333">"Проектор вкл."</string> + <string name="quick_settings_wifi_display_no_connection_label" msgid="7834964244709912066">"Проектор выкл."</string> <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Яркость"</string> <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"АВТОНАСТРОЙКА"</string> </resources> diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml index 8d7e8c4..728d61f 100644 --- a/packages/SystemUI/res/values-sv/strings.xml +++ b/packages/SystemUI/res/values-sv/strings.xml @@ -168,17 +168,12 @@ <string name="quick_settings_settings_label" msgid="5326556592578065401">"Inställningar"</string> <string name="quick_settings_time_label" msgid="4635969182239736408">"Tid"</string> <string name="quick_settings_user_label" msgid="5238995632130897840">"Jag"</string> - <!-- no translation found for quick_settings_wifi_label (9135344704899546041) --> - <skip /> - <!-- no translation found for quick_settings_wifi_not_connected (7171904845345573431) --> - <skip /> + <string name="quick_settings_wifi_label" msgid="9135344704899546041">"Wi-Fi"</string> + <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Ej ansluten"</string> <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Inget nätverk"</string> - <!-- no translation found for quick_settings_wifi_off_label (7558778100843885864) --> - <skip /> - <!-- no translation found for quick_settings_wifi_display_label (6893592964463624333) --> - <skip /> - <!-- no translation found for quick_settings_wifi_display_no_connection_label (7834964244709912066) --> - <skip /> + <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi är inaktiverat"</string> + <string name="quick_settings_wifi_display_label" msgid="6893592964463624333">"Wi-Fi visas"</string> + <string name="quick_settings_wifi_display_no_connection_label" msgid="7834964244709912066">"Ingen Wi-Fi-anslutning visas"</string> <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Ljusstyrka"</string> <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTO"</string> </resources> diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml index a743c9e..faa7ab7 100644 --- a/packages/SystemUI/res/values-zh-rCN/strings.xml +++ b/packages/SystemUI/res/values-zh-rCN/strings.xml @@ -173,7 +173,7 @@ <string name="quick_settings_wifi_label" msgid="9135344704899546041">"Wi-Fi"</string> <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"未连接"</string> <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"无网络"</string> - <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"已关闭 Wi-Fi"</string> + <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi 已关闭"</string> <string name="quick_settings_wifi_display_label" msgid="6893592964463624333">"Wi-Fi 显示设备"</string> <string name="quick_settings_wifi_display_no_connection_label" msgid="7834964244709912066">"无 Wi-Fi 显示设备连接"</string> <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"亮度"</string> diff --git a/packages/SystemUI/res/values-zu/strings.xml b/packages/SystemUI/res/values-zu/strings.xml index 64a3699..6dbdcc7 100644 --- a/packages/SystemUI/res/values-zu/strings.xml +++ b/packages/SystemUI/res/values-zu/strings.xml @@ -172,7 +172,7 @@ <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Akuxhunyiwe"</string> <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Ayikho inethiwekhi"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"I-Wi-Fi icimile"</string> - <string name="quick_settings_wifi_display_label" msgid="6893592964463624333">"Ukusboniswa kwe-Wi-"</string> + <string name="quick_settings_wifi_display_label" msgid="6893592964463624333">"Ukuboniswa kwe-Wi-"</string> <string name="quick_settings_wifi_display_no_connection_label" msgid="7834964244709912066">"Alukho uxhumo lokubonisa le-Wi-Fi"</string> <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Ukugqama"</string> <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"OKUZENZAKALELAYO"</string> diff --git a/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java b/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java index 0671e44..a98c4dc 100644 --- a/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java +++ b/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java @@ -261,6 +261,19 @@ public class ImageWallpaper extends WallpaperService { } } + @Override + public void onSurfaceRedrawNeeded(SurfaceHolder holder) { + if (DEBUG) { + Log.d(TAG, "onSurfaceRedrawNeeded:"); + } + super.onSurfaceRedrawNeeded(holder); + + synchronized (mLock) { + mRedrawNeeded = true; + drawFrameLocked(); + } + } + void drawFrameLocked() { if (!mVisible) { if (DEBUG) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java index 3fea0a0..12e749d 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java @@ -1376,12 +1376,34 @@ public class PhoneStatusBar extends BaseStatusBar { private void setStatusBarLowProfile(boolean lightsOut) { if (mLightsOutAnimation == null) { - mLightsOutAnimation = ObjectAnimator.ofFloat(mStatusBarContents, View.ALPHA, 0); - mLightsOutAnimation.setDuration(750); - - mLightsOnAnimation = new AnimatorSet(); - mLightsOnAnimation = ObjectAnimator.ofFloat(mStatusBarContents, View.ALPHA, 1); - mLightsOnAnimation.setDuration(250); + final View notifications = mStatusBarView.findViewById(R.id.notification_icon_area); + final View systemIcons = mStatusBarView.findViewById(R.id.statusIcons); + final View signal = mStatusBarView.findViewById(R.id.signal_cluster); + final View battery = mStatusBarView.findViewById(R.id.battery); + final View clock = mStatusBarView.findViewById(R.id.clock); + + final AnimatorSet lightsOutAnim = new AnimatorSet(); + lightsOutAnim.playTogether( + ObjectAnimator.ofFloat(notifications, View.ALPHA, 0), + ObjectAnimator.ofFloat(systemIcons, View.ALPHA, 0), + ObjectAnimator.ofFloat(signal, View.ALPHA, 0), + ObjectAnimator.ofFloat(battery, View.ALPHA, 0.5f), + ObjectAnimator.ofFloat(clock, View.ALPHA, 0.5f) + ); + lightsOutAnim.setDuration(750); + + final AnimatorSet lightsOnAnim = new AnimatorSet(); + lightsOnAnim.playTogether( + ObjectAnimator.ofFloat(notifications, View.ALPHA, 1), + ObjectAnimator.ofFloat(systemIcons, View.ALPHA, 1), + ObjectAnimator.ofFloat(signal, View.ALPHA, 1), + ObjectAnimator.ofFloat(battery, View.ALPHA, 1), + ObjectAnimator.ofFloat(clock, View.ALPHA, 1) + ); + lightsOnAnim.setDuration(250); + + mLightsOutAnimation = lightsOutAnim; + mLightsOnAnimation = lightsOnAnim; } mLightsOutAnimation.cancel(); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettings.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettings.java index f3c2df1..d63d517 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettings.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettings.java @@ -71,6 +71,7 @@ import java.util.ArrayList; * */ class QuickSettings { + public static final boolean SHOW_IME_TILE = false; private Context mContext; private PanelBar mBar; @@ -274,12 +275,7 @@ class QuickSettings { timeTile.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - // TODO: Jump into the clock application - Intent intent = new Intent(); - intent.setComponent(new ComponentName( - "com.google.android.deskclock", - "com.android.deskclock.DeskClock")); - startSettingsActivity(intent); + startSettingsActivity(android.provider.Settings.ACTION_DATE_SETTINGS); } }); mModel.addTimeTile(timeTile, new QuickSettingsModel.RefreshCallback() { @@ -566,32 +562,34 @@ class QuickSettings { }); parent.addView(wifiDisplayTile); - // IME - QuickSettingsTileView imeTile = (QuickSettingsTileView) - inflater.inflate(R.layout.quick_settings_tile, parent, false); - imeTile.setContent(R.layout.quick_settings_tile_ime, inflater); - imeTile.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - try { - mBar.collapseAllPanels(true); - Intent intent = new Intent(Settings.ACTION_SHOW_INPUT_METHOD_PICKER); - PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, 0, intent, 0); - pendingIntent.send(); - } catch (Exception e) {} - } - }); - mModel.addImeTile(imeTile, new QuickSettingsModel.RefreshCallback() { - @Override - public void refreshView(QuickSettingsTileView view, State state) { - TextView tv = (TextView) view.findViewById(R.id.ime_textview); - if (state.label != null) { - tv.setText(state.label); + if (SHOW_IME_TILE) { + // IME + QuickSettingsTileView imeTile = (QuickSettingsTileView) + inflater.inflate(R.layout.quick_settings_tile, parent, false); + imeTile.setContent(R.layout.quick_settings_tile_ime, inflater); + imeTile.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + try { + mBar.collapseAllPanels(true); + Intent intent = new Intent(Settings.ACTION_SHOW_INPUT_METHOD_PICKER); + PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, 0, intent, 0); + pendingIntent.send(); + } catch (Exception e) {} } - view.setVisibility(state.enabled ? View.VISIBLE : View.GONE); - } - }); - parent.addView(imeTile); + }); + mModel.addImeTile(imeTile, new QuickSettingsModel.RefreshCallback() { + @Override + public void refreshView(QuickSettingsTileView view, State state) { + TextView tv = (TextView) view.findViewById(R.id.ime_textview); + if (state.label != null) { + tv.setText(state.label); + } + view.setVisibility(state.enabled ? View.VISIBLE : View.GONE); + } + }); + parent.addView(imeTile); + } // Bug reports QuickSettingsTileView bugreportTile = (QuickSettingsTileView) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsModel.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsModel.java index 5adfeb1..6b9a321 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsModel.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsModel.java @@ -184,7 +184,7 @@ class QuickSettingsModel implements BluetoothStateChangeCallback, private State mLocationState = new State(); private QuickSettingsTileView mImeTile; - private RefreshCallback mImeCallback; + private RefreshCallback mImeCallback = null; private State mImeState = new State(); private QuickSettingsTileView mRotationLockTile; @@ -551,7 +551,9 @@ class QuickSettingsModel implements BluetoothStateChangeCallback, mImeState.enabled = (visible && needsToShowImeSwitchOngoingNotification(imm)); mImeState.label = getCurrentInputMethodName(mContext, mContext.getContentResolver(), imm, imis, mContext.getPackageManager()); - mImeCallback.refreshView(mImeTile, mImeState); + if (mImeCallback != null) { + mImeCallback.refreshView(mImeTile, mImeState); + } } private static String getCurrentInputMethodName(Context context, ContentResolver resolver, InputMethodManager imm, List<InputMethodInfo> imis, PackageManager pm) { diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java index c3bd988..93f2aa5 100755 --- a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java +++ b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java @@ -730,14 +730,15 @@ public class PhoneWindowManager implements WindowManagerPolicy { public void run() { // The context isn't read if (mLongPressOnPowerBehavior < 0) { - if (FactoryTest.isLongPressOnPowerOffEnabled()) { - mLongPressOnPowerBehavior = LONG_PRESS_POWER_SHUT_OFF_NO_CONFIRM; - } else { - mLongPressOnPowerBehavior = mContext.getResources().getInteger( - com.android.internal.R.integer.config_longPressOnPowerBehavior); - } + mLongPressOnPowerBehavior = mContext.getResources().getInteger( + com.android.internal.R.integer.config_longPressOnPowerBehavior); + } + int resolvedBehavior = mLongPressOnPowerBehavior; + if (FactoryTest.isLongPressOnPowerOffEnabled()) { + resolvedBehavior = LONG_PRESS_POWER_SHUT_OFF_NO_CONFIRM; } - switch (mLongPressOnPowerBehavior) { + + switch (resolvedBehavior) { case LONG_PRESS_POWER_NOTHING: break; case LONG_PRESS_POWER_GLOBAL_ACTIONS: @@ -753,8 +754,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { mPowerKeyHandled = true; performHapticFeedbackLw(null, HapticFeedbackConstants.LONG_PRESS, false); sendCloseSystemWindows(SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS); - mWindowManagerFuncs.shutdown( - mLongPressOnPowerBehavior == LONG_PRESS_POWER_SHUT_OFF); + mWindowManagerFuncs.shutdown(resolvedBehavior == LONG_PRESS_POWER_SHUT_OFF); break; } } @@ -775,7 +775,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { if (keyguardShowing) { // since it took two seconds of long press to bring this up, // poke the wake lock so they have some time to see the dialog. - mKeyguardMediator.pokeWakelock(); + mKeyguardMediator.userActivity(); } } @@ -1140,6 +1140,11 @@ public class PhoneWindowManager implements WindowManagerPolicy { | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN; + if (ActivityManager.isHighEndGfx()) { + lp.flags |= WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED; + lp.privateFlags |= + WindowManager.LayoutParams.PRIVATE_FLAG_FORCE_HARDWARE_ACCELERATED; + } lp.format = PixelFormat.TRANSLUCENT; lp.setTitle("PointerLocation"); WindowManager wm = (WindowManager) @@ -4298,6 +4303,13 @@ public class PhoneWindowManager implements WindowManagerPolicy { if (mKeyguardMediator != null) { mKeyguardMediator.setCurrentUser(newUserId); } + if (mStatusBarService != null) { + try { + mStatusBarService.setCurrentUser(newUserId); + } catch (RemoteException e) { + // oh well + } + } } @Override diff --git a/policy/src/com/android/internal/policy/impl/keyguard/ClockView.java b/policy/src/com/android/internal/policy/impl/keyguard/ClockView.java index cbbc92c..97a3f26 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/ClockView.java +++ b/policy/src/com/android/internal/policy/impl/keyguard/ClockView.java @@ -33,7 +33,6 @@ import android.widget.TextView; import java.lang.ref.WeakReference; import java.text.DateFormatSymbols; import java.util.Calendar; - import com.android.internal.R; /** diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardGlowStripView.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardGlowStripView.java new file mode 100644 index 0000000..e1c95f0 --- /dev/null +++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardGlowStripView.java @@ -0,0 +1,139 @@ +/* + * Copyright (C) 2012 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.internal.policy.impl.keyguard; + +import android.animation.Animator; +import android.animation.AnimatorListenerAdapter; +import android.animation.ValueAnimator; +import android.animation.ValueAnimator.AnimatorUpdateListener; +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.drawable.Drawable; +import android.util.AttributeSet; +import android.view.animation.DecelerateInterpolator; +import android.view.animation.Interpolator; +import android.view.animation.LinearInterpolator; +import android.widget.LinearLayout; + +import com.android.internal.R; + +/** + * A layout which animates a strip of horizontal, pulsing dots on request. This is used + * to indicate the presence of pages to the left / right. + */ +public class KeyguardGlowStripView extends LinearLayout { + private static final int DURATION = 500; + + private static final float SLIDING_WINDOW_SIZE = 0.4f; + private int mDotStripTop; + private int mHorizontalDotGap; + + private int mDotSize; + private int mNumDots; + private Drawable mDotDrawable; + private boolean mLeftToRight = true; + + private float mAnimationProgress = 0f; + private boolean mDrawDots = false; + private ValueAnimator mAnimator; + private Interpolator mDotAlphaInterpolator = new DecelerateInterpolator(0.5f); + + public KeyguardGlowStripView(Context context) { + this(context, null, 0); + } + + public KeyguardGlowStripView(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public KeyguardGlowStripView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + + TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.KeyguardGlowStripView); + mDotSize = a.getDimensionPixelSize(R.styleable.KeyguardGlowStripView_dotSize, mDotSize); + mNumDots = a.getInt(R.styleable.KeyguardGlowStripView_numDots, mNumDots); + mDotDrawable = a.getDrawable(R.styleable.KeyguardGlowStripView_glowDot); + mLeftToRight = a.getBoolean(R.styleable.KeyguardGlowStripView_leftToRight, mLeftToRight); + } + + protected void onSizeChanged(int w, int h, int oldw, int oldh) { + int availableWidth = w - getPaddingLeft() - getPaddingRight(); + mHorizontalDotGap = (availableWidth - mDotSize * mNumDots) / (mNumDots - 1); + mDotStripTop = getPaddingTop(); + invalidate(); + } + + @Override + protected void dispatchDraw(Canvas canvas) { + super.dispatchDraw(canvas); + + if (!mDrawDots) return; + + int xOffset = getPaddingLeft(); + mDotDrawable.setBounds(0, 0, mDotSize, mDotSize); + + for (int i = 0; i < mNumDots; i++) { + // We fudge the relative position to provide a fade in of the first dot and a fade + // out of the final dot. + float relativeDotPosition = SLIDING_WINDOW_SIZE / 2 + ((1.0f * i) / (mNumDots - 1)) * + (1 - SLIDING_WINDOW_SIZE); + float distance = Math.abs(relativeDotPosition - mAnimationProgress); + float alpha = Math.max(0, 1 - distance / (SLIDING_WINDOW_SIZE / 2)); + + alpha = mDotAlphaInterpolator.getInterpolation(alpha); + + canvas.save(); + canvas.translate(xOffset, mDotStripTop); + mDotDrawable.setAlpha((int) (alpha * 255)); + mDotDrawable.draw(canvas); + canvas.restore(); + xOffset += mDotSize + mHorizontalDotGap; + } + } + + public void makeEmGo() { + if (mAnimator != null) { + mAnimator.cancel(); + } + float from = mLeftToRight ? 0f : 1f; + float to = mLeftToRight ? 1f : 0f; + mAnimator = ValueAnimator.ofFloat(from, to); + mAnimator.setDuration(DURATION); + mAnimator.setInterpolator(new LinearInterpolator()); + mAnimator.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + mDrawDots = false; + // make sure we draw one frame at the end with everything gone. + invalidate(); + } + + @Override + public void onAnimationStart(Animator animation) { + mDrawDots = true; + } + }); + mAnimator.addUpdateListener(new AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator animation) { + mAnimationProgress = (Float) animation.getAnimatedValue(); + invalidate(); + } + }); + mAnimator.start(); + } +} diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java index 1d1c7fc..4d56700 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java +++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java @@ -141,7 +141,8 @@ public class KeyguardHostView extends KeyguardViewBase { @Override protected void onFinishInflate() { mAppWidgetContainer = (KeyguardWidgetPager) findViewById(R.id.app_widget_container); - mAppWidgetContainer.setVisibility(VISIBLE); + KeyguardWidgetRegion kgwr = (KeyguardWidgetRegion) findViewById(R.id.kg_widget_region); + kgwr.setVisibility(VISIBLE); mSecurityViewContainer = (ViewFlipper) findViewById(R.id.view_flipper); // This code manages showing/hiding the transport control. We keep it around and only @@ -233,7 +234,7 @@ public class KeyguardHostView extends KeyguardViewBase { public void userActivity(long timeout) { if (mViewMediatorCallback != null) { - mViewMediatorCallback.pokeWakelock(timeout); + mViewMediatorCallback.userActivity(timeout); } } @@ -637,7 +638,7 @@ public class KeyguardHostView extends KeyguardViewBase { if (DEBUG) Log.d(TAG, "poking wake lock immediately"); } if (mViewMediatorCallback != null) { - mViewMediatorCallback.pokeWakelock(); + mViewMediatorCallback.wakeUp(); } } diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardSelectorView.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardSelectorView.java index f99765d..1977b52 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardSelectorView.java +++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardSelectorView.java @@ -26,15 +26,12 @@ import android.content.Intent; import android.os.RemoteException; import android.os.UserHandle; import android.provider.MediaStore; -import android.telephony.TelephonyManager; import android.util.AttributeSet; import android.util.Log; import android.util.Slog; import android.view.View; -import android.widget.Button; import android.widget.LinearLayout; -import com.android.internal.telephony.IccCardConstants; import com.android.internal.telephony.IccCardConstants.State; import com.android.internal.widget.LockPatternUtils; import com.android.internal.widget.multiwaveview.GlowPadView; @@ -79,6 +76,7 @@ public class KeyguardSelectorView extends LinearLayout implements KeyguardSecuri case com.android.internal.R.drawable.ic_lockscreen_unlock_phantom: case com.android.internal.R.drawable.ic_lockscreen_unlock: + mCallback.userActivity(0); mCallback.dismiss(false); break; } @@ -89,6 +87,7 @@ public class KeyguardSelectorView extends LinearLayout implements KeyguardSecuri } public void onGrabbed(View v, int handle) { + mCallback.userActivity(0); doTransition(mFadeView, 0.0f); } diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewManager.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewManager.java index 1abcc10..a3a9c5f 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewManager.java +++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewManager.java @@ -155,6 +155,8 @@ public class KeyguardViewManager { WindowManager.LayoutParams.PRIVATE_FLAG_FORCE_HARDWARE_ACCELERATED; } lp.privateFlags |= WindowManager.LayoutParams.PRIVATE_FLAG_SET_NEEDS_MENU_KEY; + lp.inputFeatures |= WindowManager.LayoutParams.INPUT_FEATURE_DISABLE_USER_ACTIVITY; + lp.userActivityTimeout = KeyguardViewMediator.AWAKE_INTERVAL_DEFAULT_MS; lp.setTitle(isActivity ? "KeyguardMock" : "Keyguard"); mWindowLayoutParams = lp; mViewManager.addView(mKeyguardHost, lp); diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewMediator.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewMediator.java index 212a6bb..2c415db 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewMediator.java +++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewMediator.java @@ -104,7 +104,6 @@ public class KeyguardViewMediator { "com.android.internal.policy.impl.PhoneWindowManager.DELAYED_KEYGUARD"; // used for handler messages - private static final int TIMEOUT = 1; private static final int SHOW = 2; private static final int HIDE = 3; private static final int RESET = 4; @@ -167,12 +166,6 @@ public class KeyguardViewMediator { private UserManager mUserManager; /** - * Used to keep the device awake while the keyguard is showing, i.e for - * calls to {@link #pokeWakelock()} - */ - private PowerManager.WakeLock mWakeLock; - - /** * Used to keep the device awake while to ensure the keyguard finishes opening before * we sleep. */ @@ -215,8 +208,6 @@ public class KeyguardViewMediator { */ private int mDelayedShowingSequence; - private int mWakelockSequence; - /** * If the user has disabled the keyguard, then requests to exit, this is * how we'll ultimately let them know whether it was successful. We use this @@ -262,15 +253,16 @@ public class KeyguardViewMediator { public interface ViewMediatorCallback { /** - * Request the wakelock to be poked for the default amount of time. + * Wake the device immediately. */ - void pokeWakelock(); + void wakeUp(); /** - * Request the wakelock to be poked for a specific amount of time. + * Reports user activity and requests that the screen stay on for the specified + * amount of time. * @param millis The amount of time in millis. */ - void pokeWakelock(long millis); + void userActivity(long millis); /** * Report that the keyguard is done. @@ -402,12 +394,12 @@ public class KeyguardViewMediator { }; ViewMediatorCallback mViewMediatorCallback = new ViewMediatorCallback() { - public void pokeWakelock() { - KeyguardViewMediator.this.pokeWakelock(); + public void wakeUp() { + KeyguardViewMediator.this.wakeUp(); } - public void pokeWakelock(long holdMs) { - KeyguardViewMediator.this.pokeWakelock(holdMs); + public void userActivity(long holdMs) { + KeyguardViewMediator.this.userActivity(holdMs); } public void keyguardDone(boolean authenticated) { @@ -424,19 +416,18 @@ public class KeyguardViewMediator { } }; - public void pokeWakelock() { - pokeWakelock(AWAKE_INTERVAL_DEFAULT_MS); + public void wakeUp() { + mPM.wakeUp(SystemClock.uptimeMillis()); } - public void pokeWakelock(long holdMs) { - synchronized (this) { - if (DBG_WAKE) Log.d(TAG, "pokeWakelock(" + holdMs + ")"); - mWakeLock.acquire(); - mHandler.removeMessages(TIMEOUT); - mWakelockSequence++; - Message msg = mHandler.obtainMessage(TIMEOUT, mWakelockSequence, 0); - mHandler.sendMessageDelayed(msg, holdMs); - } + public void userActivity() { + userActivity(AWAKE_INTERVAL_DEFAULT_MS); + } + + public void userActivity(long holdMs) { + // We ignore the hold time. Eventually we should remove it. + // Instead, the keyguard window has an explicit user activity timeout set on it. + mPM.userActivity(SystemClock.uptimeMillis(), false); } /** @@ -448,9 +439,6 @@ public class KeyguardViewMediator { mContext = context; mPM = (PowerManager) context.getSystemService(Context.POWER_SERVICE); mUserManager = (UserManager) mContext.getSystemService(Context.USER_SERVICE); - mWakeLock = mPM.newWakeLock( - PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "keyguard"); - mWakeLock.setReferenceCounted(false); mShowKeyguardWakeLock = mPM.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "show keyguard"); mShowKeyguardWakeLock.setReferenceCounted(false); @@ -737,7 +725,6 @@ public class KeyguardViewMediator { if (mHidden != isHidden) { mHidden = isHidden; updateActivityLockScreenState(); - adjustUserActivityLocked(); adjustStatusBarLocked(); } } @@ -1050,9 +1037,6 @@ public class KeyguardViewMediator { @Override public void handleMessage(Message msg) { switch (msg.what) { - case TIMEOUT: - handleTimeout(msg.arg1); - return ; case SHOW: handleShow(); return ; @@ -1103,9 +1087,8 @@ public class KeyguardViewMediator { if (DEBUG) Log.d(TAG, "handleKeyguardDone"); handleHide(); if (wakeup) { - mPM.wakeUp(SystemClock.uptimeMillis()); + wakeUp(); } - mWakeLock.release(); sendUserPresentBroadcast(); } @@ -1137,21 +1120,6 @@ public class KeyguardViewMediator { } } - /** - * Handles the message sent by {@link #pokeWakelock} - * @param seq used to determine if anything has changed since the message - * was sent. - * @see #TIMEOUT - */ - private void handleTimeout(int seq) { - synchronized (KeyguardViewMediator.this) { - if (DEBUG) Log.d(TAG, "handleTimeout"); - if (seq == mWakelockSequence) { - mWakeLock.release(); - } - } - } - private void playSounds(boolean locked) { // User feedback for keyguard. @@ -1200,8 +1168,8 @@ public class KeyguardViewMediator { mKeyguardViewManager.show(); mShowing = true; updateActivityLockScreenState(); - adjustUserActivityLocked(); adjustStatusBarLocked(); + userActivity(); try { ActivityManagerNative.getDefault().closeSystemDialogs("lock"); } catch (RemoteException e) { @@ -1235,23 +1203,10 @@ public class KeyguardViewMediator { mKeyguardViewManager.hide(); mShowing = false; updateActivityLockScreenState(); - adjustUserActivityLocked(); adjustStatusBarLocked(); } } - private void adjustUserActivityLocked() { - // disable user activity if we are shown and not hidden - if (DEBUG) Log.d(TAG, "adjustUserActivityLocked mShowing: " + mShowing + " mHidden: " + mHidden); - boolean enabled = !mShowing || mHidden; - // FIXME: Replace this with a new timeout control mechanism. - //mRealPowerManager.enableUserActivity(enabled); - if (!enabled && mScreenOn) { - // reinstate our short screen timeout policy - pokeWakelock(); - } - } - private void adjustStatusBarLocked() { if (mStatusBarManager == null) { mStatusBarManager = (StatusBarManager) @@ -1320,7 +1275,7 @@ public class KeyguardViewMediator { if (!mKeyguardViewManager.wakeWhenReadyTq(keyCode)) { // poke wakelock ourselves if keyguard is no longer active Log.w(TAG, "mKeyguardViewManager.wakeWhenReadyTq did not poke wake lock, so poke it ourselves"); - pokeWakelock(); + userActivity(); } /** @@ -1328,10 +1283,6 @@ public class KeyguardViewMediator { * release the handoff wakelock */ mWakeAndHandOff.release(); - - if (!mWakeLock.isHeld()) { - Log.w(TAG, "mWakeLock not held in mKeyguardViewManager.wakeWhenReadyTq"); - } } } diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetPager.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetPager.java index fd9362a..4af7a25 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetPager.java +++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetPager.java @@ -20,6 +20,7 @@ import android.appwidget.AppWidgetHostView; import android.content.Context; import android.util.AttributeSet; import android.view.Gravity; +import android.view.MotionEvent; import android.view.View; import android.view.animation.AccelerateInterpolator; import android.view.animation.DecelerateInterpolator; @@ -63,6 +64,12 @@ public class KeyguardWidgetPager extends PagedView { addView(frame); } + protected void onUnhandledTap(MotionEvent ev) { + if (getParent() instanceof KeyguardWidgetRegion) { + ((KeyguardWidgetRegion) getParent()).showPagingFeedback(); + } + } + /* * This interpolator emulates the rate at which the perceived scale of an object changes * as its distance from a camera increases. When this interpolator is applied to a scale diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetRegion.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetRegion.java new file mode 100644 index 0000000..e9cf9a5 --- /dev/null +++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetRegion.java @@ -0,0 +1,74 @@ +/* + * Copyright (C) 2012 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.internal.policy.impl.keyguard; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.View; +import android.widget.LinearLayout; + +import com.android.internal.R; +import com.android.internal.policy.impl.keyguard.PagedView.PageSwitchListener; + +public class KeyguardWidgetRegion extends LinearLayout implements PageSwitchListener { + KeyguardGlowStripView mLeftStrip; + KeyguardGlowStripView mRightStrip; + KeyguardWidgetPager mPager; + private int mPage = 0; + + public KeyguardWidgetRegion(Context context) { + this(context, null, 0); + } + + public KeyguardWidgetRegion(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public KeyguardWidgetRegion(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + @Override + protected void onFinishInflate() { + super.onFinishInflate(); + mLeftStrip = (KeyguardGlowStripView) findViewById(R.id.left_strip); + mRightStrip = (KeyguardGlowStripView) findViewById(R.id.right_strip); + mPager = (KeyguardWidgetPager) findViewById(R.id.app_widget_container); + mPager.setPageSwitchListener(this); + + setSoundEffectsEnabled(false); + setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + showPagingFeedback(); + } + }); + } + + public void showPagingFeedback() { + if (mPage < mPager.getPageCount() - 1) { + mLeftStrip.makeEmGo(); + } + if (mPage > 0) { + mRightStrip.makeEmGo(); + } + } + + @Override + public void onPageSwitch(View newPage, int newPageIndex) { + mPage = newPageIndex; + } +} diff --git a/services/input/InputDispatcher.cpp b/services/input/InputDispatcher.cpp index be0cec9..7862e17 100644 --- a/services/input/InputDispatcher.cpp +++ b/services/input/InputDispatcher.cpp @@ -1716,6 +1716,16 @@ String8 InputDispatcher::getApplicationWindowLabelLocked( } void InputDispatcher::pokeUserActivityLocked(const EventEntry* eventEntry) { + if (mFocusedWindowHandle != NULL) { + const InputWindowInfo* info = mFocusedWindowHandle->getInfo(); + if (info->inputFeatures & InputWindowInfo::INPUT_FEATURE_DISABLE_USER_ACTIVITY) { +#if DEBUG_DISPATCH_CYCLE + ALOGD("Not poking user activity: disabled by window '%s'.", info->name.string()); +#endif + return; + } + } + int32_t eventType = USER_ACTIVITY_EVENT_OTHER; switch (eventEntry->type) { case EventEntry::TYPE_MOTION: { diff --git a/services/input/InputWindow.h b/services/input/InputWindow.h index 3118099..7bd3af7 100644 --- a/services/input/InputWindow.h +++ b/services/input/InputWindow.h @@ -110,6 +110,8 @@ struct InputWindowInfo { enum { INPUT_FEATURE_DISABLE_TOUCH_PAD_GESTURES = 0x00000001, + INPUT_FEATURE_NO_INPUT_CHANNEL = 0x00000002, + INPUT_FEATURE_DISABLE_USER_ACTIVITY = 0x00000004, }; sp<InputChannel> inputChannel; diff --git a/services/java/com/android/server/InputMethodManagerService.java b/services/java/com/android/server/InputMethodManagerService.java index ec58e43..f06bf8e 100644 --- a/services/java/com/android/server/InputMethodManagerService.java +++ b/services/java/com/android/server/InputMethodManagerService.java @@ -900,14 +900,28 @@ public class InputMethodManagerService extends IInputMethodManager.Stub Slog.d(TAG, "--- calledFromForegroundUserOrSystemProcess ? " + "calling uid = " + uid + " system uid = " + Process.SYSTEM_UID + " calling userId = " + userId + ", foreground user id = " - + mSettings.getCurrentUserId()); + + mSettings.getCurrentUserId() + ", calling uid = " + Binder.getCallingPid()); } if (uid == Process.SYSTEM_UID || userId == mSettings.getCurrentUserId()) { return true; - } else { - Slog.w(TAG, "--- IPC called from background users. Ignore. \n" + getStackTrace()); - return false; } + + // Caveat: A process which has INTERACT_ACROSS_USERS_FULL gets results for the + // foreground user, not for the user of that process. Accordingly InputMethodManagerService + // must not manage background users' states in any functions. + // Note that privacy-sensitive IPCs, such as setInputMethod, are still securely guarded + // by a token. + if (mContext.checkCallingOrSelfPermission( + android.Manifest.permission.INTERACT_ACROSS_USERS_FULL) + == PackageManager.PERMISSION_GRANTED) { + if (DEBUG) { + Slog.d(TAG, "--- Access granted because the calling process has " + + "the INTERACT_ACROSS_USERS_FULL permission"); + } + return true; + } + Slog.w(TAG, "--- IPC called from background users. Ignore. \n" + getStackTrace()); + return false; } private boolean bindCurrentInputMethodService( @@ -1475,9 +1489,6 @@ public class InputMethodManagerService extends IInputMethodManager.Stub final CharSequence title = mRes.getText( com.android.internal.R.string.select_input_method); final CharSequence imiLabel = imi.loadLabel(pm); - if (DEBUG) { - Slog.d(TAG, "--- imiLabel = " + imiLabel); - } final CharSequence summary = mCurrentSubtype != null ? TextUtils.concat(mCurrentSubtype.getDisplayName(mContext, imi.getPackageName(), imi.getServiceInfo().applicationInfo), @@ -1488,15 +1499,22 @@ public class InputMethodManagerService extends IInputMethodManager.Stub mImeSwitcherNotification.setLatestEventInfo( mContext, title, summary, mImeSwitchPendingIntent); if (mNotificationManager != null) { - mNotificationManager.notify( + if (DEBUG) { + Slog.d(TAG, "--- show notification: label = " + imiLabel + + ", summary = " + summary); + } + mNotificationManager.notifyAsUser(null, com.android.internal.R.string.select_input_method, - mImeSwitcherNotification); + mImeSwitcherNotification, UserHandle.ALL); mNotificationShown = true; } } else { if (mNotificationShown && mNotificationManager != null) { - mNotificationManager.cancel( - com.android.internal.R.string.select_input_method); + if (DEBUG) { + Slog.d(TAG, "--- hide notification"); + } + mNotificationManager.cancelAsUser(null, + com.android.internal.R.string.select_input_method, UserHandle.ALL); mNotificationShown = false; } } diff --git a/services/java/com/android/server/LocationManagerService.java b/services/java/com/android/server/LocationManagerService.java index d982d0d..2197e31 100644 --- a/services/java/com/android/server/LocationManagerService.java +++ b/services/java/com/android/server/LocationManagerService.java @@ -247,6 +247,12 @@ public class LocationManagerService extends ILocationManager.Stub implements Run } private void loadProvidersLocked() { + // create a passive location provider, which is always enabled + PassiveProvider passiveProvider = new PassiveProvider(this); + addProviderLocked(passiveProvider); + mEnabledProviders.add(passiveProvider.getName()); + mPassiveProvider = passiveProvider; + if (GpsLocationProvider.isSupported()) { // Create a gps location provider GpsLocationProvider gpsProvider = new GpsLocationProvider(mContext, this); @@ -256,12 +262,6 @@ public class LocationManagerService extends ILocationManager.Stub implements Run mRealProviders.put(LocationManager.GPS_PROVIDER, gpsProvider); } - // create a passive location provider, which is always enabled - PassiveProvider passiveProvider = new PassiveProvider(this); - addProviderLocked(passiveProvider); - mEnabledProviders.add(passiveProvider.getName()); - mPassiveProvider = passiveProvider; - /* Load package name(s) containing location provider support. These packages can contain services implementing location providers: diff --git a/services/java/com/android/server/MountService.java b/services/java/com/android/server/MountService.java index 0312705..c512bc1 100644 --- a/services/java/com/android/server/MountService.java +++ b/services/java/com/android/server/MountService.java @@ -1577,9 +1577,16 @@ class MountService extends IMountService.Stub private void warnOnNotMounted() { final StorageVolume primary = getPrimaryPhysicalVolume(); - if (primary != null - && Environment.MEDIA_MOUNTED.equals(getVolumeState(primary.getPath()))) { - Slog.w(TAG, "getSecureContainerList() called when storage not mounted"); + if (primary != null) { + boolean mounted = false; + try { + mounted = Environment.MEDIA_MOUNTED.equals(getVolumeState(primary.getPath())); + } catch (IllegalStateException e) { + } + + if (!mounted) { + Slog.w(TAG, "getSecureContainerList() called when storage not mounted"); + } } } diff --git a/services/java/com/android/server/StatusBarManagerService.java b/services/java/com/android/server/StatusBarManagerService.java index 87b0eb3..5d9441b 100644 --- a/services/java/com/android/server/StatusBarManagerService.java +++ b/services/java/com/android/server/StatusBarManagerService.java @@ -64,7 +64,7 @@ public class StatusBarManagerService extends IStatusBarService.Stub = new HashMap<IBinder,StatusBarNotification>(); // for disabling the status bar - ArrayList<DisableRecord> mDisableRecords = new ArrayList<DisableRecord>(); + final ArrayList<DisableRecord> mDisableRecords = new ArrayList<DisableRecord>(); IBinder mSysUiVisToken = new Binder(); int mDisabled = 0; @@ -75,15 +75,17 @@ public class StatusBarManagerService extends IStatusBarService.Stub int mImeWindowVis = 0; int mImeBackDisposition; IBinder mImeToken = null; + int mCurrentUserId; private class DisableRecord implements IBinder.DeathRecipient { + int userId; String pkg; int what; IBinder token; public void binderDied() { Slog.i(TAG, "binder died for pkg=" + pkg); - disable(0, token, pkg); + disableInternal(userId, 0, token, pkg); token.unlinkToDeath(this, 0); } } @@ -151,20 +153,24 @@ public class StatusBarManagerService extends IStatusBarService.Stub } public void disable(int what, IBinder token, String pkg) { + disableInternal(mCurrentUserId, what, token, pkg); + } + + private void disableInternal(int userId, int what, IBinder token, String pkg) { enforceStatusBar(); synchronized (mLock) { - disableLocked(what, token, pkg); + disableLocked(userId, what, token, pkg); } } - private void disableLocked(int what, IBinder token, String pkg) { + private void disableLocked(int userId, int what, IBinder token, String pkg) { // It's important that the the callback and the call to mBar get done // in the same order when multiple threads are calling this function // so they are paired correctly. The messages on the handler will be // handled in the order they were enqueued, but will be outside the lock. - manageDisableListLocked(what, token, pkg); - final int net = gatherDisableActionsLocked(); + manageDisableListLocked(userId, what, token, pkg); + final int net = gatherDisableActionsLocked(userId); if (net != mDisabled) { mDisabled = net; mHandler.post(new Runnable() { @@ -312,7 +318,10 @@ public class StatusBarManagerService extends IStatusBarService.Stub synchronized (mLock) { updateUiVisibilityLocked(vis, mask); - disableLocked(vis & StatusBarManager.DISABLE_MASK, mSysUiVisToken, + disableLocked( + mCurrentUserId, + vis & StatusBarManager.DISABLE_MASK, + mSysUiVisToken, "WindowManager.LayoutParams"); } } @@ -382,6 +391,12 @@ public class StatusBarManagerService extends IStatusBarService.Stub } } + @Override + public void setCurrentUser(int newUserId) { + if (SPEW) Slog.d(TAG, "Setting current user to user " + newUserId); + mCurrentUserId = newUserId; + } + private void enforceStatusBar() { mContext.enforceCallingOrSelfPermission(android.Manifest.permission.STATUS_BAR, "StatusBarManagerService"); @@ -417,7 +432,7 @@ public class StatusBarManagerService extends IStatusBarService.Stub } } synchronized (mLock) { - switches[0] = gatherDisableActionsLocked(); + switches[0] = gatherDisableActionsLocked(mCurrentUserId); switches[1] = mSystemUiVisibility; switches[2] = mMenuVisible ? 1 : 0; switches[3] = mImeWindowVis; @@ -518,9 +533,10 @@ public class StatusBarManagerService extends IStatusBarService.Stub // ================================================================================ // lock on mDisableRecords - void manageDisableListLocked(int what, IBinder token, String pkg) { + void manageDisableListLocked(int userId, int what, IBinder token, String pkg) { if (SPEW) { - Slog.d(TAG, "manageDisableList what=0x" + Integer.toHexString(what) + " pkg=" + pkg); + Slog.d(TAG, "manageDisableList userId=" + userId + + " what=0x" + Integer.toHexString(what) + " pkg=" + pkg); } // update the list final int N = mDisableRecords.size(); @@ -541,6 +557,7 @@ public class StatusBarManagerService extends IStatusBarService.Stub } else { if (tok == null) { tok = new DisableRecord(); + tok.userId = userId; try { token.linkToDeath(tok, 0); } @@ -556,12 +573,15 @@ public class StatusBarManagerService extends IStatusBarService.Stub } // lock on mDisableRecords - int gatherDisableActionsLocked() { + int gatherDisableActionsLocked(int userId) { final int N = mDisableRecords.size(); // gather the new net flags int net = 0; for (int i=0; i<N; i++) { - net |= mDisableRecords.get(i).what; + final DisableRecord rec = mDisableRecords.get(i); + if (rec.userId == userId) { + net |= rec.what; + } } return net; } @@ -593,13 +613,15 @@ public class StatusBarManagerService extends IStatusBarService.Stub } synchronized (mLock) { + pw.println(" mDisabled=0x" + Integer.toHexString(mDisabled)); final int N = mDisableRecords.size(); - pw.println(" mDisableRecords.size=" + N - + " mDisabled=0x" + Integer.toHexString(mDisabled)); + pw.println(" mDisableRecords.size=" + N); for (int i=0; i<N; i++) { DisableRecord tok = mDisableRecords.get(i); - pw.println(" [" + i + "] what=0x" + Integer.toHexString(tok.what) - + " pkg=" + tok.pkg + " token=" + tok.token); + pw.println(" [" + i + "] userId=" + tok.userId + + " what=0x" + Integer.toHexString(tok.what) + + " pkg=" + tok.pkg + + " token=" + tok.token); } } } diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java index b684c90..eaaf33f 100644 --- a/services/java/com/android/server/SystemServer.java +++ b/services/java/com/android/server/SystemServer.java @@ -631,11 +631,12 @@ class ServerThread extends Thread { } try { - Slog.i(TAG, "Wired Accessory Observer"); + Slog.i(TAG, "Wired Accessory Manager"); // Listen for wired headset changes - new WiredAccessoryObserver(context); + inputManager.setWiredAccessoryCallbacks( + new WiredAccessoryManager(context, inputManager)); } catch (Throwable e) { - reportWtf("starting WiredAccessoryObserver", e); + reportWtf("starting WiredAccessoryManager", e); } try { diff --git a/services/java/com/android/server/WifiService.java b/services/java/com/android/server/WifiService.java index adb63f9..98794c9 100644 --- a/services/java/com/android/server/WifiService.java +++ b/services/java/com/android/server/WifiService.java @@ -21,6 +21,7 @@ import android.app.AlarmManager; import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; +import android.app.TaskStackBuilder; import android.bluetooth.BluetoothAdapter; import android.content.BroadcastReceiver; import android.content.ContentResolver; @@ -1766,9 +1767,10 @@ public class WifiService extends IWifiManager.Stub { mNotification.when = 0; mNotification.icon = ICON_NETWORKS_AVAILABLE; mNotification.flags = Notification.FLAG_AUTO_CANCEL; - mNotification.contentIntent = PendingIntent.getActivityAsUser(mContext, 0, - new Intent(WifiManager.ACTION_PICK_WIFI_NETWORK), 0, - null, UserHandle.CURRENT); + mNotification.contentIntent = TaskStackBuilder.create(mContext) + .addNextIntentWithParentStack( + new Intent(WifiManager.ACTION_PICK_WIFI_NETWORK)) + .getPendingIntent(0, 0, null, UserHandle.CURRENT); } CharSequence title = mContext.getResources().getQuantityText( diff --git a/services/java/com/android/server/WiredAccessoryManager.java b/services/java/com/android/server/WiredAccessoryManager.java new file mode 100644 index 0000000..63e8895 --- /dev/null +++ b/services/java/com/android/server/WiredAccessoryManager.java @@ -0,0 +1,432 @@ +/* + * Copyright (C) 2008 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; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.os.Handler; +import android.os.Looper; +import android.os.Message; +import android.os.PowerManager; +import android.os.PowerManager.WakeLock; +import android.os.UEventObserver; +import android.util.Slog; +import android.media.AudioManager; +import android.util.Log; +import android.view.InputDevice; + +import com.android.internal.R; +import com.android.server.input.InputManagerService; +import com.android.server.input.InputManagerService.WiredAccessoryCallbacks; +import static com.android.server.input.InputManagerService.SW_HEADPHONE_INSERT; +import static com.android.server.input.InputManagerService.SW_MICROPHONE_INSERT; +import static com.android.server.input.InputManagerService.SW_HEADPHONE_INSERT_BIT; +import static com.android.server.input.InputManagerService.SW_MICROPHONE_INSERT_BIT; + +import java.io.File; +import java.io.FileReader; +import java.io.FileNotFoundException; +import java.util.ArrayList; +import java.util.List; + +/** + * <p>WiredAccessoryManager monitors for a wired headset on the main board or dock using + * both the InputManagerService notifyWiredAccessoryChanged interface and the UEventObserver + * subsystem. + */ +final class WiredAccessoryManager implements WiredAccessoryCallbacks { + private static final String TAG = WiredAccessoryManager.class.getSimpleName(); + private static final boolean LOG = true; + + private static final int BIT_HEADSET = (1 << 0); + private static final int BIT_HEADSET_NO_MIC = (1 << 1); + private static final int BIT_USB_HEADSET_ANLG = (1 << 2); + private static final int BIT_USB_HEADSET_DGTL = (1 << 3); + private static final int BIT_HDMI_AUDIO = (1 << 4); + private static final int SUPPORTED_HEADSETS = (BIT_HEADSET|BIT_HEADSET_NO_MIC| + BIT_USB_HEADSET_ANLG|BIT_USB_HEADSET_DGTL| + BIT_HDMI_AUDIO); + + private static final String NAME_H2W = "h2w"; + private static final String NAME_USB_AUDIO = "usb_audio"; + private static final String NAME_HDMI_AUDIO = "hdmi_audio"; + private static final String NAME_HDMI = "hdmi"; + + private static final int MSG_NEW_DEVICE_STATE = 1; + + private final Object mLock = new Object(); + + private final WakeLock mWakeLock; // held while there is a pending route change + private final AudioManager mAudioManager; + + private int mHeadsetState; + + private int mSwitchValues; + + private final WiredAccessoryObserver mObserver; + private final InputManagerService mInputManager; + + private final boolean mUseDevInputEventForAudioJack; + + public WiredAccessoryManager(Context context, InputManagerService inputManager) { + PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE); + mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "WiredAccessoryManager"); + mWakeLock.setReferenceCounted(false); + mAudioManager = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE); + mInputManager = inputManager; + + mUseDevInputEventForAudioJack = + context.getResources().getBoolean(R.bool.config_useDevInputEventForAudioJack); + + mObserver = new WiredAccessoryObserver(); + + context.registerReceiver(new BroadcastReceiver() { + @Override + public void onReceive(Context ctx, Intent intent) { + bootCompleted(); + } + }, + new IntentFilter(Intent.ACTION_BOOT_COMPLETED), null, null); + } + + private void bootCompleted() { + if (mUseDevInputEventForAudioJack) { + int switchValues = 0; + if (mInputManager.getSwitchState(-1, InputDevice.SOURCE_ANY, SW_HEADPHONE_INSERT) == 1) { + switchValues |= SW_HEADPHONE_INSERT_BIT; + } + if (mInputManager.getSwitchState(-1, InputDevice.SOURCE_ANY, SW_MICROPHONE_INSERT) == 1) { + switchValues |= SW_MICROPHONE_INSERT_BIT; + } + notifyWiredAccessoryChanged(0, switchValues, + SW_HEADPHONE_INSERT_BIT | SW_MICROPHONE_INSERT_BIT); + } + + mObserver.init(); + } + + @Override + public void notifyWiredAccessoryChanged(long whenNanos, int switchValues, int switchMask) { + if (LOG) Slog.v(TAG, "notifyWiredAccessoryChanged: when=" + whenNanos + + " bits=" + switchCodeToString(switchValues, switchMask) + + " mask=" + Integer.toHexString(switchMask)); + + synchronized (mLock) { + int headset; + mSwitchValues = (mSwitchValues & ~switchMask) | switchValues; + switch (mSwitchValues & (SW_HEADPHONE_INSERT_BIT | SW_MICROPHONE_INSERT_BIT)) { + case 0: + headset = 0; + break; + + case SW_HEADPHONE_INSERT_BIT: + headset = BIT_HEADSET_NO_MIC; + break; + + case SW_HEADPHONE_INSERT_BIT | SW_MICROPHONE_INSERT_BIT: + headset = BIT_HEADSET; + break; + + case SW_MICROPHONE_INSERT_BIT: + headset = BIT_HEADSET; + break; + + default: + headset = 0; + break; + } + + updateLocked(NAME_H2W, headset); + } + } + + /** + * Compare the existing headset state with the new state and pass along accordingly. Note + * that this only supports a single headset at a time. Inserting both a usb and jacked headset + * results in support for the last one plugged in. Similarly, unplugging either is seen as + * unplugging all. + * + * @param newName One of the NAME_xxx variables defined above. + * @param newState 0 or one of the BIT_xxx variables defined above. + */ + private void updateLocked(String newName, int newState) { + // Retain only relevant bits + int headsetState = newState & SUPPORTED_HEADSETS; + int usb_headset_anlg = headsetState & BIT_USB_HEADSET_ANLG; + int usb_headset_dgtl = headsetState & BIT_USB_HEADSET_DGTL; + int h2w_headset = headsetState & (BIT_HEADSET | BIT_HEADSET_NO_MIC); + boolean h2wStateChange = true; + boolean usbStateChange = true; + if (LOG) Slog.v(TAG, "newName=" + newName + + " newState=" + newState + + " headsetState=" + headsetState + + " prev headsetState=" + mHeadsetState); + + if (mHeadsetState == headsetState) { + Log.e(TAG, "No state change."); + return; + } + + // reject all suspect transitions: only accept state changes from: + // - a: 0 headset to 1 headset + // - b: 1 headset to 0 headset + if (h2w_headset == (BIT_HEADSET | BIT_HEADSET_NO_MIC)) { + Log.e(TAG, "Invalid combination, unsetting h2w flag"); + h2wStateChange = false; + } + // - c: 0 usb headset to 1 usb headset + // - d: 1 usb headset to 0 usb headset + if (usb_headset_anlg == BIT_USB_HEADSET_ANLG && usb_headset_dgtl == BIT_USB_HEADSET_DGTL) { + Log.e(TAG, "Invalid combination, unsetting usb flag"); + usbStateChange = false; + } + if (!h2wStateChange && !usbStateChange) { + Log.e(TAG, "invalid transition, returning ..."); + return; + } + + mWakeLock.acquire(); + + Message msg = mHandler.obtainMessage(MSG_NEW_DEVICE_STATE, headsetState, + mHeadsetState, newName); + mHandler.sendMessage(msg); + + mHeadsetState = headsetState; + } + + private final Handler mHandler = new Handler(Looper.myLooper(), null, true) { + @Override + public void handleMessage(Message msg) { + switch (msg.what) { + case MSG_NEW_DEVICE_STATE: + setDevicesState(msg.arg1, msg.arg2, (String)msg.obj); + mWakeLock.release(); + } + } + }; + + private void setDevicesState( + int headsetState, int prevHeadsetState, String headsetName) { + synchronized (mLock) { + int allHeadsets = SUPPORTED_HEADSETS; + for (int curHeadset = 1; allHeadsets != 0; curHeadset <<= 1) { + if ((curHeadset & allHeadsets) != 0) { + setDeviceStateLocked(curHeadset, headsetState, prevHeadsetState, headsetName); + allHeadsets &= ~curHeadset; + } + } + } + } + + private void setDeviceStateLocked(int headset, + int headsetState, int prevHeadsetState, String headsetName) { + if ((headsetState & headset) != (prevHeadsetState & headset)) { + int device; + int state; + + if ((headsetState & headset) != 0) { + state = 1; + } else { + state = 0; + } + + if (headset == BIT_HEADSET) { + device = AudioManager.DEVICE_OUT_WIRED_HEADSET; + } else if (headset == BIT_HEADSET_NO_MIC){ + device = AudioManager.DEVICE_OUT_WIRED_HEADPHONE; + } else if (headset == BIT_USB_HEADSET_ANLG) { + device = AudioManager.DEVICE_OUT_ANLG_DOCK_HEADSET; + } else if (headset == BIT_USB_HEADSET_DGTL) { + device = AudioManager.DEVICE_OUT_DGTL_DOCK_HEADSET; + } else if (headset == BIT_HDMI_AUDIO) { + device = AudioManager.DEVICE_OUT_AUX_DIGITAL; + } else { + Slog.e(TAG, "setDeviceState() invalid headset type: "+headset); + return; + } + + if (LOG) + Slog.v(TAG, "device "+headsetName+((state == 1) ? " connected" : " disconnected")); + + mAudioManager.setWiredDeviceConnectionState(device, state, headsetName); + } + } + + private String switchCodeToString(int switchValues, int switchMask) { + StringBuffer sb = new StringBuffer(); + if ((switchMask & SW_HEADPHONE_INSERT_BIT) != 0 && + (switchValues & SW_HEADPHONE_INSERT_BIT) != 0) { + sb.append("SW_HEADPHONE_INSERT "); + } + if ((switchMask & SW_MICROPHONE_INSERT_BIT) != 0 && + (switchValues & SW_MICROPHONE_INSERT_BIT) != 0) { + sb.append("SW_MICROPHONE_INSERT"); + } + return sb.toString(); + } + + class WiredAccessoryObserver extends UEventObserver { + private final List<UEventInfo> mUEventInfo; + + public WiredAccessoryObserver() { + mUEventInfo = makeObservedUEventList(); + } + + void init() { + synchronized (mLock) { + if (LOG) Slog.v(TAG, "init()"); + char[] buffer = new char[1024]; + + for (int i = 0; i < mUEventInfo.size(); ++i) { + UEventInfo uei = mUEventInfo.get(i); + try { + int curState; + FileReader file = new FileReader(uei.getSwitchStatePath()); + int len = file.read(buffer, 0, 1024); + file.close(); + curState = Integer.valueOf((new String(buffer, 0, len)).trim()); + + if (curState > 0) { + updateStateLocked(uei.getDevPath(), uei.getDevName(), curState); + } + } catch (FileNotFoundException e) { + Slog.w(TAG, uei.getSwitchStatePath() + + " not found while attempting to determine initial switch state"); + } catch (Exception e) { + Slog.e(TAG, "" , e); + } + } + } + + // At any given time accessories could be inserted + // one on the board, one on the dock and one on HDMI: + // observe three UEVENTs + for (int i = 0; i < mUEventInfo.size(); ++i) { + UEventInfo uei = mUEventInfo.get(i); + startObserving("DEVPATH="+uei.getDevPath()); + } + } + + private List<UEventInfo> makeObservedUEventList() { + List<UEventInfo> retVal = new ArrayList<UEventInfo>(); + UEventInfo uei; + + // Monitor h2w + if (!mUseDevInputEventForAudioJack) { + uei = new UEventInfo(NAME_H2W, BIT_HEADSET, BIT_HEADSET_NO_MIC); + if (uei.checkSwitchExists()) { + retVal.add(uei); + } else { + Slog.w(TAG, "This kernel does not have wired headset support"); + } + } + + // Monitor USB + uei = new UEventInfo(NAME_USB_AUDIO, BIT_USB_HEADSET_ANLG, BIT_USB_HEADSET_DGTL); + if (uei.checkSwitchExists()) { + retVal.add(uei); + } else { + Slog.w(TAG, "This kernel does not have usb audio support"); + } + + // Monitor HDMI + // + // If the kernel has support for the "hdmi_audio" switch, use that. It will be + // signalled only when the HDMI driver has a video mode configured, and the downstream + // sink indicates support for audio in its EDID. + // + // If the kernel does not have an "hdmi_audio" switch, just fall back on the older + // "hdmi" switch instead. + uei = new UEventInfo(NAME_HDMI_AUDIO, BIT_HDMI_AUDIO, 0); + if (uei.checkSwitchExists()) { + retVal.add(uei); + } else { + uei = new UEventInfo(NAME_HDMI, BIT_HDMI_AUDIO, 0); + if (uei.checkSwitchExists()) { + retVal.add(uei); + } else { + Slog.w(TAG, "This kernel does not have HDMI audio support"); + } + } + + return retVal; + } + + @Override + public void onUEvent(UEventObserver.UEvent event) { + if (LOG) Slog.v(TAG, "Headset UEVENT: " + event.toString()); + + try { + String devPath = event.get("DEVPATH"); + String name = event.get("SWITCH_NAME"); + int state = Integer.parseInt(event.get("SWITCH_STATE")); + synchronized (mLock) { + updateStateLocked(devPath, name, state); + } + } catch (NumberFormatException e) { + Slog.e(TAG, "Could not parse switch state from event " + event); + } + } + + private void updateStateLocked(String devPath, String name, int state) { + for (int i = 0; i < mUEventInfo.size(); ++i) { + UEventInfo uei = mUEventInfo.get(i); + if (devPath.equals(uei.getDevPath())) { + updateLocked(name, uei.computeNewHeadsetState(mHeadsetState, state)); + return; + } + } + } + + private final class UEventInfo { + private final String mDevName; + private final int mState1Bits; + private final int mState2Bits; + + public UEventInfo(String devName, int state1Bits, int state2Bits) { + mDevName = devName; + mState1Bits = state1Bits; + mState2Bits = state2Bits; + } + + public String getDevName() { return mDevName; } + + public String getDevPath() { + return String.format("/devices/virtual/switch/%s", mDevName); + } + + public String getSwitchStatePath() { + return String.format("/sys/class/switch/%s/state", mDevName); + } + + public boolean checkSwitchExists() { + File f = new File(getSwitchStatePath()); + return f.exists(); + } + + public int computeNewHeadsetState(int headsetState, int switchState) { + int preserveMask = ~(mState1Bits | mState2Bits); + int setBits = ((switchState == 1) ? mState1Bits : + ((switchState == 2) ? mState2Bits : 0)); + + return ((headsetState & preserveMask) | setBits); + } + } + } +} diff --git a/services/java/com/android/server/WiredAccessoryObserver.java b/services/java/com/android/server/WiredAccessoryObserver.java deleted file mode 100644 index 56c0fdf..0000000 --- a/services/java/com/android/server/WiredAccessoryObserver.java +++ /dev/null @@ -1,319 +0,0 @@ -/* - * Copyright (C) 2008 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; - -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; -import android.os.Handler; -import android.os.Looper; -import android.os.Message; -import android.os.PowerManager; -import android.os.PowerManager.WakeLock; -import android.os.UEventObserver; -import android.util.Slog; -import android.media.AudioManager; -import android.util.Log; - -import java.io.File; -import java.io.FileReader; -import java.io.FileNotFoundException; -import java.util.ArrayList; -import java.util.List; - -/** - * <p>WiredAccessoryObserver monitors for a wired headset on the main board or dock. - */ -final class WiredAccessoryObserver extends UEventObserver { - private static final String TAG = WiredAccessoryObserver.class.getSimpleName(); - private static final boolean LOG = true; - private static final int BIT_HEADSET = (1 << 0); - private static final int BIT_HEADSET_NO_MIC = (1 << 1); - private static final int BIT_USB_HEADSET_ANLG = (1 << 2); - private static final int BIT_USB_HEADSET_DGTL = (1 << 3); - private static final int BIT_HDMI_AUDIO = (1 << 4); - private static final int SUPPORTED_HEADSETS = (BIT_HEADSET|BIT_HEADSET_NO_MIC| - BIT_USB_HEADSET_ANLG|BIT_USB_HEADSET_DGTL| - BIT_HDMI_AUDIO); - - private final Object mLock = new Object(); - - private final Context mContext; - private final WakeLock mWakeLock; // held while there is a pending route change - private final AudioManager mAudioManager; - private final List<UEventInfo> mUEventInfo; - - private int mHeadsetState; - private int mPrevHeadsetState; - private String mHeadsetName; - - public WiredAccessoryObserver(Context context) { - mContext = context; - - PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE); - mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "WiredAccessoryObserver"); - mWakeLock.setReferenceCounted(false); - mAudioManager = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE); - - mUEventInfo = makeObservedUEventList(); - - context.registerReceiver(new BootCompletedReceiver(), - new IntentFilter(Intent.ACTION_BOOT_COMPLETED), null, null); - } - - @Override - public void onUEvent(UEventObserver.UEvent event) { - if (LOG) Slog.v(TAG, "Headset UEVENT: " + event.toString()); - - try { - String devPath = event.get("DEVPATH"); - String name = event.get("SWITCH_NAME"); - int state = Integer.parseInt(event.get("SWITCH_STATE")); - synchronized (mLock) { - updateStateLocked(devPath, name, state); - } - } catch (NumberFormatException e) { - Slog.e(TAG, "Could not parse switch state from event " + event); - } - } - - private void bootCompleted() { - synchronized (mLock) { - char[] buffer = new char[1024]; - mPrevHeadsetState = mHeadsetState; - - if (LOG) Slog.v(TAG, "init()"); - - for (int i = 0; i < mUEventInfo.size(); ++i) { - UEventInfo uei = mUEventInfo.get(i); - try { - int curState; - FileReader file = new FileReader(uei.getSwitchStatePath()); - int len = file.read(buffer, 0, 1024); - file.close(); - curState = Integer.valueOf((new String(buffer, 0, len)).trim()); - - if (curState > 0) { - updateStateLocked(uei.getDevPath(), uei.getDevName(), curState); - } - } catch (FileNotFoundException e) { - Slog.w(TAG, uei.getSwitchStatePath() + - " not found while attempting to determine initial switch state"); - } catch (Exception e) { - Slog.e(TAG, "" , e); - } - } - } - - // At any given time accessories could be inserted - // one on the board, one on the dock and one on HDMI: - // observe three UEVENTs - for (int i = 0; i < mUEventInfo.size(); ++i) { - UEventInfo uei = mUEventInfo.get(i); - startObserving("DEVPATH="+uei.getDevPath()); - } - } - - private void updateStateLocked(String devPath, String name, int state) { - for (int i = 0; i < mUEventInfo.size(); ++i) { - UEventInfo uei = mUEventInfo.get(i); - if (devPath.equals(uei.getDevPath())) { - updateLocked(name, uei.computeNewHeadsetState(mHeadsetState, state)); - return; - } - } - } - - private void updateLocked(String newName, int newState) { - // Retain only relevant bits - int headsetState = newState & SUPPORTED_HEADSETS; - int usb_headset_anlg = headsetState & BIT_USB_HEADSET_ANLG; - int usb_headset_dgtl = headsetState & BIT_USB_HEADSET_DGTL; - int h2w_headset = headsetState & (BIT_HEADSET | BIT_HEADSET_NO_MIC); - boolean h2wStateChange = true; - boolean usbStateChange = true; - // reject all suspect transitions: only accept state changes from: - // - a: 0 heaset to 1 headset - // - b: 1 headset to 0 headset - if (LOG) Slog.v(TAG, "newState = "+newState+", headsetState = "+headsetState+"," - + "mHeadsetState = "+mHeadsetState); - if (mHeadsetState == headsetState || ((h2w_headset & (h2w_headset - 1)) != 0)) { - Log.e(TAG, "unsetting h2w flag"); - h2wStateChange = false; - } - // - c: 0 usb headset to 1 usb headset - // - d: 1 usb headset to 0 usb headset - if ((usb_headset_anlg >> 2) == 1 && (usb_headset_dgtl >> 3) == 1) { - Log.e(TAG, "unsetting usb flag"); - usbStateChange = false; - } - if (!h2wStateChange && !usbStateChange) { - Log.e(TAG, "invalid transition, returning ..."); - return; - } - - mHeadsetName = newName; - mPrevHeadsetState = mHeadsetState; - mHeadsetState = headsetState; - - mWakeLock.acquire(); - - Message msg = mHandler.obtainMessage(0, mHeadsetState, mPrevHeadsetState, mHeadsetName); - mHandler.sendMessage(msg); - } - - private void setDevicesState( - int headsetState, int prevHeadsetState, String headsetName) { - synchronized (mLock) { - int allHeadsets = SUPPORTED_HEADSETS; - for (int curHeadset = 1; allHeadsets != 0; curHeadset <<= 1) { - if ((curHeadset & allHeadsets) != 0) { - setDeviceStateLocked(curHeadset, headsetState, prevHeadsetState, headsetName); - allHeadsets &= ~curHeadset; - } - } - } - } - - private void setDeviceStateLocked(int headset, - int headsetState, int prevHeadsetState, String headsetName) { - if ((headsetState & headset) != (prevHeadsetState & headset)) { - int device; - int state; - - if ((headsetState & headset) != 0) { - state = 1; - } else { - state = 0; - } - - if (headset == BIT_HEADSET) { - device = AudioManager.DEVICE_OUT_WIRED_HEADSET; - } else if (headset == BIT_HEADSET_NO_MIC){ - device = AudioManager.DEVICE_OUT_WIRED_HEADPHONE; - } else if (headset == BIT_USB_HEADSET_ANLG) { - device = AudioManager.DEVICE_OUT_ANLG_DOCK_HEADSET; - } else if (headset == BIT_USB_HEADSET_DGTL) { - device = AudioManager.DEVICE_OUT_DGTL_DOCK_HEADSET; - } else if (headset == BIT_HDMI_AUDIO) { - device = AudioManager.DEVICE_OUT_AUX_DIGITAL; - } else { - Slog.e(TAG, "setDeviceState() invalid headset type: "+headset); - return; - } - - if (LOG) - Slog.v(TAG, "device "+headsetName+((state == 1) ? " connected" : " disconnected")); - - mAudioManager.setWiredDeviceConnectionState(device, state, headsetName); - } - } - - private static List<UEventInfo> makeObservedUEventList() { - List<UEventInfo> retVal = new ArrayList<UEventInfo>(); - UEventInfo uei; - - // Monitor h2w - uei = new UEventInfo("h2w", BIT_HEADSET, BIT_HEADSET_NO_MIC); - if (uei.checkSwitchExists()) { - retVal.add(uei); - } else { - Slog.w(TAG, "This kernel does not have wired headset support"); - } - - // Monitor USB - uei = new UEventInfo("usb_audio", BIT_USB_HEADSET_ANLG, BIT_USB_HEADSET_DGTL); - if (uei.checkSwitchExists()) { - retVal.add(uei); - } else { - Slog.w(TAG, "This kernel does not have usb audio support"); - } - - // Monitor HDMI - // - // If the kernel has support for the "hdmi_audio" switch, use that. It will be signalled - // only when the HDMI driver has a video mode configured, and the downstream sink indicates - // support for audio in its EDID. - // - // If the kernel does not have an "hdmi_audio" switch, just fall back on the older "hdmi" - // switch instead. - uei = new UEventInfo("hdmi_audio", BIT_HDMI_AUDIO, 0); - if (uei.checkSwitchExists()) { - retVal.add(uei); - } else { - uei = new UEventInfo("hdmi", BIT_HDMI_AUDIO, 0); - if (uei.checkSwitchExists()) { - retVal.add(uei); - } else { - Slog.w(TAG, "This kernel does not have HDMI audio support"); - } - } - - return retVal; - } - - private final Handler mHandler = new Handler(Looper.myLooper(), null, true) { - @Override - public void handleMessage(Message msg) { - setDevicesState(msg.arg1, msg.arg2, (String)msg.obj); - mWakeLock.release(); - } - }; - - private static final class UEventInfo { - private final String mDevName; - private final int mState1Bits; - private final int mState2Bits; - - public UEventInfo(String devName, int state1Bits, int state2Bits) { - mDevName = devName; - mState1Bits = state1Bits; - mState2Bits = state2Bits; - } - - public String getDevName() { return mDevName; } - - public String getDevPath() { - return String.format("/devices/virtual/switch/%s", mDevName); - } - - public String getSwitchStatePath() { - return String.format("/sys/class/switch/%s/state", mDevName); - } - - public boolean checkSwitchExists() { - File f = new File(getSwitchStatePath()); - return ((null != f) && f.exists()); - } - - public int computeNewHeadsetState(int headsetState, int switchState) { - int preserveMask = ~(mState1Bits | mState2Bits); - int setBits = ((switchState == 1) ? mState1Bits : - ((switchState == 2) ? mState2Bits : 0)); - - return ((headsetState & preserveMask) | setBits); - } - } - - private final class BootCompletedReceiver extends BroadcastReceiver { - @Override - public void onReceive(Context context, Intent intent) { - bootCompleted(); - } - } -} diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java index 3428326..e90eef9 100644 --- a/services/java/com/android/server/am/ActivityManagerService.java +++ b/services/java/com/android/server/am/ActivityManagerService.java @@ -181,6 +181,7 @@ public final class ActivityManagerService extends ActivityManagerNative static final boolean DEBUG_VISBILITY = localLOGV || false; static final boolean DEBUG_PROCESSES = localLOGV || false; static final boolean DEBUG_PROCESS_OBSERVERS = localLOGV || false; + static final boolean DEBUG_CLEANUP = localLOGV || false; static final boolean DEBUG_PROVIDER = localLOGV || false; static final boolean DEBUG_URI_PERMISSION = localLOGV || false; static final boolean DEBUG_USER_LEAVING = localLOGV || false; @@ -1968,7 +1969,7 @@ public final class ActivityManagerService extends ActivityManagerNative } else { // An application record is attached to a previous process, // clean it up now. - if (DEBUG_PROCESSES) Slog.v(TAG, "App died: " + app); + if (DEBUG_PROCESSES || DEBUG_CLEANUP) Slog.v(TAG, "App died: " + app); handleAppDiedLocked(app, true, true); } } @@ -2925,7 +2926,8 @@ public final class ActivityManagerService extends ActivityManagerNative // Just in case... if (mMainStack.mPausingActivity != null && mMainStack.mPausingActivity.app == app) { - if (DEBUG_PAUSE) Slog.v(TAG, "App died while pausing: " +mMainStack.mPausingActivity); + if (DEBUG_PAUSE || DEBUG_CLEANUP) Slog.v(TAG, + "App died while pausing: " + mMainStack.mPausingActivity); mMainStack.mPausingActivity = null; } if (mMainStack.mLastPausedActivity != null && mMainStack.mLastPausedActivity.app == app) { @@ -2933,61 +2935,7 @@ public final class ActivityManagerService extends ActivityManagerNative } // Remove this application's activities from active lists. - mMainStack.removeHistoryRecordsForAppLocked(app); - - boolean atTop = true; - boolean hasVisibleActivities = false; - - // Clean out the history list. - int i = mMainStack.mHistory.size(); - if (localLOGV) Slog.v( - TAG, "Removing app " + app + " from history with " + i + " entries"); - while (i > 0) { - i--; - ActivityRecord r = (ActivityRecord)mMainStack.mHistory.get(i); - if (localLOGV) Slog.v( - TAG, "Record #" + i + " " + r + ": app=" + r.app); - if (r.app == app) { - if ((!r.haveState && !r.stateNotNeeded) || r.finishing) { - if (ActivityStack.DEBUG_ADD_REMOVE) { - RuntimeException here = new RuntimeException("here"); - here.fillInStackTrace(); - Slog.i(TAG, "Removing activity " + r + " from stack at " + i - + ": haveState=" + r.haveState - + " stateNotNeeded=" + r.stateNotNeeded - + " finishing=" + r.finishing - + " state=" + r.state, here); - } - if (!r.finishing) { - Slog.w(TAG, "Force removing " + r + ": app died, no saved state"); - EventLog.writeEvent(EventLogTags.AM_FINISH_ACTIVITY, - r.userId, System.identityHashCode(r), - r.task.taskId, r.shortComponentName, - "proc died without state saved"); - } - mMainStack.removeActivityFromHistoryLocked(r); - - } else { - // We have the current state for this activity, so - // it can be restarted later when needed. - if (localLOGV) Slog.v( - TAG, "Keeping entry, setting app to null"); - if (r.visible) { - hasVisibleActivities = true; - } - r.app = null; - r.nowVisible = false; - if (!r.haveState) { - if (ActivityStack.DEBUG_SAVED_STATE) Slog.i(TAG, - "App died, clearing saved state of " + r); - r.icicle = null; - } - } - - r.stack.cleanUpActivityLocked(r, true, true); - } - atTop = false; - } + boolean hasVisibleActivities = mMainStack.removeHistoryRecordsForAppLocked(app); app.activities.clear(); @@ -3053,7 +3001,7 @@ public final class ActivityManagerService extends ActivityManagerNative + ") has died."); } EventLog.writeEvent(EventLogTags.AM_PROC_DIED, app.userId, app.pid, app.processName); - if (localLOGV) Slog.v( + if (DEBUG_CLEANUP) Slog.v( TAG, "Dying app: " + app + ", pid: " + pid + ", thread: " + thread.asBinder()); boolean doLowMem = app.instrumentationClass == null; @@ -10757,7 +10705,8 @@ public final class ActivityManagerService extends ActivityManagerNative // If the app is undergoing backup, tell the backup manager about it if (mBackupTarget != null && app.pid == mBackupTarget.app.pid) { - if (DEBUG_BACKUP) Slog.d(TAG, "App " + mBackupTarget.appInfo + " died during backup"); + if (DEBUG_BACKUP || DEBUG_CLEANUP) Slog.d(TAG, "App " + + mBackupTarget.appInfo + " died during backup"); try { IBackupManager bm = IBackupManager.Stub.asInterface( ServiceManager.getService(Context.BACKUP_SERVICE)); @@ -10783,7 +10732,7 @@ public final class ActivityManagerService extends ActivityManagerNative } if (!app.persistent || app.isolated) { - if (DEBUG_PROCESSES) Slog.v(TAG, + if (DEBUG_PROCESSES || DEBUG_CLEANUP) Slog.v(TAG, "Removing non-persistent process during cleanup: " + app); mProcessNames.remove(app.processName, app.uid); mIsolatedProcesses.remove(app.uid); @@ -10801,7 +10750,7 @@ public final class ActivityManagerService extends ActivityManagerNative restart = true; } } - if (DEBUG_PROCESSES && mProcessesOnHold.contains(app)) Slog.v(TAG, + if ((DEBUG_PROCESSES || DEBUG_CLEANUP) && mProcessesOnHold.contains(app)) Slog.v(TAG, "Clean-up removing on hold: " + app); mProcessesOnHold.remove(app); @@ -11745,7 +11694,7 @@ public final class ActivityManagerService extends ActivityManagerNative users = mStartedUserArray; } else { // Caller wants broadcast to go to one specific user. - users = mCurrentUserArray; + users = new int[] {userId}; } // Figure out who all will receive this broadcast. diff --git a/services/java/com/android/server/am/ActivityStack.java b/services/java/com/android/server/am/ActivityStack.java index 2d445274..90a7abc 100755 --- a/services/java/com/android/server/am/ActivityStack.java +++ b/services/java/com/android/server/am/ActivityStack.java @@ -81,6 +81,7 @@ final class ActivityStack { static final boolean DEBUG_RESULTS = ActivityManagerService.DEBUG_RESULTS; static final boolean DEBUG_CONFIGURATION = ActivityManagerService.DEBUG_CONFIGURATION; static final boolean DEBUG_TASKS = ActivityManagerService.DEBUG_TASKS; + static final boolean DEBUG_CLEANUP = ActivityManagerService.DEBUG_CLEANUP; static final boolean DEBUG_STATES = false; static final boolean DEBUG_ADD_REMOVE = false; @@ -1142,9 +1143,13 @@ final class ActivityStack { resumeTopActivityLocked(prev); } else { checkReadyForSleepLocked(); - if (topRunningActivityLocked(null) == null) { - // If there are no more activities available to run, then - // do resume anyway to start something. + ActivityRecord top = topRunningActivityLocked(null); + if (top == null || (prev != null && top != prev)) { + // If there are no more activities available to run, + // do resume anyway to start something. Also if the top + // activity on the stack is not the just paused activity, + // we need to go ahead and resume it to ensure we complete + // an in-flight app switch. resumeTopActivityLocked(null); } } @@ -1461,7 +1466,8 @@ final class ActivityStack { // If we are currently pausing an activity, then don't do anything // until that is done. if (mPausingActivity != null) { - if (DEBUG_SWITCH) Slog.v(TAG, "Skip resume: pausing=" + mPausingActivity); + if (DEBUG_SWITCH || DEBUG_PAUSE) Slog.v(TAG, + "Skip resume: pausing=" + mPausingActivity); return false; } @@ -3862,6 +3868,7 @@ final class ActivityStack { if (setState) { if (DEBUG_STATES) Slog.v(TAG, "Moving to DESTROYED: " + r + " (cleaning up)"); r.state = ActivityState.DESTROYED; + r.app = null; } // Make sure this record is no longer in the pending finishes list. @@ -3905,26 +3912,26 @@ final class ActivityStack { } final void removeActivityFromHistoryLocked(ActivityRecord r) { - if (r.state != ActivityState.DESTROYED) { - finishActivityResultsLocked(r, Activity.RESULT_CANCELED, null); - r.makeFinishing(); - if (DEBUG_ADD_REMOVE) { - RuntimeException here = new RuntimeException("here"); - here.fillInStackTrace(); - Slog.i(TAG, "Removing activity " + r + " from stack"); - } - mHistory.remove(r); - r.takeFromHistory(); - if (DEBUG_STATES) Slog.v(TAG, "Moving to DESTROYED: " + r - + " (removed from history)"); - r.state = ActivityState.DESTROYED; - mService.mWindowManager.removeAppToken(r.appToken); - if (VALIDATE_TOKENS) { - validateAppTokensLocked(); - } - cleanUpActivityServicesLocked(r); - r.removeUriPermissionsLocked(); + finishActivityResultsLocked(r, Activity.RESULT_CANCELED, null); + r.makeFinishing(); + if (DEBUG_ADD_REMOVE) { + RuntimeException here = new RuntimeException("here"); + here.fillInStackTrace(); + Slog.i(TAG, "Removing activity " + r + " from stack"); + } + mHistory.remove(r); + r.takeFromHistory(); + removeTimeoutsForActivityLocked(r); + if (DEBUG_STATES) Slog.v(TAG, "Moving to DESTROYED: " + r + + " (removed from history)"); + r.state = ActivityState.DESTROYED; + r.app = null; + mService.mWindowManager.removeAppToken(r.appToken); + if (VALIDATE_TOKENS) { + validateAppTokensLocked(); } + cleanUpActivityServicesLocked(r); + r.removeUriPermissionsLocked(); } /** @@ -3992,7 +3999,7 @@ final class ActivityStack { */ final boolean destroyActivityLocked(ActivityRecord r, boolean removeFromApp, boolean oomAdj, String reason) { - if (DEBUG_SWITCH) Slog.v( + if (DEBUG_SWITCH || DEBUG_CLEANUP) Slog.v( TAG, "Removing activity from " + reason + ": token=" + r + ", app=" + (r.app != null ? r.app.processName : "(null)")); EventLog.writeEvent(EventLogTags.AM_DESTROY_ACTIVITY, @@ -4000,11 +4007,11 @@ final class ActivityStack { r.task.taskId, r.shortComponentName, reason); boolean removedFromHistory = false; - + cleanUpActivityLocked(r, false, false); final boolean hadApp = r.app != null; - + if (hadApp) { if (removeFromApp) { int idx = r.app.activities.indexOf(r); @@ -4040,7 +4047,6 @@ final class ActivityStack { } } - r.app = null; r.nowVisible = false; // If the activity is finishing, we need to wait on removing it @@ -4061,6 +4067,7 @@ final class ActivityStack { if (DEBUG_STATES) Slog.v(TAG, "Moving to DESTROYED: " + r + " (destroy skipped)"); r.state = ActivityState.DESTROYED; + r.app = null; } } else { // remove this record from the history. @@ -4071,6 +4078,7 @@ final class ActivityStack { if (DEBUG_STATES) Slog.v(TAG, "Moving to DESTROYED: " + r + " (no app)"); r.state = ActivityState.DESTROYED; + r.app = null; } } @@ -4106,30 +4114,85 @@ final class ActivityStack { } } - private void removeHistoryRecordsForAppLocked(ArrayList list, ProcessRecord app) { + private void removeHistoryRecordsForAppLocked(ArrayList list, ProcessRecord app, + String listName) { int i = list.size(); - if (localLOGV) Slog.v( - TAG, "Removing app " + app + " from list " + list + if (DEBUG_CLEANUP) Slog.v( + TAG, "Removing app " + app + " from list " + listName + " with " + i + " entries"); while (i > 0) { i--; ActivityRecord r = (ActivityRecord)list.get(i); - if (localLOGV) Slog.v( - TAG, "Record #" + i + " " + r + ": app=" + r.app); + if (DEBUG_CLEANUP) Slog.v(TAG, "Record #" + i + " " + r); if (r.app == app) { - if (localLOGV) Slog.v(TAG, "Removing this entry!"); + if (DEBUG_CLEANUP) Slog.v(TAG, "---> REMOVING this entry!"); list.remove(i); removeTimeoutsForActivityLocked(r); } } } - void removeHistoryRecordsForAppLocked(ProcessRecord app) { - removeHistoryRecordsForAppLocked(mLRUActivities, app); - removeHistoryRecordsForAppLocked(mStoppingActivities, app); - removeHistoryRecordsForAppLocked(mGoingToSleepActivities, app); - removeHistoryRecordsForAppLocked(mWaitingVisibleActivities, app); - removeHistoryRecordsForAppLocked(mFinishingActivities, app); + boolean removeHistoryRecordsForAppLocked(ProcessRecord app) { + removeHistoryRecordsForAppLocked(mLRUActivities, app, "mLRUActivities"); + removeHistoryRecordsForAppLocked(mStoppingActivities, app, "mStoppingActivities"); + removeHistoryRecordsForAppLocked(mGoingToSleepActivities, app, "mGoingToSleepActivities"); + removeHistoryRecordsForAppLocked(mWaitingVisibleActivities, app, + "mWaitingVisibleActivities"); + removeHistoryRecordsForAppLocked(mFinishingActivities, app, "mFinishingActivities"); + + boolean hasVisibleActivities = false; + + // Clean out the history list. + int i = mHistory.size(); + if (DEBUG_CLEANUP) Slog.v( + TAG, "Removing app " + app + " from history with " + i + " entries"); + while (i > 0) { + i--; + ActivityRecord r = (ActivityRecord)mHistory.get(i); + if (DEBUG_CLEANUP) Slog.v( + TAG, "Record #" + i + " " + r + ": app=" + r.app); + if (r.app == app) { + if ((!r.haveState && !r.stateNotNeeded) || r.finishing) { + if (ActivityStack.DEBUG_ADD_REMOVE || DEBUG_CLEANUP) { + RuntimeException here = new RuntimeException("here"); + here.fillInStackTrace(); + Slog.i(TAG, "Removing activity " + r + " from stack at " + i + + ": haveState=" + r.haveState + + " stateNotNeeded=" + r.stateNotNeeded + + " finishing=" + r.finishing + + " state=" + r.state, here); + } + if (!r.finishing) { + Slog.w(TAG, "Force removing " + r + ": app died, no saved state"); + EventLog.writeEvent(EventLogTags.AM_FINISH_ACTIVITY, + r.userId, System.identityHashCode(r), + r.task.taskId, r.shortComponentName, + "proc died without state saved"); + } + removeActivityFromHistoryLocked(r); + + } else { + // We have the current state for this activity, so + // it can be restarted later when needed. + if (localLOGV) Slog.v( + TAG, "Keeping entry, setting app to null"); + if (r.visible) { + hasVisibleActivities = true; + } + r.app = null; + r.nowVisible = false; + if (!r.haveState) { + if (ActivityStack.DEBUG_SAVED_STATE) Slog.i(TAG, + "App died, clearing saved state of " + r); + r.icicle = null; + } + } + + r.stack.cleanUpActivityLocked(r, true, true); + } + } + + return hasVisibleActivities; } /** @@ -4375,7 +4438,7 @@ final class ActivityStack { return null; } - // Remove all of this task's activies starting at the sub task. + // Remove all of this task's activities starting at the sub task. TaskAccessInfo.SubTask subtask = info.subtasks.get(subTaskIndex); performClearTaskAtIndexLocked(taskId, subtask.index); return subtask.activity; diff --git a/services/java/com/android/server/display/DisplayManagerService.java b/services/java/com/android/server/display/DisplayManagerService.java index f348cb6..b8c6cd5 100644 --- a/services/java/com/android/server/display/DisplayManagerService.java +++ b/services/java/com/android/server/display/DisplayManagerService.java @@ -209,7 +209,7 @@ public final class DisplayManagerService extends IDisplayManager.Stub { public void setWindowManager(WindowManagerFuncs windowManagerFuncs) { synchronized (mSyncRoot) { mWindowManagerFuncs = windowManagerFuncs; - scheduleTraversalLocked(); + scheduleTraversalLocked(false); } } @@ -220,7 +220,7 @@ public final class DisplayManagerService extends IDisplayManager.Stub { public void setInputManager(InputManagerFuncs inputManagerFuncs) { synchronized (mSyncRoot) { mInputManagerFuncs = inputManagerFuncs; - scheduleTraversalLocked(); + scheduleTraversalLocked(false); } } @@ -264,7 +264,7 @@ public final class DisplayManagerService extends IDisplayManager.Stub { display.setDisplayInfoOverrideFromWindowManagerLocked(info); if (!mTempDisplayInfo.equals(display.getDisplayInfoLocked())) { sendDisplayEventLocked(displayId, DisplayManagerGlobal.EVENT_DISPLAY_CHANGED); - scheduleTraversalLocked(); + scheduleTraversalLocked(false); } } } @@ -527,7 +527,7 @@ public final class DisplayManagerService extends IDisplayManager.Stub { mDisplayDevices.add(device); addLogicalDisplayLocked(device); - scheduleTraversalLocked(); + scheduleTraversalLocked(false); } } @@ -543,7 +543,7 @@ public final class DisplayManagerService extends IDisplayManager.Stub { device.applyPendingDisplayDeviceInfoChangesLocked(); if (updateLogicalDisplaysLocked()) { - scheduleTraversalLocked(); + scheduleTraversalLocked(false); } } } @@ -560,7 +560,7 @@ public final class DisplayManagerService extends IDisplayManager.Stub { mRemovedDisplayDevices.add(device); updateLogicalDisplaysLocked(); - scheduleTraversalLocked(); + scheduleTraversalLocked(false); } } @@ -668,13 +668,15 @@ public final class DisplayManagerService extends IDisplayManager.Stub { * * @param displayId The logical display id to update. * @param hasContent True if the logical display has content. + * @param inTraversal True if called from WindowManagerService during a window traversal prior + * to call to performTraversalInTransactionFromWindowManager. */ - public void setDisplayHasContent(int displayId, boolean hasContent) { + public void setDisplayHasContent(int displayId, boolean hasContent, boolean inTraversal) { synchronized (mSyncRoot) { LogicalDisplay display = mLogicalDisplays.get(displayId); if (display != null && display.hasContentLocked() != hasContent) { display.setHasContentLocked(hasContent); - scheduleTraversalLocked(); + scheduleTraversalLocked(inTraversal); } } } @@ -741,10 +743,12 @@ public final class DisplayManagerService extends IDisplayManager.Stub { // Requests that performTraversalsInTransactionFromWindowManager be called at a // later time to apply changes to surfaces and displays. - private void scheduleTraversalLocked() { + private void scheduleTraversalLocked(boolean inTraversal) { if (!mPendingTraversal && mWindowManagerFuncs != null) { mPendingTraversal = true; - mHandler.sendEmptyMessage(MSG_REQUEST_TRAVERSAL); + if (!inTraversal) { + mHandler.sendEmptyMessage(MSG_REQUEST_TRAVERSAL); + } } } @@ -911,7 +915,7 @@ public final class DisplayManagerService extends IDisplayManager.Stub { @Override public void onTraversalRequested() { synchronized (mSyncRoot) { - scheduleTraversalLocked(); + scheduleTraversalLocked(false); } } } diff --git a/services/java/com/android/server/input/InputManagerService.java b/services/java/com/android/server/input/InputManagerService.java index 7b0c452..5e4907e 100644 --- a/services/java/com/android/server/input/InputManagerService.java +++ b/services/java/com/android/server/input/InputManagerService.java @@ -113,6 +113,7 @@ public class InputManagerService extends IInputManager.Stub private final InputManagerHandler mHandler; private WindowManagerCallbacks mWindowManagerCallbacks; + private WiredAccessoryCallbacks mWiredAccessoryCallbacks; private boolean mSystemReady; private NotificationManager mNotificationManager; @@ -197,7 +198,7 @@ public class InputManagerService extends IInputManager.Stub // Key states (may be returned by queries about the current state of a // particular key code, scan code or switch). - + /** The key state is unknown or the requested key itself is not supported. */ public static final int KEY_STATE_UNKNOWN = -1; @@ -213,17 +214,41 @@ public class InputManagerService extends IInputManager.Stub /** Scan code: Mouse / trackball button. */ public static final int BTN_MOUSE = 0x110; + // Switch code values must match bionic/libc/kernel/common/linux/input.h /** Switch code: Lid switch. When set, lid is shut. */ public static final int SW_LID = 0x00; /** Switch code: Keypad slide. When set, keyboard is exposed. */ public static final int SW_KEYPAD_SLIDE = 0x0a; + /** Switch code: Headphone. When set, headphone is inserted. */ + public static final int SW_HEADPHONE_INSERT = 0x02; + + /** Switch code: Microphone. When set, microphone is inserted. */ + public static final int SW_MICROPHONE_INSERT = 0x04; + + /** Switch code: Headphone/Microphone Jack. When set, something is inserted. */ + public static final int SW_JACK_PHYSICAL_INSERT = 0x07; + + public static final int SW_LID_BIT = 1 << SW_LID; + public static final int SW_KEYPAD_SLIDE_BIT = 1 << SW_KEYPAD_SLIDE; + public static final int SW_HEADPHONE_INSERT_BIT = 1 << SW_HEADPHONE_INSERT; + public static final int SW_MICROPHONE_INSERT_BIT = 1 << SW_MICROPHONE_INSERT; + public static final int SW_JACK_PHYSICAL_INSERT_BIT = 1 << SW_JACK_PHYSICAL_INSERT; + public static final int SW_JACK_BITS = + SW_HEADPHONE_INSERT_BIT | SW_MICROPHONE_INSERT_BIT | SW_JACK_PHYSICAL_INSERT_BIT; + + /** Whether to use the dev/input/event or uevent subsystem for the audio jack. */ + final boolean mUseDevInputEventForAudioJack; + public InputManagerService(Context context, Handler handler) { this.mContext = context; this.mHandler = new InputManagerHandler(handler.getLooper()); - Slog.i(TAG, "Initializing input manager"); + mUseDevInputEventForAudioJack = + context.getResources().getBoolean(R.bool.config_useDevInputEventForAudioJack); + Slog.i(TAG, "Initializing input manager, mUseDevInputEventForAudioJack=" + + mUseDevInputEventForAudioJack); mPtr = nativeInit(this, mContext, mHandler.getLooper().getQueue()); } @@ -231,6 +256,10 @@ public class InputManagerService extends IInputManager.Stub mWindowManagerCallbacks = callbacks; } + public void setWiredAccessoryCallbacks(WiredAccessoryCallbacks callbacks) { + mWiredAccessoryCallbacks = callbacks; + } + public void start() { Slog.i(TAG, "Starting input manager"); nativeStart(mPtr); @@ -335,7 +364,7 @@ public class InputManagerService extends IInputManager.Stub public int getKeyCodeState(int deviceId, int sourceMask, int keyCode) { return nativeGetKeyCodeState(mPtr, deviceId, sourceMask, keyCode); } - + /** * Gets the current state of a key or button by scan code. * @param deviceId The input device id, or -1 to consult all devices. @@ -513,7 +542,7 @@ public class InputManagerService extends IInputManager.Stub /** * Gets information about the input device with the specified id. - * @param id The device id. + * @param deviceId The device id. * @return The input device or null if not found. */ @Override // Binder call @@ -976,8 +1005,8 @@ public class InputManagerService extends IInputManager.Stub // Must be called on handler. private void handleSwitchKeyboardLayout(int deviceId, int direction) { final InputDevice device = getInputDevice(deviceId); - final String inputDeviceDescriptor = device.getDescriptor(); if (device != null) { + final String inputDeviceDescriptor = device.getDescriptor(); final boolean changed; final String keyboardLayoutDescriptor; synchronized (mDataStore) { @@ -1214,6 +1243,7 @@ public class InputManagerService extends IInputManager.Stub } // Called by the heartbeat to ensure locks are not held indefinitely (for deadlock detection). + @Override public void monitor() { synchronized (mInputFilterLock) { } nativeMonitor(mPtr); @@ -1244,10 +1274,15 @@ public class InputManagerService extends IInputManager.Stub + ", mask=" + Integer.toHexString(switchMask)); } - if ((switchMask & (1 << SW_LID)) != 0) { - final boolean lidOpen = ((switchValues & (1 << SW_LID)) == 0); + if ((switchMask & SW_LID_BIT) != 0) { + final boolean lidOpen = ((switchValues & SW_LID_BIT) == 0); mWindowManagerCallbacks.notifyLidSwitchChanged(whenNanos, lidOpen); } + + if (mUseDevInputEventForAudioJack && (switchMask & SW_JACK_BITS) != 0) { + mWiredAccessoryCallbacks.notifyWiredAccessoryChanged(whenNanos, switchValues, + switchMask); + } } // Native callback. @@ -1431,7 +1466,6 @@ public class InputManagerService extends IInputManager.Stub return null; } - /** * Callback interface implemented by the Window Manager. */ @@ -1459,6 +1493,13 @@ public class InputManagerService extends IInputManager.Stub } /** + * Callback interface implemented by WiredAccessoryObserver. + */ + public interface WiredAccessoryCallbacks { + public void notifyWiredAccessoryChanged(long whenNanos, int switchValues, int switchMask); + } + + /** * Private handler for the input manager. */ private final class InputManagerHandler extends Handler { @@ -1498,6 +1539,7 @@ public class InputManagerService extends IInputManager.Stub mDisconnected = true; } + @Override public void sendInputEvent(InputEvent event, int policyFlags) { if (event == null) { throw new IllegalArgumentException("event must not be null"); diff --git a/services/java/com/android/server/location/GpsLocationProvider.java b/services/java/com/android/server/location/GpsLocationProvider.java index 84adb83..a254d74 100755 --- a/services/java/com/android/server/location/GpsLocationProvider.java +++ b/services/java/com/android/server/location/GpsLocationProvider.java @@ -40,10 +40,8 @@ import android.os.Binder; import android.os.Bundle; import android.os.Handler; import android.os.IBinder; -import android.os.Looper; import android.os.Message; import android.os.PowerManager; -import android.os.Process; import android.os.RemoteException; import android.os.ServiceManager; import android.os.SystemClock; @@ -75,7 +73,6 @@ import java.util.ArrayList; import java.util.Date; import java.util.Map.Entry; import java.util.Properties; -import java.util.concurrent.CountDownLatch; /** * A GPS implementation of LocationProvider used by LocationManager. @@ -287,12 +284,8 @@ public class GpsLocationProvider implements LocationProviderInterface { private Bundle mLocationExtras = new Bundle(); private ArrayList<Listener> mListeners = new ArrayList<Listener>(); - // GpsLocationProvider's handler thread - private final Thread mThread; - // Handler for processing events in mThread. + // Handler for processing events private Handler mHandler; - // Used to signal when our main thread has initialized everything - private final CountDownLatch mInitializedLatch = new CountDownLatch(1); private String mAGpsApn; private int mAGpsDataConnectionState; @@ -437,21 +430,6 @@ public class GpsLocationProvider implements LocationProviderInterface { mWakeupIntent = PendingIntent.getBroadcast(mContext, 0, new Intent(ALARM_WAKEUP), 0); mTimeoutIntent = PendingIntent.getBroadcast(mContext, 0, new Intent(ALARM_TIMEOUT), 0); - IntentFilter intentFilter = new IntentFilter(); - intentFilter.addAction(Intents.DATA_SMS_RECEIVED_ACTION); - intentFilter.addDataScheme("sms"); - intentFilter.addDataAuthority("localhost","7275"); - context.registerReceiver(mBroadcastReciever, intentFilter); - - intentFilter = new IntentFilter(); - intentFilter.addAction(Intents.WAP_PUSH_RECEIVED_ACTION); - try { - intentFilter.addDataType("application/vnd.omaloc-supl-init"); - } catch (IntentFilter.MalformedMimeTypeException e) { - Log.w(TAG, "Malformed SUPL init mime type"); - } - context.registerReceiver(mBroadcastReciever, intentFilter); - mConnMgr = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); // Battery statistics service to be notified when GPS turns on or off @@ -487,26 +465,43 @@ public class GpsLocationProvider implements LocationProviderInterface { Log.w(TAG, "Could not open GPS configuration file " + PROPERTIES_FILE); } - // wait until we are fully initialized before returning - mThread = new GpsLocationProviderThread(); - mThread.start(); - while (true) { - try { - mInitializedLatch.await(); - break; - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); + // construct handler, listen for events + mHandler = new ProviderHandler(); + listenForBroadcasts(); + + // also listen for PASSIVE_PROVIDER updates + mHandler.post(new Runnable() { + @Override + public void run() { + LocationManager locManager = + (LocationManager) mContext.getSystemService(Context.LOCATION_SERVICE); + locManager.requestLocationUpdates(LocationManager.PASSIVE_PROVIDER, + 0, 0, new NetworkLocationListener(), mHandler.getLooper()); } - } + }); } - private void initialize() { - // register our receiver on our thread rather than the main thread + private void listenForBroadcasts() { IntentFilter intentFilter = new IntentFilter(); + intentFilter.addAction(Intents.DATA_SMS_RECEIVED_ACTION); + intentFilter.addDataScheme("sms"); + intentFilter.addDataAuthority("localhost","7275"); + mContext.registerReceiver(mBroadcastReciever, intentFilter, null, mHandler); + + intentFilter = new IntentFilter(); + intentFilter.addAction(Intents.WAP_PUSH_RECEIVED_ACTION); + try { + intentFilter.addDataType("application/vnd.omaloc-supl-init"); + } catch (IntentFilter.MalformedMimeTypeException e) { + Log.w(TAG, "Malformed SUPL init mime type"); + } + mContext.registerReceiver(mBroadcastReciever, intentFilter, null, mHandler); + + intentFilter = new IntentFilter(); intentFilter.addAction(ALARM_WAKEUP); intentFilter.addAction(ALARM_TIMEOUT); intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION); - mContext.registerReceiver(mBroadcastReciever, intentFilter); + mContext.registerReceiver(mBroadcastReciever, intentFilter, null, mHandler); } /** @@ -1536,29 +1531,6 @@ public class GpsLocationProvider implements LocationProviderInterface { } }; - private final class GpsLocationProviderThread extends Thread { - - public GpsLocationProviderThread() { - super("GpsLocationProvider"); - } - - @Override - public void run() { - Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND); - initialize(); - Looper.prepare(); - - LocationManager locManager = - (LocationManager) mContext.getSystemService(Context.LOCATION_SERVICE); - mHandler = new ProviderHandler(); - // signal when we are initialized and ready to go - mInitializedLatch.countDown(); - locManager.requestLocationUpdates(LocationManager.PASSIVE_PROVIDER, - 0, 0, new NetworkLocationListener(), Looper.myLooper()); - Looper.loop(); - } - } - private final class NetworkLocationListener implements LocationListener { @Override public void onLocationChanged(Location location) { diff --git a/services/java/com/android/server/pm/Installer.java b/services/java/com/android/server/pm/Installer.java index ad85c0d..8b1e80f 100644 --- a/services/java/com/android/server/pm/Installer.java +++ b/services/java/com/android/server/pm/Installer.java @@ -254,10 +254,12 @@ public final class Installer { return execute(builder.toString()); } - public int deleteCacheFiles(String name) { + public int deleteCacheFiles(String name, int userId) { StringBuilder builder = new StringBuilder("rmcache"); builder.append(' '); builder.append(name); + builder.append(' '); + builder.append(userId); return execute(builder.toString()); } diff --git a/services/java/com/android/server/pm/PackageManagerService.java b/services/java/com/android/server/pm/PackageManagerService.java index 1eafd9c..75bc265 100644 --- a/services/java/com/android/server/pm/PackageManagerService.java +++ b/services/java/com/android/server/pm/PackageManagerService.java @@ -45,6 +45,7 @@ import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import org.xmlpull.v1.XmlSerializer; +import android.app.ActivityManager; import android.app.ActivityManagerNative; import android.app.IActivityManager; import android.app.admin.IDevicePolicyManager; @@ -5890,6 +5891,10 @@ public class PackageManagerService extends IPackageManager.Stub { // Check if installing from ADB if ((flags & PackageManager.INSTALL_FROM_ADB) != 0) { + // Do not run verification in a test harness environment + if (ActivityManager.isRunningInTestHarness()) { + return false; + } // Check if the developer does not want package verification for ADB installs if (android.provider.Settings.Global.getInt(mContext.getContentResolver(), android.provider.Settings.Global.PACKAGE_VERIFIER_INCLUDE_ADB, 1) == 0) { @@ -8535,11 +8540,10 @@ public class PackageManagerService extends IPackageManager.Stub { Slog.w(TAG, "Package " + packageName + " has no applicationInfo."); return false; } - // TODO: Pass userId to deleteCacheFiles - int retCode = mInstaller.deleteCacheFiles(packageName); + int retCode = mInstaller.deleteCacheFiles(packageName, userId); if (retCode < 0) { Slog.w(TAG, "Couldn't remove cache files for package: " - + packageName); + + packageName + " u" + userId); return false; } return true; diff --git a/services/java/com/android/server/power/DisplayPowerController.java b/services/java/com/android/server/power/DisplayPowerController.java index 5f4a786..4f8cdde 100644 --- a/services/java/com/android/server/power/DisplayPowerController.java +++ b/services/java/com/android/server/power/DisplayPowerController.java @@ -44,7 +44,6 @@ import android.util.TimeUtils; import android.view.Display; import java.io.PrintWriter; -import java.io.StringWriter; import java.util.concurrent.Executor; /** @@ -95,7 +94,8 @@ final class DisplayPowerController { // when it is especially dark outside. The light sensor tends to perform // poorly at low light levels so we compensate for it by making an // assumption about the environment. - private static final boolean USE_TWILIGHT_ADJUSTMENT = true; + private static final boolean USE_TWILIGHT_ADJUSTMENT = + PowerManager.useTwilightAdjustmentFeature(); // Specifies the maximum magnitude of the time of day adjustment. private static final float TWILIGHT_ADJUSTMENT_MAX_GAMMA = 1.5f; diff --git a/services/java/com/android/server/power/PowerManagerService.java b/services/java/com/android/server/power/PowerManagerService.java index c2d47e5..664125a 100644 --- a/services/java/com/android/server/power/PowerManagerService.java +++ b/services/java/com/android/server/power/PowerManagerService.java @@ -266,6 +266,11 @@ public final class PowerManagerService extends IPowerManager.Stub // Use -1 to disable. private int mScreenBrightnessOverrideFromWindowManager = -1; + // The user activity timeout override from the window manager + // to allow the current foreground activity to override the user activity timeout. + // Use -1 to disable. + private long mUserActivityTimeoutOverrideFromWindowManager = -1; + // The screen brightness setting override from the settings application // to temporarily adjust the brightness until next updated, // Use -1 to disable. @@ -277,6 +282,9 @@ public final class PowerManagerService extends IPowerManager.Stub // Use NaN to disable. private float mTemporaryScreenAutoBrightnessAdjustmentSettingOverride = Float.NaN; + // Time when we last logged a warning about calling userActivity() without permission. + private long mLastWarningAboutUserActivityPermission = Long.MIN_VALUE; + private native void nativeInit(); private static native void nativeShutdown(); private static native void nativeReboot(String reason) throws IOException; @@ -683,12 +691,29 @@ public final class PowerManagerService extends IPowerManager.Stub @Override // Binder call public void userActivity(long eventTime, int event, int flags) { + final long now = SystemClock.uptimeMillis(); + if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.DEVICE_POWER) + != PackageManager.PERMISSION_GRANTED) { + // Once upon a time applications could call userActivity(). + // Now we require the DEVICE_POWER permission. Log a warning and ignore the + // request instead of throwing a SecurityException so we don't break old apps. + synchronized (mLock) { + if (now >= mLastWarningAboutUserActivityPermission + (5 * 60 * 1000)) { + mLastWarningAboutUserActivityPermission = now; + Slog.w(TAG, "Ignoring call to PowerManager.userActivity() because the " + + "caller does not have DEVICE_POWER permission. " + + "Please fix your app! " + + " pid=" + Binder.getCallingPid() + + " uid=" + Binder.getCallingUid()); + } + } + return; + } + if (eventTime > SystemClock.uptimeMillis()) { throw new IllegalArgumentException("event time must not be in the future"); } - mContext.enforceCallingOrSelfPermission(android.Manifest.permission.DEVICE_POWER, null); - final int uid = Binder.getCallingUid(); final long ident = Binder.clearCallingIdentity(); try { @@ -1156,6 +1181,9 @@ public final class PowerManagerService extends IPowerManager.Stub if (isMaximumScreenOffTimeoutFromDeviceAdminEnforcedLocked()) { timeout = Math.min(timeout, mMaximumScreenOffTimeoutFromDeviceAdmin); } + if (mUserActivityTimeoutOverrideFromWindowManager >= 0) { + timeout = (int)Math.min(timeout, mUserActivityTimeoutOverrideFromWindowManager); + } return Math.max(timeout, MINIMUM_SCREEN_OFF_TIMEOUT); } @@ -1573,18 +1601,6 @@ public final class PowerManagerService extends IPowerManager.Stub } } - @Override // Binder call - public void clearUserActivityTimeout(long now, long timeout) { - // TODO Auto-generated method stub - // Only used by phone app, delete this - } - - @Override // Binder call - public void setPokeLock(int pokey, IBinder lock, String tag) { - // TODO Auto-generated method stub - // Only used by phone app, delete this - } - /** * Set the setting that determines whether the device stays on when plugged in. * The argument is a bit string, with each bit specifying a power source that, @@ -1727,6 +1743,36 @@ public final class PowerManagerService extends IPowerManager.Stub } /** + * Used by the window manager to override the user activity timeout based on the + * current foreground activity. It can only be used to make the timeout shorter + * than usual, not longer. + * + * This method must only be called by the window manager. + * + * @param timeoutMillis The overridden timeout, or -1 to disable the override. + */ + public void setUserActivityTimeoutOverrideFromWindowManager(long timeoutMillis) { + mContext.enforceCallingOrSelfPermission(android.Manifest.permission.DEVICE_POWER, null); + + final long ident = Binder.clearCallingIdentity(); + try { + setUserActivityTimeoutOverrideFromWindowManagerInternal(timeoutMillis); + } finally { + Binder.restoreCallingIdentity(ident); + } + } + + private void setUserActivityTimeoutOverrideFromWindowManagerInternal(long timeoutMillis) { + synchronized (mLock) { + if (mUserActivityTimeoutOverrideFromWindowManager != timeoutMillis) { + mUserActivityTimeoutOverrideFromWindowManager = timeoutMillis; + mDirty |= DIRTY_SETTINGS; + updatePowerStateLocked(); + } + } + } + + /** * Used by the settings application and brightness control widgets to * temporarily override the current screen brightness setting so that the * user can observe the effect of an intended settings change without applying @@ -1875,6 +1921,8 @@ public final class PowerManagerService extends IPowerManager.Stub pw.println(" mScreenBrightnessModeSetting=" + mScreenBrightnessModeSetting); pw.println(" mScreenBrightnessOverrideFromWindowManager=" + mScreenBrightnessOverrideFromWindowManager); + pw.println(" mUserActivityTimeoutOverrideFromWindowManager=" + + mUserActivityTimeoutOverrideFromWindowManager); pw.println(" mTemporaryScreenBrightnessSettingOverride=" + mTemporaryScreenBrightnessSettingOverride); pw.println(" mTemporaryScreenAutoBrightnessAdjustmentSettingOverride=" diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java index 23ce52e..3f7b67b 100755 --- a/services/java/com/android/server/wm/WindowManagerService.java +++ b/services/java/com/android/server/wm/WindowManagerService.java @@ -18,19 +18,24 @@ package com.android.server.wm; import static android.view.WindowManager.LayoutParams.FIRST_APPLICATION_WINDOW; import static android.view.WindowManager.LayoutParams.FIRST_SUB_WINDOW; +import static android.view.WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM; import static android.view.WindowManager.LayoutParams.FLAG_COMPATIBLE_WINDOW; import static android.view.WindowManager.LayoutParams.FLAG_DIM_BEHIND; import static android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON; import static android.view.WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; -import static android.view.WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM; import static android.view.WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER; import static android.view.WindowManager.LayoutParams.LAST_APPLICATION_WINDOW; import static android.view.WindowManager.LayoutParams.LAST_SUB_WINDOW; +import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION; import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_STARTING; import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION; +import static android.view.WindowManager.LayoutParams.TYPE_BOOT_PROGRESS; import static android.view.WindowManager.LayoutParams.TYPE_DREAM; import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD; import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD_DIALOG; +import static android.view.WindowManager.LayoutParams.TYPE_KEYGUARD; +import static android.view.WindowManager.LayoutParams.TYPE_SYSTEM_DIALOG; +import static android.view.WindowManager.LayoutParams.TYPE_SYSTEM_ERROR; import static android.view.WindowManager.LayoutParams.TYPE_UNIVERSE_BACKGROUND; import static android.view.WindowManager.LayoutParams.TYPE_WALLPAPER; @@ -593,7 +598,13 @@ public class WindowManagerService extends IWindowManager.Stub private boolean mSyswin = false; private float mScreenBrightness = -1; private float mButtonBrightness = -1; + private long mUserActivityTimeout = -1; private boolean mUpdateRotation = false; + + private static final int DISPLAY_CONTENT_UNKNOWN = 0; + private static final int DISPLAY_CONTENT_MIRROR = 1; + private static final int DISPLAY_CONTENT_UNIQUE = 2; + private int mDisplayHasContent = DISPLAY_CONTENT_UNKNOWN; } final LayoutFields mInnerFields = new LayoutFields(); @@ -1118,10 +1129,6 @@ public class WindowManagerService extends IWindowManager.Stub if (win.mAppToken != null && addToToken) { win.mAppToken.allAppWindows.add(win); } - - if (windows.size() == 1) { - mDisplayManagerService.setDisplayHasContent(win.getDisplayId(), true); - } } /** TODO(cmautner): Is this the same as {@link WindowState#canReceiveKeys()} */ @@ -1129,7 +1136,7 @@ public class WindowManagerService extends IWindowManager.Stub final int fl = w.mAttrs.flags & (FLAG_NOT_FOCUSABLE|FLAG_ALT_FOCUSABLE_IM); if (fl == 0 || fl == (FLAG_NOT_FOCUSABLE|FLAG_ALT_FOCUSABLE_IM) - || w.mAttrs.type == WindowManager.LayoutParams.TYPE_APPLICATION_STARTING) { + || w.mAttrs.type == TYPE_APPLICATION_STARTING) { if (DEBUG_INPUT_METHOD) { Slog.i(TAG, "isVisibleOrAdding " + w + ": " + w.isVisibleOrAdding()); if (!w.isVisibleOrAdding()) { @@ -1177,7 +1184,7 @@ public class WindowManagerService extends IWindowManager.Stub // is not actually looking to move the IME, look down below // for a real window to target... if (!willMove - && w.mAttrs.type == WindowManager.LayoutParams.TYPE_APPLICATION_STARTING + && w.mAttrs.type == TYPE_APPLICATION_STARTING && i > 0) { WindowState wb = windows.get(i-1); if (wb.mAppToken == w.mAppToken && canBeImeTarget(wb)) { @@ -1576,7 +1583,7 @@ public class WindowManagerService extends IWindowManager.Stub while (i > 0) { i--; w = windows.get(i); - if ((w.mAttrs.type == WindowManager.LayoutParams.TYPE_WALLPAPER)) { + if ((w.mAttrs.type == TYPE_WALLPAPER)) { if (topCurW == null) { topCurW = w; topCurI = i; @@ -2411,9 +2418,6 @@ public class WindowManagerService extends IWindowManager.Stub final WindowList windows = win.getWindowList(); windows.remove(win); - if (windows.isEmpty()) { - mDisplayManagerService.setDisplayHasContent(win.getDisplayId(), false); - } mPendingRemove.remove(win); mWindowsChanged = true; if (DEBUG_WINDOW_MOVEMENT) Slog.v(TAG, "Final remove of window: " + win); @@ -2748,7 +2752,10 @@ public class WindowManagerService extends IWindowManager.Stub } } - if (DEBUG_LAYOUT) Slog.v(TAG, "Relayout " + win + ": viewVisibility=" + viewVisibility + if (DEBUG_LAYOUT + // TODO: Remove once b/7094175 is fixed + || ((String)win.mAttrs.getTitle()).contains("Keyguard") + ) Slog.v(TAG, "Relayout " + win + ": viewVisibility=" + viewVisibility + " " + requestedWidth + "x" + requestedHeight + " " + win.mAttrs); win.mEnforceSizeCompat = (win.mAttrs.flags & FLAG_COMPATIBLE_WINDOW) != 0; @@ -2771,13 +2778,11 @@ public class WindowManagerService extends IWindowManager.Stub win.mHScale = win.mVScale = 1; } - boolean imMayMove = (flagChanges&( - WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM | - WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE)) != 0; + boolean imMayMove = (flagChanges & (FLAG_ALT_FOCUSABLE_IM | FLAG_NOT_FOCUSABLE)) != 0; final boolean isDefaultDisplay = win.isDefaultDisplay(); boolean focusMayChange = isDefaultDisplay && (win.mViewVisibility != viewVisibility - || ((flagChanges&WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE) != 0) + || ((flagChanges & FLAG_NOT_FOCUSABLE) != 0) || (!win.mRelayoutCalled)); boolean wallpaperMayMove = win.mViewVisibility != viewVisibility @@ -3091,8 +3096,7 @@ public class WindowManagerService extends IWindowManager.Stub final int windowCount = windows.size(); for (int i = 0; i < windowCount; i++) { WindowState window = windows.get(i); - if (window.isVisibleLw() || - window.mAttrs.type == WindowManager.LayoutParams.TYPE_UNIVERSE_BACKGROUND) { + if (window.isVisibleLw() || window.mAttrs.type == TYPE_UNIVERSE_BACKGROUND) { WindowInfo info = getWindowInfoForWindowStateLocked(window); outInfos.add(info); } @@ -3146,8 +3150,7 @@ public class WindowManagerService extends IWindowManager.Stub info.type = window.mAttrs.type; info.displayId = window.getDisplayId(); info.compatibilityScale = window.mGlobalScale; - info.visible = window.isVisibleLw() - || info.type == WindowManager.LayoutParams.TYPE_UNIVERSE_BACKGROUND; + info.visible = window.isVisibleLw() || info.type == TYPE_UNIVERSE_BACKGROUND; info.layer = window.mLayer; window.getTouchableRegion(mTempRegion); mTempRegion.getBounds(info.touchableRegion); @@ -4372,7 +4375,7 @@ public class WindowManagerService extends IWindowManager.Stub // an opaque window and our starting window transition animation // can still work. We just need to make sure the starting window // is also showing the wallpaper. - windowFlags |= WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER; + windowFlags |= FLAG_SHOW_WALLPAPER; } else { return; } @@ -5494,7 +5497,7 @@ public class WindowManagerService extends IWindowManager.Stub final int N = windows.size(); for (int i=0; i<N; i++) { WindowState w = windows.get(i); - if (w.mAttrs.type == WindowManager.LayoutParams.TYPE_KEYGUARD) { + if (w.mAttrs.type == TYPE_KEYGUARD) { // Only if there is a keyguard attached to the window manager // will we consider ourselves as having a keyguard. If it // isn't attached, we don't know if it wants to be shown or @@ -5510,13 +5513,13 @@ public class WindowManagerService extends IWindowManager.Stub return; } if (w.isDrawnLw()) { - if (w.mAttrs.type == WindowManager.LayoutParams.TYPE_BOOT_PROGRESS) { + if (w.mAttrs.type == TYPE_BOOT_PROGRESS) { haveBootMsg = true; - } else if (w.mAttrs.type == WindowManager.LayoutParams.TYPE_APPLICATION) { + } else if (w.mAttrs.type == TYPE_APPLICATION) { haveApp = true; - } else if (w.mAttrs.type == WindowManager.LayoutParams.TYPE_WALLPAPER) { + } else if (w.mAttrs.type == TYPE_WALLPAPER) { haveWallpaper = true; - } else if (w.mAttrs.type == WindowManager.LayoutParams.TYPE_KEYGUARD) { + } else if (w.mAttrs.type == TYPE_KEYGUARD) { haveKeyguard = true; } } @@ -5712,9 +5715,8 @@ public class WindowManagerService extends IWindowManager.Stub dw = displayInfo.logicalWidth; dh = displayInfo.logicalHeight; - int aboveAppLayer = mPolicy.windowTypeToLayerLw( - WindowManager.LayoutParams.TYPE_APPLICATION) * TYPE_LAYER_MULTIPLIER - + TYPE_LAYER_OFFSET; + int aboveAppLayer = mPolicy.windowTypeToLayerLw(TYPE_APPLICATION) + * TYPE_LAYER_MULTIPLIER + TYPE_LAYER_OFFSET; aboveAppLayer += TYPE_LAYER_MULTIPLIER; boolean isImeTarget = mInputMethodTarget != null @@ -6673,9 +6675,6 @@ public class WindowManagerService extends IWindowManager.Stub int h = mPolicy.getNonDecorDisplayHeight(dw, dh, rotation); // Compute the screen layout size class for this rotation. - int screenLayoutSize; - boolean screenLayoutLong; - boolean screenLayoutCompatNeeded; int longSize = w; int shortSize = h; if (longSize < shortSize) { @@ -6685,64 +6684,7 @@ public class WindowManagerService extends IWindowManager.Stub } longSize = (int)(longSize/density); shortSize = (int)(shortSize/density); - - // These semi-magic numbers define our compatibility modes for - // applications with different screens. These are guarantees to - // app developers about the space they can expect for a particular - // configuration. DO NOT CHANGE! - if (longSize < 470) { - // This is shorter than an HVGA normal density screen (which - // is 480 pixels on its long side). - screenLayoutSize = Configuration.SCREENLAYOUT_SIZE_SMALL; - screenLayoutLong = false; - screenLayoutCompatNeeded = false; - } else { - // What size is this screen screen? - if (longSize >= 960 && shortSize >= 720) { - // 1.5xVGA or larger screens at medium density are the point - // at which we consider it to be an extra large screen. - screenLayoutSize = Configuration.SCREENLAYOUT_SIZE_XLARGE; - } else if (longSize >= 640 && shortSize >= 480) { - // VGA or larger screens at medium density are the point - // at which we consider it to be a large screen. - screenLayoutSize = Configuration.SCREENLAYOUT_SIZE_LARGE; - } else { - screenLayoutSize = Configuration.SCREENLAYOUT_SIZE_NORMAL; - } - - // If this screen is wider than normal HVGA, or taller - // than FWVGA, then for old apps we want to run in size - // compatibility mode. - if (shortSize > 321 || longSize > 570) { - screenLayoutCompatNeeded = true; - } else { - screenLayoutCompatNeeded = false; - } - - // Is this a long screen? - if (((longSize*3)/5) >= (shortSize-1)) { - // Anything wider than WVGA (5:3) is considering to be long. - screenLayoutLong = true; - } else { - screenLayoutLong = false; - } - } - - // Now reduce the last screenLayout to not be better than what we - // have found. - if (!screenLayoutLong) { - curLayout = (curLayout&~Configuration.SCREENLAYOUT_LONG_MASK) - | Configuration.SCREENLAYOUT_LONG_NO; - } - if (screenLayoutCompatNeeded) { - curLayout |= Configuration.SCREENLAYOUT_COMPAT_NEEDED; - } - int curSize = curLayout&Configuration.SCREENLAYOUT_SIZE_MASK; - if (screenLayoutSize < curSize) { - curLayout = (curLayout&~Configuration.SCREENLAYOUT_SIZE_MASK) - | screenLayoutSize; - } - return curLayout; + return Configuration.reduceScreenLayout(curLayout, longSize, shortSize); } private void computeSizeRangesAndScreenLayout(DisplayInfo displayInfo, boolean rotated, @@ -6769,15 +6711,13 @@ public class WindowManagerService extends IWindowManager.Stub adjustDisplaySizeRanges(displayInfo, Surface.ROTATION_90, unrotDh, unrotDw); adjustDisplaySizeRanges(displayInfo, Surface.ROTATION_180, unrotDw, unrotDh); adjustDisplaySizeRanges(displayInfo, Surface.ROTATION_270, unrotDh, unrotDw); - int sl = Configuration.SCREENLAYOUT_SIZE_XLARGE - | Configuration.SCREENLAYOUT_LONG_YES; + int sl = Configuration.resetScreenLayout(outConfig.screenLayout); sl = reduceConfigLayout(sl, Surface.ROTATION_0, density, unrotDw, unrotDh); sl = reduceConfigLayout(sl, Surface.ROTATION_90, density, unrotDh, unrotDw); sl = reduceConfigLayout(sl, Surface.ROTATION_180, density, unrotDw, unrotDh); sl = reduceConfigLayout(sl, Surface.ROTATION_270, density, unrotDh, unrotDw); outConfig.smallestScreenWidthDp = (int)(displayInfo.smallestNominalAppWidth / density); - outConfig.screenLayout = - sl|(outConfig.screenLayout&Configuration.SCREENLAYOUT_LAYOUTDIR_MASK); + outConfig.screenLayout = sl; } private int reduceCompatConfigWidthSize(int curSize, int rotation, DisplayMetrics dm, @@ -8053,8 +7993,7 @@ public class WindowManagerService extends IWindowManager.Stub numRemoved++; continue; } else if (lastBelow == i-1) { - if (w.mAttrs.type == WindowManager.LayoutParams.TYPE_WALLPAPER - || w.mAttrs.type == WindowManager.LayoutParams.TYPE_UNIVERSE_BACKGROUND) { + if (w.mAttrs.type == TYPE_WALLPAPER || w.mAttrs.type == TYPE_UNIVERSE_BACKGROUND) { lastBelow = i; } } @@ -8837,12 +8776,27 @@ public class WindowManagerService extends IWindowManager.Stub && mInnerFields.mButtonBrightness < 0) { mInnerFields.mButtonBrightness = w.mAttrs.buttonBrightness; } + if (!mInnerFields.mSyswin && w.mAttrs.userActivityTimeout >= 0 + && mInnerFields.mUserActivityTimeout < 0) { + mInnerFields.mUserActivityTimeout = w.mAttrs.userActivityTimeout; + } + + final int type = attrs.type; if (canBeSeen - && (attrs.type == WindowManager.LayoutParams.TYPE_SYSTEM_DIALOG - || attrs.type == WindowManager.LayoutParams.TYPE_KEYGUARD - || attrs.type == WindowManager.LayoutParams.TYPE_SYSTEM_ERROR)) { + && (type == TYPE_SYSTEM_DIALOG + || type == TYPE_KEYGUARD + || type == TYPE_SYSTEM_ERROR)) { mInnerFields.mSyswin = true; } + + if (canBeSeen) { + if (type == TYPE_DREAM || type == TYPE_KEYGUARD) { + mInnerFields.mDisplayHasContent = LayoutFields.DISPLAY_CONTENT_MIRROR; + } else if (mInnerFields.mDisplayHasContent + == LayoutFields.DISPLAY_CONTENT_UNKNOWN) { + mInnerFields.mDisplayHasContent = LayoutFields.DISPLAY_CONTENT_UNIQUE; + } + } } boolean opaqueDrawn = canBeSeen && w.isOpaqueDrawn(); @@ -8861,7 +8815,7 @@ public class WindowManagerService extends IWindowManager.Stub final WindowStateAnimator winAnimator = w.mWinAnimator; if (!mAnimator.isDimmingLocked(winAnimator)) { final int width, height; - if (attrs.type == WindowManager.LayoutParams.TYPE_BOOT_PROGRESS) { + if (attrs.type == TYPE_BOOT_PROGRESS) { final DisplayInfo displayInfo = w.mDisplayContent.getDisplayInfo(); width = displayInfo.logicalWidth; height = displayInfo.logicalHeight; @@ -8926,6 +8880,9 @@ public class WindowManagerService extends IWindowManager.Stub mInnerFields.mHoldScreen = null; mInnerFields.mScreenBrightness = -1; mInnerFields.mButtonBrightness = -1; + mInnerFields.mUserActivityTimeout = -1; + mInnerFields.mDisplayHasContent = LayoutFields.DISPLAY_CONTENT_UNKNOWN; + mTransactionSequence++; final DisplayContent defaultDisplay = getDefaultDisplayContentLocked(); @@ -8945,10 +8902,6 @@ public class WindowManagerService extends IWindowManager.Stub mStrictModeFlash.positionSurface(defaultDw, defaultDh); } - // Give the display manager a chance to adjust properties - // like display rotation if it needs to. - mDisplayManagerService.performTraversalInTransactionFromWindowManager(); - boolean focusDisplayed = false; boolean updateAllDrawn = false; @@ -8964,6 +8917,11 @@ public class WindowManagerService extends IWindowManager.Stub final int innerDh = displayInfo.appHeight; final boolean isDefaultDisplay = (displayId == Display.DEFAULT_DISPLAY); + // Reset for each display unless we are forcing mirroring. + if (mInnerFields.mDisplayHasContent != LayoutFields.DISPLAY_CONTENT_MIRROR) { + mInnerFields.mDisplayHasContent = LayoutFields.DISPLAY_CONTENT_UNKNOWN; + } + int repeats = 0; do { repeats++; @@ -9083,9 +9041,8 @@ public class WindowManagerService extends IWindowManager.Stub final boolean committed = winAnimator.commitFinishDrawingLocked(currentTime); if (isDefaultDisplay && committed) { - if ((w.mAttrs.flags - & WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER) != 0) { - if (WindowManagerService.DEBUG_WALLPAPER) Slog.v(TAG, + if ((w.mAttrs.flags & FLAG_SHOW_WALLPAPER) != 0) { + if (DEBUG_WALLPAPER) Slog.v(TAG, "First draw done in potential wallpaper target " + w); mInnerFields.mWallpaperMayChange = true; displayContent.pendingLayoutChanges |= @@ -9101,7 +9058,8 @@ public class WindowManagerService extends IWindowManager.Stub winAnimator.setSurfaceBoundariesLocked(recoveringMemory); final AppWindowToken atoken = w.mAppToken; - if (DEBUG_STARTING_WINDOW && atoken != null && w == atoken.startingWindow) { + if (DEBUG_STARTING_WINDOW && atoken != null + && w == atoken.startingWindow) { Slog.d(TAG, "updateWindows: starting " + w + " isOnScreen=" + w.isOnScreen() + " allDrawn=" + atoken.allDrawn + " freezingScreen=" + atoken.mAppAnimator.freezingScreen); @@ -9113,8 +9071,7 @@ public class WindowManagerService extends IWindowManager.Stub atoken.numInterestingWindows = atoken.numDrawnWindows = 0; atoken.startingDisplayed = false; } - if ((w.isOnScreen() || winAnimator.mAttrType - == WindowManager.LayoutParams.TYPE_BASE_APPLICATION) + if ((w.isOnScreen() || winAnimator.mAttrType == TYPE_BASE_APPLICATION) && !w.mExiting && !w.mDestroying) { if (WindowManagerService.DEBUG_VISIBILITY || WindowManagerService.DEBUG_ORIENTATION) { @@ -9157,6 +9114,22 @@ public class WindowManagerService extends IWindowManager.Stub updateResizingWindows(w); } + final boolean hasUniqueContent; + switch (mInnerFields.mDisplayHasContent) { + case LayoutFields.DISPLAY_CONTENT_MIRROR: + hasUniqueContent = isDefaultDisplay; + break; + case LayoutFields.DISPLAY_CONTENT_UNIQUE: + hasUniqueContent = true; + break; + case LayoutFields.DISPLAY_CONTENT_UNKNOWN: + default: + hasUniqueContent = false; + break; + } + mDisplayManagerService.setDisplayHasContent(displayId, hasUniqueContent, + true /* inTraversal, must call performTraversalInTrans... below */); + if (!mInnerFields.mDimming && mAnimator.isDimmingLocked(displayId)) { stopDimmingLocked(displayId); } @@ -9169,6 +9142,11 @@ public class WindowManagerService extends IWindowManager.Stub if (focusDisplayed) { mH.sendEmptyMessage(H.REPORT_LOSING_FOCUS); } + + // Give the display manager a chance to adjust properties + // like display rotation if it needs to. + mDisplayManagerService.performTraversalInTransactionFromWindowManager(); + } catch (RuntimeException e) { Log.wtf(TAG, "Unhandled exception in Window Manager", e); } finally { @@ -9255,7 +9233,9 @@ public class WindowManagerService extends IWindowManager.Stub "Reporting new frame to " + win + ": " + win.mCompatFrame); int diff = 0; boolean configChanged = win.isConfigChanged(); - if ((DEBUG_RESIZE || DEBUG_ORIENTATION || DEBUG_CONFIGURATION) + if ((DEBUG_RESIZE || DEBUG_ORIENTATION || DEBUG_CONFIGURATION + // TODO: Remove once b/7094175 is fixed + || ((String)win.mAttrs.getTitle()).contains("Keyguard")) && configChanged) { Slog.i(TAG, "Sending new config to window " + win + ": " + winAnimator.mSurfaceW + "x" + winAnimator.mSurfaceH @@ -9377,6 +9357,8 @@ public class WindowManagerService extends IWindowManager.Stub mPowerManager.setButtonBrightnessOverrideFromWindowManager( toBrightnessOverride(mInnerFields.mButtonBrightness)); } + mPowerManager.setUserActivityTimeoutOverrideFromWindowManager( + mInnerFields.mUserActivityTimeout); } if (mTurnOnScreen) { diff --git a/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/Grain.java b/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/Grain.java index cd54c2e..8618cc8 100644 --- a/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/Grain.java +++ b/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/Grain.java @@ -45,19 +45,40 @@ public class Grain extends TestBase { mScript.set_gNoiseStrength(s); } + private int findHighBit(int v) { + int bit = 0; + while (v > 1) { + bit++; + v >>= 1; + } + return bit; + } + + public void createTest(android.content.res.Resources res) { int width = mInPixelsAllocation.getType().getX(); int height = mInPixelsAllocation.getType().getY(); + int noiseW = findHighBit(width); + int noiseH = findHighBit(height); + if (noiseW > 9) { + noiseW = 9; + } + if (noiseH > 9) { + noiseH = 9; + } + noiseW = 1 << noiseW; + noiseH = 1 << noiseH; + Type.Builder tb = new Type.Builder(mRS, Element.U8(mRS)); - tb.setX(width); - tb.setY(height); + tb.setX(noiseW); + tb.setY(noiseH); mNoise = Allocation.createTyped(mRS, tb.create()); mNoise2 = Allocation.createTyped(mRS, tb.create()); mScript = new ScriptC_grain(mRS, res, R.raw.grain); - mScript.set_gWidth(width); - mScript.set_gHeight(height); + mScript.set_gWMask(noiseW - 1); + mScript.set_gHMask(noiseH - 1); mScript.set_gNoiseStrength(0.5f); mScript.set_gBlendSource(mNoise); mScript.set_gNoise(mNoise2); diff --git a/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/grain.rs b/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/grain.rs index ea42524..c8531f3 100644 --- a/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/grain.rs +++ b/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/grain.rs @@ -38,15 +38,15 @@ void genRand(uchar *out) { * 1 2 1 */ -int32_t gWidth; -int32_t gHeight; +int32_t gWMask; +int32_t gHMask; rs_allocation gBlendSource; void blend9(uchar *out, uint32_t x, uint32_t y) { - uint32_t x1 = min((int32_t)x+1, (int32_t)(gWidth -1)); - uint32_t x2 = max((int32_t)x-1, (int32_t)0); - uint32_t y1 = min((int32_t)y+1, (int32_t)(gHeight -1)); - uint32_t y2 = max((int32_t)y-1, (int32_t)0); + uint32_t x1 = (x-1) & gWMask; + uint32_t x2 = (x+1) & gWMask; + uint32_t y1 = (y-1) & gHMask; + uint32_t y2 = (y+1) & gHMask; uint p00 = 56 * rsGetElementAt_uchar(gBlendSource, x1, y1); uint p01 = 114 * rsGetElementAt_uchar(gBlendSource, x, y1); @@ -78,7 +78,7 @@ float gNoiseStrength; rs_allocation gNoise; void root(const uchar4 *in, uchar4 *out, uint32_t x, uint32_t y) { float4 ip = convert_float4(*in); - float pnoise = (float) rsGetElementAt_uchar(gNoise, x, y); + float pnoise = (float) rsGetElementAt_uchar(gNoise, x & gWMask, y & gHMask); float energy_level = ip.r + ip.g + ip.b; float energy_mask = (28.f - sqrt(energy_level)) * 0.03571f; diff --git a/tests/RenderScriptTests/LivePreview/src/com/android/rs/livepreview/CameraPreviewActivity.java b/tests/RenderScriptTests/LivePreview/src/com/android/rs/livepreview/CameraPreviewActivity.java index f21331f..89eec2c 100644 --- a/tests/RenderScriptTests/LivePreview/src/com/android/rs/livepreview/CameraPreviewActivity.java +++ b/tests/RenderScriptTests/LivePreview/src/com/android/rs/livepreview/CameraPreviewActivity.java @@ -305,8 +305,7 @@ public class CameraPreviewActivity extends Activity long t1 = java.lang.System.currentTimeMillis(); - mFilterYuv.execute(data); - mFilterYuv.copyOut(mCallbackBitmap); + mFilterYuv.execute(data, mCallbackBitmap); long t2 = java.lang.System.currentTimeMillis(); mTiming[mTimingSlot++] = t2 - t1; diff --git a/tests/RenderScriptTests/LivePreview/src/com/android/rs/livepreview/RsYuv.java b/tests/RenderScriptTests/LivePreview/src/com/android/rs/livepreview/RsYuv.java index cced198..978ae12 100644 --- a/tests/RenderScriptTests/LivePreview/src/com/android/rs/livepreview/RsYuv.java +++ b/tests/RenderScriptTests/LivePreview/src/com/android/rs/livepreview/RsYuv.java @@ -42,6 +42,7 @@ public class RsYuv private Allocation mAllocationOut; private Allocation mAllocationIn; private ScriptC_yuv mScript; + private ScriptIntrinsicYuvToRGB mYuv; RsYuv(RenderScript rs, Resources res, int width, int height) { mHeight = height; @@ -50,6 +51,8 @@ public class RsYuv mScript = new ScriptC_yuv(mRS, res, R.raw.yuv); mScript.invoke_setSize(mWidth, mHeight); + mYuv = ScriptIntrinsicYuvToRGB.create(rs, Element.RGBA_8888(mRS)); + Type.Builder tb = new Type.Builder(mRS, Element.RGBA_8888(mRS)); tb.setX(mWidth); tb.setY(mHeight); @@ -58,34 +61,16 @@ public class RsYuv mAllocationIn = Allocation.createSized(rs, Element.U8(mRS), (mHeight * mWidth) + ((mHeight / 2) * (mWidth / 2) * 2)); - mScript.bind_gYuvIn(mAllocationIn); + mYuv.setInput(mAllocationIn); } private long mTiming[] = new long[50]; private int mTimingSlot = 0; - void execute(byte[] yuv) { + void execute(byte[] yuv, Bitmap b) { mAllocationIn.copyFrom(yuv); - mRS.finish(); - - long t1 = java.lang.System.currentTimeMillis(); - mScript.forEach_root(mAllocationOut); - mRS.finish(); - long t2 = java.lang.System.currentTimeMillis(); - - mTiming[mTimingSlot++] = t2 - t1; - if (mTimingSlot >= mTiming.length) { - float total = 0; - for (int i=0; i<mTiming.length; i++) { - total += (float)mTiming[i]; - } - total /= mTiming.length; - Log.e("yuv", "core time = " + total); - mTimingSlot = 0; - } - } - - void copyOut(Bitmap b) { + mYuv.forEach(mAllocationOut); + mScript.forEach_root(mAllocationOut, mAllocationOut); mAllocationOut.copyTo(b); } diff --git a/tests/RenderScriptTests/LivePreview/src/com/android/rs/livepreview/yuv.rs b/tests/RenderScriptTests/LivePreview/src/com/android/rs/livepreview/yuv.rs index 6057eff..884812d 100644 --- a/tests/RenderScriptTests/LivePreview/src/com/android/rs/livepreview/yuv.rs +++ b/tests/RenderScriptTests/LivePreview/src/com/android/rs/livepreview/yuv.rs @@ -3,8 +3,6 @@ #pragma rs java_package_name(com.android.rs.livepreview) #pragma rs_fp_relaxed -uchar *gYuvIn; - static int gWidth; static int gHeight; static uchar crossProcess_tableR[256]; @@ -80,13 +78,9 @@ static uchar4 vignette(uchar4 color, uint32_t x, uint32_t y) { return convert_uchar4(c); } -void root(uchar4 *out, uint32_t x, uint32_t y) { - uchar Y = gYuvIn[(y * gWidth) + x]; - uchar *uv = &gYuvIn[gWidth * gHeight]; - uv += (((x>>1)<<1) + (y>>1) * gWidth); - - uchar4 p = rsYuvToRGBA_uchar4(Y, uv[1], uv[0]); - p = crossProcess_i(p); +void root(const uchar4 *in, uchar4 *out, uint32_t x, uint32_t y) { + uchar4 p; + p = crossProcess_i(*in); p = vignette(p, x, y); out->rgba = p; diff --git a/tests/StatusBar/src/com/android/statusbartest/PowerTest.java b/tests/StatusBar/src/com/android/statusbartest/PowerTest.java index e38bb6c..0cab10d 100644 --- a/tests/StatusBar/src/com/android/statusbartest/PowerTest.java +++ b/tests/StatusBar/src/com/android/statusbartest/PowerTest.java @@ -21,9 +21,7 @@ import android.os.IBinder; import android.os.IPowerManager; import android.content.ComponentName; import android.content.pm.PackageManager; -import android.os.RemoteException; import android.os.Handler; -import android.os.LocalPowerManager; import android.os.ServiceManager; import android.os.PowerManager; @@ -106,69 +104,5 @@ public class PowerTest extends TestActivity }, 5000); } }, - new Test("Touch events don't poke") { - public void run() { - mPokeState |= LocalPowerManager.POKE_LOCK_IGNORE_TOUCH_EVENTS; - try { - mPowerManager.setPokeLock(mPokeState, mPokeToken, TAG); - } catch (RemoteException e) { - throw new RuntimeException(e); - } - } - }, - - new Test("Touch events poke") { - public void run() { - mPokeState &= ~LocalPowerManager.POKE_LOCK_IGNORE_TOUCH_EVENTS; - try { - mPowerManager.setPokeLock(mPokeState, mPokeToken, TAG); - } catch (RemoteException e) { - throw new RuntimeException(e); - } - } - }, - new Test("Short timeout") { - public void run() { - mPokeState &= ~LocalPowerManager.POKE_LOCK_TIMEOUT_MASK; - mPokeState |= LocalPowerManager.POKE_LOCK_SHORT_TIMEOUT; - try { - mPowerManager.setPokeLock(mPokeState, mPokeToken, TAG); - } catch (RemoteException e) { - throw new RuntimeException(e); - } - } - }, - new Test("Medium timeout") { - public void run() { - mPokeState &= ~LocalPowerManager.POKE_LOCK_TIMEOUT_MASK; - mPokeState |= LocalPowerManager.POKE_LOCK_MEDIUM_TIMEOUT; - try { - mPowerManager.setPokeLock(mPokeState, mPokeToken, TAG); - } catch (RemoteException e) { - throw new RuntimeException(e); - } - } - }, - new Test("Normal timeout") { - public void run() { - mPokeState &= ~LocalPowerManager.POKE_LOCK_TIMEOUT_MASK; - try { - mPowerManager.setPokeLock(mPokeState, mPokeToken, TAG); - } catch (RemoteException e) { - throw new RuntimeException(e); - } - } - }, - new Test("Illegal timeout") { - public void run() { - mPokeState |= LocalPowerManager.POKE_LOCK_SHORT_TIMEOUT - | LocalPowerManager.POKE_LOCK_MEDIUM_TIMEOUT; - try { - mPowerManager.setPokeLock(mPokeState, mPokeToken, TAG); - } catch (RemoteException e) { - throw new RuntimeException(e); - } - } - }, }; } diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgePowerManager.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgePowerManager.java index e882440..5e23f24 100644 --- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgePowerManager.java +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgePowerManager.java @@ -45,11 +45,6 @@ public class BridgePowerManager implements IPowerManager { } @Override - public void clearUserActivityTimeout(long arg0, long arg1) throws RemoteException { - // pass for now. - } - - @Override public void crash(String arg0) throws RemoteException { // pass for now. } @@ -95,11 +90,6 @@ public class BridgePowerManager implements IPowerManager { } @Override - public void setPokeLock(int arg0, IBinder arg1, String arg2) throws RemoteException { - // pass for now. - } - - @Override public void setStayOnSetting(int arg0) throws RemoteException { // pass for now. } diff --git a/wifi/java/android/net/wifi/WifiStateMachine.java b/wifi/java/android/net/wifi/WifiStateMachine.java index ab9db88..db539e4 100644 --- a/wifi/java/android/net/wifi/WifiStateMachine.java +++ b/wifi/java/android/net/wifi/WifiStateMachine.java @@ -1624,7 +1624,7 @@ public class WifiStateMachine extends StateMachine { Intent intent = new Intent(WifiManager.RSSI_CHANGED_ACTION); intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT); intent.putExtra(WifiManager.EXTRA_NEW_RSSI, newRssi); - mContext.sendBroadcastAsUser(intent, UserHandle.ALL); + mContext.sendStickyBroadcastAsUser(intent, UserHandle.ALL); } private void sendNetworkStateChangeBroadcast(String bssid) { |
