diff options
45 files changed, 810 insertions, 423 deletions
diff --git a/api/current.txt b/api/current.txt index 3bd607bff472..ebda35c7a87c 100644 --- a/api/current.txt +++ b/api/current.txt @@ -299,13 +299,13 @@ package android { field public static final int backgroundTint = 16843883; // 0x101046b field public static final int backgroundTintMode = 16843884; // 0x101046c field public static final int backupAgent = 16843391; // 0x101027f - field public static final int backupInForeground = 16844058; // 0x101051a + field public static final int backupInForeground = 16844059; // 0x101051b field public static final int banner = 16843762; // 0x10103f2 field public static final int baseline = 16843548; // 0x101031c field public static final int baselineAlignBottom = 16843042; // 0x1010122 field public static final int baselineAligned = 16843046; // 0x1010126 field public static final int baselineAlignedChildIndex = 16843047; // 0x1010127 - field public static final int bitmap = 16844054; // 0x1010516 + field public static final int bitmap = 16844055; // 0x1010517 field public static final int borderlessButtonStyle = 16843563; // 0x101032b field public static final int bottom = 16843184; // 0x10101b0 field public static final int bottomBright = 16842957; // 0x10100cd @@ -324,7 +324,7 @@ package android { field public static final int buttonBarNeutralButtonStyle = 16843914; // 0x101048a field public static final int buttonBarPositiveButtonStyle = 16843913; // 0x1010489 field public static final int buttonBarStyle = 16843566; // 0x101032e - field public static final int buttonGravity = 16844030; // 0x10104fe + field public static final int buttonGravity = 16844031; // 0x10104ff field public static final int buttonStyle = 16842824; // 0x1010048 field public static final int buttonStyleInset = 16842826; // 0x101004a field public static final int buttonStyleSmall = 16842825; // 0x1010049 @@ -335,9 +335,9 @@ package android { field public static final int calendarTextColor = 16843931; // 0x101049b field public static final int calendarViewShown = 16843596; // 0x101034c field public static final int calendarViewStyle = 16843613; // 0x101035d - field public static final int canControlMagnification = 16844039; // 0x1010507 - field public static final int canPerformGestures = 16844045; // 0x101050d - field public static final int canRecord = 16844060; // 0x101051c + field public static final int canControlMagnification = 16844040; // 0x1010508 + field public static final int canPerformGestures = 16844046; // 0x101050e + field public static final int canRecord = 16844061; // 0x101051d field public static final int canRequestEnhancedWebAccessibility = 16843736; // 0x10103d8 field public static final int canRequestFilterKeyEvents = 16843737; // 0x10103d9 field public static final int canRequestTouchExplorationMode = 16843735; // 0x10103d7 @@ -377,7 +377,7 @@ package android { field public static final int codes = 16843330; // 0x1010242 field public static final int collapseColumns = 16843083; // 0x101014b field public static final int collapseContentDescription = 16843984; // 0x10104d0 - field public static final int collapseIcon = 16844031; // 0x10104ff + field public static final int collapseIcon = 16844032; // 0x1010500 field public static final int color = 16843173; // 0x10101a5 field public static final int colorAccent = 16843829; // 0x1010435 field public static final int colorActivatedHighlight = 16843664; // 0x1010390 @@ -414,18 +414,18 @@ package android { field public static final int contentAuthority = 16843408; // 0x1010290 field public static final int contentDescription = 16843379; // 0x1010273 field public static final int contentInsetEnd = 16843860; // 0x1010454 - field public static final int contentInsetEndWithActions = 16844067; // 0x1010523 + field public static final int contentInsetEndWithActions = 16844070; // 0x1010526 field public static final int contentInsetLeft = 16843861; // 0x1010455 field public static final int contentInsetRight = 16843862; // 0x1010456 field public static final int contentInsetStart = 16843859; // 0x1010453 - field public static final int contentInsetStartWithNavigation = 16844066; // 0x1010522 + field public static final int contentInsetStartWithNavigation = 16844069; // 0x1010525 field public static final int contextClickable = 16844007; // 0x10104e7 - field public static final int contextPopupMenuStyle = 16844033; // 0x1010501 + field public static final int contextPopupMenuStyle = 16844034; // 0x1010502 field public static final int controlX1 = 16843772; // 0x10103fc field public static final int controlX2 = 16843774; // 0x10103fe field public static final int controlY1 = 16843773; // 0x10103fd field public static final int controlY2 = 16843775; // 0x10103ff - field public static final int countDown = 16844059; // 0x101051b + field public static final int countDown = 16844060; // 0x101051c field public static final int country = 16843962; // 0x10104ba field public static final int cropToPadding = 16843043; // 0x1010123 field public static final int cursorVisible = 16843090; // 0x1010152 @@ -443,7 +443,7 @@ package android { field public static final deprecated int dayOfWeekTextAppearance = 16843925; // 0x1010495 field public static final int debuggable = 16842767; // 0x101000f field public static final int defaultHeight = 16844021; // 0x10104f5 - field public static final int defaultToDeviceProtectedStorage = 16844036; // 0x1010504 + field public static final int defaultToDeviceProtectedStorage = 16844037; // 0x1010505 field public static final int defaultValue = 16843245; // 0x10101ed field public static final int defaultWidth = 16844020; // 0x10104f4 field public static final int delay = 16843212; // 0x10101cc @@ -463,7 +463,7 @@ package android { field public static final int dialogTheme = 16843528; // 0x1010308 field public static final int dialogTitle = 16843250; // 0x10101f2 field public static final int digits = 16843110; // 0x1010166 - field public static final int directBootAware = 16844037; // 0x1010505 + field public static final int directBootAware = 16844038; // 0x1010506 field public static final int direction = 16843217; // 0x10101d1 field public static final deprecated int directionDescriptions = 16843681; // 0x10103a1 field public static final int directionPriority = 16843218; // 0x10101d2 @@ -511,12 +511,12 @@ package android { field public static final int elevation = 16843840; // 0x1010440 field public static final int ellipsize = 16842923; // 0x10100ab field public static final int ems = 16843096; // 0x1010158 - field public static final int enableVrMode = 16844069; // 0x1010525 + field public static final int enableVrMode = 16844072; // 0x1010528 field public static final int enabled = 16842766; // 0x101000e field public static final int end = 16843996; // 0x10104dc field public static final int endColor = 16843166; // 0x101019e - field public static final int endX = 16844050; // 0x1010512 - field public static final int endY = 16844051; // 0x1010513 + field public static final int endX = 16844051; // 0x1010513 + field public static final int endY = 16844052; // 0x1010514 field public static final deprecated int endYear = 16843133; // 0x101017d field public static final int enterFadeDuration = 16843532; // 0x101030c field public static final int entries = 16842930; // 0x10100b2 @@ -536,7 +536,7 @@ package android { field public static final int expandableListViewStyle = 16842863; // 0x101006f field public static final int expandableListViewWhiteStyle = 16843446; // 0x10102b6 field public static final int exported = 16842768; // 0x1010010 - field public static final int externalService = 16844046; // 0x101050e + field public static final int externalService = 16844047; // 0x101050f field public static final int extraTension = 16843371; // 0x101026b field public static final int extractNativeLibs = 16844010; // 0x10104ea field public static final int factor = 16843219; // 0x10101d3 @@ -561,7 +561,7 @@ package android { field public static final int fillBefore = 16843196; // 0x10101bc field public static final int fillColor = 16843780; // 0x1010404 field public static final int fillEnabled = 16843343; // 0x101024f - field public static final int fillType = 16844062; // 0x101051e + field public static final int fillType = 16844064; // 0x1010520 field public static final int fillViewport = 16843130; // 0x101017a field public static final int filter = 16843035; // 0x101011b field public static final int filterTouchesWhenObscured = 16843460; // 0x10102c4 @@ -577,7 +577,7 @@ package android { field public static final int fontFamily = 16843692; // 0x10103ac field public static final int fontFeatureSettings = 16843959; // 0x10104b7 field public static final int footerDividersEnabled = 16843311; // 0x101022f - field public static final int forceHasOverlappingRendering = 16844065; // 0x1010521 + field public static final int forceHasOverlappingRendering = 16844068; // 0x1010524 field public static final int foreground = 16843017; // 0x1010109 field public static final int foregroundGravity = 16843264; // 0x1010200 field public static final int foregroundTint = 16843885; // 0x101046d @@ -654,8 +654,8 @@ package android { field public static final int horizontalScrollViewStyle = 16843603; // 0x1010353 field public static final int horizontalSpacing = 16843028; // 0x1010114 field public static final int host = 16842792; // 0x1010028 - field public static final int hotSpotX = 16844055; // 0x1010517 - field public static final int hotSpotY = 16844056; // 0x1010518 + field public static final int hotSpotX = 16844056; // 0x1010518 + field public static final int hotSpotY = 16844057; // 0x1010519 field public static final int hyphenationFrequency = 16843998; // 0x10104de field public static final int icon = 16842754; // 0x1010002 field public static final int iconPreview = 16843337; // 0x1010249 @@ -742,7 +742,7 @@ package android { 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 languageTag = 16844040; // 0x1010508 + field public static final int languageTag = 16844041; // 0x1010509 field public static final int largeHeap = 16843610; // 0x101035a field public static final int largeScreens = 16843398; // 0x1010286 field public static final int largestWidthLimitDp = 16843622; // 0x1010366 @@ -800,7 +800,7 @@ package android { field public static final int layout_y = 16843136; // 0x1010180 field public static final int left = 16843181; // 0x10101ad field public static final int letterSpacing = 16843958; // 0x10104b6 - field public static final int level = 16844032; // 0x1010500 + field public static final int level = 16844033; // 0x1010501 field public static final int lineSpacingExtra = 16843287; // 0x1010217 field public static final int lineSpacingMultiplier = 16843288; // 0x1010218 field public static final int lines = 16843092; // 0x1010154 @@ -833,7 +833,7 @@ package android { field public static final int marqueeRepeatLimit = 16843293; // 0x101021d field public static final int matchOrder = 16843855; // 0x101044f field public static final int max = 16843062; // 0x1010136 - field public static final int maxButtonHeight = 16844029; // 0x10104fd + field public static final int maxButtonHeight = 16844030; // 0x10104fe field public static final int maxDate = 16843584; // 0x1010340 field public static final int maxEms = 16843095; // 0x1010157 field public static final int maxHeight = 16843040; // 0x1010120 @@ -876,25 +876,26 @@ package android { field public static final int navigationMode = 16843471; // 0x10102cf field public static final int negativeButtonText = 16843254; // 0x10101f6 field public static final int nestedScrollingEnabled = 16843830; // 0x1010436 - field public static final int networkSecurityConfig = 16844071; // 0x1010527 + field public static final int networkSecurityConfig = 16844074; // 0x101052a field public static final int nextFocusDown = 16842980; // 0x10100e4 field public static final int nextFocusForward = 16843580; // 0x101033c field public static final int nextFocusLeft = 16842977; // 0x10100e1 field public static final int nextFocusRight = 16842978; // 0x10100e2 field public static final int nextFocusUp = 16842979; // 0x10100e3 + field public static final int nfcAntennaPositionDrawable = 16844063; // 0x101051f field public static final int noHistory = 16843309; // 0x101022d field public static final int normalScreens = 16843397; // 0x1010285 field public static final int notificationTimeout = 16843651; // 0x1010383 field public static final int numColumns = 16843032; // 0x1010118 field public static final int numStars = 16843076; // 0x1010144 - field public static final int numberPickerStyle = 16844068; // 0x1010524 + field public static final int numberPickerStyle = 16844071; // 0x1010527 field public static final int numbersBackgroundColor = 16843938; // 0x10104a2 field public static final int numbersInnerTextColor = 16844001; // 0x10104e1 field public static final int numbersSelectorColor = 16843939; // 0x10104a3 field public static final int numbersTextColor = 16843937; // 0x10104a1 field public static final deprecated int numeric = 16843109; // 0x1010165 field public static final int numericShortcut = 16843236; // 0x10101e4 - field public static final int offset = 16844052; // 0x1010514 + field public static final int offset = 16844053; // 0x1010515 field public static final int onClick = 16843375; // 0x101026f field public static final int oneshot = 16843159; // 0x1010197 field public static final int opacity = 16843550; // 0x101031e @@ -941,13 +942,13 @@ package android { field public static final deprecated int phoneNumber = 16843111; // 0x1010167 field public static final int pivotX = 16843189; // 0x10101b5 field public static final int pivotY = 16843190; // 0x10101b6 - field public static final int pointerIcon = 16844041; // 0x1010509 + field public static final int pointerIcon = 16844042; // 0x101050a field public static final int popupAnimationStyle = 16843465; // 0x10102c9 field public static final int popupBackground = 16843126; // 0x1010176 field public static final int popupCharacters = 16843332; // 0x1010244 field public static final int popupElevation = 16843916; // 0x101048c - field public static final int popupEnterTransition = 16844063; // 0x101051f - field public static final int popupExitTransition = 16844064; // 0x1010520 + field public static final int popupEnterTransition = 16844065; // 0x1010521 + field public static final int popupExitTransition = 16844066; // 0x1010522 field public static final int popupKeyboard = 16843331; // 0x1010243 field public static final int popupLayout = 16843323; // 0x101023b field public static final int popupMenuStyle = 16843520; // 0x1010300 @@ -956,7 +957,7 @@ package android { field public static final int port = 16842793; // 0x1010029 field public static final int positiveButtonText = 16843253; // 0x10101f5 field public static final int preferenceCategoryStyle = 16842892; // 0x101008c - field public static final int preferenceFragmentStyle = 16844038; // 0x1010506 + field public static final int preferenceFragmentStyle = 16844039; // 0x1010507 field public static final int preferenceInformationStyle = 16842893; // 0x101008d field public static final int preferenceLayoutChild = 16842900; // 0x1010094 field public static final int preferenceScreenStyle = 16842891; // 0x101008b @@ -1024,7 +1025,7 @@ package android { field public static final int resizeClip = 16843983; // 0x10104cf field public static final int resizeMode = 16843619; // 0x1010363 field public static final int resizeable = 16843405; // 0x101028d - field public static final int resizeableActivity = 16844022; // 0x10104f6 + field public static final int resizeableActivity = 16844023; // 0x10104f7 field public static final int resource = 16842789; // 0x1010025 field public static final int restoreAnyVersion = 16843450; // 0x10102ba field public static final deprecated int restoreNeedsApplication = 16843421; // 0x101029d @@ -1144,8 +1145,8 @@ package android { field public static final int startColor = 16843165; // 0x101019d field public static final int startDelay = 16843746; // 0x10103e2 field public static final int startOffset = 16843198; // 0x10101be - field public static final int startX = 16844048; // 0x1010510 - field public static final int startY = 16844049; // 0x1010511 + field public static final int startX = 16844049; // 0x1010511 + field public static final int startY = 16844050; // 0x1010512 field public static final deprecated int startYear = 16843132; // 0x101017c field public static final int stateListAnimator = 16843848; // 0x1010448 field public static final int stateNotNeeded = 16842774; // 0x1010016 @@ -1202,8 +1203,8 @@ package android { field public static final int summaryOn = 16843247; // 0x10101ef field public static final int supportsAssist = 16844016; // 0x10104f0 field public static final int supportsLaunchVoiceAssistFromKeyguard = 16844017; // 0x10104f1 - field public static final int supportsLocalInteraction = 16844047; // 0x101050f - field public static final int supportsPictureInPicture = 16844023; // 0x10104f7 + field public static final int supportsLocalInteraction = 16844048; // 0x1010510 + field public static final int supportsPictureInPicture = 16844024; // 0x10104f8 field public static final int supportsRtl = 16843695; // 0x10103af field public static final int supportsSwitchingToNextInputMethod = 16843755; // 0x10103eb field public static final int supportsUploading = 16843419; // 0x101029b @@ -1252,7 +1253,7 @@ package android { field public static final int textAppearanceListItemSmall = 16843679; // 0x101039f field public static final int textAppearanceMedium = 16842817; // 0x1010041 field public static final int textAppearanceMediumInverse = 16842820; // 0x1010044 - field public static final int textAppearancePopupMenuHeader = 16844034; // 0x1010502 + field public static final int textAppearancePopupMenuHeader = 16844035; // 0x1010503 field public static final int textAppearanceSearchResultSubtitle = 16843424; // 0x10102a0 field public static final int textAppearanceSearchResultTitle = 16843425; // 0x10102a1 field public static final int textAppearanceSmall = 16842818; // 0x1010042 @@ -1310,9 +1311,9 @@ package android { field public static final int thumbTint = 16843889; // 0x1010471 field public static final int thumbTintMode = 16843890; // 0x1010472 field public static final int thumbnail = 16843429; // 0x10102a5 - field public static final int tickMark = 16844042; // 0x101050a - field public static final int tickMarkTint = 16844043; // 0x101050b - field public static final int tickMarkTintMode = 16844044; // 0x101050c + field public static final int tickMark = 16844043; // 0x101050b + field public static final int tickMarkTint = 16844044; // 0x101050c + field public static final int tickMarkTintMode = 16844045; // 0x101050d field public static final int tileMode = 16843265; // 0x1010201 field public static final int tileModeX = 16843895; // 0x1010477 field public static final int tileModeY = 16843896; // 0x1010478 @@ -1324,11 +1325,11 @@ package android { field public static final int tintMode = 16843771; // 0x10103fb field public static final int title = 16843233; // 0x10101e1 field public static final int titleCondensed = 16843234; // 0x10101e2 - field public static final int titleMargin = 16844024; // 0x10104f8 - field public static final int titleMarginBottom = 16844028; // 0x10104fc - field public static final int titleMarginEnd = 16844026; // 0x10104fa - field public static final int titleMarginStart = 16844025; // 0x10104f9 - field public static final int titleMarginTop = 16844027; // 0x10104fb + field public static final int titleMargin = 16844025; // 0x10104f9 + field public static final int titleMarginBottom = 16844029; // 0x10104fd + field public static final int titleMarginEnd = 16844027; // 0x10104fb + field public static final int titleMarginStart = 16844026; // 0x10104fa + field public static final int titleMarginTop = 16844028; // 0x10104fc field public static final int titleTextAppearance = 16843822; // 0x101042e field public static final int titleTextColor = 16844003; // 0x10104e3 field public static final int titleTextStyle = 16843512; // 0x10102f8 @@ -1367,7 +1368,7 @@ package android { field public static final int trimPathEnd = 16843785; // 0x1010409 field public static final int trimPathOffset = 16843786; // 0x101040a field public static final int trimPathStart = 16843784; // 0x1010408 - field public static final int tunerCount = 16844061; // 0x101051d + field public static final int tunerCount = 16844062; // 0x101051e field public static final int type = 16843169; // 0x10101a1 field public static final int typeface = 16842902; // 0x1010096 field public static final int uiOptions = 16843672; // 0x1010398 @@ -1375,7 +1376,7 @@ package android { field public static final deprecated int unfocusedMonthDateColor = 16843588; // 0x1010344 field public static final int unselectedAlpha = 16843278; // 0x101020e field public static final int updatePeriodMillis = 16843344; // 0x1010250 - field public static final int use32bitAbi = 16844053; // 0x1010515 + field public static final int use32bitAbi = 16844054; // 0x1010516 field public static final int useDefaultMargins = 16843641; // 0x1010379 field public static final int useIntrinsicSizeAsMinimum = 16843536; // 0x1010310 field public static final int useLevel = 16843167; // 0x101019f @@ -1387,7 +1388,7 @@ package android { field public static final int valueType = 16843488; // 0x10102e0 field public static final int variablePadding = 16843157; // 0x1010195 field public static final int vendor = 16843751; // 0x10103e7 - field public static final int version = 16844057; // 0x1010519 + field public static final int version = 16844058; // 0x101051a field public static final int versionCode = 16843291; // 0x101021b field public static final int versionName = 16843292; // 0x101021c field public static final int verticalCorrection = 16843322; // 0x101023a @@ -1431,7 +1432,7 @@ package android { field public static final int windowAllowReturnTransitionOverlap = 16843835; // 0x101043b field public static final int windowAnimationStyle = 16842926; // 0x10100ae field public static final int windowBackground = 16842836; // 0x1010054 - field public static final int windowBackgroundFallback = 16844035; // 0x1010503 + field public static final int windowBackgroundFallback = 16844036; // 0x1010504 field public static final int windowClipToOutline = 16843947; // 0x10104ab field public static final int windowCloseOnTouchOutside = 16843611; // 0x101035b field public static final int windowContentOverlay = 16842841; // 0x1010059 diff --git a/api/removed.txt b/api/removed.txt index 811983400954..0ff247640749 100644 --- a/api/removed.txt +++ b/api/removed.txt @@ -1,3 +1,17 @@ +package android { + + public static final class R.attr { + field public static final int minimalHeight = 16844067; // 0x1010523 + field public static final int minimalWidth = 16844022; // 0x10104f6 + } + + public static final class R.styleable { + field public static final int AndroidManifestLayout_minimalHeight = 6; // 0x6 + field public static final int AndroidManifestLayout_minimalWidth = 5; // 0x5 + } + +} + package android.app { public class Notification implements android.os.Parcelable { @@ -454,6 +468,11 @@ package android.widget { package com.android.internal { + public static final class R.attr { + field public static final int minimalHeight = 16844067; // 0x1010523 + field public static final int minimalWidth = 16844022; // 0x10104f6 + } + public static final class R.styleable { field public static final int AndroidManifestLayout_minimalHeight = 6; // 0x6 field public static final int AndroidManifestLayout_minimalWidth = 5; // 0x5 diff --git a/api/system-current.txt b/api/system-current.txt index 3a2f29b5f8f6..0b6ac73f755d 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -405,13 +405,13 @@ package android { field public static final int backgroundTint = 16843883; // 0x101046b field public static final int backgroundTintMode = 16843884; // 0x101046c field public static final int backupAgent = 16843391; // 0x101027f - field public static final int backupInForeground = 16844058; // 0x101051a + field public static final int backupInForeground = 16844059; // 0x101051b field public static final int banner = 16843762; // 0x10103f2 field public static final int baseline = 16843548; // 0x101031c field public static final int baselineAlignBottom = 16843042; // 0x1010122 field public static final int baselineAligned = 16843046; // 0x1010126 field public static final int baselineAlignedChildIndex = 16843047; // 0x1010127 - field public static final int bitmap = 16844054; // 0x1010516 + field public static final int bitmap = 16844055; // 0x1010517 field public static final int borderlessButtonStyle = 16843563; // 0x101032b field public static final int bottom = 16843184; // 0x10101b0 field public static final int bottomBright = 16842957; // 0x10100cd @@ -430,7 +430,7 @@ package android { field public static final int buttonBarNeutralButtonStyle = 16843914; // 0x101048a field public static final int buttonBarPositiveButtonStyle = 16843913; // 0x1010489 field public static final int buttonBarStyle = 16843566; // 0x101032e - field public static final int buttonGravity = 16844030; // 0x10104fe + field public static final int buttonGravity = 16844031; // 0x10104ff field public static final int buttonStyle = 16842824; // 0x1010048 field public static final int buttonStyleInset = 16842826; // 0x101004a field public static final int buttonStyleSmall = 16842825; // 0x1010049 @@ -441,9 +441,9 @@ package android { field public static final int calendarTextColor = 16843931; // 0x101049b field public static final int calendarViewShown = 16843596; // 0x101034c field public static final int calendarViewStyle = 16843613; // 0x101035d - field public static final int canControlMagnification = 16844039; // 0x1010507 - field public static final int canPerformGestures = 16844045; // 0x101050d - field public static final int canRecord = 16844060; // 0x101051c + field public static final int canControlMagnification = 16844040; // 0x1010508 + field public static final int canPerformGestures = 16844046; // 0x101050e + field public static final int canRecord = 16844061; // 0x101051d field public static final int canRequestEnhancedWebAccessibility = 16843736; // 0x10103d8 field public static final int canRequestFilterKeyEvents = 16843737; // 0x10103d9 field public static final int canRequestTouchExplorationMode = 16843735; // 0x10103d7 @@ -483,7 +483,7 @@ package android { field public static final int codes = 16843330; // 0x1010242 field public static final int collapseColumns = 16843083; // 0x101014b field public static final int collapseContentDescription = 16843984; // 0x10104d0 - field public static final int collapseIcon = 16844031; // 0x10104ff + field public static final int collapseIcon = 16844032; // 0x1010500 field public static final int color = 16843173; // 0x10101a5 field public static final int colorAccent = 16843829; // 0x1010435 field public static final int colorActivatedHighlight = 16843664; // 0x1010390 @@ -520,18 +520,18 @@ package android { field public static final int contentAuthority = 16843408; // 0x1010290 field public static final int contentDescription = 16843379; // 0x1010273 field public static final int contentInsetEnd = 16843860; // 0x1010454 - field public static final int contentInsetEndWithActions = 16844067; // 0x1010523 + field public static final int contentInsetEndWithActions = 16844070; // 0x1010526 field public static final int contentInsetLeft = 16843861; // 0x1010455 field public static final int contentInsetRight = 16843862; // 0x1010456 field public static final int contentInsetStart = 16843859; // 0x1010453 - field public static final int contentInsetStartWithNavigation = 16844066; // 0x1010522 + field public static final int contentInsetStartWithNavigation = 16844069; // 0x1010525 field public static final int contextClickable = 16844007; // 0x10104e7 - field public static final int contextPopupMenuStyle = 16844033; // 0x1010501 + field public static final int contextPopupMenuStyle = 16844034; // 0x1010502 field public static final int controlX1 = 16843772; // 0x10103fc field public static final int controlX2 = 16843774; // 0x10103fe field public static final int controlY1 = 16843773; // 0x10103fd field public static final int controlY2 = 16843775; // 0x10103ff - field public static final int countDown = 16844059; // 0x101051b + field public static final int countDown = 16844060; // 0x101051c field public static final int country = 16843962; // 0x10104ba field public static final int cropToPadding = 16843043; // 0x1010123 field public static final int cursorVisible = 16843090; // 0x1010152 @@ -549,7 +549,7 @@ package android { field public static final deprecated int dayOfWeekTextAppearance = 16843925; // 0x1010495 field public static final int debuggable = 16842767; // 0x101000f field public static final int defaultHeight = 16844021; // 0x10104f5 - field public static final int defaultToDeviceProtectedStorage = 16844036; // 0x1010504 + field public static final int defaultToDeviceProtectedStorage = 16844037; // 0x1010505 field public static final int defaultValue = 16843245; // 0x10101ed field public static final int defaultWidth = 16844020; // 0x10104f4 field public static final int delay = 16843212; // 0x10101cc @@ -569,7 +569,7 @@ package android { field public static final int dialogTheme = 16843528; // 0x1010308 field public static final int dialogTitle = 16843250; // 0x10101f2 field public static final int digits = 16843110; // 0x1010166 - field public static final int directBootAware = 16844037; // 0x1010505 + field public static final int directBootAware = 16844038; // 0x1010506 field public static final int direction = 16843217; // 0x10101d1 field public static final deprecated int directionDescriptions = 16843681; // 0x10103a1 field public static final int directionPriority = 16843218; // 0x10101d2 @@ -617,12 +617,12 @@ package android { field public static final int elevation = 16843840; // 0x1010440 field public static final int ellipsize = 16842923; // 0x10100ab field public static final int ems = 16843096; // 0x1010158 - field public static final int enableVrMode = 16844069; // 0x1010525 + field public static final int enableVrMode = 16844072; // 0x1010528 field public static final int enabled = 16842766; // 0x101000e field public static final int end = 16843996; // 0x10104dc field public static final int endColor = 16843166; // 0x101019e - field public static final int endX = 16844050; // 0x1010512 - field public static final int endY = 16844051; // 0x1010513 + field public static final int endX = 16844051; // 0x1010513 + field public static final int endY = 16844052; // 0x1010514 field public static final deprecated int endYear = 16843133; // 0x101017d field public static final int enterFadeDuration = 16843532; // 0x101030c field public static final int entries = 16842930; // 0x10100b2 @@ -642,7 +642,7 @@ package android { field public static final int expandableListViewStyle = 16842863; // 0x101006f field public static final int expandableListViewWhiteStyle = 16843446; // 0x10102b6 field public static final int exported = 16842768; // 0x1010010 - field public static final int externalService = 16844046; // 0x101050e + field public static final int externalService = 16844047; // 0x101050f field public static final int extraTension = 16843371; // 0x101026b field public static final int extractNativeLibs = 16844010; // 0x10104ea field public static final int factor = 16843219; // 0x10101d3 @@ -667,7 +667,7 @@ package android { field public static final int fillBefore = 16843196; // 0x10101bc field public static final int fillColor = 16843780; // 0x1010404 field public static final int fillEnabled = 16843343; // 0x101024f - field public static final int fillType = 16844062; // 0x101051e + field public static final int fillType = 16844064; // 0x1010520 field public static final int fillViewport = 16843130; // 0x101017a field public static final int filter = 16843035; // 0x101011b field public static final int filterTouchesWhenObscured = 16843460; // 0x10102c4 @@ -683,7 +683,7 @@ package android { field public static final int fontFamily = 16843692; // 0x10103ac field public static final int fontFeatureSettings = 16843959; // 0x10104b7 field public static final int footerDividersEnabled = 16843311; // 0x101022f - field public static final int forceHasOverlappingRendering = 16844065; // 0x1010521 + field public static final int forceHasOverlappingRendering = 16844068; // 0x1010524 field public static final int foreground = 16843017; // 0x1010109 field public static final int foregroundGravity = 16843264; // 0x1010200 field public static final int foregroundTint = 16843885; // 0x101046d @@ -760,8 +760,8 @@ package android { field public static final int horizontalScrollViewStyle = 16843603; // 0x1010353 field public static final int horizontalSpacing = 16843028; // 0x1010114 field public static final int host = 16842792; // 0x1010028 - field public static final int hotSpotX = 16844055; // 0x1010517 - field public static final int hotSpotY = 16844056; // 0x1010518 + field public static final int hotSpotX = 16844056; // 0x1010518 + field public static final int hotSpotY = 16844057; // 0x1010519 field public static final int hyphenationFrequency = 16843998; // 0x10104de field public static final int icon = 16842754; // 0x1010002 field public static final int iconPreview = 16843337; // 0x1010249 @@ -848,7 +848,7 @@ package android { 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 languageTag = 16844040; // 0x1010508 + field public static final int languageTag = 16844041; // 0x1010509 field public static final int largeHeap = 16843610; // 0x101035a field public static final int largeScreens = 16843398; // 0x1010286 field public static final int largestWidthLimitDp = 16843622; // 0x1010366 @@ -906,7 +906,7 @@ package android { field public static final int layout_y = 16843136; // 0x1010180 field public static final int left = 16843181; // 0x10101ad field public static final int letterSpacing = 16843958; // 0x10104b6 - field public static final int level = 16844032; // 0x1010500 + field public static final int level = 16844033; // 0x1010501 field public static final int lineSpacingExtra = 16843287; // 0x1010217 field public static final int lineSpacingMultiplier = 16843288; // 0x1010218 field public static final int lines = 16843092; // 0x1010154 @@ -939,7 +939,7 @@ package android { field public static final int marqueeRepeatLimit = 16843293; // 0x101021d field public static final int matchOrder = 16843855; // 0x101044f field public static final int max = 16843062; // 0x1010136 - field public static final int maxButtonHeight = 16844029; // 0x10104fd + field public static final int maxButtonHeight = 16844030; // 0x10104fe field public static final int maxDate = 16843584; // 0x1010340 field public static final int maxEms = 16843095; // 0x1010157 field public static final int maxHeight = 16843040; // 0x1010120 @@ -982,25 +982,26 @@ package android { field public static final int navigationMode = 16843471; // 0x10102cf field public static final int negativeButtonText = 16843254; // 0x10101f6 field public static final int nestedScrollingEnabled = 16843830; // 0x1010436 - field public static final int networkSecurityConfig = 16844071; // 0x1010527 + field public static final int networkSecurityConfig = 16844074; // 0x101052a field public static final int nextFocusDown = 16842980; // 0x10100e4 field public static final int nextFocusForward = 16843580; // 0x101033c field public static final int nextFocusLeft = 16842977; // 0x10100e1 field public static final int nextFocusRight = 16842978; // 0x10100e2 field public static final int nextFocusUp = 16842979; // 0x10100e3 + field public static final int nfcAntennaPositionDrawable = 16844063; // 0x101051f field public static final int noHistory = 16843309; // 0x101022d field public static final int normalScreens = 16843397; // 0x1010285 field public static final int notificationTimeout = 16843651; // 0x1010383 field public static final int numColumns = 16843032; // 0x1010118 field public static final int numStars = 16843076; // 0x1010144 - field public static final int numberPickerStyle = 16844068; // 0x1010524 + field public static final int numberPickerStyle = 16844071; // 0x1010527 field public static final int numbersBackgroundColor = 16843938; // 0x10104a2 field public static final int numbersInnerTextColor = 16844001; // 0x10104e1 field public static final int numbersSelectorColor = 16843939; // 0x10104a3 field public static final int numbersTextColor = 16843937; // 0x10104a1 field public static final deprecated int numeric = 16843109; // 0x1010165 field public static final int numericShortcut = 16843236; // 0x10101e4 - field public static final int offset = 16844052; // 0x1010514 + field public static final int offset = 16844053; // 0x1010515 field public static final int onClick = 16843375; // 0x101026f field public static final int oneshot = 16843159; // 0x1010197 field public static final int opacity = 16843550; // 0x101031e @@ -1047,13 +1048,13 @@ package android { field public static final deprecated int phoneNumber = 16843111; // 0x1010167 field public static final int pivotX = 16843189; // 0x10101b5 field public static final int pivotY = 16843190; // 0x10101b6 - field public static final int pointerIcon = 16844041; // 0x1010509 + field public static final int pointerIcon = 16844042; // 0x101050a field public static final int popupAnimationStyle = 16843465; // 0x10102c9 field public static final int popupBackground = 16843126; // 0x1010176 field public static final int popupCharacters = 16843332; // 0x1010244 field public static final int popupElevation = 16843916; // 0x101048c - field public static final int popupEnterTransition = 16844063; // 0x101051f - field public static final int popupExitTransition = 16844064; // 0x1010520 + field public static final int popupEnterTransition = 16844065; // 0x1010521 + field public static final int popupExitTransition = 16844066; // 0x1010522 field public static final int popupKeyboard = 16843331; // 0x1010243 field public static final int popupLayout = 16843323; // 0x101023b field public static final int popupMenuStyle = 16843520; // 0x1010300 @@ -1062,7 +1063,7 @@ package android { field public static final int port = 16842793; // 0x1010029 field public static final int positiveButtonText = 16843253; // 0x10101f5 field public static final int preferenceCategoryStyle = 16842892; // 0x101008c - field public static final int preferenceFragmentStyle = 16844038; // 0x1010506 + field public static final int preferenceFragmentStyle = 16844039; // 0x1010507 field public static final int preferenceInformationStyle = 16842893; // 0x101008d field public static final int preferenceLayoutChild = 16842900; // 0x1010094 field public static final int preferenceScreenStyle = 16842891; // 0x101008b @@ -1130,7 +1131,7 @@ package android { field public static final int resizeClip = 16843983; // 0x10104cf field public static final int resizeMode = 16843619; // 0x1010363 field public static final int resizeable = 16843405; // 0x101028d - field public static final int resizeableActivity = 16844022; // 0x10104f6 + field public static final int resizeableActivity = 16844023; // 0x10104f7 field public static final int resource = 16842789; // 0x1010025 field public static final int restoreAnyVersion = 16843450; // 0x10102ba field public static final deprecated int restoreNeedsApplication = 16843421; // 0x101029d @@ -1254,8 +1255,8 @@ package android { field public static final int startColor = 16843165; // 0x101019d field public static final int startDelay = 16843746; // 0x10103e2 field public static final int startOffset = 16843198; // 0x10101be - field public static final int startX = 16844048; // 0x1010510 - field public static final int startY = 16844049; // 0x1010511 + field public static final int startX = 16844049; // 0x1010511 + field public static final int startY = 16844050; // 0x1010512 field public static final deprecated int startYear = 16843132; // 0x101017c field public static final int stateListAnimator = 16843848; // 0x1010448 field public static final int stateNotNeeded = 16842774; // 0x1010016 @@ -1312,8 +1313,8 @@ package android { field public static final int summaryOn = 16843247; // 0x10101ef field public static final int supportsAssist = 16844016; // 0x10104f0 field public static final int supportsLaunchVoiceAssistFromKeyguard = 16844017; // 0x10104f1 - field public static final int supportsLocalInteraction = 16844047; // 0x101050f - field public static final int supportsPictureInPicture = 16844023; // 0x10104f7 + field public static final int supportsLocalInteraction = 16844048; // 0x1010510 + field public static final int supportsPictureInPicture = 16844024; // 0x10104f8 field public static final int supportsRtl = 16843695; // 0x10103af field public static final int supportsSwitchingToNextInputMethod = 16843755; // 0x10103eb field public static final int supportsUploading = 16843419; // 0x101029b @@ -1362,7 +1363,7 @@ package android { field public static final int textAppearanceListItemSmall = 16843679; // 0x101039f field public static final int textAppearanceMedium = 16842817; // 0x1010041 field public static final int textAppearanceMediumInverse = 16842820; // 0x1010044 - field public static final int textAppearancePopupMenuHeader = 16844034; // 0x1010502 + field public static final int textAppearancePopupMenuHeader = 16844035; // 0x1010503 field public static final int textAppearanceSearchResultSubtitle = 16843424; // 0x10102a0 field public static final int textAppearanceSearchResultTitle = 16843425; // 0x10102a1 field public static final int textAppearanceSmall = 16842818; // 0x1010042 @@ -1420,9 +1421,9 @@ package android { field public static final int thumbTint = 16843889; // 0x1010471 field public static final int thumbTintMode = 16843890; // 0x1010472 field public static final int thumbnail = 16843429; // 0x10102a5 - field public static final int tickMark = 16844042; // 0x101050a - field public static final int tickMarkTint = 16844043; // 0x101050b - field public static final int tickMarkTintMode = 16844044; // 0x101050c + field public static final int tickMark = 16844043; // 0x101050b + field public static final int tickMarkTint = 16844044; // 0x101050c + field public static final int tickMarkTintMode = 16844045; // 0x101050d field public static final int tileMode = 16843265; // 0x1010201 field public static final int tileModeX = 16843895; // 0x1010477 field public static final int tileModeY = 16843896; // 0x1010478 @@ -1434,11 +1435,11 @@ package android { field public static final int tintMode = 16843771; // 0x10103fb field public static final int title = 16843233; // 0x10101e1 field public static final int titleCondensed = 16843234; // 0x10101e2 - field public static final int titleMargin = 16844024; // 0x10104f8 - field public static final int titleMarginBottom = 16844028; // 0x10104fc - field public static final int titleMarginEnd = 16844026; // 0x10104fa - field public static final int titleMarginStart = 16844025; // 0x10104f9 - field public static final int titleMarginTop = 16844027; // 0x10104fb + field public static final int titleMargin = 16844025; // 0x10104f9 + field public static final int titleMarginBottom = 16844029; // 0x10104fd + field public static final int titleMarginEnd = 16844027; // 0x10104fb + field public static final int titleMarginStart = 16844026; // 0x10104fa + field public static final int titleMarginTop = 16844028; // 0x10104fc field public static final int titleTextAppearance = 16843822; // 0x101042e field public static final int titleTextColor = 16844003; // 0x10104e3 field public static final int titleTextStyle = 16843512; // 0x10102f8 @@ -1477,7 +1478,7 @@ package android { field public static final int trimPathEnd = 16843785; // 0x1010409 field public static final int trimPathOffset = 16843786; // 0x101040a field public static final int trimPathStart = 16843784; // 0x1010408 - field public static final int tunerCount = 16844061; // 0x101051d + field public static final int tunerCount = 16844062; // 0x101051e field public static final int type = 16843169; // 0x10101a1 field public static final int typeface = 16842902; // 0x1010096 field public static final int uiOptions = 16843672; // 0x1010398 @@ -1485,7 +1486,7 @@ package android { field public static final deprecated int unfocusedMonthDateColor = 16843588; // 0x1010344 field public static final int unselectedAlpha = 16843278; // 0x101020e field public static final int updatePeriodMillis = 16843344; // 0x1010250 - field public static final int use32bitAbi = 16844053; // 0x1010515 + field public static final int use32bitAbi = 16844054; // 0x1010516 field public static final int useDefaultMargins = 16843641; // 0x1010379 field public static final int useIntrinsicSizeAsMinimum = 16843536; // 0x1010310 field public static final int useLevel = 16843167; // 0x101019f @@ -1497,7 +1498,7 @@ package android { field public static final int valueType = 16843488; // 0x10102e0 field public static final int variablePadding = 16843157; // 0x1010195 field public static final int vendor = 16843751; // 0x10103e7 - field public static final int version = 16844057; // 0x1010519 + field public static final int version = 16844058; // 0x101051a field public static final int versionCode = 16843291; // 0x101021b field public static final int versionName = 16843292; // 0x101021c field public static final int verticalCorrection = 16843322; // 0x101023a @@ -1541,7 +1542,7 @@ package android { field public static final int windowAllowReturnTransitionOverlap = 16843835; // 0x101043b field public static final int windowAnimationStyle = 16842926; // 0x10100ae field public static final int windowBackground = 16842836; // 0x1010054 - field public static final int windowBackgroundFallback = 16844035; // 0x1010503 + field public static final int windowBackgroundFallback = 16844036; // 0x1010504 field public static final int windowClipToOutline = 16843947; // 0x10104ab field public static final int windowCloseOnTouchOutside = 16843611; // 0x101035b field public static final int windowContentOverlay = 16842841; // 0x1010059 diff --git a/api/system-removed.txt b/api/system-removed.txt index 7f18d6a75e0b..715312fdf6d4 100644 --- a/api/system-removed.txt +++ b/api/system-removed.txt @@ -1,3 +1,17 @@ +package android { + + public static final class R.attr { + field public static final int minimalHeight = 16844067; // 0x1010523 + field public static final int minimalWidth = 16844022; // 0x10104f6 + } + + public static final class R.styleable { + field public static final int AndroidManifestLayout_minimalHeight = 6; // 0x6 + field public static final int AndroidManifestLayout_minimalWidth = 5; // 0x5 + } + +} + package android.app { public class Notification implements android.os.Parcelable { @@ -452,6 +466,11 @@ package android.widget { package com.android.internal { + public static final class R.attr { + field public static final int minimalHeight = 16844067; // 0x1010523 + field public static final int minimalWidth = 16844022; // 0x10104f6 + } + public static final class R.styleable { field public static final int AndroidManifestLayout_minimalHeight = 6; // 0x6 field public static final int AndroidManifestLayout_minimalWidth = 5; // 0x5 diff --git a/api/test-current.txt b/api/test-current.txt index 8425e9007502..d277fd7ae733 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -299,13 +299,13 @@ package android { field public static final int backgroundTint = 16843883; // 0x101046b field public static final int backgroundTintMode = 16843884; // 0x101046c field public static final int backupAgent = 16843391; // 0x101027f - field public static final int backupInForeground = 16844058; // 0x101051a + field public static final int backupInForeground = 16844059; // 0x101051b field public static final int banner = 16843762; // 0x10103f2 field public static final int baseline = 16843548; // 0x101031c field public static final int baselineAlignBottom = 16843042; // 0x1010122 field public static final int baselineAligned = 16843046; // 0x1010126 field public static final int baselineAlignedChildIndex = 16843047; // 0x1010127 - field public static final int bitmap = 16844054; // 0x1010516 + field public static final int bitmap = 16844055; // 0x1010517 field public static final int borderlessButtonStyle = 16843563; // 0x101032b field public static final int bottom = 16843184; // 0x10101b0 field public static final int bottomBright = 16842957; // 0x10100cd @@ -324,7 +324,7 @@ package android { field public static final int buttonBarNeutralButtonStyle = 16843914; // 0x101048a field public static final int buttonBarPositiveButtonStyle = 16843913; // 0x1010489 field public static final int buttonBarStyle = 16843566; // 0x101032e - field public static final int buttonGravity = 16844030; // 0x10104fe + field public static final int buttonGravity = 16844031; // 0x10104ff field public static final int buttonStyle = 16842824; // 0x1010048 field public static final int buttonStyleInset = 16842826; // 0x101004a field public static final int buttonStyleSmall = 16842825; // 0x1010049 @@ -335,9 +335,9 @@ package android { field public static final int calendarTextColor = 16843931; // 0x101049b field public static final int calendarViewShown = 16843596; // 0x101034c field public static final int calendarViewStyle = 16843613; // 0x101035d - field public static final int canControlMagnification = 16844039; // 0x1010507 - field public static final int canPerformGestures = 16844045; // 0x101050d - field public static final int canRecord = 16844060; // 0x101051c + field public static final int canControlMagnification = 16844040; // 0x1010508 + field public static final int canPerformGestures = 16844046; // 0x101050e + field public static final int canRecord = 16844061; // 0x101051d field public static final int canRequestEnhancedWebAccessibility = 16843736; // 0x10103d8 field public static final int canRequestFilterKeyEvents = 16843737; // 0x10103d9 field public static final int canRequestTouchExplorationMode = 16843735; // 0x10103d7 @@ -377,7 +377,7 @@ package android { field public static final int codes = 16843330; // 0x1010242 field public static final int collapseColumns = 16843083; // 0x101014b field public static final int collapseContentDescription = 16843984; // 0x10104d0 - field public static final int collapseIcon = 16844031; // 0x10104ff + field public static final int collapseIcon = 16844032; // 0x1010500 field public static final int color = 16843173; // 0x10101a5 field public static final int colorAccent = 16843829; // 0x1010435 field public static final int colorActivatedHighlight = 16843664; // 0x1010390 @@ -414,18 +414,18 @@ package android { field public static final int contentAuthority = 16843408; // 0x1010290 field public static final int contentDescription = 16843379; // 0x1010273 field public static final int contentInsetEnd = 16843860; // 0x1010454 - field public static final int contentInsetEndWithActions = 16844067; // 0x1010523 + field public static final int contentInsetEndWithActions = 16844070; // 0x1010526 field public static final int contentInsetLeft = 16843861; // 0x1010455 field public static final int contentInsetRight = 16843862; // 0x1010456 field public static final int contentInsetStart = 16843859; // 0x1010453 - field public static final int contentInsetStartWithNavigation = 16844066; // 0x1010522 + field public static final int contentInsetStartWithNavigation = 16844069; // 0x1010525 field public static final int contextClickable = 16844007; // 0x10104e7 - field public static final int contextPopupMenuStyle = 16844033; // 0x1010501 + field public static final int contextPopupMenuStyle = 16844034; // 0x1010502 field public static final int controlX1 = 16843772; // 0x10103fc field public static final int controlX2 = 16843774; // 0x10103fe field public static final int controlY1 = 16843773; // 0x10103fd field public static final int controlY2 = 16843775; // 0x10103ff - field public static final int countDown = 16844059; // 0x101051b + field public static final int countDown = 16844060; // 0x101051c field public static final int country = 16843962; // 0x10104ba field public static final int cropToPadding = 16843043; // 0x1010123 field public static final int cursorVisible = 16843090; // 0x1010152 @@ -443,7 +443,7 @@ package android { field public static final deprecated int dayOfWeekTextAppearance = 16843925; // 0x1010495 field public static final int debuggable = 16842767; // 0x101000f field public static final int defaultHeight = 16844021; // 0x10104f5 - field public static final int defaultToDeviceProtectedStorage = 16844036; // 0x1010504 + field public static final int defaultToDeviceProtectedStorage = 16844037; // 0x1010505 field public static final int defaultValue = 16843245; // 0x10101ed field public static final int defaultWidth = 16844020; // 0x10104f4 field public static final int delay = 16843212; // 0x10101cc @@ -463,7 +463,7 @@ package android { field public static final int dialogTheme = 16843528; // 0x1010308 field public static final int dialogTitle = 16843250; // 0x10101f2 field public static final int digits = 16843110; // 0x1010166 - field public static final int directBootAware = 16844037; // 0x1010505 + field public static final int directBootAware = 16844038; // 0x1010506 field public static final int direction = 16843217; // 0x10101d1 field public static final deprecated int directionDescriptions = 16843681; // 0x10103a1 field public static final int directionPriority = 16843218; // 0x10101d2 @@ -511,12 +511,12 @@ package android { field public static final int elevation = 16843840; // 0x1010440 field public static final int ellipsize = 16842923; // 0x10100ab field public static final int ems = 16843096; // 0x1010158 - field public static final int enableVrMode = 16844069; // 0x1010525 + field public static final int enableVrMode = 16844072; // 0x1010528 field public static final int enabled = 16842766; // 0x101000e field public static final int end = 16843996; // 0x10104dc field public static final int endColor = 16843166; // 0x101019e - field public static final int endX = 16844050; // 0x1010512 - field public static final int endY = 16844051; // 0x1010513 + field public static final int endX = 16844051; // 0x1010513 + field public static final int endY = 16844052; // 0x1010514 field public static final deprecated int endYear = 16843133; // 0x101017d field public static final int enterFadeDuration = 16843532; // 0x101030c field public static final int entries = 16842930; // 0x10100b2 @@ -536,7 +536,7 @@ package android { field public static final int expandableListViewStyle = 16842863; // 0x101006f field public static final int expandableListViewWhiteStyle = 16843446; // 0x10102b6 field public static final int exported = 16842768; // 0x1010010 - field public static final int externalService = 16844046; // 0x101050e + field public static final int externalService = 16844047; // 0x101050f field public static final int extraTension = 16843371; // 0x101026b field public static final int extractNativeLibs = 16844010; // 0x10104ea field public static final int factor = 16843219; // 0x10101d3 @@ -561,7 +561,7 @@ package android { field public static final int fillBefore = 16843196; // 0x10101bc field public static final int fillColor = 16843780; // 0x1010404 field public static final int fillEnabled = 16843343; // 0x101024f - field public static final int fillType = 16844062; // 0x101051e + field public static final int fillType = 16844064; // 0x1010520 field public static final int fillViewport = 16843130; // 0x101017a field public static final int filter = 16843035; // 0x101011b field public static final int filterTouchesWhenObscured = 16843460; // 0x10102c4 @@ -577,7 +577,7 @@ package android { field public static final int fontFamily = 16843692; // 0x10103ac field public static final int fontFeatureSettings = 16843959; // 0x10104b7 field public static final int footerDividersEnabled = 16843311; // 0x101022f - field public static final int forceHasOverlappingRendering = 16844065; // 0x1010521 + field public static final int forceHasOverlappingRendering = 16844068; // 0x1010524 field public static final int foreground = 16843017; // 0x1010109 field public static final int foregroundGravity = 16843264; // 0x1010200 field public static final int foregroundTint = 16843885; // 0x101046d @@ -654,8 +654,8 @@ package android { field public static final int horizontalScrollViewStyle = 16843603; // 0x1010353 field public static final int horizontalSpacing = 16843028; // 0x1010114 field public static final int host = 16842792; // 0x1010028 - field public static final int hotSpotX = 16844055; // 0x1010517 - field public static final int hotSpotY = 16844056; // 0x1010518 + field public static final int hotSpotX = 16844056; // 0x1010518 + field public static final int hotSpotY = 16844057; // 0x1010519 field public static final int hyphenationFrequency = 16843998; // 0x10104de field public static final int icon = 16842754; // 0x1010002 field public static final int iconPreview = 16843337; // 0x1010249 @@ -742,7 +742,7 @@ package android { 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 languageTag = 16844040; // 0x1010508 + field public static final int languageTag = 16844041; // 0x1010509 field public static final int largeHeap = 16843610; // 0x101035a field public static final int largeScreens = 16843398; // 0x1010286 field public static final int largestWidthLimitDp = 16843622; // 0x1010366 @@ -800,7 +800,7 @@ package android { field public static final int layout_y = 16843136; // 0x1010180 field public static final int left = 16843181; // 0x10101ad field public static final int letterSpacing = 16843958; // 0x10104b6 - field public static final int level = 16844032; // 0x1010500 + field public static final int level = 16844033; // 0x1010501 field public static final int lineSpacingExtra = 16843287; // 0x1010217 field public static final int lineSpacingMultiplier = 16843288; // 0x1010218 field public static final int lines = 16843092; // 0x1010154 @@ -833,7 +833,7 @@ package android { field public static final int marqueeRepeatLimit = 16843293; // 0x101021d field public static final int matchOrder = 16843855; // 0x101044f field public static final int max = 16843062; // 0x1010136 - field public static final int maxButtonHeight = 16844029; // 0x10104fd + field public static final int maxButtonHeight = 16844030; // 0x10104fe field public static final int maxDate = 16843584; // 0x1010340 field public static final int maxEms = 16843095; // 0x1010157 field public static final int maxHeight = 16843040; // 0x1010120 @@ -876,25 +876,26 @@ package android { field public static final int navigationMode = 16843471; // 0x10102cf field public static final int negativeButtonText = 16843254; // 0x10101f6 field public static final int nestedScrollingEnabled = 16843830; // 0x1010436 - field public static final int networkSecurityConfig = 16844071; // 0x1010527 + field public static final int networkSecurityConfig = 16844074; // 0x101052a field public static final int nextFocusDown = 16842980; // 0x10100e4 field public static final int nextFocusForward = 16843580; // 0x101033c field public static final int nextFocusLeft = 16842977; // 0x10100e1 field public static final int nextFocusRight = 16842978; // 0x10100e2 field public static final int nextFocusUp = 16842979; // 0x10100e3 + field public static final int nfcAntennaPositionDrawable = 16844063; // 0x101051f field public static final int noHistory = 16843309; // 0x101022d field public static final int normalScreens = 16843397; // 0x1010285 field public static final int notificationTimeout = 16843651; // 0x1010383 field public static final int numColumns = 16843032; // 0x1010118 field public static final int numStars = 16843076; // 0x1010144 - field public static final int numberPickerStyle = 16844068; // 0x1010524 + field public static final int numberPickerStyle = 16844071; // 0x1010527 field public static final int numbersBackgroundColor = 16843938; // 0x10104a2 field public static final int numbersInnerTextColor = 16844001; // 0x10104e1 field public static final int numbersSelectorColor = 16843939; // 0x10104a3 field public static final int numbersTextColor = 16843937; // 0x10104a1 field public static final deprecated int numeric = 16843109; // 0x1010165 field public static final int numericShortcut = 16843236; // 0x10101e4 - field public static final int offset = 16844052; // 0x1010514 + field public static final int offset = 16844053; // 0x1010515 field public static final int onClick = 16843375; // 0x101026f field public static final int oneshot = 16843159; // 0x1010197 field public static final int opacity = 16843550; // 0x101031e @@ -941,13 +942,13 @@ package android { field public static final deprecated int phoneNumber = 16843111; // 0x1010167 field public static final int pivotX = 16843189; // 0x10101b5 field public static final int pivotY = 16843190; // 0x10101b6 - field public static final int pointerIcon = 16844041; // 0x1010509 + field public static final int pointerIcon = 16844042; // 0x101050a field public static final int popupAnimationStyle = 16843465; // 0x10102c9 field public static final int popupBackground = 16843126; // 0x1010176 field public static final int popupCharacters = 16843332; // 0x1010244 field public static final int popupElevation = 16843916; // 0x101048c - field public static final int popupEnterTransition = 16844063; // 0x101051f - field public static final int popupExitTransition = 16844064; // 0x1010520 + field public static final int popupEnterTransition = 16844065; // 0x1010521 + field public static final int popupExitTransition = 16844066; // 0x1010522 field public static final int popupKeyboard = 16843331; // 0x1010243 field public static final int popupLayout = 16843323; // 0x101023b field public static final int popupMenuStyle = 16843520; // 0x1010300 @@ -956,7 +957,7 @@ package android { field public static final int port = 16842793; // 0x1010029 field public static final int positiveButtonText = 16843253; // 0x10101f5 field public static final int preferenceCategoryStyle = 16842892; // 0x101008c - field public static final int preferenceFragmentStyle = 16844038; // 0x1010506 + field public static final int preferenceFragmentStyle = 16844039; // 0x1010507 field public static final int preferenceInformationStyle = 16842893; // 0x101008d field public static final int preferenceLayoutChild = 16842900; // 0x1010094 field public static final int preferenceScreenStyle = 16842891; // 0x101008b @@ -1024,7 +1025,7 @@ package android { field public static final int resizeClip = 16843983; // 0x10104cf field public static final int resizeMode = 16843619; // 0x1010363 field public static final int resizeable = 16843405; // 0x101028d - field public static final int resizeableActivity = 16844022; // 0x10104f6 + field public static final int resizeableActivity = 16844023; // 0x10104f7 field public static final int resource = 16842789; // 0x1010025 field public static final int restoreAnyVersion = 16843450; // 0x10102ba field public static final deprecated int restoreNeedsApplication = 16843421; // 0x101029d @@ -1144,8 +1145,8 @@ package android { field public static final int startColor = 16843165; // 0x101019d field public static final int startDelay = 16843746; // 0x10103e2 field public static final int startOffset = 16843198; // 0x10101be - field public static final int startX = 16844048; // 0x1010510 - field public static final int startY = 16844049; // 0x1010511 + field public static final int startX = 16844049; // 0x1010511 + field public static final int startY = 16844050; // 0x1010512 field public static final deprecated int startYear = 16843132; // 0x101017c field public static final int stateListAnimator = 16843848; // 0x1010448 field public static final int stateNotNeeded = 16842774; // 0x1010016 @@ -1202,8 +1203,8 @@ package android { field public static final int summaryOn = 16843247; // 0x10101ef field public static final int supportsAssist = 16844016; // 0x10104f0 field public static final int supportsLaunchVoiceAssistFromKeyguard = 16844017; // 0x10104f1 - field public static final int supportsLocalInteraction = 16844047; // 0x101050f - field public static final int supportsPictureInPicture = 16844023; // 0x10104f7 + field public static final int supportsLocalInteraction = 16844048; // 0x1010510 + field public static final int supportsPictureInPicture = 16844024; // 0x10104f8 field public static final int supportsRtl = 16843695; // 0x10103af field public static final int supportsSwitchingToNextInputMethod = 16843755; // 0x10103eb field public static final int supportsUploading = 16843419; // 0x101029b @@ -1252,7 +1253,7 @@ package android { field public static final int textAppearanceListItemSmall = 16843679; // 0x101039f field public static final int textAppearanceMedium = 16842817; // 0x1010041 field public static final int textAppearanceMediumInverse = 16842820; // 0x1010044 - field public static final int textAppearancePopupMenuHeader = 16844034; // 0x1010502 + field public static final int textAppearancePopupMenuHeader = 16844035; // 0x1010503 field public static final int textAppearanceSearchResultSubtitle = 16843424; // 0x10102a0 field public static final int textAppearanceSearchResultTitle = 16843425; // 0x10102a1 field public static final int textAppearanceSmall = 16842818; // 0x1010042 @@ -1310,9 +1311,9 @@ package android { field public static final int thumbTint = 16843889; // 0x1010471 field public static final int thumbTintMode = 16843890; // 0x1010472 field public static final int thumbnail = 16843429; // 0x10102a5 - field public static final int tickMark = 16844042; // 0x101050a - field public static final int tickMarkTint = 16844043; // 0x101050b - field public static final int tickMarkTintMode = 16844044; // 0x101050c + field public static final int tickMark = 16844043; // 0x101050b + field public static final int tickMarkTint = 16844044; // 0x101050c + field public static final int tickMarkTintMode = 16844045; // 0x101050d field public static final int tileMode = 16843265; // 0x1010201 field public static final int tileModeX = 16843895; // 0x1010477 field public static final int tileModeY = 16843896; // 0x1010478 @@ -1324,11 +1325,11 @@ package android { field public static final int tintMode = 16843771; // 0x10103fb field public static final int title = 16843233; // 0x10101e1 field public static final int titleCondensed = 16843234; // 0x10101e2 - field public static final int titleMargin = 16844024; // 0x10104f8 - field public static final int titleMarginBottom = 16844028; // 0x10104fc - field public static final int titleMarginEnd = 16844026; // 0x10104fa - field public static final int titleMarginStart = 16844025; // 0x10104f9 - field public static final int titleMarginTop = 16844027; // 0x10104fb + field public static final int titleMargin = 16844025; // 0x10104f9 + field public static final int titleMarginBottom = 16844029; // 0x10104fd + field public static final int titleMarginEnd = 16844027; // 0x10104fb + field public static final int titleMarginStart = 16844026; // 0x10104fa + field public static final int titleMarginTop = 16844028; // 0x10104fc field public static final int titleTextAppearance = 16843822; // 0x101042e field public static final int titleTextColor = 16844003; // 0x10104e3 field public static final int titleTextStyle = 16843512; // 0x10102f8 @@ -1367,7 +1368,7 @@ package android { field public static final int trimPathEnd = 16843785; // 0x1010409 field public static final int trimPathOffset = 16843786; // 0x101040a field public static final int trimPathStart = 16843784; // 0x1010408 - field public static final int tunerCount = 16844061; // 0x101051d + field public static final int tunerCount = 16844062; // 0x101051e field public static final int type = 16843169; // 0x10101a1 field public static final int typeface = 16842902; // 0x1010096 field public static final int uiOptions = 16843672; // 0x1010398 @@ -1375,7 +1376,7 @@ package android { field public static final deprecated int unfocusedMonthDateColor = 16843588; // 0x1010344 field public static final int unselectedAlpha = 16843278; // 0x101020e field public static final int updatePeriodMillis = 16843344; // 0x1010250 - field public static final int use32bitAbi = 16844053; // 0x1010515 + field public static final int use32bitAbi = 16844054; // 0x1010516 field public static final int useDefaultMargins = 16843641; // 0x1010379 field public static final int useIntrinsicSizeAsMinimum = 16843536; // 0x1010310 field public static final int useLevel = 16843167; // 0x101019f @@ -1387,7 +1388,7 @@ package android { field public static final int valueType = 16843488; // 0x10102e0 field public static final int variablePadding = 16843157; // 0x1010195 field public static final int vendor = 16843751; // 0x10103e7 - field public static final int version = 16844057; // 0x1010519 + field public static final int version = 16844058; // 0x101051a field public static final int versionCode = 16843291; // 0x101021b field public static final int versionName = 16843292; // 0x101021c field public static final int verticalCorrection = 16843322; // 0x101023a @@ -1431,7 +1432,7 @@ package android { field public static final int windowAllowReturnTransitionOverlap = 16843835; // 0x101043b field public static final int windowAnimationStyle = 16842926; // 0x10100ae field public static final int windowBackground = 16842836; // 0x1010054 - field public static final int windowBackgroundFallback = 16844035; // 0x1010503 + field public static final int windowBackgroundFallback = 16844036; // 0x1010504 field public static final int windowClipToOutline = 16843947; // 0x10104ab field public static final int windowCloseOnTouchOutside = 16843611; // 0x101035b field public static final int windowContentOverlay = 16842841; // 0x1010059 diff --git a/api/test-removed.txt b/api/test-removed.txt index 811983400954..0ff247640749 100644 --- a/api/test-removed.txt +++ b/api/test-removed.txt @@ -1,3 +1,17 @@ +package android { + + public static final class R.attr { + field public static final int minimalHeight = 16844067; // 0x1010523 + field public static final int minimalWidth = 16844022; // 0x10104f6 + } + + public static final class R.styleable { + field public static final int AndroidManifestLayout_minimalHeight = 6; // 0x6 + field public static final int AndroidManifestLayout_minimalWidth = 5; // 0x5 + } + +} + package android.app { public class Notification implements android.os.Parcelable { @@ -454,6 +468,11 @@ package android.widget { package com.android.internal { + public static final class R.attr { + field public static final int minimalHeight = 16844067; // 0x1010523 + field public static final int minimalWidth = 16844022; // 0x10104f6 + } + public static final class R.styleable { field public static final int AndroidManifestLayout_minimalHeight = 6; // 0x6 field public static final int AndroidManifestLayout_minimalWidth = 5; // 0x5 diff --git a/core/java/android/app/ActivityManagerInternal.java b/core/java/android/app/ActivityManagerInternal.java index 4b8d9ee37cc6..3a70a4cd4b99 100644 --- a/core/java/android/app/ActivityManagerInternal.java +++ b/core/java/android/app/ActivityManagerInternal.java @@ -18,6 +18,7 @@ package android.app; import android.annotation.NonNull; import android.content.ComponentName; +import android.content.IIntentSender; import android.os.IBinder; import android.service.voice.IVoiceInteractionSession; @@ -144,4 +145,10 @@ public abstract class ActivityManagerInternal { * Kill foreground apps from the specified user. */ public abstract void killForegroundAppsForUser(int userHandle); + + /** + * Sets how long a {@link PendingIntent} can be temporarily whitelist to by bypass restrictions + * such as Power Save mode. + */ + public abstract void setPendingIntentWhitelistDuration(IIntentSender target, long duration); } diff --git a/core/java/android/app/ActivityManagerNative.java b/core/java/android/app/ActivityManagerNative.java index cd9a05b7bf0f..f12c284d68ff 100644 --- a/core/java/android/app/ActivityManagerNative.java +++ b/core/java/android/app/ActivityManagerNative.java @@ -6966,8 +6966,8 @@ class ActivityManagerProxy implements IActivityManager reply.recycle(); } - public void notifyLockedProfile(@UserIdInt int userId) throws RemoteException - { + @Override + public void notifyLockedProfile(@UserIdInt int userId) throws RemoteException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); data.writeInterfaceToken(IActivityManager.descriptor); @@ -6978,6 +6978,7 @@ class ActivityManagerProxy implements IActivityManager reply.recycle(); } + @Override public void startConfirmDeviceCredentialIntent(Intent intent) throws RemoteException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); @@ -6989,6 +6990,7 @@ class ActivityManagerProxy implements IActivityManager reply.recycle(); } + @Override public int sendIntentSender(IIntentSender target, int code, Intent intent, String resolvedType, IIntentReceiver finishedReceiver, String requiredPermission, Bundle options) throws RemoteException { diff --git a/core/java/android/content/Context.java b/core/java/android/content/Context.java index b7588687a8e4..108350a2b9ce 100644 --- a/core/java/android/content/Context.java +++ b/core/java/android/content/Context.java @@ -285,6 +285,12 @@ public abstract class Context { public static final int BIND_ADJUST_WITH_ACTIVITY = 0x0080; /** + * @hide Flag for {@link #bindService}: allows application hosting service to manage whitelists + * such as temporary allowing a {@code PendingIntent} to bypass Power Save mode. + */ + public static final int BIND_ALLOW_WHITELIST_MANAGEMENT = 0x01000000; + + /** * @hide Flag for {@link #bindService}: Like {@link #BIND_FOREGROUND_SERVICE}, * but only applies while the device is awake. */ diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index 0bc514ed0545..f867fb024686 100755 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -60,8 +60,8 @@ import android.util.AndroidException; import android.util.ArrayMap; import android.util.ArraySet; import android.util.Log; - import android.util.MemoryIntArray; + import com.android.internal.annotations.GuardedBy; import com.android.internal.util.ArrayUtils; import com.android.internal.widget.ILockSettings; @@ -7950,6 +7950,7 @@ public final class Settings { * idle_factor (float) * min_time_to_alarm (long) * max_temp_app_whitelist_duration (long) + * notification_whitelist_duration (long) * </pre> * * <p> diff --git a/core/java/android/view/inputmethod/InputMethodManagerInternal.java b/core/java/android/view/inputmethod/InputMethodManagerInternal.java index ce9908cce093..77df4e3883a7 100644 --- a/core/java/android/view/inputmethod/InputMethodManagerInternal.java +++ b/core/java/android/view/inputmethod/InputMethodManagerInternal.java @@ -32,4 +32,9 @@ public interface InputMethodManagerInternal { * Called by the window manager to let the input method manager rotate the input method. */ void switchInputMethod(boolean forwardDirection); + + /** + * Hides the current input method, if visible. + */ + void hideCurrentInputMethod(); } diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java index 3711b9402f3a..5cbd2841b57a 100644 --- a/core/java/android/widget/TextView.java +++ b/core/java/android/widget/TextView.java @@ -6857,11 +6857,11 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener .setLineSpacing(mSpacingAdd, mSpacingMult) .setIncludePad(mIncludePad) .setBreakStrategy(mBreakStrategy) - .setHyphenationFrequency(mHyphenationFrequency) - .setMaxLines(mMaxMode == LINES ? mMaximum : Integer.MAX_VALUE); + .setHyphenationFrequency(mHyphenationFrequency); if (shouldEllipsize) { builder.setEllipsize(mEllipsize) - .setEllipsizedWidth(ellipsisWidth); + .setEllipsizedWidth(ellipsisWidth) + .setMaxLines(mMaxMode == LINES ? mMaximum : Integer.MAX_VALUE); } mHintLayout = builder.build(); } @@ -6948,12 +6948,11 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener .setLineSpacing(mSpacingAdd, mSpacingMult) .setIncludePad(mIncludePad) .setBreakStrategy(mBreakStrategy) - .setHyphenationFrequency(mHyphenationFrequency) - .setMaxLines(mMaxMode == LINES ? mMaximum : Integer.MAX_VALUE); + .setHyphenationFrequency(mHyphenationFrequency); if (shouldEllipsize) { builder.setEllipsize(effectiveEllipsize) - .setEllipsizedWidth(ellipsisWidth); - + .setEllipsizedWidth(ellipsisWidth) + .setMaxLines(mMaxMode == LINES ? mMaximum : Integer.MAX_VALUE); } // TODO: explore always setting maxLines result = builder.build(); @@ -6983,19 +6982,14 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener return false; } - private static int desired(Layout layout, int maxLines) { + private static int desired(Layout layout) { int n = layout.getLineCount(); CharSequence text = layout.getText(); float max = 0; - // if maxLines is set, and the text length is greater that the length of the text in the - // layout, it means that there is a cut-off and we cannot use it. - if (maxLines != -1 && text.length() > layout.getLineEnd(n - 1)) { - return -1; - } - // if any line was wrapped, we can't use it. // but it's ok for the last line not to have a newline + for (int i = 0; i < n - 1; i++) { if (text.charAt(layout.getLineEnd(i) - 1) != '\n') return -1; @@ -7068,7 +7062,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener width = widthSize; } else { if (mLayout != null && mEllipsize == null) { - des = desired(mLayout, getMaxLines()); + des = desired(mLayout); } if (des < 0) { @@ -7100,7 +7094,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener int hintWidth; if (mHintLayout != null && mEllipsize == null) { - hintDes = desired(mHintLayout, getMaxLines()); + hintDes = desired(mHintLayout); } if (hintDes < 0) { diff --git a/core/res/res/layout/notification_template_header.xml b/core/res/res/layout/notification_template_header.xml index d16dcc6b906c..38ea92a73a5a 100644 --- a/core/res/res/layout/notification_template_header.xml +++ b/core/res/res/layout/notification_template_header.xml @@ -96,6 +96,7 @@ android:layout_height="wrap_content" android:paddingTop="1dp" android:visibility="gone" + android:contentDescription="@string/expand_button_content_description" /> <ImageView android:id="@+id/profile_badge" android:layout_width="@dimen/notification_badge_size" diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml index b61d6cf465aa..d12e34c1cb10 100644 --- a/core/res/res/values/attrs.xml +++ b/core/res/res/values/attrs.xml @@ -593,6 +593,9 @@ i the appearance matches the branding of the app requesting the fingerprint scan.--> <attr name="fingerprintAuthDrawable" format="reference" /> + <!-- Asset that should be used to show users the position of the NFC antenna on the device. --> + <attr name="nfcAntennaPositionDrawable" format="reference" /> + <!-- ============ --> <!-- Panel styles --> <!-- ============ --> @@ -4591,6 +4594,10 @@ i screens with limited space for text. --> <enum name="full" value="2" /> </attr> + <!-- Placeholder for a deleted attribute. This should be removed before M release. --> + <attr name="__removeBeforeMRelease_leftIndents" format="reference" /> + <!-- Placeholder for a deleted attribute. This should be removed before M release. --> + <attr name="__removeBeforeMRelease_rightIndents" format="reference" /> </declare-styleable> <declare-styleable name="TextViewAppearance"> <!-- Base text color, typeface, size, and style. --> diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml index 6797799b99a3..fee2469083e1 100644 --- a/core/res/res/values/public.xml +++ b/core/res/res/values/public.xml @@ -2595,13 +2595,13 @@ <public type="attr" name="accessibilityTraversalAfter" id="0x010104d2" /> <public type="attr" name="dialogPreferredPadding" id="0x010104d3" /> <public type="attr" name="searchHintIcon" id="0x010104d4" /> - <public type="attr" name="revisionCode" id="0x010104d5" /> - <public type="attr" name="drawableTint" id="0x010104d6" /> - <public type="attr" name="drawableTintMode" id="0x010104d7" /> - <public type="attr" name="fraction" id="0x010104d8" /> + <public type="attr" name="revisionCode" /> + <public type="attr" name="drawableTint" /> + <public type="attr" name="drawableTintMode" /> + <public type="attr" name="fraction" /> - <public type="style" name="Theme.DeviceDefault.Dialog.Alert" id="0x010302d1" /> - <public type="style" name="Theme.DeviceDefault.Light.Dialog.Alert" id="0x010302d2" /> + <public type="style" name="Theme.DeviceDefault.Dialog.Alert" /> + <public type="style" name="Theme.DeviceDefault.Light.Dialog.Alert" /> <!-- =============================================================== Resources added in version M of the platform @@ -2653,79 +2653,85 @@ <public type="id" name="accessibilityActionScrollRight" id="0x0102003b" /> <public type="id" name="accessibilityActionContextClick" id="0x0102003c" /> - <public type="string" name="fingerprint_icon_content_description" id="0x01040018" /> + <public type="string" name="fingerprint_icon_content_description" /> <!-- =============================================================== Resources added in version N of the platform =============================================================== --> <eat-comment /> - <public type="attr" name="listMenuViewStyle" id="0x010104f2" /> - <public type="attr" name="subMenuArrow" id="0x010104f3" /> - <public type="attr" name="defaultWidth" id="0x010104f4" /> - <public type="attr" name="defaultHeight" id="0x010104f5" /> - <public type="attr" name="resizeableActivity" id="0x010104f6" /> - <public type="attr" name="supportsPictureInPicture" id="0x010104f7" /> - <public type="attr" name="titleMargin" id="0x010104f8" /> - <public type="attr" name="titleMarginStart" id="0x010104f9" /> - <public type="attr" name="titleMarginEnd" id="0x010104fa" /> - <public type="attr" name="titleMarginTop" id="0x010104fb" /> - <public type="attr" name="titleMarginBottom" id="0x010104fc" /> - <public type="attr" name="maxButtonHeight" id="0x010104fd" /> - <public type="attr" name="buttonGravity" id="0x010104fe" /> - <public type="attr" name="collapseIcon" id="0x010104ff" /> - <public type="attr" name="level" id="0x01010500" /> - <public type="attr" name="contextPopupMenuStyle" id="0x01010501" /> - <public type="attr" name="textAppearancePopupMenuHeader" id="0x01010502" /> - <public type="attr" name="windowBackgroundFallback" id="0x01010503" /> - <public type="attr" name="defaultToDeviceProtectedStorage" id="0x01010504" /> - <public type="attr" name="directBootAware" id="0x01010505" /> - <public type="attr" name="preferenceFragmentStyle" id="0x01010506" /> - <public type="attr" name="canControlMagnification" id="0x01010507" /> - <public type="attr" name="languageTag" id="0x01010508" /> - <public type="attr" name="pointerIcon" id="0x01010509" /> - <public type="attr" name="tickMark" id="0x0101050a" /> - <public type="attr" name="tickMarkTint" id="0x0101050b" /> - <public type="attr" name="tickMarkTintMode" id="0x0101050c" /> - <public type="attr" name="canPerformGestures" id="0x0101050d" /> - <public type="attr" name="externalService" id="0x0101050e" /> - <public type="attr" name="supportsLocalInteraction" id="0x0101050f" /> - <public type="attr" name="startX" id="0x01010510" /> - <public type="attr" name="startY" id="0x01010511" /> - <public type="attr" name="endX" id="0x01010512" /> - <public type="attr" name="endY" id="0x01010513" /> - <public type="attr" name="offset" id="0x01010514" /> - <public type="attr" name="use32bitAbi" id="0x01010515" /> - <public type="attr" name="bitmap" id="0x01010516" /> - <public type="attr" name="hotSpotX" id="0x01010517" /> - <public type="attr" name="hotSpotY" id="0x01010518" /> - <public type="attr" name="version" id="0x01010519" /> - <public type="attr" name="backupInForeground" id="0x0101051a" /> - <public type="attr" name="countDown" id="0x0101051b" /> - <public type="attr" name="canRecord" id="0x0101051c" /> - <public type="attr" name="tunerCount" id="0x0101051d" /> - <public type="attr" name="fillType" id="0x0101051e" /> - <public type="attr" name="popupEnterTransition" id="0x0101051f" /> - <public type="attr" name="popupExitTransition" id="0x01010520" /> - <public type="attr" name="forceHasOverlappingRendering" id="0x01010521" /> - <public type="attr" name="contentInsetStartWithNavigation" id="0x01010522" /> - <public type="attr" name="contentInsetEndWithActions" id="0x01010523" /> - <public type="attr" name="numberPickerStyle" id="0x01010524" /> - <public type="attr" name="enableVrMode" id="0x01010525" /> - <public type="attr" name="hash" id="0x01010526" /> - <public type="attr" name="networkSecurityConfig" id="0x01010527" /> - - <public type="style" name="Theme.Material.Light.DialogWhenLarge.DarkActionBar" id="0x010302d8" /> - <public type="style" name="Widget.Material.SeekBar.Discrete" id="0x010302d9" /> - <public type="style" name="Widget.Material.CompoundButton.Switch" id="0x010302da" /> - <public type="style" name="Widget.Material.Light.CompoundButton.Switch" id="0x010302db" /> - <public type="style" name="Widget.Material.NumberPicker" id="0x010302dc" /> - <public type="style" name="Widget.Material.Light.NumberPicker" id="0x010302dd" /> - <public type="style" name="TextAppearance.Material.Widget.Button.Colored" id="0x010302de" /> - <public type="style" name="TextAppearance.Material.Widget.Button.Borderless.Colored" id="0x010302df" /> - - <public type="id" name="accessibilityActionSetProgress" id="0x0102003d" /> - <public type="id" name="icon_frame" id="0x0102003e" /> - <public type="id" name="list_container" id="0x0102003f" /> - <public type="id" name="switch_widget" id="0x01020040" /> + <public type="attr" name="listMenuViewStyle" /> + <public type="attr" name="subMenuArrow" /> + <public type="attr" name="defaultWidth" /> + <public type="attr" name="defaultHeight" /> + <!-- @removed --> + <public type="attr" name="minimalWidth" /> + <public type="attr" name="resizeableActivity" /> + <public type="attr" name="supportsPictureInPicture" /> + <public type="attr" name="titleMargin" /> + <public type="attr" name="titleMarginStart" /> + <public type="attr" name="titleMarginEnd" /> + <public type="attr" name="titleMarginTop" /> + <public type="attr" name="titleMarginBottom" /> + <public type="attr" name="maxButtonHeight" /> + <public type="attr" name="buttonGravity" /> + <public type="attr" name="collapseIcon" /> + <public type="attr" name="level" /> + <public type="attr" name="contextPopupMenuStyle" /> + <public type="attr" name="textAppearancePopupMenuHeader" /> + <public type="attr" name="windowBackgroundFallback" /> + <public type="attr" name="defaultToDeviceProtectedStorage" /> + <public type="attr" name="directBootAware" /> + <public type="attr" name="preferenceFragmentStyle" /> + <public type="attr" name="canControlMagnification" /> + <public type="attr" name="languageTag" /> + <public type="attr" name="pointerIcon" /> + <public type="attr" name="tickMark" /> + <public type="attr" name="tickMarkTint" /> + <public type="attr" name="tickMarkTintMode" /> + <public type="attr" name="canPerformGestures" /> + <public type="attr" name="externalService" /> + <public type="attr" name="supportsLocalInteraction" /> + <public type="attr" name="startX" /> + <public type="attr" name="startY" /> + <public type="attr" name="endX" /> + <public type="attr" name="endY" /> + <public type="attr" name="offset" /> + <public type="attr" name="use32bitAbi" /> + <public type="attr" name="bitmap" /> + <public type="attr" name="hotSpotX" /> + <public type="attr" name="hotSpotY" /> + <public type="attr" name="version" /> + <public type="attr" name="backupInForeground" /> + <public type="attr" name="countDown" /> + <public type="attr" name="canRecord" /> + <public type="attr" name="tunerCount" /> + <public type="attr" name="nfcAntennaPositionDrawable" /> + <public type="attr" name="fillType" /> + <public type="attr" name="popupEnterTransition" /> + <public type="attr" name="popupExitTransition" /> + <!-- @removed --> + <public type="attr" name="minimalHeight" /> + <public type="attr" name="forceHasOverlappingRendering" /> + <public type="attr" name="contentInsetStartWithNavigation" /> + <public type="attr" name="contentInsetEndWithActions" /> + <public type="attr" name="numberPickerStyle" /> + <public type="attr" name="enableVrMode" /> + <public type="attr" name="hash" /> + <public type="attr" name="networkSecurityConfig" /> + + <public type="style" name="Theme.Material.Light.DialogWhenLarge.DarkActionBar" /> + <public type="style" name="Widget.Material.SeekBar.Discrete" /> + <public type="style" name="Widget.Material.CompoundButton.Switch" /> + <public type="style" name="Widget.Material.Light.CompoundButton.Switch" /> + <public type="style" name="Widget.Material.NumberPicker" /> + <public type="style" name="Widget.Material.Light.NumberPicker" /> + <public type="style" name="TextAppearance.Material.Widget.Button.Colored" /> + <public type="style" name="TextAppearance.Material.Widget.Button.Borderless.Colored" /> + + <public type="id" name="accessibilityActionSetProgress" /> + <public type="id" name="icon_frame" /> + <public type="id" name="list_container" /> + <public type="id" name="switch_widget" /> + </resources> diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml index e30fd1a86822..236940d1432d 100644 --- a/core/res/res/values/strings.xml +++ b/core/res/res/values/strings.xml @@ -4261,6 +4261,12 @@ <!-- Content description of the work profile icon in the notification. --> <string name="notification_work_profile_content_description">Work profile</string> + <!-- Content description of the expand button icon in the notification.--> + <string name="expand_button_content_description">Expand button</string> + + <!-- Accessibility action description on the expand button. --> + <string name="expand_action_accessibility">Click to expand</string> + <!-- User visible name for USB MIDI Peripheral port --> <string name="usb_midi_peripheral_name">Android USB Peripheral Port</string> <!-- Manufacturer name for USB MIDI Peripheral port --> diff --git a/docs/html/about/dashboards/index.jd b/docs/html/about/dashboards/index.jd index f4a03dbddfa2..fff26081745d 100644 --- a/docs/html/about/dashboards/index.jd +++ b/docs/html/about/dashboards/index.jd @@ -63,19 +63,10 @@ Platform Versions</a>.</p> <br/>Any versions with less than 0.1% distribution are not shown.</em> </p> -<p class="note"><strong>Note:</strong> This data is gathered from the new Google Play -Store app, which supports Android 2.2 and above, so devices running older versions are not included. -However, in August, 2013, versions older than Android 2.2 accounted for about 1% of devices that -<em>checked in</em> to Google servers (not those that actually visited Google Play Store). -</p> - - - <h2 id="Screens">Screen Sizes and Densities</h2> - <p>This section provides data about the relative number of devices that have a particular screen configuration, defined by a combination of screen size and density. To simplify the way that you design your user interfaces for different screen configurations, Android divides the range of diff --git a/docs/html/ndk/guides/audio/opensl-prog-notes.jd b/docs/html/ndk/guides/audio/opensl-prog-notes.jd index 326314568386..e70aa080e0ef 100644 --- a/docs/html/ndk/guides/audio/opensl-prog-notes.jd +++ b/docs/html/ndk/guides/audio/opensl-prog-notes.jd @@ -61,8 +61,8 @@ there is no harm in listing it there. OpenSL ES has one more kind of interface c create array and can be added later after the object is created. The Android implementation provides a convenience feature to -avoid this complexity; see the - <a href="#dynamic-interfaces">Dynamic interfaces at object creation</a> section above. +avoid this complexity, which is described in + <a href="{@docRoot}ndk/guides/audio/opensl-for-android.html#dynamic-interfaces">Dynamic interfaces at object creation</a>. </p> <p> diff --git a/docs/html/samples/index.jd b/docs/html/samples/index.jd index 76ea573ffbbf..5885086fec58 100644 --- a/docs/html/samples/index.jd +++ b/docs/html/samples/index.jd @@ -35,9 +35,8 @@ recommended method to retrieve Android code samples.</p> from GitHub as a new project. </p> -<p>For more information about importing samples, see -<a href="{@docRoot}tools/studio/index.html#git-samples">Easy access to Android code samples on -GitHub</a>.</p> +<p>To view the Android code samples that you can import, see the +<a class="external-link" href="https://github.com/googlesamples/">Google Samples page</a> on GitHub.</p> <h2>Download Samples</h2> diff --git a/docs/html/training/sync-adapters/running-sync-adapter.jd b/docs/html/training/sync-adapters/running-sync-adapter.jd index 033450f159a6..a640aa6d29bd 100644 --- a/docs/html/training/sync-adapters/running-sync-adapter.jd +++ b/docs/html/training/sync-adapters/running-sync-adapter.jd @@ -240,6 +240,7 @@ public class MainActivity extends FragmentActivity { * Ask the framework to run your sync adapter. * To maintain backward compatibility, assume that * changeUri is null. + */ ContentResolver.requestSync(ACCOUNT, AUTHORITY, null); } ... diff --git a/packages/SystemUI/src/com/android/systemui/stackdivider/Divider.java b/packages/SystemUI/src/com/android/systemui/stackdivider/Divider.java index e89c136d8772..a0bae202a7bb 100644 --- a/packages/SystemUI/src/com/android/systemui/stackdivider/Divider.java +++ b/packages/SystemUI/src/com/android/systemui/stackdivider/Divider.java @@ -39,6 +39,7 @@ import java.io.PrintWriter; public class Divider extends SystemUI { private DividerWindowManager mWindowManager; private DividerView mView; + private final DividerState mDividerState = new DividerState(); private DockDividerVisibilityListener mDockDividerVisibilityListener; private boolean mVisible = false; private boolean mMinimized = false; @@ -76,7 +77,7 @@ public class Divider extends SystemUI { final int width = landscape ? size : MATCH_PARENT; final int height = landscape ? MATCH_PARENT : size; mWindowManager.add(mView, width, height); - mView.setWindowManager(mWindowManager); + mView.injectDependencies(mWindowManager, mDividerState); } private void removeDivider() { diff --git a/packages/SystemUI/src/com/android/systemui/stackdivider/DividerState.java b/packages/SystemUI/src/com/android/systemui/stackdivider/DividerState.java new file mode 100644 index 000000000000..353a9749eb25 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/stackdivider/DividerState.java @@ -0,0 +1,25 @@ +/* + * Copyright (C) 2016 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.systemui.stackdivider; + +/** + * Class to hold state of divider that needs to persist across configuration changes. + */ +public class DividerState { + public boolean animateAfterRecentsDrawn; + public boolean growAfterRecentsDrawn; +} diff --git a/packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java b/packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java index f728aa438aa5..d09587bbd3e4 100644 --- a/packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java +++ b/packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java @@ -30,12 +30,12 @@ import android.graphics.Rect; import android.graphics.Region.Op; import android.hardware.display.DisplayManager; import android.os.Bundle; +import android.os.Handler; import android.util.AttributeSet; import android.view.Display; import android.view.DisplayInfo; import android.view.GestureDetector; import android.view.GestureDetector.SimpleOnGestureListener; -import android.view.HapticFeedbackConstants; import android.view.MotionEvent; import android.view.PointerIcon; import android.view.VelocityTracker; @@ -141,8 +141,6 @@ public class DividerView extends FrameLayout implements OnTouchListener, private DividerSnapAlgorithm mSnapAlgorithm; private final Rect mStableInsets = new Rect(); - private boolean mAnimateAfterRecentsDrawn; - private boolean mGrowAfterRecentsDrawn; private boolean mGrowRecents; private ValueAnimator mCurrentAnimator; private boolean mEntranceAnimationRunning; @@ -151,6 +149,8 @@ public class DividerView extends FrameLayout implements OnTouchListener, private GestureDetector mGestureDetector; private boolean mDockedStackMinimized; private boolean mAdjustedForIme; + private DividerState mState; + private final Handler mHandler = new Handler(); private final AccessibilityDelegate mHandleDelegate = new AccessibilityDelegate() { @Override @@ -335,8 +335,9 @@ public class DividerView extends FrameLayout implements OnTouchListener, } } - public void setWindowManager(DividerWindowManager windowManager) { + public void injectDependencies(DividerWindowManager windowManager, DividerState dividerState) { mWindowManager = windowManager; + mState = dividerState; } public WindowManagerProxy getWindowManagerProxy() { @@ -558,7 +559,7 @@ public class DividerView extends FrameLayout implements OnTouchListener, if (endDelay == 0 || mCancelled) { endAction.run(); } else { - postDelayed(endAction, endDelay); + mHandler.postDelayed(endAction, endDelay); } } }); @@ -1048,15 +1049,15 @@ public class DividerView extends FrameLayout implements OnTouchListener, public final void onBusEvent(RecentsActivityStartingEvent recentsActivityStartingEvent) { if (mGrowRecents && getWindowManagerProxy().getDockSide() == WindowManager.DOCKED_TOP && getCurrentPosition() == getSnapAlgorithm().getLastSplitTarget().position) { - mGrowAfterRecentsDrawn = true; + mState.growAfterRecentsDrawn = true; startDragging(false /* animate */, false /* touching */); } } public final void onBusEvent(DockedTopTaskEvent event) { if (event.dragMode == NavigationBarGestureHelper.DRAG_MODE_NONE) { - mGrowAfterRecentsDrawn = false; - mAnimateAfterRecentsDrawn = true; + mState.growAfterRecentsDrawn = false; + mState.animateAfterRecentsDrawn = true; startDragging(false /* animate */, false /* touching */); } updateDockSide(); @@ -1068,11 +1069,11 @@ public class DividerView extends FrameLayout implements OnTouchListener, } public final void onBusEvent(RecentsDrawnEvent drawnEvent) { - if (mAnimateAfterRecentsDrawn) { - mAnimateAfterRecentsDrawn = false; + if (mState.animateAfterRecentsDrawn) { + mState.animateAfterRecentsDrawn = false; updateDockSide(); - post(() -> { + mHandler.post(() -> { // Delay switching resizing mode because this might cause jank in recents animation // that's longer than this animation. stopDragging(getCurrentPosition(), mSnapAlgorithm.getMiddleTarget(), @@ -1080,8 +1081,8 @@ public class DividerView extends FrameLayout implements OnTouchListener, 200 /* endDelay */); }); } - if (mGrowAfterRecentsDrawn) { - mGrowAfterRecentsDrawn = false; + if (mState.growAfterRecentsDrawn) { + mState.growAfterRecentsDrawn = false; updateDockSide(); EventBus.getDefault().send(new RecentsGrowingEvent()); stopDragging(getCurrentPosition(), mSnapAlgorithm.getMiddleTarget(), 336, diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java index 63933d412400..91889d3b91ad 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java @@ -1887,10 +1887,13 @@ public abstract class BaseStatusBar extends SystemUI implements public boolean onDismiss() { if (mHeadsUpManager != null && mHeadsUpManager.isHeadsUp(notificationKey)) { // Release the HUN notification to the shade. + + if (isPanelFullyCollapsed()) { + HeadsUpManager.setIsClickedNotification(row, true); + } // // In most cases, when FLAG_AUTO_CANCEL is set, the notification will // become canceled shortly by NoMan, but we can't assume that. - HeadsUpManager.setIsClickedNotification(row, true); mHeadsUpManager.releaseImmediately(notificationKey); } StatusBarNotification parentToCancel = null; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java index 88c150301cff..6e9e8303f905 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java @@ -1486,6 +1486,13 @@ public class ExpandableNotificationRow extends ActivatableNotificationView { updateBackground(); } + public int getPositionOfChild(ExpandableNotificationRow childRow) { + if (mIsSummaryWithChildren) { + return mChildrenContainer.getPositionInLinearLayout(childRow); + } + return 0; + } + public void setExpansionLogger(ExpansionLogger logger, String key) { mLogger = logger; mLoggingKey = key; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationContentView.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationContentView.java index f3c666f90e40..d6c02e481b7d 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationContentView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationContentView.java @@ -360,7 +360,9 @@ public class NotificationContentView extends FrameLayout { private void setVisible(final boolean isVisible) { if (isVisible) { - + // This call can happen multiple times, but removing only removes a single one. + // We therefore need to remove the old one. + getViewTreeObserver().removeOnPreDrawListener(mEnableAnimationPredrawListener); // We only animate if we are drawn at least once, otherwise the view might animate when // it's shown the first time getViewTreeObserver().addOnPreDrawListener(mEnableAnimationPredrawListener); @@ -401,12 +403,17 @@ public class NotificationContentView extends FrameLayout { return mContext.getResources().getDimensionPixelSize( com.android.internal.R.dimen.notification_action_list_height); } + int hint; if (mHeadsUpChild != null) { - return mHeadsUpChild.getHeight(); + hint = mHeadsUpChild.getHeight(); } else { - return mContractedChild.getHeight() + mContext.getResources().getDimensionPixelSize( - com.android.internal.R.dimen.notification_action_list_height); + hint = mContractedChild.getHeight() + mContext.getResources().getDimensionPixelSize( + com.android.internal.R.dimen.notification_action_list_height); + } + if (mExpandedChild != null) { + hint = Math.min(hint, mExpandedChild.getHeight()); } + return hint; } private void updateContentTransformation() { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/HeaderTransformState.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/HeaderTransformState.java index b66e9f313e9a..8463e069abc1 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/HeaderTransformState.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/HeaderTransformState.java @@ -109,9 +109,6 @@ public class HeaderTransformState extends TransformState { @Override public void recycle() { super.recycle(); - if (mWorkProfileState != null) { - mWorkProfileState.recycle(); - } sInstancePool.release(this); } @@ -120,6 +117,10 @@ public class HeaderTransformState extends TransformState { super.reset(); mExpandButton = null; mWorkProfileState = null; + if (mWorkProfileState != null) { + mWorkProfileState.recycle(); + mWorkProfileState = null; + } } public void setVisible(boolean visible) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputView.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputView.java index 2f522f08a614..40ff05124644 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputView.java @@ -47,6 +47,7 @@ import android.widget.TextView; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.MetricsProto; import com.android.systemui.R; +import com.android.systemui.statusbar.ExpandableView; import com.android.systemui.statusbar.NotificationData; import com.android.systemui.statusbar.RemoteInputController; import com.android.systemui.statusbar.stack.ScrollContainer; @@ -284,11 +285,17 @@ public class RemoteInputView extends LinearLayout implements View.OnClickListene private void findScrollContainer() { if (mScrollContainer == null) { + mScrollContainerChild = null; ViewParent p = this; while (p != null) { + if (mScrollContainerChild == null && p instanceof ExpandableView) { + mScrollContainerChild = (View) p; + } if (p.getParent() instanceof ScrollContainer) { mScrollContainer = (ScrollContainer) p.getParent(); - mScrollContainerChild = (View) p; + if (mScrollContainerChild == null) { + mScrollContainerChild = (View) p; + } break; } p = p.getParent(); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationChildrenContainer.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationChildrenContainer.java index cb0b84827f78..a0f1bc2ceaf0 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationChildrenContainer.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationChildrenContainer.java @@ -677,6 +677,10 @@ public class NotificationChildrenContainer extends ViewGroup { mHeaderUtil = new NotificationHeaderUtil(mNotificationParent); } + public ExpandableNotificationRow getNotificationParent() { + return mNotificationParent; + } + public NotificationHeaderView getHeaderView() { return mNotificationHeader; } @@ -854,4 +858,23 @@ public class NotificationChildrenContainer extends ViewGroup { child.setRemoved(); } } + + public int getPositionInLinearLayout(View childInGroup) { + int position = mNotificationHeaderMargin + mNotificatonTopPadding; + + for (int i = 0; i < mChildren.size(); i++) { + ExpandableNotificationRow child = mChildren.get(i); + boolean notGone = child.getVisibility() != View.GONE; + if (notGone) { + position += mDividerHeight; + } + if (child == childInGroup) { + return position; + } + if (notGone) { + position += child.getIntrinsicHeight(); + } + } + return 0; + } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java index cab25340562c..b58538d03bd0 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java @@ -610,9 +610,13 @@ public class NotificationStackScrollLayout extends ViewGroup ExpandableView expandableView = (ExpandableView) mForcedScroll; int positionInLinearLayout = getPositionInLinearLayout(expandableView); int targetScroll = targetScrollForView(expandableView, positionInLinearLayout); + int outOfViewScroll = positionInLinearLayout + expandableView.getIntrinsicHeight(); targetScroll = Math.max(0, Math.min(targetScroll, getScrollRange())); - if (mOwnScrollY < targetScroll || positionInLinearLayout < mOwnScrollY) { + + // Only apply the scroll if we're scrolling the view upwards, or the view is so far up + // that it is not visible anymore. + if (mOwnScrollY < targetScroll || outOfViewScroll < mOwnScrollY) { mOwnScrollY = targetScroll; } } @@ -1034,9 +1038,13 @@ public class NotificationStackScrollLayout extends ViewGroup @Override public boolean scrollTo(View v) { ExpandableView expandableView = (ExpandableView) v; - int targetScroll = targetScrollForView(expandableView, getPositionInLinearLayout(v)); + int positionInLinearLayout = getPositionInLinearLayout(v); + int targetScroll = targetScrollForView(expandableView, positionInLinearLayout); + int outOfViewScroll = positionInLinearLayout + expandableView.getIntrinsicHeight(); - if (mOwnScrollY < targetScroll) { + // Only apply the scroll if we're scrolling the view upwards, or the view is so far up + // that it is not visible anymore. + if (mOwnScrollY < targetScroll || outOfViewScroll < mOwnScrollY) { mScroller.startScroll(mScrollX, mOwnScrollY, 0, targetScroll - mOwnScrollY); mDontReportNextOverScroll = true; postInvalidateOnAnimation(); @@ -1064,6 +1072,10 @@ public class NotificationStackScrollLayout extends ViewGroup // animating away. To work around that we'll wait until things have settled. removeCallbacks(mReclamp); postDelayed(mReclamp, 50); + } else if (mForcedScroll != null) { + // The scroll was requested before we got the actual inset - in case we need + // to scroll up some more do so now. + scrollTo(mForcedScroll); } return insets; } @@ -2363,7 +2375,15 @@ public class NotificationStackScrollLayout extends ViewGroup return view.getHeight(); } - private int getPositionInLinearLayout(View requestedChild) { + private int getPositionInLinearLayout(View requestedView) { + ExpandableNotificationRow childInGroup = null; + ExpandableNotificationRow requestedRow = null; + if (isChildInGroup(requestedView)) { + // We're asking for a child in a group. Calculate the position of the parent first, + // then within the parent. + childInGroup = (ExpandableNotificationRow) requestedView; + requestedView = requestedRow = childInGroup.getNotificationParent(); + } int position = 0; float previousIncreasedAmount = 0.0f; for (int i = 0; i < getChildCount(); i++) { @@ -2379,7 +2399,10 @@ public class NotificationStackScrollLayout extends ViewGroup } previousIncreasedAmount = increasedPaddingAmount; } - if (child == requestedChild) { + if (child == requestedView) { + if (requestedRow != null) { + position += requestedRow.getPositionOfChild(childInGroup); + } return position; } if (notGone) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollState.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollState.java index d6c550678174..8f0cd8e63ee0 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollState.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollState.java @@ -26,9 +26,8 @@ import com.android.systemui.statusbar.EmptyShadeView; import com.android.systemui.statusbar.ExpandableNotificationRow; import com.android.systemui.statusbar.ExpandableView; -import java.util.HashMap; import java.util.List; -import java.util.Map; +import java.util.WeakHashMap; /** * A state of a {@link com.android.systemui.statusbar.stack.NotificationStackScrollLayout} which @@ -39,12 +38,12 @@ public class StackScrollState { private static final String CHILD_NOT_FOUND_TAG = "StackScrollStateNoSuchChild"; private final ViewGroup mHostView; - private Map<ExpandableView, StackViewState> mStateMap; + private WeakHashMap<ExpandableView, StackViewState> mStateMap; private final int mClearAllTopPadding; public StackScrollState(ViewGroup hostView) { mHostView = hostView; - mStateMap = new HashMap<ExpandableView, StackViewState>(); + mStateMap = new WeakHashMap<>(); mClearAllTopPadding = hostView.getContext().getResources().getDimensionPixelSize( R.dimen.clear_all_padding_top); } diff --git a/services/core/java/com/android/server/DeviceIdleController.java b/services/core/java/com/android/server/DeviceIdleController.java index 69960c7223d2..bb966f7b0eca 100644 --- a/services/core/java/com/android/server/DeviceIdleController.java +++ b/services/core/java/com/android/server/DeviceIdleController.java @@ -542,6 +542,8 @@ public class DeviceIdleController extends SystemService "mms_temp_app_whitelist_duration"; private static final String KEY_SMS_TEMP_APP_WHITELIST_DURATION = "sms_temp_app_whitelist_duration"; + private static final String KEY_NOTIFICATION_WHITELIST_DURATION = + "notification_whitelist_duration"; /** * This is the time, after becoming inactive, that we go in to the first @@ -752,6 +754,14 @@ public class DeviceIdleController extends SystemService */ public long SMS_TEMP_APP_WHITELIST_DURATION; + /** + * Amount of time we would like to whitelist an app that is handling a + * {@link android.app.PendingIntent} triggered by a {@link android.app.Notification}. + * @see Settings.Global#DEVICE_IDLE_CONSTANTS + * @see #KEY_NOTIFICATION_WHITELIST_DURATION + */ + public long NOTIFICATION_WHITELIST_DURATION; + private final ContentResolver mResolver; private final boolean mHasWatch; private final KeyValueListParser mParser = new KeyValueListParser(','); @@ -842,6 +852,8 @@ public class DeviceIdleController extends SystemService KEY_MMS_TEMP_APP_WHITELIST_DURATION, 60 * 1000L); SMS_TEMP_APP_WHITELIST_DURATION = mParser.getLong( KEY_SMS_TEMP_APP_WHITELIST_DURATION, 20 * 1000L); + NOTIFICATION_WHITELIST_DURATION = mParser.getLong( + KEY_NOTIFICATION_WHITELIST_DURATION, 30 * 1000L); } } @@ -945,6 +957,10 @@ public class DeviceIdleController extends SystemService pw.print(" "); pw.print(KEY_SMS_TEMP_APP_WHITELIST_DURATION); pw.print("="); TimeUtils.formatDuration(SMS_TEMP_APP_WHITELIST_DURATION, pw); pw.println(); + + pw.print(" "); pw.print(KEY_NOTIFICATION_WHITELIST_DURATION); pw.print("="); + TimeUtils.formatDuration(NOTIFICATION_WHITELIST_DURATION, pw); + pw.println(); } } @@ -1252,6 +1268,10 @@ public class DeviceIdleController extends SystemService addPowerSaveTempWhitelistAppDirectInternal(0, appId, duration, sync, reason); } + public long getNotificationWhitelistDuration() { + return mConstants.NOTIFICATION_WHITELIST_DURATION; + } + public void setNetworkPolicyTempWhitelistCallback(Runnable callback) { setNetworkPolicyTempWhitelistCallbackInternal(callback); } @@ -1632,7 +1652,7 @@ public class DeviceIdleController extends SystemService } entry.first.value = timeNow + duration; if (DEBUG) { - Slog.d(TAG, "Adding AppId " + appId + " to temp whitelist"); + Slog.d(TAG, "Adding AppId " + appId + " to temp whitelist. New entry: " + newEntry); } if (newEntry) { // No pending timeout for the app id, post a delayed message @@ -1665,12 +1685,18 @@ public class DeviceIdleController extends SystemService } private void postTempActiveTimeoutMessage(int uid, long delay) { + if (DEBUG) { + Slog.d(TAG, "postTempActiveTimeoutMessage: uid=" + uid + ", delay=" + delay); + } mHandler.sendMessageDelayed(mHandler.obtainMessage(MSG_TEMP_APP_WHITELIST_TIMEOUT, uid, 0), delay); } void checkTempAppWhitelistTimeout(int uid) { final long timeNow = SystemClock.elapsedRealtime(); + if (DEBUG) { + Slog.d(TAG, "checkTempAppWhitelistTimeout: uid=" + uid + ", timeNow=" + timeNow); + } synchronized (this) { Pair<MutableLong, String> entry = mTempWhitelistAppIdEndTimes.get(uid); if (entry == null) { @@ -1694,6 +1720,9 @@ public class DeviceIdleController extends SystemService } } else { // Need more time + if (DEBUG) { + Slog.d(TAG, "Time to remove UID " + uid + ": " + entry.first.value); + } postTempActiveTimeoutMessage(uid, entry.first.value - timeNow); } } @@ -2514,6 +2543,8 @@ public class DeviceIdleController extends SystemService pw.println(" Print currently whitelisted apps."); pw.println(" whitelist [package ...]"); pw.println(" Add (prefix with +) or remove (prefix with -) packages."); + pw.println(" tempwhitelist"); + pw.println(" Print packages that are temporarily whitelisted."); pw.println(" tempwhitelist [-u] [package ..]"); pw.println(" Temporarily place packages in whitelist for 10 seconds."); } @@ -2817,8 +2848,7 @@ public class DeviceIdleController extends SystemService pw.println("Failed: " + re); } } else { - pw.println("At least one package name must be specified"); - return -1; + dumpTempWhitelistSchedule(pw, false); } } else { return shell.handleDefaultCommands(cmd); @@ -2943,20 +2973,8 @@ public class DeviceIdleController extends SystemService pw.println(); } } - size = mTempWhitelistAppIdEndTimes.size(); - if (size > 0) { - pw.println(" Temp whitelist schedule:"); - final long timeNow = SystemClock.elapsedRealtime(); - for (int i = 0; i < size; i++) { - pw.print(" UID="); - pw.print(mTempWhitelistAppIdEndTimes.keyAt(i)); - pw.print(": "); - Pair<MutableLong, String> entry = mTempWhitelistAppIdEndTimes.valueAt(i); - TimeUtils.formatDuration(entry.first.value, timeNow, pw); - pw.print(" - "); - pw.println(entry.second); - } - } + dumpTempWhitelistSchedule(pw, true); + size = mTempWhitelistAppIdArray != null ? mTempWhitelistAppIdArray.length : 0; if (size > 0) { pw.println(" Temp whitelist app ids:"); @@ -2968,7 +2986,7 @@ public class DeviceIdleController extends SystemService } pw.print(" mLightEnabled="); pw.print(mLightEnabled); - pw.print(" mDeepEnabled="); pw.println(mDeepEnabled); + pw.print(" mDeepEnabled="); pw.println(mDeepEnabled); pw.print(" mForceIdle="); pw.println(mForceIdle); pw.print(" mMotionSensor="); pw.println(mMotionSensor); pw.print(" mCurDisplay="); pw.println(mCurDisplay); @@ -3040,4 +3058,26 @@ public class DeviceIdleController extends SystemService } } } -} + + void dumpTempWhitelistSchedule(PrintWriter pw, boolean printTitle) { + final int size = mTempWhitelistAppIdEndTimes.size(); + if (size > 0) { + String prefix = ""; + if (printTitle) { + pw.println(" Temp whitelist schedule:"); + prefix = " "; + } + final long timeNow = SystemClock.elapsedRealtime(); + for (int i = 0; i < size; i++) { + pw.print(prefix); + pw.print("UID="); + pw.print(mTempWhitelistAppIdEndTimes.keyAt(i)); + pw.print(": "); + Pair<MutableLong, String> entry = mTempWhitelistAppIdEndTimes.valueAt(i); + TimeUtils.formatDuration(entry.first.value, timeNow, pw); + pw.print(" - "); + pw.println(entry.second); + } + } + } + } diff --git a/services/core/java/com/android/server/InputMethodManagerService.java b/services/core/java/com/android/server/InputMethodManagerService.java index 727bf5c6bec9..5d8fe7c68fe8 100644 --- a/services/core/java/com/android/server/InputMethodManagerService.java +++ b/services/core/java/com/android/server/InputMethodManagerService.java @@ -159,6 +159,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub static final int MSG_BIND_INPUT = 1010; static final int MSG_SHOW_SOFT_INPUT = 1020; static final int MSG_HIDE_SOFT_INPUT = 1030; + static final int MSG_HIDE_CURRENT_INPUT_METHOD = 1035; static final int MSG_ATTACH_TOKEN = 1040; static final int MSG_CREATE_SESSION = 1050; @@ -2846,6 +2847,11 @@ public class InputMethodManagerService extends IInputMethodManager.Stub } args.recycle(); return true; + case MSG_HIDE_CURRENT_INPUT_METHOD: + synchronized (mMethodMap) { + hideCurrentInputLocked(0, null); + } + return true; case MSG_ATTACH_TOKEN: args = (SomeArgs)msg.obj; try { @@ -3880,6 +3886,12 @@ public class InputMethodManagerService extends IInputMethodManager.Stub mHandler.sendMessage(mHandler.obtainMessage(MSG_SWITCH_IME, forwardDirection ? 1 : 0, 0)); } + + @Override + public void hideCurrentInputMethod() { + mHandler.removeMessages(MSG_HIDE_CURRENT_INPUT_METHOD); + mHandler.sendEmptyMessage(MSG_HIDE_CURRENT_INPUT_METHOD); + } } private static String imeWindowStatusToString(final int imeWindowVis) { diff --git a/services/core/java/com/android/server/am/ActiveServices.java b/services/core/java/com/android/server/am/ActiveServices.java index c24123a1be5c..6a8c8b053ea7 100755 --- a/services/core/java/com/android/server/am/ActiveServices.java +++ b/services/core/java/com/android/server/am/ActiveServices.java @@ -831,8 +831,9 @@ public final class ActiveServices { int clientLabel = 0; PendingIntent clientIntent = null; + final boolean isCallerSystem = callerApp.info.uid == Process.SYSTEM_UID; - if (callerApp.info.uid == Process.SYSTEM_UID) { + if (isCallerSystem) { // Hacky kind of thing -- allow system stuff to tell us // what they are, so we can report this elsewhere for // others to know why certain services are running. @@ -854,6 +855,12 @@ public final class ActiveServices { "BIND_TREAT_LIKE_ACTIVITY"); } + if ((flags & Context.BIND_ALLOW_WHITELIST_MANAGEMENT) != 0 && !isCallerSystem) { + throw new SecurityException( + "Non-system caller " + caller + " (pid=" + Binder.getCallingPid() + + ") set BIND_ALLOW_WHITELIST_MANAGEMENT when binding service " + service); + } + final boolean callerFg = callerApp.setSchedGroup != ProcessList.SCHED_GROUP_BACKGROUND; final boolean isBindExternal = (flags & Context.BIND_EXTERNAL_SERVICE) != 0; @@ -1124,6 +1131,11 @@ public final class ActiveServices { } if (r.binding.service.app != null) { + if (r.binding.service.app.whitelistManager) { + // Must reset flag here because on computeOomAdjLocked() the service + // connection will be gone... + r.binding.service.app.whitelistManager = false; + } // This could have made the service less important. if ((r.flags&Context.BIND_TREAT_LIKE_ACTIVITY) != 0) { r.binding.service.app.treatLikeActivity = true; diff --git a/services/core/java/com/android/server/am/ActivityManagerDebugConfig.java b/services/core/java/com/android/server/am/ActivityManagerDebugConfig.java index f2bf4f939bad..43bb5ee8d3e4 100644 --- a/services/core/java/com/android/server/am/ActivityManagerDebugConfig.java +++ b/services/core/java/com/android/server/am/ActivityManagerDebugConfig.java @@ -90,6 +90,7 @@ class ActivityManagerDebugConfig { static final boolean DEBUG_VISIBLE_BEHIND = DEBUG_ALL_ACTIVITIES || false; static final boolean DEBUG_USAGE_STATS = DEBUG_ALL || false; static final boolean DEBUG_PERMISSIONS_REVIEW = DEBUG_ALL || false; + static final boolean DEBUG_WHITELISTS = DEBUG_ALL || false; static final String POSTFIX_ADD_REMOVE = (APPEND_CATEGORY_NAME) ? "_AddRemove" : ""; static final String POSTFIX_APP = (APPEND_CATEGORY_NAME) ? "_App" : ""; diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 7c828293be8c..ec54116003c5 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -321,6 +321,7 @@ import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_URI_PERMISS import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_USAGE_STATS; import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_VISIBILITY; import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_VISIBLE_BEHIND; +import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_WHITELISTS; import static com.android.server.am.ActivityManagerDebugConfig.POSTFIX_BACKUP; import static com.android.server.am.ActivityManagerDebugConfig.POSTFIX_BROADCAST; import static com.android.server.am.ActivityManagerDebugConfig.POSTFIX_CLEANUP; @@ -7135,6 +7136,41 @@ public final class ActivityManagerService extends ActivityManagerNative } } + /** + * Whitelists {@code targetUid} to temporarily bypass Power Save mode. + * + * <p>{@code callerUid} must be allowed to request such whitelist by calling + * {@link #addTempPowerSaveWhitelistGrantorUid(int)}. + */ + void tempWhitelistAppForPowerSave(int callerPid, int callerUid, int targetUid, long duration) { + if (DEBUG_WHITELISTS) { + Slog.d(TAG, "tempWhitelistAppForPowerSave(" + callerPid + ", " + callerUid + ", " + + targetUid + ", " + duration + ")"); + } + synchronized (mPidsSelfLocked) { + final ProcessRecord pr = mPidsSelfLocked.get(callerPid); + if (pr == null) { + Slog.w(TAG, "tempWhitelistAppForPowerSave() no ProcessRecord for pid " + callerPid); + return; + } + if (!pr.whitelistManager) { + if (DEBUG_WHITELISTS) { + Slog.d(TAG, "tempWhitelistAppForPowerSave() for target " + targetUid + ": pid " + + callerPid + " is not allowed"); + } + return; + } + } + + final long token = Binder.clearCallingIdentity(); + try { + mLocalDeviceIdleController.addPowerSaveTempWhitelistAppDirect(targetUid, duration, + true, "pe from uid:" + callerUid); + } finally { + Binder.restoreCallingIdentity(token); + } + } + @Override public void cancelIntentSender(IIntentSender sender) { if (!(sender instanceof PendingIntentRecord)) { @@ -19023,6 +19059,9 @@ public final class ActivityManagerService extends ActivityManagerNative } } } + + app.whitelistManager = false; + for (int conni = s.connections.size()-1; conni >= 0 && (adj > ProcessList.FOREGROUND_APP_ADJ || schedGroup == ProcessList.SCHED_GROUP_BACKGROUND @@ -19041,6 +19080,10 @@ public final class ActivityManagerService extends ActivityManagerNative // Binding to ourself is not interesting. continue; } + if ((cr.flags & Context.BIND_ALLOW_WHITELIST_MANAGEMENT) != 0) { + app.whitelistManager = true; + } + if ((cr.flags&Context.BIND_WAIVE_PRIORITY) == 0) { ProcessRecord client = cr.binding.client; int clientAdj = computeOomAdjLocked(client, cachedAdj, @@ -21312,6 +21355,15 @@ public final class ActivityManagerService extends ActivityManagerNative } } } + + @Override + public void setPendingIntentWhitelistDuration(IIntentSender target, long duration) { + if (!(target instanceof PendingIntentRecord)) { + Slog.w(TAG, "markAsSentFromNotification(): not a PendingIntentRecord: " + target); + return; + } + ((PendingIntentRecord) target).setWhitelistDuration(duration); + } } private final class SleepTokenImpl extends SleepToken { diff --git a/services/core/java/com/android/server/am/PendingIntentRecord.java b/services/core/java/com/android/server/am/PendingIntentRecord.java index 1f8d26bc55d0..c1ff4dd0e4a3 100644 --- a/services/core/java/com/android/server/am/PendingIntentRecord.java +++ b/services/core/java/com/android/server/am/PendingIntentRecord.java @@ -47,6 +47,7 @@ final class PendingIntentRecord extends IIntentSender.Stub { final WeakReference<PendingIntentRecord> ref; boolean sent = false; boolean canceled = false; + private long whitelistDuration = 0; String stringName; String lastTagPrefix; @@ -66,9 +67,9 @@ final class PendingIntentRecord extends IIntentSender.Stub { final int flags; final int hashCode; final int userId; - + private static final int ODD_PRIME_NUMBER = 37; - + Key(int _t, String _p, ActivityRecord _a, String _w, int _r, Intent[] _i, String[] _it, int _f, Bundle _o, int _userId) { type = _t; @@ -106,7 +107,7 @@ final class PendingIntentRecord extends IIntentSender.Stub { //Slog.i(ActivityManagerService.TAG, this + " hashCode=0x" // + Integer.toHexString(hashCode)); } - + public boolean equals(Object otherObj) { if (otherObj == null) { return false; @@ -198,6 +199,11 @@ final class PendingIntentRecord extends IIntentSender.Stub { ref = new WeakReference<PendingIntentRecord>(this); } + void setWhitelistDuration(long duration) { + this.whitelistDuration = duration; + this.stringName = null; + } + public void send(int code, Intent intent, String resolvedType, IIntentReceiver finishedReceiver, String requiredPermission, Bundle options) { sendInner(code, intent, resolvedType, finishedReceiver, @@ -216,6 +222,14 @@ final class PendingIntentRecord extends IIntentSender.Stub { if (intent != null) intent.setDefusable(true); if (options != null) options.setDefusable(true); + if (whitelistDuration > 0 && !canceled) { + // Must call before acquiring the lock. It's possible the method return before sending + // the intent due to some validations inside the lock, in which case the UID shouldn't + // be whitelisted, but since the whitelist is temporary, that would be ok. + owner.tempWhitelistAppForPowerSave(Binder.getCallingPid(), Binder.getCallingUid(), uid, + whitelistDuration); + } + synchronized (owner) { final ActivityContainer activityContainer = (ActivityContainer)container; if (activityContainer != null && activityContainer.mParentActivity != null && @@ -361,7 +375,7 @@ final class PendingIntentRecord extends IIntentSender.Stub { } } } - + void dump(PrintWriter pw, String prefix) { pw.print(prefix); pw.print("uid="); pw.print(uid); pw.print(" packageName="); pw.print(key.packageName); @@ -383,6 +397,7 @@ final class PendingIntentRecord extends IIntentSender.Stub { pw.print(prefix); pw.print("sent="); pw.print(sent); pw.print(" canceled="); pw.println(canceled); } + pw.print(prefix); pw.println("whitelistDuration="); pw.println(whitelistDuration); } public String toString() { @@ -396,6 +411,9 @@ final class PendingIntentRecord extends IIntentSender.Stub { sb.append(key.packageName); sb.append(' '); sb.append(key.typeName()); + if (whitelistDuration > 0) { + sb.append( " (whitelistDuration: ").append(whitelistDuration).append("ms)"); + } sb.append('}'); return stringName = sb.toString(); } diff --git a/services/core/java/com/android/server/am/ProcessRecord.java b/services/core/java/com/android/server/am/ProcessRecord.java index da18f32787bd..691fd2abe0b3 100644 --- a/services/core/java/com/android/server/am/ProcessRecord.java +++ b/services/core/java/com/android/server/am/ProcessRecord.java @@ -194,6 +194,8 @@ final class ProcessRecord { // Process is currently hosting a backup agent for backup or restore public boolean inFullBackup; + // App is allowed to manage whitelists such as temporary Power Save mode whitelist. + boolean whitelistManager; void dump(PrintWriter pw, String prefix) { final long now = SystemClock.uptimeMillis(); @@ -376,6 +378,9 @@ final class ProcessRecord { } pw.println(); } + if (whitelistManager) { + pw.print(prefix); pw.print("whitelistManager="); pw.println(whitelistManager); + } if (activities.size() > 0) { pw.print(prefix); pw.println("Activities:"); for (int i=0; i<activities.size(); i++) { diff --git a/services/core/java/com/android/server/job/JobSchedulerService.java b/services/core/java/com/android/server/job/JobSchedulerService.java index 491ee18dc0f4..1b8eccb431f5 100644 --- a/services/core/java/com/android/server/job/JobSchedulerService.java +++ b/services/core/java/com/android/server/job/JobSchedulerService.java @@ -16,6 +16,9 @@ package com.android.server.job; +import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_DISABLED; +import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER; + import java.io.FileDescriptor; import java.io.PrintWriter; import java.util.ArrayList; @@ -41,6 +44,7 @@ import android.content.pm.IPackageManager; import android.content.pm.PackageManager; import android.content.pm.ServiceInfo; import android.content.pm.PackageManager.NameNotFoundException; +import android.net.Uri; import android.os.BatteryStats; import android.os.Binder; import android.os.Handler; @@ -217,7 +221,41 @@ public final class JobSchedulerService extends com.android.server.SystemService if (DEBUG) { Slog.d(TAG, "Receieved: " + intent.getAction()); } - if (Intent.ACTION_PACKAGE_REMOVED.equals(intent.getAction())) { + if (Intent.ACTION_PACKAGE_CHANGED.equals(intent.getAction())) { + // Purge the app's jobs if the whole package was just disabled. When this is + // the case the component name will be a bare package name. + final String pkgName = getPackageName(intent); + final int pkgUid = intent.getIntExtra(Intent.EXTRA_UID, -1); + if (pkgName != null && pkgUid != -1) { + final String[] changedComponents = intent.getStringArrayExtra( + Intent.EXTRA_CHANGED_COMPONENT_NAME_LIST); + if (changedComponents != null) { + for (String component : changedComponents) { + if (component.equals(pkgName)) { + if (DEBUG) { + Slog.d(TAG, "Package state change: " + pkgName); + } + try { + final int userId = UserHandle.getUserId(pkgUid); + IPackageManager pm = AppGlobals.getPackageManager(); + final int state = pm.getApplicationEnabledSetting(pkgName, userId); + if (state == COMPONENT_ENABLED_STATE_DISABLED + || state == COMPONENT_ENABLED_STATE_DISABLED_USER) { + if (DEBUG) { + Slog.d(TAG, "Removing jobs for package " + pkgName + + " in user " + userId); + } + cancelJobsForUid(pkgUid, true); + } + } catch (RemoteException e) { /* cannot happen */ } + break; + } + } + } + } else { + Slog.w(TAG, "PACKAGE_CHANGED for " + pkgName + " / uid " + pkgUid); + } + } else if (Intent.ACTION_PACKAGE_REMOVED.equals(intent.getAction())) { // If this is an outright uninstall rather than the first half of an // app update sequence, cancel the jobs associated with the app. if (!intent.getBooleanExtra(Intent.EXTRA_REPLACING, false)) { @@ -237,6 +275,12 @@ public final class JobSchedulerService extends com.android.server.SystemService } }; + private String getPackageName(Intent intent) { + Uri uri = intent.getData(); + String pkg = uri != null ? uri.getSchemeSpecificPart() : null; + return pkg; + } + final private IUidObserver mUidObserver = new IUidObserver.Stub() { @Override public void onUidStateChanged(int uid, int procState) throws RemoteException { updateUidState(uid, procState); @@ -520,7 +564,9 @@ public final class JobSchedulerService extends com.android.server.SystemService public void onBootPhase(int phase) { if (PHASE_SYSTEM_SERVICES_READY == phase) { // Register br for package removals and user removals. - final IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_REMOVED); + final IntentFilter filter = new IntentFilter(); + filter.addAction(Intent.ACTION_PACKAGE_REMOVED); + filter.addAction(Intent.ACTION_PACKAGE_CHANGED); filter.addDataScheme("package"); getContext().registerReceiverAsUser( mBroadcastReceiver, UserHandle.ALL, filter, null, null); diff --git a/services/core/java/com/android/server/notification/ManagedServices.java b/services/core/java/com/android/server/notification/ManagedServices.java index 53c5a6dc65e2..dc85dd7ef40e 100644 --- a/services/core/java/com/android/server/notification/ManagedServices.java +++ b/services/core/java/com/android/server/notification/ManagedServices.java @@ -16,6 +16,10 @@ package com.android.server.notification; +import static android.content.Context.BIND_ALLOW_WHITELIST_MANAGEMENT; +import static android.content.Context.BIND_AUTO_CREATE; +import static android.content.Context.BIND_FOREGROUND_SERVICE; + import android.annotation.NonNull; import android.app.ActivityManager; import android.app.PendingIntent; @@ -43,7 +47,6 @@ import android.os.UserHandle; import android.os.UserManager; import android.provider.Settings; import android.text.TextUtils; -import android.util.ArrayMap; import android.util.ArraySet; import android.util.Log; import android.util.Slog; @@ -56,7 +59,6 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.List; -import java.util.Map.Entry; import java.util.Objects; import java.util.Set; @@ -681,7 +683,7 @@ abstract public class ManagedServices { }; if (!mContext.bindServiceAsUser(intent, serviceConnection, - Context.BIND_AUTO_CREATE | Context.BIND_FOREGROUND_SERVICE, + BIND_AUTO_CREATE | BIND_FOREGROUND_SERVICE | BIND_ALLOW_WHITELIST_MANAGEMENT, new UserHandle(userid))) { mServicesBinding.remove(servicesBindingTag); Slog.w(TAG, "Unable to bind " + getCaption() + " service: " + intent); diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java index cf4669d77789..b5a8bf3f4d1a 100644 --- a/services/core/java/com/android/server/notification/NotificationManagerService.java +++ b/services/core/java/com/android/server/notification/NotificationManagerService.java @@ -40,11 +40,13 @@ import static android.service.notification.NotificationListenerService.TRIM_FULL import static android.service.notification.NotificationListenerService.TRIM_LIGHT; import static android.service.notification.NotificationListenerService.Ranking.IMPORTANCE_DEFAULT; import static android.service.notification.NotificationListenerService.Ranking.IMPORTANCE_NONE; + import static org.xmlpull.v1.XmlPullParser.END_DOCUMENT; import android.Manifest; import android.annotation.Nullable; import android.app.ActivityManager; +import android.app.ActivityManagerInternal; import android.app.ActivityManagerNative; import android.app.AppGlobals; import android.app.AppOpsManager; @@ -56,6 +58,7 @@ import android.app.Notification; import android.app.NotificationManager; import android.app.NotificationManager.Policy; import android.app.PendingIntent; +import android.app.RemoteInput; import android.app.StatusBarManager; import android.app.backup.BackupManager; import android.app.usage.UsageEvents; @@ -64,6 +67,7 @@ import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.ContentResolver; import android.content.Context; +import android.content.IIntentSender; import android.content.Intent; import android.content.IntentFilter; import android.content.pm.ApplicationInfo; @@ -90,6 +94,7 @@ import android.os.IBinder; import android.os.IInterface; import android.os.Looper; import android.os.Message; +import android.os.Parcelable; import android.os.Process; import android.os.RemoteException; import android.os.SystemClock; @@ -127,6 +132,7 @@ import com.android.internal.annotations.VisibleForTesting; import com.android.internal.statusbar.NotificationVisibility; import com.android.internal.util.FastXmlSerializer; import com.android.internal.util.Preconditions; +import com.android.server.DeviceIdleController; import com.android.server.EventLogTags; import com.android.server.LocalServices; import com.android.server.SystemService; @@ -2542,6 +2548,8 @@ public class NotificationManagerService extends SystemService { + " id=" + id + " notification=" + notification); } + markAsSentFromNotification(notification); + // Sanitize inputs notification.priority = clamp(notification.priority, Notification.PRIORITY_MIN, Notification.PRIORITY_MAX); @@ -2556,6 +2564,63 @@ public class NotificationManagerService extends SystemService { idOut[0] = id; } + private static void markAsSentFromNotification(Notification notification) { + final ActivityManagerInternal am = LocalServices.getService(ActivityManagerInternal.class); + final long duration = LocalServices.getService(DeviceIdleController.LocalService.class) + .getNotificationWhitelistDuration(); + + int size = 0; + if (notification.contentIntent != null) { + am.setPendingIntentWhitelistDuration(notification.contentIntent.getTarget(), duration); + } + if (notification.deleteIntent != null) { + am.setPendingIntentWhitelistDuration(notification.deleteIntent.getTarget(), duration); + } + if (notification.fullScreenIntent != null) { + am.setPendingIntentWhitelistDuration(notification.fullScreenIntent.getTarget(), + duration); + } + if (notification.actions != null) { + for (Notification.Action action: notification.actions) { + am.setPendingIntentWhitelistDuration(action.actionIntent.getTarget(), duration); + setPendingIntentWhitelistDuration(am, duration, action.getExtras()); + final RemoteInput[] remoteInputs = action.getRemoteInputs(); + if (remoteInputs != null) { + for (RemoteInput remoteInput : remoteInputs) { + setPendingIntentWhitelistDuration(am, duration, remoteInput.getExtras()); + } + } + } + } + } + + private static void setPendingIntentWhitelistDuration(ActivityManagerInternal am, long duration, + Bundle extras) { + for (String key : extras.keySet()) { + setPendingIntentWhitelistDuration(am, duration, extras.getParcelable(key)); + final Parcelable[] parcelableArray = extras.getParcelableArray(key); + if (parcelableArray != null) { + for (Parcelable parcelable: parcelableArray) { + setPendingIntentWhitelistDuration(am, duration, parcelable); + } + } + final ArrayList<Parcelable> parcelableList = extras.getParcelableArrayList(key); + if (parcelableList != null) { + for (Parcelable parcelable: parcelableList) { + setPendingIntentWhitelistDuration(am, duration, parcelable); + } + } + } + } + + private static void setPendingIntentWhitelistDuration(ActivityManagerInternal am, long duration, + Parcelable parcelable) { + if (parcelable instanceof PendingIntent) { + am.setPendingIntentWhitelistDuration(((PendingIntent) parcelable).getTarget(), + duration); + } + } + private class EnqueueNotificationRunnable implements Runnable { private final NotificationRecord r; private final int userId; diff --git a/services/core/java/com/android/server/wm/DockedStackDividerController.java b/services/core/java/com/android/server/wm/DockedStackDividerController.java index 1b31d07cf31e..e73649ddcf3c 100644 --- a/services/core/java/com/android/server/wm/DockedStackDividerController.java +++ b/services/core/java/com/android/server/wm/DockedStackDividerController.java @@ -45,9 +45,11 @@ import android.view.SurfaceControl; import android.view.animation.AnimationUtils; import android.view.animation.Interpolator; import android.view.animation.PathInterpolator; +import android.view.inputmethod.InputMethodManagerInternal; import com.android.internal.policy.DividerSnapAlgorithm; import com.android.internal.policy.DockedDividerUtils; +import com.android.server.LocalServices; import com.android.server.wm.DimLayer.DimLayerUser; import com.android.server.wm.WindowManagerService.H; @@ -131,6 +133,7 @@ public class DockedStackDividerController implements DimLayerUser { private float mLastAnimationProgress; private float mLastDividerProgress; private final DividerSnapAlgorithm[] mSnapAlgorithmForRotation = new DividerSnapAlgorithm[4]; + private boolean mImeHideRequested; DockedStackDividerController(WindowManagerService service, DisplayContent displayContent) { mService = service; @@ -375,11 +378,39 @@ public class DockedStackDividerController implements DimLayerUser { } } mDockedStackListeners.finishBroadcast(); - if (!exists) { + if (exists) { + InputMethodManagerInternal inputMethodManagerInternal = + LocalServices.getService(InputMethodManagerInternal.class); + if (inputMethodManagerInternal != null) { + + // Hide the current IME to avoid problems with animations from IME adjustment when + // attaching the docked stack. + inputMethodManagerInternal.hideCurrentInputMethod(); + mImeHideRequested = true; + } + } else { setMinimizedDockedStack(false); } } + /** + * Resets the state that IME hide has been requested. See {@link #isImeHideRequested}. + */ + void resetImeHideRequested() { + mImeHideRequested = false; + } + + /** + * The docked stack divider controller makes sure the IME gets hidden when attaching the docked + * stack, to avoid animation problems. This flag indicates whether the request to hide the IME + * has been sent in an asynchronous manner, and the IME should be treated as hidden already. + * + * @return whether IME hide request has been sent + */ + boolean isImeHideRequested() { + return mImeHideRequested; + } + void notifyDockedStackMinimizedChanged(boolean minimizedDock, long animDuration) { mService.mH.removeMessages(NOTIFY_DOCKED_STACK_MINIMIZED_CHANGED); mService.mH.obtainMessage(NOTIFY_DOCKED_STACK_MINIMIZED_CHANGED, @@ -606,7 +637,12 @@ public class DockedStackDividerController implements DimLayerUser { private void setMinimizedDockedStack(boolean minimized) { final TaskStack stack = mDisplayContent.getDockedStackVisibleForUserLocked(); notifyDockedStackMinimizedChanged(minimized, 0); - setMinimizeAmount(stack, minimized ? 1f : 0f); + if (stack == null) { + return; + } + if (stack.setAdjustedForMinimizedDock(minimized ? 1f : 0f)) { + mService.mWindowPlacerLocked.performSurfacePlacement(); + } } private boolean isAnimationMaximizing() { @@ -690,8 +726,11 @@ public class DockedStackDividerController implements DimLayerUser { float t = Math.min(1f, (float) (now - mAnimationStartTime) / mAnimationDuration); t = (isAnimationMaximizing() ? TOUCH_RESPONSE_INTERPOLATOR : mMinimizedDockInterpolator) .getInterpolation(t); - setMinimizeAmount(stack, getMinimizeAmount(stack, t)); - + if (stack != null) { + if (stack.setAdjustedForMinimizedDock(getMinimizeAmount(stack, t))) { + mService.mWindowPlacerLocked.performSurfacePlacement(); + } + } if (t >= 1.0f) { mAnimatingForMinimizedDockedStack = false; return false; @@ -700,42 +739,6 @@ public class DockedStackDividerController implements DimLayerUser { } } - void setMinimizeAmount(TaskStack dockedStack, float minimizeAmount) { - final ArrayList<TaskStack> stacks = mDisplayContent.getStacks(); - - // If the docked stack is not visible, clear the complementary stack on all stacks. - if (dockedStack == null) { - for (int i = stacks.size() - 1; i >= 0; --i) { - final TaskStack stack = stacks.get(i); - stack.resetAdjustedForComplementDock(); - } - return; - } - - // Otherwise if the docked stack minimize amount has changed, update the adjusted bounds - // on the other stack that's currently visible, so that the stack's getDimBounds() - // occupies what's left by the docked stack. This is needed so that stuff like wallpaper - // gets cropped properly to the area left by the dock. - if (dockedStack.setAdjustedForMinimizedDock(minimizeAmount)) { - final boolean adjusted = - dockedStack.isVisibleForUserLocked() && minimizeAmount != 0.0f; - dockedStack.getDimBounds(mTmpRect2); - int dockSide = dockedStack.getDockSide(); - for (int i = stacks.size() - 1; i >= 0; --i) { - final TaskStack stack = stacks.get(i); - if (stack == dockedStack) { - continue; - } - if (stack.isVisibleLocked() && adjusted) { - stack.setAdjustedForComplementDock(mTmpRect2, dockSide); - } else { - stack.resetAdjustedForComplementDock(); - } - } - mService.mWindowPlacerLocked.performSurfacePlacement(); - } - } - private float getInterpolatedAnimationValue(float t) { return t * mAnimationTarget + (1 - t) * mAnimationStart; } diff --git a/services/core/java/com/android/server/wm/TaskStack.java b/services/core/java/com/android/server/wm/TaskStack.java index 114d9bed827c..8be5b19d1530 100644 --- a/services/core/java/com/android/server/wm/TaskStack.java +++ b/services/core/java/com/android/server/wm/TaskStack.java @@ -123,7 +123,6 @@ public class TaskStack implements DimLayer.DimLayerUser, private float mAdjustImeAmount; private float mAdjustDividerAmount; private final int mDockedStackMinimizeThickness; - private boolean mAdjustedForForComplementDock; // If this is true, we are in the bounds animating mode. // The task will be down or upscaled to perfectly fit the @@ -243,9 +242,7 @@ public class TaskStack implements DimLayer.DimLayerUser, insetBounds = mFullyAdjustedImeBounds; } } - if (!mAdjustedForForComplementDock) { - alignTasksToAdjustedBounds(adjusted ? mAdjustedBounds : mBounds, insetBounds); - } + alignTasksToAdjustedBounds(adjusted ? mAdjustedBounds : mBounds, insetBounds); mDisplayContent.layoutNeeded = true; } @@ -864,7 +861,6 @@ public class TaskStack implements DimLayer.DimLayerUser, mImeWin = imeWin; mImeGoingAway = false; if (!mAdjustedForIme || forceUpdate) { - mAdjustedForForComplementDock = false; mAdjustedForIme = true; mAdjustImeAmount = 0f; mAdjustDividerAmount = 0f; @@ -927,12 +923,10 @@ public class TaskStack implements DimLayer.DimLayerUser, * @return Whether the amount has changed and a layout is needed. */ boolean setAdjustedForMinimizedDock(float minimizeAmount) { - mAdjustedForForComplementDock = false; - if (minimizeAmount != mMinimizeAmount) { mMinimizeAmount = minimizeAmount; updateAdjustedBounds(); - return true; + return isVisibleForUserLocked(); } else { return false; } @@ -942,33 +936,6 @@ public class TaskStack implements DimLayer.DimLayerUser, return mMinimizeAmount != 0f; } - void setAdjustedForComplementDock(Rect dockBounds, int dockSide) { - if (mMinimizeAmount != 0f || mAdjustedForIme) { - return; - } - mTmpAdjustedBounds.set(mBounds); - if (dockSide == DOCKED_TOP) { - mTmpAdjustedBounds.top = dockBounds.bottom; - } else if (dockSide == DOCKED_LEFT) { - mTmpAdjustedBounds.left = dockBounds.right; - } else if (dockSide == DOCKED_RIGHT) { - mTmpAdjustedBounds.right = dockBounds.left; - } else { - Slog.w(TAG_WM, "setAdjustedForComplementDock: invalid dock side " + dockSide); - return; - } - mAdjustedForForComplementDock = true; - setAdjustedBounds(mTmpAdjustedBounds); - } - - void resetAdjustedForComplementDock() { - if (mAdjustedForForComplementDock) { - mAdjustedForForComplementDock = false; - mTmpAdjustedBounds.setEmpty(); - setAdjustedBounds(mTmpAdjustedBounds); - } - } - /** * Puts all visible tasks that are adjusted for IME into resizing mode and adds the windows * to the list of to be drawn windows the service is waiting for. diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 695ed36bb213..3f4c1d543790 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -3569,6 +3569,8 @@ public class WindowManagerService extends IWindowManager.Stub final ArrayList<Task> tasks = displayContent.getTasks(); final boolean inMultiWindow = isStackVisibleLocked(DOCKED_STACK_ID) || isStackVisibleLocked(FREEFORM_WORKSPACE_STACK_ID); + final boolean dockMinimized = + getDefaultDisplayContentLocked().mDividerControllerLocked.isMinimizedDock(); for (int taskNdx = tasks.size() - 1; taskNdx >= 0; --taskNdx) { AppTokenList tokens = tasks.get(taskNdx).mAppTokens; final int firstToken = tokens.size() - 1; @@ -3603,8 +3605,10 @@ public class WindowManagerService extends IWindowManager.Stub continue; } - // No app except the home app may specify the screen orientation in multi-window. - if (inMultiWindow && !atoken.mTask.isHomeTask()) { + // No app except the home app may specify the screen orientation in multi-window, + // and only if the docked stack is minimized to avoid weirdness when home task + // temporarily gets moved to the front. + if (inMultiWindow && (!atoken.mTask.isHomeTask() || !dockMinimized)) { continue; } @@ -7596,7 +7600,8 @@ public class WindowManagerService extends IWindowManager.Stub void adjustForImeIfNeeded(final DisplayContent displayContent) { final WindowState imeWin = mInputMethodWindow; - final boolean imeVisible = imeWin != null && imeWin.isVisibleLw() && imeWin.isDisplayedLw(); + final boolean imeVisible = imeWin != null && imeWin.isVisibleLw() && imeWin.isDisplayedLw() + && !displayContent.mDividerControllerLocked.isImeHideRequested(); final boolean dockVisible = isStackVisibleLocked(DOCKED_STACK_ID); final TaskStack imeTargetStack = getImeFocusStackLocked(); final int imeDockSide = (dockVisible && imeTargetStack != null) ? diff --git a/services/core/java/com/android/server/wm/WindowStateAnimator.java b/services/core/java/com/android/server/wm/WindowStateAnimator.java index 9dae0f2d3262..37d6faf5a846 100644 --- a/services/core/java/com/android/server/wm/WindowStateAnimator.java +++ b/services/core/java/com/android/server/wm/WindowStateAnimator.java @@ -23,7 +23,6 @@ import static android.view.WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED; import static android.view.WindowManager.LayoutParams.FLAG_SCALED; import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_STARTING; import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD; -import static android.view.WindowManager.LayoutParams.TYPE_WALLPAPER; import static com.android.server.wm.AppWindowAnimator.sDummyAnimation; import static com.android.server.wm.DragResizeMode.DRAG_RESIZE_MODE_FREEFORM; import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_ADD_REMOVE; @@ -1328,33 +1327,6 @@ class WindowStateAnimator { return; } - // We crop wallpaper windows to the stack bounds of their current target to avoid them - // showing behind transparent windows in other stacks in split-screen mode. - if (w.getBaseType() == TYPE_WALLPAPER) { - final WindowState wallpaperTarget = mWallpaperControllerLocked.getWallpaperTarget(); - if (wallpaperTarget != null) { - final Task task = wallpaperTarget.getTask(); - final WindowStateAnimator winAnimator = wallpaperTarget.mWinAnimator; - // We can only crop the wallpaper using final crop with stack bounds if the target - // is not animating, or if it's animating with clip mode STACK_CLIP_AFTER_ANIM. - // If it's animating with mode STACK_CLIP_NONE, we shouldn't crop either the task - // itself or the wallpaper. If it's animating with STACK_CLIP_BEFORE_ANIM, the crop - // is before the transform on the task itself. - final boolean useFinalCropOnWallpaper = !winAnimator.isAnimationSet() - || winAnimator.resolveStackClip() == STACK_CLIP_AFTER_ANIM; - if (task != null && !task.isFullscreen() - && task.cropWindowsToStackBounds() - && useFinalCropOnWallpaper){ - final TaskStack stack = task.mStack; - if (stack != null && !stack.isFullscreen()) { - stack.getDimBounds(mTmpStackBounds); - finalClipRect.set(mTmpStackBounds); - } - } - } - return; - } - final Task task = w.getTask(); if (task == null || !task.cropWindowsToStackBounds()) { return; @@ -1487,7 +1459,7 @@ class WindowStateAnimator { // We need to ensure for each surface, that we disable transformation matrix // scaling in the same transaction which we resize the surface in. // As we are in SCALING_MODE_SCALE_TO_WINDOW, SurfaceFlinger will - // then take over the scaling until the new buffer arrives, and things + // then take over the scaling until the new buffer arrives, and things // will be seamless. mForceScaleUntilResize = true; } else { @@ -1773,6 +1745,10 @@ class WindowStateAnimator { mWin.mAppToken.onFirstWindowDrawn(mWin, this); } + if (mWin.mAttrs.type == TYPE_INPUT_METHOD) { + mWin.mDisplayContent.mDividerControllerLocked.resetImeHideRequested(); + } + return true; } return false; |