From 2888524e03896831f487e5dee63f18f1c33c0115 Mon Sep 17 00:00:00 2001 From: Gilles Debunne Date: Mon, 25 Jul 2011 18:56:09 -0700 Subject: [PATCH] Bug 4987014: a tap outside dismisses the text suggestion popup Change-Id: I61f5a3c981770393aa861c88d989c653ea00a067 --- api/current.txt | 105 ++++++++++++++++----------------- core/java/android/widget/TextView.java | 103 ++++++++++++++------------------ core/res/res/values/attrs.xml | 6 -- core/res/res/values/public.xml | 1 - core/res/res/values/styles.xml | 18 +++--- core/res/res/values/themes.xml | 7 +-- 6 files changed, 106 insertions(+), 134 deletions(-) diff --git a/api/current.txt b/api/current.txt index db7713ad7161..b538edefe2cc 100644 --- a/api/current.txt +++ b/api/current.txt @@ -185,14 +185,14 @@ package android { public static final class R.attr { ctor public R.attr(); field public static final int absListViewStyle = 16842858; // 0x101006a - field public static final int accessibilityEventTypes = 16843647; // 0x101037f - field public static final int accessibilityFeedbackType = 16843649; // 0x1010381 - field public static final int accessibilityFlags = 16843651; // 0x1010383 + field public static final int accessibilityEventTypes = 16843646; // 0x101037e + field public static final int accessibilityFeedbackType = 16843648; // 0x1010380 + field public static final int accessibilityFlags = 16843650; // 0x1010382 field public static final int accountPreferences = 16843423; // 0x101029f field public static final int accountType = 16843407; // 0x101028f field public static final int action = 16842797; // 0x101002d field public static final int actionBarSize = 16843499; // 0x10102eb - field public static final int actionBarSplitStyle = 16843669; // 0x1010395 + field public static final int actionBarSplitStyle = 16843668; // 0x1010394 field public static final int actionBarStyle = 16843470; // 0x10102ce field public static final int actionBarTabBarStyle = 16843508; // 0x10102f4 field public static final int actionBarTabStyle = 16843507; // 0x10102f3 @@ -208,10 +208,10 @@ package android { field public static final int actionModeCopyDrawable = 16843538; // 0x1010312 field public static final int actionModeCutDrawable = 16843537; // 0x1010311 field public static final int actionModePasteDrawable = 16843539; // 0x1010313 - field public static final int actionModeSelectAllDrawable = 16843645; // 0x101037d - field public static final int actionModeStyle = 16843681; // 0x10103a1 + field public static final int actionModeSelectAllDrawable = 16843644; // 0x101037c + field public static final int actionModeStyle = 16843680; // 0x10103a0 field public static final int actionOverflowButtonStyle = 16843510; // 0x10102f6 - field public static final int actionProviderClass = 16843670; // 0x1010396 + field public static final int actionProviderClass = 16843669; // 0x1010395 field public static final int actionViewClass = 16843516; // 0x10102fc field public static final int activatedBackgroundIndicator = 16843517; // 0x10102fd field public static final int activityCloseEnterAnimation = 16842938; // 0x10100ba @@ -223,7 +223,7 @@ package android { field public static final int alertDialogIcon = 16843605; // 0x1010355 field public static final int alertDialogStyle = 16842845; // 0x101005d field public static final int alertDialogTheme = 16843529; // 0x1010309 - field public static final int alignmentMode = 16843639; // 0x1010377 + field public static final int alignmentMode = 16843638; // 0x1010376 field public static final int allContactsName = 16843468; // 0x10102cc field public static final int allowBackup = 16843392; // 0x1010280 field public static final int allowClearUserData = 16842757; // 0x1010005 @@ -257,8 +257,8 @@ package android { field public static final int background = 16842964; // 0x10100d4 field public static final int backgroundDimAmount = 16842802; // 0x1010032 field public static final int backgroundDimEnabled = 16843295; // 0x101021f - field public static final int backgroundSplit = 16843672; // 0x1010398 - field public static final int backgroundStacked = 16843671; // 0x1010397 + field public static final int backgroundSplit = 16843671; // 0x1010397 + field public static final int backgroundStacked = 16843670; // 0x1010396 field public static final int backupAgent = 16843391; // 0x101027f field public static final int baseline = 16843548; // 0x101031c field public static final int baselineAlignBottom = 16843042; // 0x1010122 @@ -267,7 +267,7 @@ package android { field public static final int borderlessButtonStyle = 16843563; // 0x101032b field public static final int bottom = 16843184; // 0x10101b0 field public static final int bottomBright = 16842957; // 0x10100cd - field public static final int bottomChevronDrawable = 16843658; // 0x101038a + field public static final int bottomChevronDrawable = 16843657; // 0x1010389 field public static final int bottomDark = 16842953; // 0x10100c9 field public static final int bottomLeftRadius = 16843179; // 0x10101ab field public static final int bottomMedium = 16842958; // 0x10100ce @@ -286,7 +286,7 @@ package android { field public static final int cacheColorHint = 16843009; // 0x1010101 field public static final int calendarViewShown = 16843596; // 0x101034c field public static final int calendarViewStyle = 16843613; // 0x101035d - field public static final int canRetrieveWindowContent = 16843652; // 0x1010384 + field public static final int canRetrieveWindowContent = 16843651; // 0x1010383 field public static final int candidatesTextStyleSpans = 16843312; // 0x1010230 field public static final deprecated int capitalize = 16843113; // 0x1010169 field public static final int centerBright = 16842956; // 0x10100cc @@ -315,18 +315,18 @@ package android { field public static final int codes = 16843330; // 0x1010242 field public static final int collapseColumns = 16843083; // 0x101014b field public static final int color = 16843173; // 0x10101a5 - field public static final int colorActivatedHighlight = 16843677; // 0x101039d + field public static final int colorActivatedHighlight = 16843676; // 0x101039c field public static final int colorBackground = 16842801; // 0x1010031 field public static final int colorBackgroundCacheHint = 16843435; // 0x10102ab - field public static final int colorFocusedHighlight = 16843676; // 0x101039c + field public static final int colorFocusedHighlight = 16843675; // 0x101039b field public static final int colorForeground = 16842800; // 0x1010030 field public static final int colorForegroundInverse = 16843270; // 0x1010206 - field public static final int colorLongPressedHighlight = 16843675; // 0x101039b - field public static final int colorMultiSelectHighlight = 16843678; // 0x101039e - field public static final int colorPressedHighlight = 16843674; // 0x101039a - field public static final int columnCount = 16843636; // 0x1010374 + field public static final int colorLongPressedHighlight = 16843674; // 0x101039a + field public static final int colorMultiSelectHighlight = 16843677; // 0x101039d + field public static final int colorPressedHighlight = 16843673; // 0x1010399 + field public static final int columnCount = 16843635; // 0x1010373 field public static final int columnDelay = 16843215; // 0x10101cf - field public static final int columnOrderPreserved = 16843637; // 0x1010375 + field public static final int columnOrderPreserved = 16843636; // 0x1010374 field public static final int columnWidth = 16843031; // 0x1010117 field public static final int compatibleWidthLimitDp = 16843621; // 0x1010365 field public static final int completionHint = 16843122; // 0x1010172 @@ -380,11 +380,11 @@ package android { field public static final int drawSelectorOnTop = 16843004; // 0x10100fc field public static final int drawable = 16843161; // 0x1010199 field public static final int drawableBottom = 16843118; // 0x101016e - field public static final int drawableEnd = 16843680; // 0x10103a0 + field public static final int drawableEnd = 16843679; // 0x101039f field public static final int drawableLeft = 16843119; // 0x101016f field public static final int drawablePadding = 16843121; // 0x1010171 field public static final int drawableRight = 16843120; // 0x1010170 - field public static final int drawableStart = 16843679; // 0x101039f + field public static final int drawableStart = 16843678; // 0x101039e field public static final int drawableTop = 16843117; // 0x101016d field public static final int drawingCacheQuality = 16842984; // 0x10100e8 field public static final int dropDownAnchor = 16843363; // 0x1010263 @@ -441,7 +441,7 @@ package android { field public static final int fastScrollTextColor = 16843609; // 0x1010359 field public static final int fastScrollThumbDrawable = 16843574; // 0x1010336 field public static final int fastScrollTrackDrawable = 16843577; // 0x1010339 - field public static final int feedbackCount = 16843664; // 0x1010390 + field public static final int feedbackCount = 16843663; // 0x101038f field public static final int fillAfter = 16843197; // 0x10101bd field public static final int fillBefore = 16843196; // 0x10101bc field public static final int fillEnabled = 16843343; // 0x101024f @@ -494,7 +494,7 @@ package android { field public static final int hand_hour = 16843011; // 0x1010103 field public static final int hand_minute = 16843012; // 0x1010104 field public static final int handle = 16843354; // 0x101025a - field public static final int handleDrawable = 16843654; // 0x1010386 + field public static final int handleDrawable = 16843653; // 0x1010385 field public static final int handleProfiling = 16842786; // 0x1010022 field public static final int hapticFeedbackEnabled = 16843358; // 0x101025e field public static final int hardwareAccelerated = 16843475; // 0x10102d3 @@ -503,12 +503,12 @@ package android { field public static final int headerDividersEnabled = 16843310; // 0x101022e field public static final int height = 16843093; // 0x1010155 field public static final int hint = 16843088; // 0x1010150 - field public static final int hitRadius = 16843661; // 0x101038d + field public static final int hitRadius = 16843660; // 0x101038c field public static final int homeAsUpIndicator = 16843531; // 0x101030b field public static final int homeLayout = 16843549; // 0x101031d field public static final int horizontalDivider = 16843053; // 0x101012d field public static final int horizontalGap = 16843327; // 0x101023f - field public static final int horizontalOffset = 16843666; // 0x1010392 + field public static final int horizontalOffset = 16843665; // 0x1010391 field public static final int horizontalScrollViewStyle = 16843603; // 0x1010353 field public static final int horizontalSpacing = 16843028; // 0x1010114 field public static final int host = 16842792; // 0x1010028 @@ -554,7 +554,7 @@ package android { field public static final int installLocation = 16843447; // 0x10102b7 field public static final int interpolator = 16843073; // 0x1010141 field public static final int isAlwaysSyncable = 16843571; // 0x1010333 - field public static final int isAuxiliary = 16843646; // 0x101037e + field public static final int isAuxiliary = 16843645; // 0x101037d field public static final int isDefault = 16843297; // 0x1010221 field public static final int isIndicator = 16843079; // 0x1010147 field public static final int isModifier = 16843334; // 0x1010246 @@ -607,8 +607,8 @@ package android { field public static final int layout_centerInParent = 16843151; // 0x101018f field public static final int layout_centerVertical = 16843153; // 0x1010191 field public static final int layout_column = 16843084; // 0x101014c - field public static final deprecated int layout_columnFlexibility = 16843644; // 0x101037c - field public static final int layout_columnSpan = 16843643; // 0x101037b + field public static final deprecated int layout_columnFlexibility = 16843643; // 0x101037b + field public static final int layout_columnSpan = 16843642; // 0x101037a field public static final int layout_gravity = 16842931; // 0x10100b3 field public static final int layout_height = 16842997; // 0x10100f5 field public static final int layout_margin = 16842998; // 0x10100f6 @@ -616,9 +616,9 @@ package android { field public static final int layout_marginLeft = 16842999; // 0x10100f7 field public static final int layout_marginRight = 16843001; // 0x10100f9 field public static final int layout_marginTop = 16843000; // 0x10100f8 - field public static final int layout_row = 16843640; // 0x1010378 - field public static final deprecated int layout_rowFlexibility = 16843642; // 0x101037a - field public static final int layout_rowSpan = 16843641; // 0x1010379 + field public static final int layout_row = 16843639; // 0x1010377 + field public static final deprecated int layout_rowFlexibility = 16843641; // 0x1010379 + field public static final int layout_rowSpan = 16843640; // 0x1010378 field public static final int layout_scale = 16843155; // 0x1010193 field public static final int layout_span = 16843085; // 0x101014d field public static final int layout_toLeftOf = 16843138; // 0x1010182 @@ -628,7 +628,7 @@ package android { field public static final int layout_x = 16843135; // 0x101017f field public static final int layout_y = 16843136; // 0x1010180 field public static final int left = 16843181; // 0x10101ad - field public static final int leftChevronDrawable = 16843655; // 0x1010387 + field public static final int leftChevronDrawable = 16843654; // 0x1010386 field public static final int lineSpacingExtra = 16843287; // 0x1010217 field public static final int lineSpacingMultiplier = 16843288; // 0x1010218 field public static final int lines = 16843092; // 0x1010154 @@ -640,8 +640,8 @@ package android { field public static final int listDividerAlertDialog = 16843525; // 0x1010305 field public static final int listPopupWindowStyle = 16843519; // 0x10102ff field public static final int listPreferredItemHeight = 16842829; // 0x101004d - field public static final int listPreferredItemHeightLarge = 16843667; // 0x1010393 - field public static final int listPreferredItemHeightSmall = 16843668; // 0x1010394 + field public static final int listPreferredItemHeightLarge = 16843666; // 0x1010392 + field public static final int listPreferredItemHeightSmall = 16843667; // 0x1010393 field public static final int listSelector = 16843003; // 0x10100fb field public static final int listSeparatorTextViewStyle = 16843272; // 0x1010208 field public static final int listViewStyle = 16842868; // 0x1010074 @@ -672,8 +672,8 @@ package android { field public static final int minHeight = 16843072; // 0x1010140 field public static final int minLevel = 16843185; // 0x10101b1 field public static final int minLines = 16843094; // 0x1010156 - field public static final int minResizeHeight = 16843683; // 0x10103a3 - field public static final int minResizeWidth = 16843682; // 0x10103a2 + field public static final int minResizeHeight = 16843682; // 0x10103a2 + field public static final int minResizeWidth = 16843681; // 0x10103a1 field public static final int minSdkVersion = 16843276; // 0x101020c field public static final int minWidth = 16843071; // 0x101013f field public static final int mode = 16843134; // 0x101017e @@ -689,7 +689,7 @@ package android { field public static final int nextFocusUp = 16842979; // 0x10100e3 field public static final int noHistory = 16843309; // 0x101022d field public static final int normalScreens = 16843397; // 0x1010285 - field public static final int notificationTimeout = 16843650; // 0x1010382 + field public static final int notificationTimeout = 16843649; // 0x1010381 field public static final int numColumns = 16843032; // 0x1010118 field public static final int numStars = 16843076; // 0x1010144 field public static final deprecated int numeric = 16843109; // 0x1010165 @@ -703,11 +703,11 @@ package android { field public static final int orderingFromXml = 16843239; // 0x10101e7 field public static final int orientation = 16842948; // 0x10100c4 field public static final int outAnimation = 16843128; // 0x1010178 - field public static final int outerRadius = 16843660; // 0x101038c + field public static final int outerRadius = 16843659; // 0x101038b field public static final int overScrollFooter = 16843459; // 0x10102c3 field public static final int overScrollHeader = 16843458; // 0x10102c2 field public static final int overScrollMode = 16843457; // 0x10102c1 - field public static final int packageNames = 16843648; // 0x1010380 + field public static final int packageNames = 16843647; // 0x101037f field public static final int padding = 16842965; // 0x10100d5 field public static final int paddingBottom = 16842969; // 0x10100d9 field public static final int paddingLeft = 16842966; // 0x10100d6 @@ -792,17 +792,17 @@ package android { field public static final int restoreAnyVersion = 16843450; // 0x10102ba field public static final deprecated int restoreNeedsApplication = 16843421; // 0x101029d field public static final int right = 16843183; // 0x10101af - field public static final int rightChevronDrawable = 16843656; // 0x1010388 + field public static final int rightChevronDrawable = 16843655; // 0x1010387 field public static final int ringtonePreferenceStyle = 16842899; // 0x1010093 field public static final int ringtoneType = 16843257; // 0x10101f9 field public static final int rotation = 16843558; // 0x1010326 field public static final int rotationX = 16843559; // 0x1010327 field public static final int rotationY = 16843560; // 0x1010328 - field public static final int rowCount = 16843634; // 0x1010372 + field public static final int rowCount = 16843633; // 0x1010371 field public static final int rowDelay = 16843216; // 0x10101d0 field public static final int rowEdgeFlags = 16843329; // 0x1010241 field public static final int rowHeight = 16843058; // 0x1010132 - field public static final int rowOrderPreserved = 16843635; // 0x1010373 + field public static final int rowOrderPreserved = 16843634; // 0x1010372 field public static final int saveEnabled = 16842983; // 0x10100e7 field public static final int scaleGravity = 16843262; // 0x10101fe field public static final int scaleHeight = 16843261; // 0x10101fd @@ -868,7 +868,7 @@ package android { field public static final int smallIcon = 16843422; // 0x101029e field public static final int smallScreens = 16843396; // 0x1010284 field public static final int smoothScrollbar = 16843313; // 0x1010231 - field public static final int snapMargin = 16843663; // 0x101038f + field public static final int snapMargin = 16843662; // 0x101038e field public static final int soundEffectsEnabled = 16843285; // 0x1010215 field public static final int spacing = 16843027; // 0x1010113 field public static final int spinnerDropDownItemStyle = 16842887; // 0x1010087 @@ -916,7 +916,7 @@ package android { field public static final int subtitleTextStyle = 16843513; // 0x10102f9 field public static final int suggestActionMsg = 16843228; // 0x10101dc field public static final int suggestActionMsgColumn = 16843229; // 0x10101dd - field public static final int suggestionsEnabled = 16843633; // 0x1010371 + field public static final int suggestionsEnabled = 16843632; // 0x1010370 field public static final int summary = 16843241; // 0x10101e9 field public static final int summaryColumn = 16843426; // 0x10102a2 field public static final int summaryOff = 16843248; // 0x10101f0 @@ -933,7 +933,7 @@ package android { field public static final int tag = 16842961; // 0x10100d1 field public static final int targetActivity = 16843266; // 0x1010202 field public static final int targetClass = 16842799; // 0x101002f - field public static final int targetDrawables = 16843653; // 0x1010385 + field public static final int targetDrawables = 16843652; // 0x1010384 field public static final int targetPackage = 16842785; // 0x1010021 field public static final int targetSdkVersion = 16843376; // 0x1010270 field public static final int taskAffinity = 16842770; // 0x1010012 @@ -948,7 +948,7 @@ package android { field public static final int tension = 16843370; // 0x101026a field public static final int testOnly = 16843378; // 0x1010272 field public static final int text = 16843087; // 0x101014f - field public static final int textAllCaps = 16843673; // 0x1010399 + field public static final int textAllCaps = 16843672; // 0x1010398 field public static final int textAppearance = 16842804; // 0x1010034 field public static final int textAppearanceButton = 16843271; // 0x1010207 field public static final int textAppearanceInverse = 16842805; // 0x1010035 @@ -989,8 +989,7 @@ package android { field public static final int textEditPasteWindowLayout = 16843540; // 0x1010314 field public static final int textEditSideNoPasteWindowLayout = 16843615; // 0x101035f field public static final int textEditSidePasteWindowLayout = 16843614; // 0x101035e - field public static final int textEditSuggestionItemLayout = 16843632; // 0x1010370 - field public static final int textEditSuggestionsWindowLayout = 16843631; // 0x101036f + field public static final int textEditSuggestionItemLayout = 16843631; // 0x101036f field public static final int textFilterEnabled = 16843007; // 0x10100ff field public static final int textIsSelectable = 16843542; // 0x1010316 field public static final int textOff = 16843045; // 0x1010125 @@ -1023,7 +1022,7 @@ package android { field public static final int toYScale = 16843205; // 0x10101c5 field public static final int top = 16843182; // 0x10101ae field public static final int topBright = 16842955; // 0x10100cb - field public static final int topChevronDrawable = 16843657; // 0x1010389 + field public static final int topChevronDrawable = 16843656; // 0x1010388 field public static final int topDark = 16842951; // 0x10100c7 field public static final int topLeftRadius = 16843177; // 0x10101a9 field public static final int topOffset = 16843352; // 0x1010258 @@ -1039,7 +1038,7 @@ package android { field public static final 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 useDefaultMargins = 16843638; // 0x1010376 + field public static final int useDefaultMargins = 16843637; // 0x1010375 field public static final int useIntrinsicSizeAsMinimum = 16843536; // 0x1010310 field public static final int useLevel = 16843167; // 0x101019f field public static final int userVisible = 16843409; // 0x1010291 @@ -1053,10 +1052,10 @@ package android { field public static final int verticalCorrection = 16843322; // 0x101023a field public static final int verticalDivider = 16843054; // 0x101012e field public static final int verticalGap = 16843328; // 0x1010240 - field public static final int verticalOffset = 16843665; // 0x1010391 + field public static final int verticalOffset = 16843664; // 0x1010390 field public static final int verticalScrollbarPosition = 16843572; // 0x1010334 field public static final int verticalSpacing = 16843029; // 0x1010115 - field public static final int vibrationDuration = 16843662; // 0x101038e + field public static final int vibrationDuration = 16843661; // 0x101038d field public static final int visibility = 16842972; // 0x10100dc field public static final int visible = 16843156; // 0x1010194 field public static final int vmSafeMode = 16843448; // 0x10102b8 @@ -1073,7 +1072,7 @@ package android { field public static final int wallpaperIntraOpenExitAnimation = 16843416; // 0x1010298 field public static final int wallpaperOpenEnterAnimation = 16843411; // 0x1010293 field public static final int wallpaperOpenExitAnimation = 16843412; // 0x1010294 - field public static final int waveDrawable = 16843659; // 0x101038b + field public static final int waveDrawable = 16843658; // 0x101038a field public static final int webTextViewStyle = 16843449; // 0x10102b9 field public static final int webViewStyle = 16842885; // 0x1010085 field public static final int weekDayTextAppearance = 16843592; // 0x1010348 diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java index a7324b085f9b..127b6a32c3bf 100644 --- a/core/java/android/widget/TextView.java +++ b/core/java/android/widget/TextView.java @@ -329,7 +329,6 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener private int mTextEditPasteWindowLayout, mTextEditSidePasteWindowLayout; private int mTextEditNoPasteWindowLayout, mTextEditSideNoPasteWindowLayout; - private int mTextEditSuggestionsWindowLayout; private int mTextEditSuggestionItemLayout; private SuggestionsPopupWindow mSuggestionsPopupWindow; private SuggestionRangeSpan mSuggestionRangeSpan; @@ -830,10 +829,6 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener mTextEditSideNoPasteWindowLayout = a.getResourceId(attr, 0); break; - case com.android.internal.R.styleable.TextView_textEditSuggestionsWindowLayout: - mTextEditSuggestionsWindowLayout = a.getResourceId(attr, 0); - break; - case com.android.internal.R.styleable.TextView_textEditSuggestionItemLayout: mTextEditSuggestionItemLayout = a.getResourceId(attr, 0); break; @@ -8780,65 +8775,55 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener private class SuggestionsPopupWindow implements OnClickListener { private static final int MAX_NUMBER_SUGGESTIONS = 5; private static final int NO_SUGGESTIONS = -1; - private final PopupWindow mContainer; - private ViewGroup mSuggestionViewGroup; + private final PopupWindow mPopupWindow; + private LinearLayout mSuggestionsContainer; private WordIterator mSuggestionWordIterator; private TextAppearanceSpan[] mHighlightSpans = new TextAppearanceSpan[0]; public SuggestionsPopupWindow() { - mContainer = new PopupWindow(TextView.this.mContext, null, + mPopupWindow = new PopupWindow(TextView.this.mContext, null, com.android.internal.R.attr.textSuggestionsWindowStyle); - mContainer.setSplitTouchEnabled(true); - mContainer.setClippingEnabled(false); - mContainer.setWindowLayoutType(WindowManager.LayoutParams.TYPE_APPLICATION_SUB_PANEL); + mPopupWindow.setWindowLayoutType(WindowManager.LayoutParams.TYPE_APPLICATION_SUB_PANEL); + mPopupWindow.setInputMethodMode(PopupWindow.INPUT_METHOD_NOT_NEEDED); + mPopupWindow.setOutsideTouchable(true); - mContainer.setWidth(ViewGroup.LayoutParams.WRAP_CONTENT); - mContainer.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT); - } + mPopupWindow.setWidth(ViewGroup.LayoutParams.WRAP_CONTENT); + mPopupWindow.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT); - private class SuggestionInfo { - int suggestionStart, suggestionEnd; // range of suggestion item with replacement text - int spanStart, spanEnd; // range in TextView where text should be inserted - SuggestionSpan suggestionSpan; // the SuggestionSpan that this TextView represents - int suggestionIndex; // the index of the suggestion inside suggestionSpan - } + mSuggestionsContainer = new LinearLayout(TextView.this.mContext); + mSuggestionsContainer.setOrientation(LinearLayout.VERTICAL); - private void initSuggestionViewGroup() { - if (mSuggestionViewGroup == null) { - LayoutInflater inflater = (LayoutInflater) TextView.this.mContext. - getSystemService(Context.LAYOUT_INFLATER_SERVICE); + LayoutInflater inflater = (LayoutInflater) TextView.this.mContext. + getSystemService(Context.LAYOUT_INFLATER_SERVICE); - if (inflater == null) { - throw new IllegalArgumentException( - "Unable to create TextEdit suggestion window inflater"); - } + if (inflater == null) { + throw new IllegalArgumentException( + "Unable to create inflater for TextEdit suggestions"); + } - View view = inflater.inflate(mTextEditSuggestionsWindowLayout, null); + // Inflate the suggestion items once and for all. + for (int i = 0; i < MAX_NUMBER_SUGGESTIONS; i++) { + View childView = inflater.inflate(mTextEditSuggestionItemLayout, + mSuggestionsContainer, false); - if (! (view instanceof ViewGroup)) { + if (! (childView instanceof TextView)) { throw new IllegalArgumentException( - "Inflated TextEdit suggestion window is not a ViewGroup: " + view); + "Inflated TextEdit suggestion item is not a TextView: " + childView); } - mSuggestionViewGroup = (ViewGroup) view; - - // Inflate the suggestion items once and for all. - for (int i = 0; i < MAX_NUMBER_SUGGESTIONS; i++) { - View childView = inflater.inflate(mTextEditSuggestionItemLayout, - mSuggestionViewGroup, false); - - if (! (childView instanceof TextView)) { - throw new IllegalArgumentException( - "Inflated TextEdit suggestion item is not a TextView: " + childView); - } + childView.setTag(new SuggestionInfo()); + mSuggestionsContainer.addView(childView); + childView.setOnClickListener(this); + } - childView.setTag(new SuggestionInfo()); - mSuggestionViewGroup.addView(childView); - childView.setOnClickListener(this); - } + mPopupWindow.setContentView(mSuggestionsContainer); + } - mContainer.setContentView(mSuggestionViewGroup); - } + private class SuggestionInfo { + int suggestionStart, suggestionEnd; // range of suggestion item with replacement text + int spanStart, spanEnd; // range in TextView where text should be inserted + SuggestionSpan suggestionSpan; // the SuggestionSpan that this TextView represents + int suggestionIndex; // the index of the suggestion inside suggestionSpan } public void show() { @@ -8849,8 +8834,6 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener SuggestionSpan[] suggestionSpans = spannable.getSpans(pos, pos, SuggestionSpan.class); final int nbSpans = suggestionSpans.length; - initSuggestionViewGroup(); - int totalNbSuggestions = 0; int spanUnionStart = mText.length(); int spanUnionEnd = 0; @@ -8865,7 +8848,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener String[] suggestions = suggestionSpan.getSuggestions(); int nbSuggestions = suggestions.length; for (int suggestionIndex = 0; suggestionIndex < nbSuggestions; suggestionIndex++) { - TextView textView = (TextView) mSuggestionViewGroup.getChildAt( + TextView textView = (TextView) mSuggestionsContainer.getChildAt( totalNbSuggestions); textView.setText(suggestions[suggestionIndex]); SuggestionInfo suggestionInfo = (SuggestionInfo) textView.getTag(); @@ -8885,7 +8868,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener if (totalNbSuggestions == 0) { // TODO Replace by final text, use a dedicated layout, add a fade out timer... - TextView textView = (TextView) mSuggestionViewGroup.getChildAt(0); + TextView textView = (TextView) mSuggestionsContainer.getChildAt(0); textView.setText("No suggestions available"); SuggestionInfo suggestionInfo = (SuggestionInfo) textView.getTag(); suggestionInfo.spanStart = NO_SUGGESTIONS; @@ -8896,22 +8879,22 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); for (int i = 0; i < totalNbSuggestions; i++) { - final TextView textView = (TextView) mSuggestionViewGroup.getChildAt(i); + final TextView textView = (TextView) mSuggestionsContainer.getChildAt(i); highlightTextDifferences(textView, spanUnionStart, spanUnionEnd); } } for (int i = 0; i < totalNbSuggestions; i++) { - mSuggestionViewGroup.getChildAt(i).setVisibility(VISIBLE); + mSuggestionsContainer.getChildAt(i).setVisibility(VISIBLE); } for (int i = totalNbSuggestions; i < MAX_NUMBER_SUGGESTIONS; i++) { - mSuggestionViewGroup.getChildAt(i).setVisibility(GONE); + mSuggestionsContainer.getChildAt(i).setVisibility(GONE); } final DisplayMetrics displayMetrics = mContext.getResources().getDisplayMetrics(); final int screenWidth = displayMetrics.widthPixels; final int screenHeight = displayMetrics.heightPixels; - mSuggestionViewGroup.measure( + mSuggestionsContainer.measure( View.MeasureSpec.makeMeasureSpec(screenWidth, View.MeasureSpec.AT_MOST), View.MeasureSpec.makeMeasureSpec(screenHeight, View.MeasureSpec.AT_MOST)); @@ -9071,11 +9054,11 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener if ((mText instanceof Editable) && mSuggestionRangeSpan != null) { ((Editable) mText).removeSpan(mSuggestionRangeSpan); } - mContainer.dismiss(); + mPopupWindow.dismiss(); } public boolean isShowing() { - return mContainer.isShowing(); + return mPopupWindow.isShowing(); } @Override @@ -9139,7 +9122,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener } void positionAtCursor() { - View contentView = mContainer.getContentView(); + View contentView = mPopupWindow.getContentView(); int width = contentView.getMeasuredWidth(); int height = contentView.getMeasuredHeight(); final int offset = TextView.this.getSelectionStart(); @@ -9173,7 +9156,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener coords[0] = Math.min(displayMetrics.widthPixels - width, coords[0]); coords[0] = Math.max(0, coords[0]); - mContainer.showAtLocation(TextView.this, Gravity.NO_GRAVITY, coords[0], coords[1]); + mPopupWindow.showAtLocation(TextView.this, Gravity.NO_GRAVITY, coords[0], coords[1]); } } diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml index 88ab983e40cd..f6bf76bad8fc 100755 --- a/core/res/res/values/attrs.xml +++ b/core/res/res/values/attrs.xml @@ -711,9 +711,6 @@ - - @@ -3079,9 +3076,6 @@ - - diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml index b2b7025b398d..49c94479e288 100644 --- a/core/res/res/values/public.xml +++ b/core/res/res/values/public.xml @@ -1715,7 +1715,6 @@ - diff --git a/core/res/res/values/styles.xml b/core/res/res/values/styles.xml index 9b6c4424e7f0..b6294636cf25 100644 --- a/core/res/res/values/styles.xml +++ b/core/res/res/values/styles.xml @@ -423,7 +423,6 @@ ?android:attr/textEditNoPasteWindowLayout ?android:attr/textEditSidePasteWindowLayout ?android:attr/textEditSideNoPasteWindowLayout - ?android:attr/textEditSuggestionsWindowLayout ?android:attr/textEditSuggestionItemLayout ?android:attr/textCursorDrawable @@ -1075,14 +1074,10 @@ - - - - - + + diff --git a/core/res/res/values/themes.xml b/core/res/res/values/themes.xml index 93ccfe30412a..8d66b93c3f28 100644 --- a/core/res/res/values/themes.xml +++ b/core/res/res/values/themes.xml @@ -189,8 +189,7 @@ @android:layout/text_edit_no_paste_window @android:layout/text_edit_side_paste_window @android:layout/text_edit_side_no_paste_window - @android:style/Widget.TextSuggestions - @android:layout/text_edit_suggestions_window + @android:style/Widget.TextSuggestionsPopupWindow @android:layout/text_edit_suggestion_item @null @@ -954,7 +953,7 @@ @android:drawable/text_select_handle_right @android:drawable/text_select_handle_middle @android:style/Widget.Holo.TextSelectHandle - @android:style/Widget.Holo.TextSuggestions + @android:style/Widget.Holo.TextSuggestionsPopupWindow @android:drawable/text_cursor_holo_dark @@ -1250,7 +1249,7 @@ @android:drawable/text_select_handle_right @android:drawable/text_select_handle_middle @android:style/Widget.Holo.TextSelectHandle - @android:style/Widget.Holo.TextSuggestions + @android:style/Widget.Holo.Light.TextSuggestionsPopupWindow @android:drawable/text_cursor_holo_light -- 2.11.0