Commit Graph

226 Commits

Author SHA1 Message Date
Fabrice Di Meglio
ad31d027ca am 684f1078: am 20586fa0: Merge "Fix bug #7173351 API REVIEW: android.util.LocaleUtil" into jb-mr1-dev
* commit '684f10788707f154e54a614b2d60cc28542aee3a':
  Fix bug #7173351 API REVIEW: android.util.LocaleUtil
2012-09-18 14:59:00 -07:00
Fabrice Di Meglio
20586fa035 Merge "Fix bug #7173351 API REVIEW: android.util.LocaleUtil" into jb-mr1-dev 2012-09-18 14:48:48 -07:00
Fabrice Di Meglio
d3d9f3f100 Fix bug #7173351 API REVIEW: android.util.LocaleUtil
Change-Id: I08fd491eff714059e9ec874fadebe7eb556c34d5
2012-09-18 12:55:32 -07:00
Philip Milne
417e267a75 Merge "Revert "Simple MVC based binding mechanism for android controls." Do not merge." into jb-mr1-dev 2012-09-17 15:47:11 -07:00
Philip Milne
8e1c2b6b71 Revert "Simple MVC based binding mechanism for android controls." Do not merge.
This reverts commit 989709a973.

Change-Id: Ifc2c511b0d99d4a3a164b4a2281ca140015b366d
2012-09-17 14:31:03 -07:00
Jeff Sharkey
e6e6197d7c Actually move to Global settings.
Also add better ConnectivityService logging.

Bug: 7157464
Change-Id: Ia235a7e62ed809240913c4782920c1410c7d597d
2012-09-14 13:47:51 -07:00
Jeff Sharkey
023c05a341 Move to Global.NETSTATS and Global.NTP constants.
Bug: 7157464
Change-Id: Ief10fd37940f62420f5684940994c9f93802e0be
2012-09-14 13:14:21 -07:00
Jeff Sharkey
162fabbcf8 Let Pair represent null values.
Bug: 7121262
Change-Id: I067ea0a4af40a0e8935a9408404df7a2e851e22c
2012-09-06 23:05:11 -07:00
Jeff Brown
a492c3a7b2 Initial draft of high-level multi-display APIs.
This patch introduces the ability to create a Context that
is bound to a Display.  The context gets its configuration and
metrics from that display and is able to provide a WindowManager
that is bound to the display.

To make it easier to use, we also add a new kind of Dialog
called a Presentation.  Presentation takes care of setting
up the context as needed and watches for significant changes
in the display configuration.  If the display is removed,
then the presentation simply dismisses itself.

Change-Id: Idc54b4ec84b1ff91505cfb78910cf8cd09696d7d
2012-08-31 15:42:45 -07:00
Jeff Brown
e2c279e8a1 Add FloatMath.pow.
Change-Id: I5c584f4894caba47fccfa22ba95f8665990d516c
2012-08-21 22:27:41 -07:00
Jeff Brown
1a30b55036 Use spline interpolation for auto-brightness.
Strictly speaking, this is a change in behavior for all products.
Instead of using discrete zones, they will all now use spline
interpolation.  We could make this behavior configurable
but there seems to be little point to it.  The range of brightness
values used will be more or less the same as before, it's just
that what used to be the brightness value for all levels within
a particular zone now becomes the brightness value for the
highest level in that zone and lower values are used for lower
levels within the zone.

Change-Id: I39804ee630ba55f018e1e53c0576b28e7bd27931
2012-08-16 01:45:10 -07:00
Jeff Brown
270e3381e7 Add FloatMath.hypot.
Change-Id: I6a5a7ea2254300614dbbf540f40e39dbec2d2900
2012-08-16 01:30:22 -07:00
Jeff Brown
9630704ed3 Power manager rewrite.
The major goal of this rewrite is to make it easier to implement
power management policies correctly.  According, the new
implementation primarily uses state-based rather than event-based
triggers for applying changes to the current power state.

For example, when an application requests that the proximity
sensor be used to manage the screen state (by way of a wake lock),
the power manager makes note of the fact that the set of
wake locks changed.  Then it executes a common update function
that recalculates the entire state, first looking at wake locks,
then considering user activity, and eventually determining whether
the screen should be turned on or off.  At this point it may
make a request to a component called the DisplayPowerController
to asynchronously update the display's powe state.  Likewise,
DisplayPowerController makes note of the updated power request
and schedules its own update function to figure out what needs
to be changed.

The big benefit of this approach is that it's easy to mutate
multiple properties of the power state simultaneously then
apply their joint effects together all at once.  Transitions
between states are detected and resolved by the update in
a consistent manner.

The new power manager service has is implemented as a set of
loosely coupled components.  For the most part, information
only flows one way through these components (by issuing a
request to that component) although some components support
sending a message back to indicate when the work has been
completed.  For example, the DisplayPowerController posts
a callback runnable asynchronously to tell the PowerManagerService
when the display is ready.  An important feature of this
approach is that each component neatly encapsulates its
state and maintains its own invariants.  Moreover, we do
not need to worry about deadlocks or awkward mutual exclusion
semantics because most of the requests are asynchronous.

The benefits of this design are especially apparent in
the implementation of the screen on / off and brightness
control animations which are able to take advantage of
framework features like properties, ObjectAnimator
and Choreographer.

The screen on / off animation is now the responsibility
of the power manager (instead of surface flinger).  This change
makes it much easier to ensure that the animation is properly
coordinated with other power state changes and eliminates
the cause of race conditions in the older implementation.

