Commit Graph

2379 Commits

Author SHA1 Message Date
Romain Guy
530041d319 Add stencil buffer to the EGL config
Change-Id: If76c0cd6127534d90f9526b75c0f8e56259c6722
2012-01-30 12:04:17 -08:00
Chet Haase
0d29936ec3 Fix bug in LayoutTransition for INVISIBLE views
When a view is becoming VISIBLE or INVISIBLE in a container with a
LayoutTransition, animations run to fade the view in and out and also
to run 'changing' animations on the view's other siblings. This logic
also cancels any running 'changin' animations to account for new ones
running.

However, in the specific case of INVISIBLE changes, there will be no
layout changes in the container - layout has already accounted for that
view (unlike in the case of GONE views); the visibility is just a matter of
drawing the view (or not). Therefore, we're canceling 'changing' animations
that should continue running and not replacing them with any other animations,
since new animations would only be started on layout chnages which are not
forthcoming.

One artifact seen from this bug is that the navigation bar buttons sometimes
disappear when changing orientation. This is because the menu button may
toggle between VISIBLE and INVISIBLE, causing animations on the other
buttons to get canceled, which leaves those views in a completely wrong
state.

The right thing to do is to avoid canceling in-process 'changing' animations
and to skip the logic of setting up new 'changing' animations which won't fire
anyway.

There is some minor API work in here because we did not previously have the
necessary information in LayoutTransition to know whether a view was being
hidden or shown to/from the INVISIBLE state.

Issue #5911213: LayoutTransitions ending in an odd state

Change-Id: I5c60c8583c8ea08965727b4ef17b550c40a3882c
2012-01-30 07:53:59 -08:00
Chet Haase
53f2d55740 Fix old issue with compatibility-scaled apps and Animations
Previously, we'd pass in a scale factor (based on whether the app was
being scaled by the compatibility mode) to Animation.getTransformation().
This scales the pivot point of the animation based on thes cale factor.
However, the pivot points were already using information that took the
compatibility mode scale into account. For example, using ABSOLUTE and basing
pixel values on the width/height of the view would give you values relative to the
width/height of the view (pre-scaled). Using RELATIVE_TO_* would use percentages
for the pivot point, again taking the scaling of the view into account. So scaling
the pivot point added in another scale on top of that already being applied.

The net effect was to scale the pivot point in cases where it should not be scale.
For example, setting a pivot point to half-way (.5 and RELATVE_TO_SELF) would
end up with an animation that would pivot around the bottom/right of the view.

The fix is to simply remove the scale factor being passed in; we've already accounted
for it in the pivot point, so we shouldn't concatenate it into the transform
calculated by the animation.

Change-Id: I9daa7581b1b9d0dfb10515e96947160c28c5130e
2012-01-26 12:44:46 -08:00
Gilles Debunne
3f696b264e Merge "Unbalanced batch edit begin and end leave TextView unresponsive" 2012-01-25 15:08:29 -08:00
Fabrice Di Meglio
842e379074 Merge "Update Javadoc for InputConnection.deleteSurroundingText()" 2012-01-25 14:52:40 -08:00
Fabrice Di Meglio
39d23bddef Update Javadoc for InputConnection.deleteSurroundingText()
- give more precision about how the text is considered

Change-Id: Ie2f09bb3338e7dc0e98da0595d1500a6352d09d3
2012-01-25 13:40:27 -08:00
Jamie Gennis
b335fad470 hack up frame latency measurement
Change-Id: I6d9a466a23285304f0e229a5649815636ab5d6af
2012-01-24 15:41:50 -08:00
Fabrice Di Meglio
50aca29a0b Merge "Fix bug # 5863709 API request: Change param names of deleteSurroundingText to "before" and "after"" 2012-01-23 18:59:17 -08:00
Romain Guy
5ff9df6582 Add full support for Canvas.setDrawFilter()
Change-Id: I0ad35d0603c4eeda469014803be14c1dcdde918c
2012-01-23 17:09:05 -08:00
Romain Guy
1e878d2ff5 Fix API typo
Change-Id: Iac6de947b0d550cc8dd4a3b5d88baa322c21bbb8
2012-01-23 15:34:25 -08:00
Fabrice Di Meglio
0c95dd3f4f Fix bug # 5863709 API request: Change param names of deleteSurroundingText to "before" and "after"
Change-Id: I727fad9a59cda915899674569bfabd29b9f5da60
2012-01-23 15:06:42 -08:00
Michael Jurka
5a89672f3e Merge "Remove fastInvalidate and setFast* methods" 2012-01-23 07:24:32 -08:00
Jim Miller
d3fe9abfb9 am ab9601cd: am 230a7092: Merge "Fix 5863053: Add method to lock screen immediately." into ics-mr1
* commit 'ab9601cdbb95ae94088750eff9a926a572c1a4d6':
  Fix 5863053: Add method to lock screen immediately.
