Commit Graph

2469 Commits

Author SHA1 Message Date
Philip Milne
c29f031598 Fix for bug 6050753.
The method:

TypedArray: getLayoutDimension(int, String)

throws an undocumented exception when either the width and/or height
attributes are undefined.

See the bug report above for reasons why this was deemed unhelpful both
in the tools area and to developers in general.

Fix by:

1. Documenting the conditions under which the method raises an exception.
2. Deprecating the method, advising callers to supply a default instead.

Additionally, redefine the:

ViewGroup: setBaseAttributes(TypedArray, int, int);

methods to provide the appropriate defaults in ViewGroup subclasses as
advised above.

For the platform layouts the default value is WRAP_CONTENT (and is
defined in the ViewGroup.LayoutParams class). The special cases
are accomodated in LayoutParams subclasses in the following cases:

Subclass				width		height

FrameLayout.LayoutParams: 		MATCH_PARENT, 	MATCH_PARENT
TableLayout.LayoutParams: 		MATCH_PARENT, 	WRAP_CONTENT
TableRow.LayoutParams: 			MATCH_PARENT, 	WRAP_CONTENT

Change-Id: I335a3bd8e2d7f7866692898ed73492635a5b61ea
2012-02-22 18:32:39 -08:00
John Reck
5160e2a197 Add null parent check to startActionMode
Bug: 6012515

Change-Id: I9f684bf0fd314285c4d4933ba2a7645f10c9dc7b
2012-02-22 09:41:25 -08:00
satok
5c9b4329f3 Merge "Refactor sentence level spell checking APIs" 2012-02-21 22:59:12 -08:00
satok
d404fe1105 Refactor sentence level spell checking APIs
Support sentence level spell checking APIs: Step 1

Change-Id: I31c0b88e7885f33a0694ab60b8f2dbceeffe42f1
2012-02-22 15:35:46 +09:00
Svetoslav Ganov
a6cdf86518 Merge "Improving accessibility APIs used for UI automation." 2012-02-21 17:17:33 -08:00
Svetoslav Ganov
0d04e24553 Improving accessibility APIs used for UI automation.
1. UiTestAutomationBridge was accessing the root node in the
   active window by tracking the accessibility event stream
   and keeping the last active window changing event. Now
   the bridge is stateless and the root node is fetched by
   passing special window and view id with the request to
   the system.

2. AccessibilityNodeInfos that are cached were not finished,
   i.e. not sealed, causing exception when trying to access
   their children or rpedecessors.

3. AccessibilityManagerService was not properly restoring its
   state after the UI automation bridge disconnects from it.
   I particular the devices was still in explore by touch mode
   event if no services are enabled and the sutomation bridge
   is disconnected.

4. ViewRootImpl for the focused window now fires accessibility
   events when accessibility is enabled to allow accessibility
   services to determine the current user location.

5. Several missing null checks in ViewRootImpl are fixed since
   there were scenraios in which a NPE can occur.

6. Update the internal window content querying tests.

7. ViewRootImpl was firing one extra focus event.
bug:6009813
bug:6026952

Change-Id: Ib2e058d64538ecc268f9ef7a8f36ead047868a05
2012-02-21 17:09:09 -08:00
Adam Powell
4d6f066b19 Have View call setPressed explicitly instead of just twiddling flags.
This allows apps to override setPressed to reliably observe changes in
pressed state for custom views.

Change-Id: I59f472a9d864f4abcc4f692fef0a13f004348432
2012-02-21 15:13:20 -08:00
Romain Guy
e8585b1721 Correctly offset the dirty bounds by 0.5px in every direction
The existing code was behaving differently for the leaf view and its parents.

Change-Id: I14c1ce5cc149ff840ad957408d6a41bbb4137264
2012-02-17 18:31:31 -08:00
Adam Powell
539ee8716b Add transient state tracking to Views
Transient state is temporary bookkeeping that Views need to perform
that the app should not need to be aware of. Examples include text
selection regions and animation state.

Transient state is a problem for AdapterViews like ListView that do
view recycling. Unless the app takes responsibility for tracking and
restoring transient state as if it were a part of the adapter's data
set, it cannot correctly recycle views. Selections disappear when an
EditText is scrolled out of sight and animations seem to play on the
wrong views.

Views can now flag themselves as having transient state. (As the name
implies, this should be a temporary condition.) If a ViewGroup
contains a child with transient state, that ViewGroup also has
transient state.

