This change fixes race conditions that occur very regularly when
content providers are accessed from multiple threads at the same
time.
When a content provider is not already in the application's cache,
the application needs to ask the ActivityManager to obtain it.
Meanwhile, another thread can come along and do the same thing.
This can cause problems because the application attempts to
install two copies of the provider and the reference counts
and other bookkeeping can get muddled.
Similarly, there are races between releasing the last reference
to a content provider and acquiring the content provider. It's
possible for one thread to snatch the content provider from the
jaws of death. We need to handle this explicitly to ensure that
the content provider does not accidentally get released right
after it was acquired by the other thread.
This change ensures that the reference count bookkeeping and
provider map are maintained in parallel while holding the same lock.
Previously because the lock was dropped and reacquired in the
middle of acquisition and removal, it was possible for a
content provider with a zero reference count to be returned
to the application. Likewise, it was possible for a content
provider with a non-zero reference count to be disposed!
This change also performs compensatory actions when races are
detected to ensure that the necessary invariants are maintained
throughout. In particular, it ensures that the application
drops a duplicate reference to a content provider when no
longer needed.
Another way to solve this problem would be to explicitly prevent
the races from happening in the first place by maintaining a
table of content providers that are in the process of being
acquired. The first thread to attempt to acquire the provider
would store a record. The next thread would find the record
and block until the first thread was finished. I chose not
to implement the code in that manner because we would still
have needed to perform compensatory actions in the case where
the same provider binder has multiple logical names. Also,
it could cause deadlocks if the attempt to acquire
a content provider were re-entrant for some bizarre reason.
Bug: 5547357
Change-Id: I2ad39a8acc30aaf7ae5354decd0a0a41e9b9c3da
Fix a NullPointerException when sending a single-part SMS containing
characters in one of the enabled national language tables.
Also added a few log messages for several error cases to help with
debugging any future problems in the SMS dispatcher.
Bug: 5553544
Change-Id: I61c1cbe297b2e222027f0db7c833df6a03c2974a
...the "Complete action using" dialog
I have never been able to reproduce this consistently, but here is
another stab in the twilight. It looks like during boot we have
a potential race where we could reset the config sequence number after
we had gone through a config change, causing ActivityThread to ignore
a following config change. Maybe this change will help.
Change-Id: I4b731df5fd5c63894ca2e9bd34693b31ab1c0565
the code that validated EGL objects dereferenced the object
to access its EGLDisplay -- needed for validation (!).
This was wrong for two reasons, first we dereferenced the object
before validating it (potentially leading to a crash), secondly
we didn't validate that the object existed in the right EGLDisplay.
We now use the EGLDisplay passed by the user API.
Change-Id: I66f9e851d4f8507892a6b1fee3065f124c4e7138
Whenever a remote control stack entry is GC'd or removed from
the stack, unlink its death handler.
Change-Id: Ia4ed6667351849fd388272591e24ffc16959beaf
Some countries require phones to show "Emergency calls only" when
roaming on a device with no Sim. This changes causes the phone
to now display the PLMN string on devices that are voice-capable when
the sim is missing. This depends on the PLMN containing the text
"Emergency calls only" when the radio has connectivity to any carrier.
Otherwise, the PLMN is expected be null or empty which will cause the
device to just show "No SIM card."
Change-Id: I7c1d4624ae67074e2ca40161845ca8bb36031c42
Bug: 5533389
Treat layer scrolling as a no-op scroll by calling
onScrollChanged with old scroll == new scroll
Change-Id: I1dc2b94b37c65bf088806b8d28be32883e3b8bee
The existing action bar overlay decor layouts hit a case in
RelativeLayout that causes two measure passes for the main content. As
this can be expensive, stick the bar and the content overlay into
their own sub-layout and switch things to use a FrameLayout at the top
level instead.
Be explicit about the layout_width/height on ActionBar-containing
decor layouts as the older decor layouts are.
Change-Id: I4330f0f25841dd8058b94a320f93bf67fb56bf17
The new NFC Extras access control allows us to run these tests
without a vendor specific certificate.
Change-Id: I9425e08e557214cf6a74276622402c5682bbaef4
This fixes a bug where NfcExecutionEnvironment.close() would NPE
if you called it on a different EE to the one you opened. We now
always return the same EE in the same contet.
Change-Id: I949998dc2ee738527ee281cae46ae50ea6950a2c
This updated tablet layouts to support showing album art and transport
control views in PIN, pattern and password screens of lock screen.
It also allows the addition of a background protect asset and
the ability to show the system wallpaper on layouts that define a
transport_bg_protect view.
Also updated layout to use new ICS-style buttons on lock screen and
fixed bug with "forgot pattern" button where we were showing the
emergency call icon.
To avoid problems with leading ones in the mono-space clock font,
we now right-justify status text on tablet and remove the AM/PM
indicator.
Status font size adjusted by UX.
Added background protection drop shadow to transport control.
Fixed portrait mode to be right-justified when transport is showing.
Change-Id: I790292fc39f4588f87adc9d9241706817ae6baab
Showing a congratulations screen after choosing face unlock backup lock
Once a backup lock has been chosen, it sends an intent to show a
congratulations screen. The moveTempGallery function has been moved
inside this new activity so it is no longer needed in LockPatternUtils.
Change-Id: I66868e6e3391b8b740f618fe633047ce388f55ca
-add videoeditor maximum prefetch YUV frames in media_profiles.xml to limit the total memory usage.
Change-Id: I41ffbc192fcce4c7635e5b0a1f2835852e5ee509
* commit '6200a4b7eb07507055af93ec1a054640a39b9751':
DO NOT MERGE Cherry pick from ics-mr1 - Bug 5275928 - Don't try to open an overflow menu under invalid circumstances.
When audio effects are enabled, a noise can be heard at the
beginning of the new song when skipping to next song in music app.
This is because some effects (especially virtualizer) have a tail.
This tail was not played when previous song was stopped because effects were
not processed when no tracks were present on a given session. This is to
reduce CPU load when effects are enabled but no audio is playing.
The tail was then rendered when the new song was started.
Added a delay before stopping effect process after all tracks have been removed from a session.
Issue 5584880.
Change-Id: I815e0f7441f9302e8dfe413dc269a94e4cc6fd95
The AudioFocus death handler was correctly updating the audio
focus stack when an audio focus client dies, but the death handler
was leaking GREF if unlinkToDeath() is not called.
The fix consists in making sure unlinkToDeath() is always called
by calling it in its finalizer.
Change-Id: I0c5343b4986ab582cadbf171fc53816952dc16f5