Commit Graph

201 Commits

Author SHA1 Message Date
Wink Saville
26e1a02ba3 Add additional debug for time zone handling.
Change-Id: Ie46bba7e0ef7737a865f7efadbf963c2d14e488f
2012-05-10 16:23:39 -07:00
Fabrice Di Meglio
8396830d8f Merge "Hide RTL related APIs - DO NOT MERGE" into jb-dev 2012-05-04 13:19:41 -07:00
Fabrice Di Meglio
66388dcb09 Hide RTL related APIs - DO NOT MERGE
- fix bug #6441155 API review: @hide RTL layout APIs

Change-Id: I13c5ea5f579cecffed9d517f06180ab0576cd26a
2012-05-04 13:15:12 -07:00
Jeff Sharkey
ac3fcb1590 Reduce persist threshold for lower warning/limit.
Default is 2MB persist threshold, but even that can be substantial
for devices on 100MB/month plans. This change gradually reduces the
persist threshold up to 8x lower (256kb outstanding) based on lowest
active policy.

Bug: 5382676
Change-Id: Ief4e8cdb169bfb151a3d1b45722a8eaa01926508
2012-05-03 12:12:10 -07:00
Fabrice Di Meglio
25ba197fa7 Make public more RTL APIs
- LocaleUtil will help developers to get the layout direction from a Locale

Change-Id: I184ebcc9c208464b20f0454e7a915426640c74f0
2012-03-12 15:44:15 -07:00
Wink Saville
85c738f6ba Merge "If no NITZ information use Country Code to set TimeZone." 2012-03-01 10:28:56 -08:00
Wink Saville
a27421a306 If no NITZ information use Country Code to set TimeZone.
This is not perfect and only works if the CC is known via
the GSM radio and is only accurate if there is one time zone
per country. This does nothing to resolve time zone problems
for wifi only devices.

So this is a partial fix for bug 2896745

Bug: 2896745
Change-Id: I78f013836c4e4870b8b1016a8312f5adbe0d31c9
2012-03-01 10:25:48 -08:00
Fabrice Di Meglio
3fb824bae3 Fix bug #5217606 LocaleUtils constants TEXT_LAYOUT_DIRECTION_LTR_DO_NOT_USE and TEXT_LAYOUT_DIRECTION_RTL_DO_NOT_USE should be renamed
- replace them by the View constants

Change-Id: I7c2bf0213319247d3db369b6f7c36771fdf3e509
2012-02-28 18:08:11 -08:00
Dianne Hackborn
9c1d2980f2 Clean up and expose LongSparseArray.
Change-Id: I15ba98d65e790ba45391cc7714f60b6e7de6ebfc
2012-02-10 13:02:11 -08:00
Dianne Hackborn
d96e3dfa02 Add xxhdpi; fix ActivityManager.getLauncherLargeIconSize() etc.
Change-Id: I519d6cdc527a402d93b98df17a64fc1da52ad598
2012-01-25 15:14:50 -08:00
Robert Greenwalt
470fd72a06 Log netd traffic nicely.
Create a LocalLog class for logging within a service for dumping in dumps.
Use it in the NativeDaemonConnector so we can get some insight into what
is happening in these lockups.

bug:5864209
Change-Id: I68ddc58847f3c8de613be9528570f8c3157d8274
2012-01-20 10:37:11 -08:00
Jeff Brown
e5360fbf3e Rewrite SQLite database wrappers.
The main theme of this change is encapsulation.  This change
preserves all existing functionality but the implementation
is now much cleaner.

Instead of a "database lock", access to the database is treated
as a resource acquisition problem.  If a thread's owns a database
connection, then it can access the database; otherwise, it must
acquire a database connection first, and potentially wait for other
threads to give up theirs.  The SQLiteConnectionPool encapsulates
the details of how connections are created, configured, acquired,
released and disposed.

One new feature is that SQLiteConnectionPool can make scheduling
decisions about which thread should next acquire a database
connection when there is contention among threads.  The factors
considered include wait queue ordering (fairness among peers),
whether the connection is needed for an interactive operation
(unfairness on behalf of the UI), and whether the primary connection
is needed or if any old connection will do.  Thus one goal of the
new SQLiteConnectionPool is to improve the utilization of
database connections.