2012-01-20 15:48:21 -08:00
Michael Jurka
9e34b95a1d Remove fastInvalidate and setFast* methods
- were only being used by Launcher, and they've been
removed from there too

Change-Id: I230e79c89a6450756220ad5cc07180bb5b725bd6
2012-01-20 07:27:09 -08:00
Romain Guy
bad1216619 Merge "Deprecate unused APIs" 2012-01-19 17:34:26 -08:00
Romain Guy
f9d9c065ed Deprecate unused APIs
Change-Id: I0107e246b632dda96b8b025217936954f1f46283
2012-01-19 17:16:38 -08:00
Romain Guy
a37a108cfb Merge "Add basic code required for drawPicture()" 2012-01-18 18:14:27 -08:00
Romain Guy
75582e889d Add basic code required for drawPicture()
Change-Id: Ib9e73cd4b932836d4debe920200f8d1c1861c2d4
2012-01-18 18:13:35 -08:00
Romain Guy
e7bdf2d9d0 Merge "Don't crash on Canvas.drawPicture()" 2012-01-18 18:11:09 -08:00
Romain Guy
84fce187b0 Don't crash on Canvas.drawPicture()
Implementation yet to come but prevent app crashes.

Change-Id: I81d6851ebf776a98e13c606bab272a03aec406ee
2012-01-18 18:09:54 -08:00
Jim Miller
230a709285 Merge "Fix 5863053: Add method to lock screen immediately." into ics-mr1 2012-01-18 16:44:52 -08:00
Jeff Brown
2a16b13744 Merge "Improve heuristics for orientation detection." 2012-01-18 14:43:16 -08:00
Jim Miller
93c518e4f8 Fix 5863053: Add method to lock screen immediately.
This fixes a bug where the device fails to lock when DevicePolicyManagerService
requests the device to be locked and the screen was off because the user hit
the power button.

The change allows DPMS to directly invoke screen lock, bypasssing the screen state.

Change-Id: Iecdda6fc61e9c519119de495be23c69c3b983921
2012-01-17 18:11:05 -08:00
Romain Guy
fb9ffe0260 Merge "First pass at implementing Canvas.drawPosText() in GL" 2012-01-17 17:40:24 -08:00
Romain Guy
eb9a5367e8 First pass at implementing Canvas.drawPosText() in GL
Change-Id: Ia3ac347e95d57eb86c63045156c8dbc0572b03cb
2012-01-17 17:39:26 -08:00
Svetoslav Ganov
0764dee89c Merge "AccessibilityEvent/AccessibilityNodeInfo class name property should be set to only framework classes." 2012-01-17 17:25:56 -08:00
Jeff Brown
5aa73ae58f Improve heuristics for orientation detection.
1. Except as otherwise indicated, orientation change happens once
   the predicted rotation has been stable for 40ms.  Noise is
   suppressed by a low-pass filter with a 200ms time constant which
   seems to be about as small as is practical given the quality
   of the sensor data.

2. If the magnitude exceeds a threshold (excessive noise or freefall),
   resets the predicted orientation.
   Doesn't happen very often even when shaking the device.
   This heuristic mainly protects the detector from spurious tilt due
   to inaccurate determination of the gravity vector.

3. If the device was previously in a flat posture (on a table for at
   least 1000ms), then it must move out of that posture for at least
   500ms before the next orientation change will happen.
   This heuristic suppresses most spurious rotations that happen while
   picking up the device.

4. If the device is tilted away from the user by 20 degrees within
   a span of 300ms, the device is said to be swinging and at least
   300ms must elapse after the device stops swinging before the
   next orientation change will happen.
   This heuristic suppresses some but not all spurious rotations that
   happen while putting down a device.  Unfortunately, this heuristic
   sometimes triggers a false positive when turning the device very
   rapidly due to accelerometer noise.  The 300ms pause is a compromise
   so that occasional mispredicted swings don't significantly delay
   the rotation.

Bug: 5796249
Change-Id: Id7b36c4c563e35b70d6a7ac36d04f3c3d6ea5811
2012-01-17 17:07:10 -08:00
Michael Jurka
73d27c3d46 Merge "Check if View's alpha must be updated in setter" 2012-01-17 15:05:23 -08:00
Svetoslav Ganov
8a78fd4d95 AccessibilityEvent/AccessibilityNodeInfo class name property should be set to only framework classes.
AccessibilityEvent and AccessibilityNodeInfo have a property className which is set to the source
Java class. This is problematic since leads to leaking private classes which would allow an
accessibility service to load classes from other packages. This is strongly undesirable since
not trusted code can be loaded, and hence executed, in the accessibility service. To address
that the class name is set to the most concrete framework class extended by the info/event
source.