AbsListView's recycler now tracks views with transient state
separately. Views with transient state will be retained, and until a
data set change occurs the same view will be reused for that position
instead of calling the adapter's getView() method.

The API to set and check transient state is currently hidden.

Change-Id: Idfd8eaac2c548337686d8d9f98fda4c64be5b8a0
2012-02-17 16:40:24 -08:00
Romain Guy
6917e6550d Merge "Record possible clip rejects when recording display lists" 2012-02-17 15:18:14 -08:00
Romain Guy
33f6beb10f Record possible clip rejects when recording display lists
This optimization allows us to quickly skip operations that lie
entirely outside of the known bounds of a display list. Because
of ViewGroup.setClipChildren, we must keep the operations recorded
in the display list. setClipChildren(false) is however a very
uncommon operation and we will therefore often benefit from this
new optimization.

Change-Id: I0942c864e55298e6dccd9977d15adefbce3ba3ad
2012-02-17 13:10:00 -08:00
Jeff Brown
2bf372888c Merge "Mark input and sensor messages as asynchronous." 2012-02-16 19:49:14 -08:00
Jeff Brown
50eb3b9bf9 Merge "Encapsulate the ViewRootImpl's handler." 2012-02-16 19:43:43 -08:00
Fabrice Di Meglio
101d5aade4 Fix #5050417 Update View class Javadoc for padding start / end
Change-Id: Iec9533616d94e4a738378bafeb1867dd74e53127
2012-02-16 18:36:40 -08:00
Jeff Brown
e0dbd00275 Mark input and sensor messages as asynchronous.
Set a barrier on traversals.

Vsync is still not enabled by default in this patch so there
should be no observable effect from these changes.

Change-Id: Ie12081b95a8f1e81ed686edf747cc62f2e044b7e
2012-02-16 18:19:56 -08:00
Fabrice Di Meglio
30e2fbe0d2 Merge "Improve textDirection APIs" 2012-02-16 16:58:47 -08:00
Romain Guy
add3239ffb Merge "Ensure we always reset graphics modifiers Bug #6025838" 2012-02-16 16:52:53 -08:00
Romain Guy
445c83c775 Ensure we always reset graphics modifiers
Bug #6025838

If a modifier is setup and not reset crashes can occur.

Change-Id: I715524fb46928f1f06499cc1402499ef59f4a050
2012-02-16 16:43:07 -08:00
Fabrice Di Meglio
6d3d5057b4 Improve textDirection APIs
Change-Id: I8bff30f5adb0ab4077145d83ac4a716e04f289ac
2012-02-16 16:42:20 -08:00
Fabrice Di Meglio
069bbe79fb Fix Javadoc for View
Change-Id: Iccae458320273253637017c6f32329150bae479e
2012-02-16 15:49:18 -08:00
Dianne Hackborn
a3b5f6c29b am 804aa297: am 01810bbb: am 06a591cd: Fix last change -- don\'t call startInputInner() with lock held.
* commit '804aa297950949985882e4841303cd6e12fae06e':
  Fix last change -- don't call startInputInner() with lock held.
2012-02-16 14:48:48 -08:00
Fabrice Di Meglio
2367706473 Merge "Add View.onResolvePadding() as a public API" 2012-02-16 14:36:28 -08:00
Dianne Hackborn
06a591cdd6 Fix last change -- don't call startInputInner() with lock held.
Change-Id: Ie7a145c5a07f08ae8a3f5954a1c389bfbd946b69
2012-02-16 10:37:06 -08:00
Justin Ho
9d7b99976f am 09170888: am cc1bd4bb: am c470b2dd: Merge "Part of fixing issue #6006757: Keyboard dismissal lags" into ics-mr1
* commit '09170888cbc501cd9819b1caccc99592bc6dd73f':
  Part of fixing issue #6006757: Keyboard dismissal lags
2012-02-16 09:29:53 -08:00
Jeff Brown
a175a5b7ea Encapsulate the ViewRootImpl's handler.
This change makes it much easier to make sense of the messages that
get posted to the ViewRootImpl's handler by encapsulating their point
of dispatch within the ViewRootImpl itself.

As part of this change, the View.AttachInfo now carries a reference
to the ViewRootImpl itself, which simplifies some code that used
to try to find the ViewRootImpl by getting the root view's parent.

In principle, it might have been nice to hide the ViewRootImpl from
the View hierarchy but in practice the two were coupled in many ways.