To emulate some quirks of the old "database lock," we introduce
the concept of the primary database connection.  The primary
database connection is the one that is typically used to perform
write operations to the database.  When a thread holds the primary
database connection, it effectively prevents other threads from
modifying the database (although they can still read).  What's
more, those threads will block when they try to acquire the primary
connection, which provides the same kind of mutual exclusion
features that the old "database lock" had.  (In truth, we
probably don't need to be requiring use of the primary database
connection in as many places as we do now, but we can seek to refine
that behavior in future patches.)

Another significant change is that native sqlite3_stmt objects
(prepared statements) are fully encapsulated by the SQLiteConnection
object that owns them.  This ensures that the connection can
finalize (destroy) all extant statements that belong to a database
connection when the connection is closed.  (In the original code,
this was very complicated because the sqlite3_stmt objects were
managed by SQLiteCompiledSql objects which had different lifetime
from the original SQLiteDatabase that created them.  Worse, the
SQLiteCompiledSql finalizer method couldn't actually destroy the
sqlite3_stmt objects because it ran on the finalizer thread and
therefore could not guarantee that it could acquire the database
lock in order to do the work.  This resulted in some rather
tortured logic involving a list of pending finalizable statements
and a high change of deadlocks or leaks.)

Because sqlite3_stmt objects never escape the confines of the
SQLiteConnection that owns them, we can also greatly simplify
the design of the SQLiteProgram, SQLiteQuery and SQLiteStatement
objects.  They no longer have to wrangle a native sqlite3_stmt
object pointer and manage its lifecycle.  So now all they do
is hold bind arguments and provide a fancy API.

All of the JNI glue related to managing database connections
and performing transactions is now bound to SQLiteConnection
(rather than being scattered everywhere).  This makes sense because
SQLiteConnection owns the native sqlite3 object, so it is the
only class in the system that can interact with the native
SQLite database directly.  Encapsulation for the win.

One particularly tricky part of this change is managing the
ownership of SQLiteConnection objects.  At any given time,
a SQLiteConnection is either owned by a SQLiteConnectionPool
or by a SQLiteSession.  SQLiteConnections should never be leaked,
but we handle that case too (and yell about it with CloseGuard).

A SQLiteSession object is responsible for acquiring and releasing
a SQLiteConnection object on behalf of a single thread as needed.
For example, the session acquires a connection when a transaction
begins and releases it when finished.  If the session cannot
acquire a connection immediately, then the requested operation
blocks until a connection becomes available.