bug:5878943

Change-Id: I7b3114ece8772ea2773f5151e21b8a6f2006882a
2012-01-17 14:51:45 -08:00
Michael Jurka
a7a7eedee5 Check if View's alpha must be updated in setter
Change-Id: I91094b43dbacbd637e04ce4074d8df6a27ddf6fb
2012-01-17 12:41:31 -08:00
Romain Guy
f56945e06a Merge "Improve GLES20Canvas clip support" 2012-01-17 11:30:22 -08:00
Romain Guy
7677d8f006 Improve GLES20Canvas clip support
Remove UnsupportedOperationException
Add primitive support for clipPath/clipRegion
Add support for quickReject(Path, EdgeType)

Change-Id: Ie7a80df7f380f488710bac31103772a9eab21612
2012-01-17 11:22:42 -08:00
Gilles Debunne
185b8256f5 Fixed doc typo and removed warning
Change-Id: I9c9e45837037a77df5852ff4ea3ad596952e4507
2012-01-17 11:12:27 -08:00
Gilles Debunne
c478c171e9 Unbalanced batch edit begin and end leave TextView unresponsive
This is a fix for http://code.google.com/p/android/issues/detail?id=17508

Adding some logs and a forced GC, I'm now reliably able to reproduce it. Here is the scenario.

1. The IME handles an event. It retrieves the current InputConnection (IC) using
   ic = getCurrentInputConnection() and calls ic.beginBatchEdit();
2. The call is propagated to the UI thread and TextView's mBatchEditNesting
   is correctly increased through beginBatchEdit()
3. A listener calls setText(), which imm.restartInput(this);
4. As a result, the InputMethodManager creates a new ControlledInputConnectionWrapper
   with a new InputConnection from the TextView
5. A GC happens at that point. The previous InputConnection is no longeri
   referenced by the InputMethodManager's mServedInputConnection.
   The weak reference in the previous ControlledInputConnectionWrapper is nulled.
6. The IME thread finishes its process and calls ic.endBatchEdit(); on its version
   of the original InputConnection.
7. The message is passed through the InputConnect, but when the weak reference in the
   original IInputConnectionWrapper is dereferenced, we get a null InputConnection in
   executeMessage().
8. As a result, the TextView's endBatchEdit() method is not called, leaving this TextView
   with a non zero mBatchEditNesting.
9. From now on, all edit actions on this TextView will be considered part of a nested edition
   and no invalidation is performed, which is the visible manifestation of this bug.