The because of the userActivity() function has been changed
so that it never wakes the device from sleep.  This change
removes ambiguity around forcing or disabling user activity
for various purposes.  To wake the device, use wakeUp().
To put it to sleep, use goToSleep().  Simple.

The power manager service interface and API has been significantly
simplified and consolidated.  Also fixed some inconsistencies
related to how the minimum and maximum screen brightness setting
was presented in brightness control widgets and enforced behind
the scenes.

At present the following features are implemented:

- Wake locks.
- User activity.
- Wake up / go to sleep.
- Power state broadcasts.
- Battery stats and event log notifications.
- Dreams.
- Proximity screen off.
- Animated screen on / off transitions.
- Auto-dimming.
- Auto-brightness control for the screen backlight with
  different timeouts for ramping up versus ramping down.
- Auto-on when plugged or unplugged.
- Stay on when plugged.
- Device administration maximum user activity timeout.
- Application controlled brightness via window manager.

The following features are not yet implemented:

- Reduced user activity timeout for the key guard.
- Reduced user activity timeout for the phone application.
- Coordinating screen on barriers with the window manager.
- Preventing auto-rotation during power state changes.
- Auto-brightness adjustment setting (feature was disabled
  in previous version of the power manager service pending
  an improved UI design so leaving it out for now).
- Interpolated brightness control (a proposed new scheme
  for more compactly specifying auto-brightness levels
  in config.xml).
- Button / keyboard backlight control.
- Change window manager to associated WorkSource with
  KEEP_SCREEN_ON_FLAG wake lock instead of talking
  directly to the battery stats service.
- Optionally support animating screen brightness when
  turning on/off instead of playing electron beam animation
  (config_animateScreenLights).

Change-Id: I1d7a52e98f0449f76d70bf421f6a7f245957d1d7
2012-08-15 03:06:24 -07:00
Jeff Brown
5d728bb9ff Add FloatMath.exp.
Change-Id: I7f215e5fd4cb942ddee56eebaef04be565ac79f3
2012-08-08 18:23:53 -07:00
Dianne Hackborn
dde331cebd We can now (kind-of) change screen density on the fly.
Preloaded drawables now have a density associated with them, so we
can load the correct drawable if we are using a different density.

Window manager now formally keeps track of the density for each
screen, allowing it to be overridden like you can already do with
size, and relies on this density to drive itself internally and
the configurations it reports.

There are a new set of Bitmap constructors where you provide a
DisplayMetrics so they can be constructed with the correct density.
(This will be for when you can have different windows in the same
app running at different densities.)

ActivityThread now watches for density changes, and pushes them
to the DENSITY_DEVICE and Bitmap global density values for that
process.

A new am command allows you to change the density.
2012-08-03 17:27:29 -07:00
Jeff Sharkey
6a916ed0c0 Merge "Add trimToSize() to public API." into jb-mr1-dev 2012-08-01 14:34:47 -07:00
Jeff Sharkey
d96b585f5c Add trimToSize() to public API.
Bug: 6602490
Bug: http://code.google.com/p/android/issues/detail?id=35349
Change-Id: Ib3bc7fee05bb0edc375ebee1c40a1d7bd82e2a17
2012-08-01 14:20:04 -07:00
Dianne Hackborn
908aecc3a6 Start moving away from DisplayMetrics.DENSITY_DEVICE.
This puts in most of the infrastructure needed to allow us to
switch between different densities at run time.  The main remaining
uses of the global are to initialize the Bitmap object (not sure
what to do about that since it doesn't have anything passed in
the constructor to get this information from), and being able to
load drawables if we need a different density than what was preloaded
by zygote.

Change-Id: Ifdbfd6b7a5c59e6aa22e63b95b78d96af3d96848
2012-08-01 10:54:39 -07:00
Dianne Hackborn
39606a007a Make AtomicFile a public API. It's about time!
Change-Id: Ib34e294747405b7ab709cb0bbb2d9a0cc80ce86a
2012-07-31 17:54:52 -07:00
Jeff Sharkey
2bbc19ddbb Merge "Avoid emitting broken ASCII." 2012-07-21 12:44:07 -07:00
Jeff Sharkey
eaaf396169 Avoid emitting broken ASCII.
Bug: 6131887
Change-Id: Iff13573aad8128cc7ae3613ab718c81e6d0862a1
2012-07-21 12:39:48 -07:00
Philip Milne
989709a973 Simple MVC based binding mechanism for android controls.
Change-Id: I80fe18e0e15f8a840d558de9863650505bd5fb00
2012-07-20 15:14:45 -07:00
Dianne Hackborn
d80e7fb3f8 am ecf5bc55: am fe54cb6f: Merge "Docs only: DENSITY_TV, not just for TVs any more!" into jb-dev
* commit 'ecf5bc551eddacfb4a4041d614f8fe50672659ae':
  Docs only: DENSITY_TV, not just for TVs any more!
2012-06-19 10:59:18 -07:00
Dianne Hackborn
493861dfa0 Docs only: DENSITY_TV, not just for TVs any more!
Change-Id: Id70e0bc179ab405fbb7f3b2cda7b75f44ff30b57
2012-06-18 19:29:45 -07:00
Wink Saville
0f863886c8 am 85dc303f: am e9aa4b27: Merge "Add additional debug for time zone handling." into jb-dev
* commit '85dc303f80d141d70af9ba2e105c1af49bf9a7ad':
  Add additional debug for time zone handling.
2012-05-10 23:19:57 -07:00
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