SQLiteSessions are thread-local.  A SQLiteDatabase assigns a
distinct session to each thread that performs database operations.
This is very very important.  First, it prevents two threads
from trying to use the same SQLiteConnection at the same time
(because two threads can't share the same session).
Second, it prevents a single thread from trying to acquire two
SQLiteConnections simultaneously from the same database (because
a single thread can't have two sessions for the same database which,
in addition to being greedy, could result in a deadlock).

There is strict layering between the various database objects,
objects at lower layers are not aware of objects at higher layers.
Moreover, objects at higher layers generally own objects at lower
layers and are responsible for ensuring they are properly disposed
when no longer needed (good for the environment).

API layer: SQLiteDatabase, SQLiteProgram, SQLiteQuery, SQLiteStatement.
Session layer: SQLiteSession.
Connection layer: SQLiteConnectionPool, SQLiteConnection.
Native layer: JNI glue.

By avoiding cyclic dependencies between layers, we make the
architecture much more intelligible, maintainable and robust.

Finally, this change adds a great deal of new debugging information.
It is now possible to view a list of the most recent database
operations including how long they took to run using
"adb shell dumpsys dbinfo".  (Because most of the interesting
work happens in SQLiteConnection, it is easy to add debugging
instrumentation to track all database operations in one place.)

Change-Id: Iffb4ce72d8bcf20b4e087d911da6aa84d2f15297
2012-01-12 14:56:18 -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
Svetoslav Ganov
f3b4f3163b resolved conflicts for merge of 26f7a81f to master
Change-Id: I6bf5fd7c0de7945cef84602dbe3a7bbed587700f
2011-11-30 18:34:56 -08:00
Svetoslav Ganov
d116d7c78a Fixing memory leaks in the accessiiblity layer.
1. AccessibilityInteractionConnections were removed from the
   AccessiiblityManagerService but their DeathRecipents were
   not unregistered, thus every removed interaction connection
   was essentially leaking. Such connection is registered in
   the system for every ViewRootImpl when accessiiblity is
   enabled and inregistered when disabled.

2. Every AccessibilityEvent and AccessiilbityEventInfo obtained
   from a widnow content querying accessibility service had a
   handle to a binder proxy over which to make queries. Hoewever,
   holding a proxy to a remote binder prevents the latter from
   being garbage collected. Therefore, now the events and infos
   have a connection id insteand and the hindden singleton
   AccessiiblityInteaction client via which queries are made
   has a registry with the connections. This class looks up
   the connection given its id before making an IPC. Now the
   connection is stored in one place and when an accessibility
   service is disconnected the system sets the connection to
   null so the binder object in the system process can be GCed.
   Note that before this change a bad implemented accessibility
   service could cache events or infos causing a leak in the
   system process. This should never happen.

3. SparseArray was not clearing the reference to the last moved
   element while garbage collecting thus causing a leak.

bug:5664337

Change-Id: Id397f614b026d43bd7b57bb7f8186bca5cdfcff9
2011-11-29 18:51:30 -08:00
Jesse Wilson
02db1b6c00 Add a link from LruCache to the Android support package (compatibility library).
Change-Id: Ibd16410856cd8a0a991b4a403fedd9ac4e1ecaad
2011-11-17 13:40:01 -05:00
Svetoslav Ganov
021078554b Adding APIs to enable reporting virtual view hierarchies to accessibility serivces.
Added an interface that is the contract for a client to expose a virtual
view hierarchy to accessibility services. Clients impement this interface
and set it in the View that is the root of the virtual sub-tree. Adding
this finctionality via compostion as opposed to inheritance enables apps
to maintain backwards compatibility by setting the accessibility virtual
hierarchy provider on the View only if the API version is high enough.

bug:5382859

Change-Id: I7e3927b71a5517943c6cb071be2e87fba23132bf
2011-10-21 11:45:44 -07:00
Fabrice Di Meglio
7810b5f8cf Fix bug #5199577 TextView with android:password="true" is showing the "dots" on the left even if the password chars are RTL
- force TextView to LOCALE text heuristic when in "password" mode
- remove TEXT_LAYOUT_DIRECTION_UNKNOWN_DO_NOT_USE
- LocaleUtils.getLayoutDirectionFromLocale() returns "LTR" is locale is NULL or ROOT

Change-Id: I182c46aaf2d73c8b18967fffa230bfabec91ed06
2011-08-25 18:43:37 -07:00
Xavier Ducrohet
7f9f99ea11 Make some methods/fields package private so that layoutlib can access them.
Change-Id: I4aeadfbaf8a4f6a459fa19937c21ac23d9e5fb64
2011-08-11 12:57:51 -07:00
Jesse Wilson
d1ad3c2c3a Fix benign off-by-one in JsonReader.
The bug would have caused us to call fillBuffer() earlier than
necessary.

Change-Id: Ib0e4e54019394d7085913faf90c495d130e8bb75
2011-07-22 09:01:48 -07:00
Jesse Wilson
7a2c813d30 Skip byte order mark (BOM) in JsonReader
Bug: http://code.google.com/p/android/issues/detail?id=18508
Change-Id: I7652080d9ab475c75d0a811a6e2ede4975ebe063
2011-07-20 12:23:23 -07:00
Shimeng (Simon) Wang
ba6e855453 Merge "Add in i18n TLDs and new TLDs to the URL RegEx matcher." 2011-07-19 10:31:52 -07:00
Shimeng (Simon) Wang
52fc810f73 Add in i18n TLDs and new TLDs to the URL RegEx matcher.
also update APIs.

issue: 4384739
Change-Id: I946323d80f85fe43338fdc19c5858356faefa6cc
2011-07-19 10:20:49 -07:00
Bart Sears
07229314af Merge "Revert "Add in i18n TLDs and new TLDs to the URL RegEx matcher."" 2011-07-18 19:45:33 -07:00
Bart Sears
89006fa55c Revert "Add in i18n TLDs and new TLDs to the URL RegEx matcher."
This reverts commit 6050cf65db
2011-07-18 19:43:07 -07:00
Shimeng (Simon) Wang
35ca86d8a4 Merge "Add in i18n TLDs and new TLDs to the URL RegEx matcher." 2011-07-18 18:04:51 -07:00
Shimeng (Simon) Wang
6050cf65db Add in i18n TLDs and new TLDs to the URL RegEx matcher.
issue: 4384739
Change-Id: I96f2263d9a14fc2560583e2719cf7c5ac5c46d9e
2011-07-18 17:24:14 -07:00
Dianne Hackborn
822036d00e Merge "Fix issue # 5017868: Twitter crashes on start:" 2011-07-18 16:03:08 -07:00
Jesse Wilson
a11c2f8674 Merge "Track line and column when parsing JSON." 2011-07-18 14:39:39 -07:00
Jesse Wilson
febae4ed18 Track line and column when parsing JSON.
This is a prerequisite to skipping the BOM if it exists.
Bug: http://code.google.com/p/android/issues/detail?id=18508

Change-Id: I38b1c46f246d8526fa20859b50ca3e25c9f9b9d1
2011-07-18 14:37:22 -07:00
Jesse Wilson
1a1d731c9c Merge "Always escape chars that JavaScript treats as newlines." 2011-07-18 14:27:31 -07:00
Dianne Hackborn
78f80b4e71 Fix issue # 5017868: Twitter crashes on start:
unable to resolve static field 106 (DEBUG) in Landroid/util/Config

Config was removed, but apparently some apps are actually using it.
Put it back.

Change-Id: Iebcb94b1158abc5e8c3dd9855068d2e9223d8999
2011-07-18 13:20:04 -07:00
Jesse Wilson
0fc0edfd27 Always escape chars that JavaScript treats as newlines.
Related GSON Bug: http://code.google.com/p/google-gson/issues/detail?id=341
Change-Id: I41b1615c4b3b4526f2223a75191f9b0699cdda12
2011-07-18 12:56:42 -07:00
Svetoslav Ganov
35bfedeaba Touch exploration separate setting and API to poll the latter state.
1. Seperated touch exploration to be a seperate setting rather being
   magically enabled by the system of accessiiblity is on the there
   is at leas one accessibility service that speaks enabled. Now
   there is a setting for requesting touch exploration but still the
   system will enabled it only if that makes sense i.e. accessibility
   is on and one accessibility service that speaks is enabled.

2. Added public API for checking of touch exploration is enabled.

3. Added description attribute in accessibility service declaration
   which will be shown to the user before enabling the service.

4. Added API for quick cloning of AccessibilityNodeInfo.

5. Added clone functionality to SparseArray, SparseIntArray, and
   SparseBooleanArray.

bug:5034010
bug:5033928

Change-Id: Ia442edbe55c20309244061cd9d24e0545c01b54f
2011-07-18 12:44:08 -07:00
Jeff Sharkey
104344e507 Cached NTP time for system services.
Uses NTP server and timeout from secure settings, or fallback to
defaults in resources.  Update various system services to use cached
NTP time when fresh enough, or force updates as needed.

Bug: 4517273
Change-Id: Ie1c4c4883836013d02ca0bbd850cf8949f93b34b
2011-07-10 14:25:18 -07:00
Dianne Hackborn
2b31d53161 Fix issue #4770360: older app compatibility mode is really tiny on ICS phones
We were applying the density compat mode scaling multiple times to
display metrics, causing bad values.

Change-Id: Iafafd9a5e94b9d774cd2715bf968e91602a1bd82
2011-06-23 12:00:54 -07:00
Romain Guy
bec9be2f51 Merge "Prevent TweetDeck from crashing." 2011-06-16 16:14:06 -07:00
Romain Guy
5d5d1ff2d5 Prevent TweetDeck from crashing.
Change-Id: I964d9152010060c3a2698cdb6c22ac21da1af8b0
2011-06-16 16:13:01 -07:00
Fabrice Di Meglio
c01924f156 Update getLayoutDirectionFromLocale() for using ICU
- now relying on ICU.getScript() and ICU.addLikelySubtags() for getting the locale script
- clean unit tests imports

Change-Id: Icdc45fa78490d1e2dde0e83bca0feea8aa205cdf
2011-06-16 14:40:31 -07:00
Kenny Root
49e3b372ab Fix crash determining direction of invalid locale
The layoutlib is used in the SDK which might not have a default Locale,
so the language string will be some kind of junk. This causes a crash in
the new LocaleUtils

Change-Id: I24e5115c56e39d394dcf89ec6cff609525b3c73e
2011-06-16 02:28:00 -07:00
Fabrice Di Meglio
a47f45e482 Introduce LocalUtil and getLayoutDirectionFromLocale() now use likelySubtags
- move code from Configuration to LocaleUtil
- move unit tests

Change-Id: Ic14b0131894a0c5618f00d4acb3edb0daadefe01
2011-06-15 16:12:32 -07:00
Chet Haase
a2f78a3617 Change Property.set() to throw UnsupportedOperationException by default
Change-Id: I2326e066e0b7ce63cbafe83a3a37b90a3d148c43
2011-06-10 10:07:59 -07:00
Andy McFadden
5732bf6cab Merge "Move CalendarUtils into Calendar app" 2011-06-09 14:07:04 -07:00
Andy McFadden
271c3aee1f Move CalendarUtils into Calendar app
Bug 4575374

Change-Id: I325810002c63a82e712d7505327e77c388564d2c
2011-06-09 13:14:34 -07:00
Chet Haase
accb54c52f Change exception thrown when set() called on readonly Property.
Change-Id: I2669e32691c93dfaf07c34ca4d9fe5c6d47d5480
2011-06-09 08:38:12 -07:00
Chet Haase
b39f051631 Add 'Property' object
This change adds a generic Property facility to the SDK, which allows an
easy way to reference fields (private or otherwise) in a general way.
For example, animations can use this facility to animate 'properties'
on target objects in a way that is more code- and compiler-friendly than
the existing String-based approach (for objects which have implemented
Properties, of course). The animator classes have been updated to use
this new approach (in addition to Strings, which are still more generally
useful for objects which have get/set functions but not Property objects).

The change also includes new Property objects on View (which can now be
used in creating animations on Views).

There is an unrelated change on GLES20RecordingCanvas to change the way we
cache bitmaps, which avoids spurious garbage by using an ArrayList instead of
a HashSet.

Change-Id: I167b43a3fca20e7695b1a23ca81274367539acda
2011-06-08 09:42:37 -07:00
Svetoslav Ganov
8643aa0179 Interrogation of the view hierarchy from an AccessibilityService.
1. Views are represented as AccessibilityNodeInfos to AccessibilityServices.

2. An accessibility service receives AccessibilityEvents and can ask
   for its source and gets an AccessibilityNodeInfo which can be used
   to get its parent and children infos and so on.

3. AccessibilityNodeInfo contains some attributes and actions that
   can be performed on the source.

4. AccessibilityService can request the system to preform an action
   on the source of an AccessibilityNodeInfo.

5. ViewAncestor provides an interaction connection to the
   AccessibiltyManagerService and an accessibility service uses
   its connection to the latter to interact with screen content.

6. AccessibilityService can interact ONLY with the focused window
   and all calls are routed through the AccessibilityManagerService
   which imposes security.

7. Hidden APIs on AccessibilityService can find AccessibilityNodeInfos
   based on some criteria. These API go through the AccessibilityManagerServcie
   for security check.

8. Some actions are hidden and are exposes only to eng builds for UI testing.

Change-Id: Ie34fa4219f350eb3f4f6f9f45b24f709bd98783c
2011-06-06 18:46:03 -07:00
Dianne Hackborn
8a7d44e824 resolved conflicts for merge of 54cb63e2 to master
Change-Id: I5b741a1781e3f76c03fc1534ffce871117effd10
2011-06-02 16:44:52 -07:00
Dianne Hackborn
ed60f81940 resolved conflicts for merge of 76450622 to master
Change-Id: I26ccd8f264e65f100d894f43cf597a781552db83
2011-06-02 09:20:52 -07:00
Dianne Hackborn
b96cbbd11c Add "tv" density for 720p screens.
Change-Id: I028969b007f2fceea66947d77a2ae31ef1d1a630
2011-05-27 13:40:26 -07:00