The core problem is that the begin/end batch edit contract is broken when:
1. These are initiated by the IME thread (as opposed to the UI thread)
2. The input connection is reset between these calls
3. A GC happens in the mean time and the WeakReference is lost (otherwise
   calling endBatchEdit on a no longer active InputConnection is fine

Solution to keep TextView's mBatchEditNesting balanced:

- The IMM should notify the IC when it is no longer used. We're using the
existing FINISH_INPUT_CONNECTION to do that.
- The InputConnection should keep track of its nesting contribution to the TextView.
When finished the IC makes sure its contribution is reset to 0.
Moreover, further asynchonous calls to begin/endBatchEdit that may arrive from the IME
should be ignored. This is achieved using a negative value as a flag.

Notes:

- finishComposingText may be too broad of a method to perform such a cleaning step
but is seems to only be called in cases where the IC will not be used anymore.
If that's too broad, we have to introduce a new method in the IC interface.

- This is has been implemented in EditableInputConnection and not in a more general
BaseInputConnection because this is where we have a notion of TextEdit, and the
nesting problem is here specific to TextView.
However, the same unbalanced begin/end problem will happen in these classes. They
should override finishComposingText as has been done here if that matters.

- We cannot re-use the TextView's mBatchEditNesting since it may take into account
batch edit from various sources and resetting it on InputConnection close could
then lead to an inconsistent negative count value.

Patch Set 2: added synchronized blocks around mBatchEditNesting

Change-Id: I1ec5518fdc16fb0551fbce9d13f5d92eb4bc78c0
2012-01-17 10:52:20 -08:00
Gilles Debunne
893eace609 Merge "Sub display list in TextView" 2012-01-13 14:53:54 -08:00
Dianne Hackborn
f88d1493aa am 10065177: am 2e282f35: Merge "Fix issue #5823276: home repaints after full-screen app is exited" into ics-mr1
* commit '100651779fde99f7ae2a10719d688b51115f08e9':
  Fix issue #5823276: home repaints after full-screen app is exited
2012-01-13 13:01:48 -08:00
Romain Guy
44d79747b5 Remove unused parameter
Change-Id: I0896b2cdb9f1fa9c5e191e4ea425e22ac6f10f29
2012-01-13 12:12:09 -08:00
Ken Wakasa
c8f4183669 Bring LatinIME's privateImeOptions "forceAscii" to a formal public API
bug: 5850605
Change-Id: I6ab6076909c735a3e0729b457de68d0b5301184d
2012-01-13 09:45:41 +09:00
Gilles Debunne
b35ab7b729 Sub display list in TextView
TextView uses a sub-display list to 'cache' the rendering of its
text. This saves time when drawing an editable text, where the blinking
cursor forces a re-draw twice per second, which creates pauses during
scrolling.

Added a sub-display list invalidation when an appearance span is
modified/added/removed.

Also added an invalidation of the display list when selection range
is changed.

Change-Id: I41e8068a12902b8a745c5bb77de8c77def76a270
2012-01-12 15:56:37 -08:00
Dianne Hackborn
01b02a734d Fix issue #5823276: home repaints after full-screen app is exited
Don't consider a window as a candidate for the top fullscreen window
if it is not going to be a candiate for layout.

Also don't consider windows a candidate for layout if their app token
is hidden.  This fixes a transient state where we are preparing to
unhide the window but have not done so yet.

Change-Id: Ife5299ffa003c1df1a4f787b7a2809cbf614ec16
2012-01-12 14:05:03 -08:00
satok
11299b1b8c Make public SpellChecker utilities
Bug: 5639238
Change-Id: Id7dd2263a6305cc6ba0cf8f4d8ad8fb0d39a48ff
2012-01-12 13:54:53 +09:00
Fabrice Di Meglio
7d5178e9fb Merge "Add textDirection="locale"" 2012-01-09 10:46:03 -08:00
Fabrice Di Meglio
4c1e00a8c2 Add textDirection="locale"
- also fix and update unit tests
- see bug #5242821

Change-Id: I29e029bab8ade336a430f9a2a5073caaf11b8dda
2012-01-06 11:29:18 -08:00
Ken Wakasa
9a74476c0a Comment clean up for InputMethodSubtype.
Change-Id: I50bca715f4caa669cb341b36a3d46358e1ad1ded
2012-01-06 12:32:15 +09:00
Chet Haase
0041861a04 Fix behavior of AnimationSet and fillBefore
The previous logic in AnimationSet when starting an animation
ignored the fillBefore behavior of its child animations. This caused
a bug where a delayed AlphaAnimation would automatically cause the
target view to become transparent, even though it was supposed to wait
until after some delay to do so.
The fix checks the fillBefore behavior of each child animation before
concatenating its transform with the transform of the AnimationSet.

Change-Id: I76a2dafbe6dd338dc5281b17612eae87af168d86
2011-12-20 15:56:15 -08:00
Chet Haase
7d4045b3f2 Merge "Make behavior of ABSOLUTE pivot values more intuitive" 2011-12-20 10:49:02 -08:00
Chet Haase
84c949f3b1 Make behavior of ABSOLUTE pivot values more intuitive
Currently, you must call initialize() on RotateAnimation or
ScaleAnimation prior to calling start(). The reason is that the
actual pivot point used in calculating the transform is not set
until that method is called. This makes sense in the typical case
where the animation is running on a View and is using values relative
to the size of the View or of its parent. But if the caller sets the
values to be ABSOLUTE types instead, the sizes of the view and the parent
are irrelevant and the call to initialize() should not be needed (and
is not intuitive).

This fix automatically sets the internal pivot values in the case where
the value types are ABSOLUTE.

Change-Id: I74a0e462486efae08aa76e72c0d19d82f2a2677e
2011-12-20 10:38:31 -08:00
Chet Haase
2d46fcc669 Minor small fixes to old Animation code and docs.
Change-Id: Ib8a1ba2d12e26cc42a2cec48312a5229bb6d4e8a
2011-12-20 07:57:23 -08:00
Chet Haase
d47f1531d0 Make Property objects in View final
The various Properties added to View in 4.0 (ALPHA, TRANSLATION_X, etc.)
were not final, making it possible to assign on property to another.
Not something that someone would want to do, but we should try to prevent
that kind of mess. This API change makes those properties final.

Change-Id: I7d0c7f738eb2074d0781b1ba6a7c19339bac4477
2011-12-16 13:44:01 -08:00
Dianne Hackborn
b5052de757 resolved conflicts for merge of a80bab37 to master
Change-Id: Id71cc68a617e1ea0dd2f3932d454be6dba336eef
2011-12-13 16:31:43 -08:00