Change-Id: I51ebccdf5f8c8c505cd6f17cdf594174d041dc54
2012-02-15 19:32:16 -08:00
Dianne Hackborn
a82ba54b0b Part of fixing issue #6006757: Keyboard dismissal lags
This adjust various paths through InputMethodManager so that the flow
in switching focus from one application to another is cleaner, resulting
in less work being done, resulting in it being able to happen quicker.

Some of the changes here avoid doing stuff when not needed, such as when
we are told to unbind but are not currently the active input.  A big part
is also a change to the flow when a window receives input.  Previously
this would first do a checkFocus() which would tell the input method to
switch focus to whatever view has focus in the window, followed by the
windowGainedFocus() call telling it the window had gained focus.  This
would result in extra work because the input method service would first
handle the focus switch, seeing the IME is currently displayed, so the IME
would remain up and reset its focus to the new view.  The app would
immediately then tell it about the window, causing the service to find out
the IME should be hidden and telling the IME, but the IME couldn't hide
itself until it had first take care of switching its input.

There is the definite potential of this breaking IME showing/hiding in
cases depending on the order things may be relying on them to happen.  I
haven't seen any problems with a brief trip through the UI.

Change-Id: I8494cbd6e19e2ab6db03f2463d9906680dda058b
2012-02-15 18:19:55 -08:00
Romain Guy
f7280ccbfe Merge "Add a compile time condition to remove unnecessary code" 2012-02-15 16:41:29 -08:00
Romain Guy
fe455af277 Add a compile time condition to remove unnecessary code
Change-Id: Ia44916af8e22e548fbb62cb2b53da285d5959102
2012-02-15 16:40:20 -08:00
Fabrice Di Meglio
ccb1562e90 Add View.onResolvePadding() as a public API
- following a comment from Dianne on this CL:

Change-Id: Ifa11d6ac423f205d0684297d25885eac1a89f279
https://android-git.corp.google.com/g/#/c/123009/1
2012-02-15 15:52:19 -08:00
Jeff Brown
57ff581bd9 Merge "Keep the display event receiver around forever." 2012-02-15 15:44:14 -08:00
Jeff Brown
1654d0b8d9 Keep the display event receiver around forever.
There is really no point disposing the display event receiver
anymore.  Moreover, it's hard to choose a good time to do it
since the Choreographer only supports one-shot callbacks now.

So let's made the code simpler.

Bug: 5721047
Change-Id: I8533a54e93a787e0ca30d99a1f1eea85534b13b9
2012-02-15 15:40:52 -08:00
Jeff Brown
c4c0a22ae9 Merge "Simplify Choreographer API." 2012-02-15 15:37:49 -08:00
Jeff Brown
4a06c8008b Simplify Choreographer API.
Removed the listeners and schedule animation / draw methods.
Instead all requests are posted as one-shot callbacks, which is a
better match for how clients actually use the Choreographer.

Bug: 5721047
Change-Id: I113180b2713a300e4444d0d987f52b8157b7ac15
2012-02-15 15:06:01 -08:00
Fabrice Di Meglio
54546f22fb Make MarginLayoutParams startMargin and endMargin API public
Change-Id: I519f8ede818b068883ee1565d28e188298af9f0e
2012-02-15 14:54:48 -08:00
Fabrice Di Meglio
2c884826b2 Make View paddingStart and paddingEnd API public
Change-Id: I39fd987c866e8bfadbaa9a29c0e38b3b7ce03f7e
2012-02-15 13:57:09 -08:00
Romain Guy
cb1abb15a7 Merge "Make it easier to enable dirty regions debugging" 2012-02-15 12:38:05 -08:00
Romain Guy
b04f7e9438 Make it easier to enable dirty regions debugging
adb shell setprop hwui.debug_dirty_regions true

Change-Id: Ifd269c443f5257b1e9c4ea987b134dcf6231106c
2012-02-15 12:36:54 -08:00
Jeff Brown
fef3d62b16 Merge "Add support for posting Runnables to the Choreographer." 2012-02-14 19:41:32 -08:00
Jeff Brown
968588573c Add support for posting Runnables to the Choreographer.
Also clean up the Choreographer so that it doesn't directly extend
Handler and so that it doesn't schedule animation or drawing unless
there are listeners or callbacks attached.

Bug: 5721047
Change-Id: I35350c8d41d4fa3f8c8c7bc43edd82e581b55a68
2012-02-14 19:36:12 -08:00
Svetoslav Ganov
b36a0ac970 Incorrect behavior of View clear focus v2.0.
The framework tries to have a focused view all the time. For
that purpose when a view's focus is cleared the focus is given
to the first focusable found from the top. The implementation
of this behavior was causing the following issues:

1. If the fist focusable View tries to clear its focus it
   was getting focus but the onFocusChange callbacks were not
   properly invoked. Specifically, the onFocusChange for
   gaining focus was called first and then the same
   callback for clearing focus. Note that the callback
   for clearing focus is called when the View is already
   focused.

2. If not the first focusable View tries to clear focus,
   the focus is given to another one but the callback
   for getting focus was called before the one for clearing,
   so client code may be mislead that there is more than
   one focused view at a time.

3. (Nit) The implementaion of clearFocus and unFocus in ViewGroup
   was calling the super implementaion when there is a
   focused child. Since there could be only one focused View,
   having a focused child means that the group is not focused
   and the call to the super implementation is not needed.

4. Added unit tests that verify the correct behavior, i.e.
   the focus of the first focused view cannot be cleared
   which means that no focus change callbacks are invoked.
   The callbacks should be called in expected order.
   Now the view focus clear precedes the view focus gain
   callback. However, in between is invoked the global
   focus change callback with the correct values. We may
   want to call that one after the View callbacks. If
   needed we can revisit this.

Change-Id: I8cfb141c948141703093cf6fa2037be60861cee0
2012-02-14 17:50:51 -08:00
Amith Yamasani
dd29f8c4e3 Merge "Revert "Incorrect behavior of View clear focus."" 2012-02-14 15:52:17 -08:00
Amith Yamasani
73eb97f628 Revert "Incorrect behavior of View clear focus."
This reverts commit c6fd88e213
2012-02-14 15:45:15 -08:00
Fabrice Di Meglio
d7c845c39a Merge "Make textDirection API public" 2012-02-14 14:45:51 -08:00
Chet Haase
bcca79acb1 Refactor animation code in new Draw() method into its own method.
Ongoing cleanup of View drawing code, continuation of drawChild() refactoring.

Change-Id: I6d7383bb858d39ced6917d559defe7713e53de38
2012-02-14 09:16:39 -08:00
Chet Haase
4212d3fc73 Merge "Refactor ViewGroup.drawChild() into View.draw()" 2012-02-14 06:20:16 -08:00
Jeff Brown
a9daa164a5 Merge "Fix possible races in vsync infrastructure." 2012-02-13 20:38:24 -08:00
Jeff Brown
58aedbc9be Fix possible races in vsync infrastructure.
Applications sometimes crashed on exit due to the display event
receiver pipe apparently being closed while still a member of the
Looper's epoll fd set.

This patch fixes a few different possible races related to
the display event receiver lifecycle.

1. The receiver used to play a little dance with the Looper,
registering and unregistering its callback after each vsync
request.  This code was a holdover from a time before the
surface flinger supported one-shot vsync requests, so we can
get rid of it and make things a lot simpler.

2. When the Choreographer is being accessed from outside the UI
thread, it needs to take great care that it does not touch
the display event receiver.  Bad things could happen if the receiver
is handling a vsync event on the Looper and the receiver is
disposed concurrently.

3. It was possible for the Choreographer to attempt to dispose
the receiver while handling a vsync message.  Now we defer disposing
the receiver for a little while, which is also nice because we
may be able to avoid disposing the receiver altogether if we find
that we need it again a little while later.

Bug: 5974105
Change-Id: I77a158f51b0b689af34d07aee4245b969e6260d6
2012-02-13 20:34:38 -08:00
Romain Guy
ccdc6a6acc Merge "New debugging tool in adb shell dumpsys gfxinfo" 2012-02-13 18:03:44 -08:00
Romain Guy
a676ad7e34 New debugging tool in adb shell dumpsys gfxinfo
This tool lets you visualize the time it took, in ms, to:
- Build display lists ("Draw" phase)
- Process display lists ("Process" phase)
- Swap GL buffers ("Execute" phase)

To use this tool:
- adb shell setprop hwui.profile true
- adb shell dumpsys gfxinfo <process name>
- Copy the profile data and paste it in a spreadsheet
- Generate a graph (stacked graph) and enjoy

Change-Id: I7840c0ea0f153550425aa798e3ada2f357688cf5
2012-02-13 17:47:10 -08:00
Fabrice Di Meglio
e7beae3f4c Make textDirection API public
Change-Id: I2d5a0e3a990b9a5b78a3bbc8df7f655702743e4b
2012-02-13 17:21:05 -08:00