117795 Commits

Author SHA1 Message Date
Mårten Kongstad
48d22323ce Runtime resource overlay, iteration 2
Support any number of overlay packages. Support any target package.

UPDATED PACKAGE MATCHING
------------------------
In Runtime resource overlay, iteration 1, only a single overlay package
was considered. Package matching was based on file paths:
/vendor/overlay/system/framework-res.apk corresponded to
/system/framework-res.apk. Introduce a more flexible matching scheme
where any package is an overlay package if its manifest includes

    <overlay targetPackage="com.target.package"/>

For security reasons, an overlay package must fulfill certain criteria
to take effect: see below.

THE IDMAP TOOL AND IDMAP FILES
------------------------------
Idmap files are created by the 'idmap' binary; idmap files must be
present when loading packages. For the Android system, Zygote calls
'idmap' as part of the resource pre-loading. For application packages,
'idmap' is invoked via 'installd' during package installation (similar
to 'dexopt').

UPDATED FLOW
------------
The following is an outline of the start-up sequences for the Android
system and Android apps. Steps marked with '+' are introduced by this
commit.

Zygote initialization
   Initial AssetManager object created
+    idmap --scan creates idmaps for overlays targeting 'android', \
           stores list of overlays in /data/resource-cache/overlays.list
   AssetManager caches framework-res.apk
+  AssetManager caches overlay packages listed in overlays.list

Android boot
   New AssetManager's ResTable acquired
     AssetManager re-uses cached framework-res.apk
+    AssetManager re-uses cached 'android' overlays (if any)

App boot
   ActivityThread prepares AssetManager to load app.apk
+  ActivityThread prepares AssetManager to load app overlays (if any)
   New AssetManager's ResTable acquired as per Android boot

SECURITY
--------
Overlay packages are required to be pre-loaded (in /vendor/overlay).
These packages are trusted by definition. A future iteration of runtime
resource overlay may add support for downloaded overlays, which would
likely require target and overlay signatures match for the overlay to
be trusted.

LOOKUP PRIORITY
---------------
During resource lookup, packages are sequentially queried to provide a
best match, given the constraints of the current configuration. If any
package provide a better match than what has been found so far, it
replaces the previous match. The target package is always queried last.

When loading a package with more than one overlay, the order in which
the overlays are added become significant if several packages overlay
the same resource.

Had downloaded overlays been supported, the install time could have been
used to determine the load order. Regardless, for pre-installed
overlays, the install time is randomly determined by the order in which
the Package Manager locates the packages during initial boot. To support
a well-defined order, pre-installed overlay packages are expected to
define an additional 'priority' attribute in their <overlay> tags:

    <overlay targetPackage="com.target.package" priority="1234"/>

Pre-installed overlays are loaded in order of their priority attributes,
sorted in ascending order.

Assigning the same priority to several overlays targeting the same base
package leads to undefined behaviour. It is the responsibility of the
vendor to avoid this.

The following example shows the ResTable and PackageGroups after loading
an application and two overlays. The resource lookup framework will
query the packages in the order C, B, A.

        +------+------+-     -+------+------+
        | 0x01 |      |  ...  |      | 0x7f |
        +------+------+-     -+------+------+
            |                           |
        "android"                Target package A
                                        |
                       Pre-installed overlay B (priority 1)
                                        |
                       Pre-installed overlay C (priority 2)

Change-Id: If49c963149369b1957f7d2303b3dd27f669ed24e
2014-02-03 11:20:30 +01:00
Mårten Kongstad
65a05fd56d New command line tool 'idmap'
Introduce a new tool 'idmap' to handle generation and verification of
idmap files. The tool is modelled on 'dexopt', and is intended to be
used similarly, notably by 'installd'.
See cmds/idmap/idmap.cpp for further documentation on 'idmap'.

Note: this commit is interdependent on a commit in project build/ to add
'idmap' to PRODUCT_PACKAGES.

Note: the changes to androidfw are only stubs. The actual implementation
will be provided in Runtime resource overlay, iteration 2.

Change-Id: I7131b74ece1e46c8a9c0a31d103e686aa07da2bb
2014-02-03 09:47:16 +01:00
Kenny Root
c064a1b5d9 Merge "Remove DRLCertFactory" 2014-01-31 22:54:44 +00:00
Kenny Root
4f2323106b Remove DRLCertFactory
No longer needed since Conscrypt is the main provider.

Change-Id: Iee741ef376af2de52db79df07e96057438778bc6
2014-01-31 14:10:15 -08:00
Narayan Kamath
49b7ba4dbc Merge "AArch64: Make AssetManager and related classes 64-bit compatible" 2014-01-31 14:35:13 +00:00
Ashok Bhat
896043d67d AArch64: Make AssetManager and related classes 64-bit compatible
Following changes have been done:

[x] Long is used to store native pointers as pointers can be
    64-bit.

[x] AssetManager openAsset native function returned -1 if
    file name was empty and java function considered any
    non-zero value as success. This has been fixed by native
    function throwing Illegal Argument Exception as well.

[x] AssetManager incRefsLocked and decRefsLocked now accept
    long as input to support 64-bit native references.

[x] AssetManager incRefsLocked method incorrecly used
    'this.hashCode()' instead of the passed parameter id.
    This has been fixed.

[x] Some minor changes have been done to conform with
    standard JNI practice (e.g. use of jint instead of int
    in JNI function prototypes)

Change-Id: I095b9f900d49e51f43ad6afc47cbc23116a6a64a
Signed-off-by: Ashok Bhat <ashok.bhat@arm.com>
Signed-off-by: Craig Barber <craig.barber@arm.com>
Signed-off-by: Kévin PETIT <kevin.petit@arm.com>
2014-01-31 14:14:29 +00:00
Narayan Kamath
1cadc07dd1 Merge "Change ResourceType cookies to int32_t." 2014-01-31 14:13:48 +00:00
Narayan Kamath
7c4887f66b Change ResourceType cookies to int32_t.
Also change the order of parameters in ResTable constructors
to avoid ambiguity.

(cherry picked from commit 00b314436f4fdfada4bbf1e79ec12e9fa38aeaf1)

Change-Id: I874c5d03c134dc3c331fba423b5280366296287c
2014-01-31 13:47:27 +00:00
Narayan Kamath
b9f960e094 Merge "Fixed cancel() not working correctly" 2014-01-31 13:20:58 +00:00
Igor Murashkin
e05b7b50e2 Merge "EGL14.eglCreateWindowSurface should set producerControlledByApp" 2014-01-31 01:26:15 +00:00
Zhijun He
0a1b64fe79 Merge "Release locked buffer when it fails to acquire graphics buffer" 2014-01-30 23:01:21 +00:00
Brian Carlstrom
3038046b23 Merge "frameworks/base: Rename persist.sys.dalvik.vm.lib to allow new default" 2014-01-30 21:50:58 +00:00
Brian Carlstrom
c6c633608a frameworks/base: Rename persist.sys.dalvik.vm.lib to allow new default
Bug: 12798969
Change-Id: Ibb7ed86867e4dca53ad7fe33326b08e6f5e664c4
2014-01-30 13:16:48 -08:00
jl1990
3cd12a5155 Fixed cancel() not working correctly
The method handleMessage(Message msg) from mHandler variable was
not checking if the timer was cancelled, so
sendMessageDelayed(obtainMessage(MSG), delay) was keeping the
timer alive. The patch simply adds a boolean and checks if the
CountDownTimer was cancelled before calling
sendMessageDelayed(obtainMessage(MSG), delay)

bug: https://code.google.com/p/android/issues/detail?id=58668

Change-Id: Ic6bbb9d33a3616f8503db222513cc14ad2270cb8
Signed-off-by: jl1990 <jlcarrasco1990@gmail.com>
2014-01-30 13:46:44 +00:00
Narayan Kamath
ab71f8b68f Merge "AArch64: Use of long for pointers in PropertyValuesHolder" 2014-01-30 10:37:12 +00:00
Narayan Kamath
54190ec830 Merge "change Surface constructor arg to 64bit" 2014-01-30 10:31:44 +00:00
Chong Zhang
b215529c72 change Surface constructor arg to 64bit
Bug: 12799017
Bug: 12799384

(cherry picked from commit af608e81d450b962a443a21fb1a6feadeb355fe1)

Change-Id: I8d1471b16e6a6d334a3a32b789045eb171b81e03
2014-01-30 09:50:21 +00:00
Narayan Kamath
c65e0c95c8 Merge "Fix a few more delegate methods in layoutlib." 2014-01-30 09:13:17 +00:00
Nick Kralevich
db3278ab42 Merge "Map SELinux log levels to Android log levels." 2014-01-29 18:00:36 +00:00
Stephen Smalley
e0dda3c8e2 Map SELinux log levels to Android log levels.
Change-Id: I202c543ca6e4110c4011d1904eada4b75b59ff10
Signed-off-by: Stephen Smalley <sds@tycho.nsa.gov>
2014-01-29 12:55:58 -05:00
John Spurlock
d12f4eb8cb Merge "[Navigation bar] Allow "right to left" gesture to launch search panel" 2014-01-29 15:36:40 +00:00
Narayan Kamath
40582000e0 Fix a few more delegate methods in layoutlib.
Change-Id: Icd7069452b9ac66498af69ec705d12c3acd1c848
2014-01-29 15:05:03 +00:00
Narayan Kamath
d228a03891 Merge "mNativeCanvas is long, not int." 2014-01-29 15:02:05 +00:00
Narayan Kamath
e3a6663bb2 mNativeCanvas is long, not int.
swapNativeCanvas was asking for an int field.

Change-Id: I660fb13ecfb5d3b24201676dc03c16d61c92af07
2014-01-29 12:21:32 +00:00
Narayan Kamath
d4ccffd3ba Merge "AArch64: Use long for pointers in graphics/Interpolator" 2014-01-29 12:12:27 +00:00
Narayan Kamath
887b1ca879 Merge "AArch64: Use long for pointers in SurfaceTexture" 2014-01-29 12:12:17 +00:00
Narayan Kamath
dd6de16aee Merge "AArch64: Use long for pointers in DRM classes" 2014-01-29 12:00:28 +00:00
Ashok Bhat
0141e88434 AArch64: Use of long for pointers in PropertyValuesHolder
Long is used in PropertyValuesHolder class to store native pointers
as they can be 64-bit. Note that jmethodID, a pointer to structures,
is also carried in long rather than int to support 64-bit system.

Change-Id: Ifb514fc8473d7c41c0d6194fc6eb85d4816b2cd9
Signed-off-by: Marcus Oakland <marcus.oakland@arm.com>
Signed-off-by: Ashok Bhat <ashok.bhat@arm.com>
2014-01-29 10:47:27 +00:00
Narayan Kamath
50afaefdc0 Merge "AArch64: Make Binder and Parcel 64-bit compatible" 2014-01-29 10:43:23 +00:00
fisherson_lin
10e71e014a [Navigation bar] Allow "right to left" gesture to launch search panel
Symptom: "Bottom to up" gesture can launch search panel in portrait, but "right to left" gesture CANNOT in landscape.
Root Cause: Not handled.
Solution: Set swapXY to handle this in landscape case.

Change-Id: I1793280b3656af6912e6b4583b08e80a0a38e44a
2014-01-29 13:10:41 +08:00
Mark Salyzyn
967c5d00df Merge changes I3659193f,I8b78e4db
* changes:
  jni: Resolve build warnings
  jni: Incorporate liblog reading API
2014-01-28 21:30:40 +00:00
Narayan Kamath
9b0f4be0a2 Merge "Track 64bit changes to android/graphics." 2014-01-28 19:12:33 +00:00
Narayan Kamath
154614abbc Merge "AArch64: Use long for pointers in graphics/Camera" 2014-01-28 19:12:30 +00:00
Narayan Kamath
6e09eb4c67 Merge "AArch64: Make graphics classes 64-bit compatible" 2014-01-28 19:12:17 +00:00
Craig Mautner
baf2c7a400 Merge "[ActivityManager]: Fix the activity visibility state not sync between ActivityManager and WindowManager" 2014-01-28 18:05:31 +00:00
Narayan Kamath
84151432e7 Track 64bit changes to android/graphics.
All pointers are now 64bits wide, so should be
represented as java longs and not ints.

Also changed DelegateManager and SparseWeakArray to
reflect the new world order.

(cherry picked from commit 88a8364c386c694f7ad56662ef89713dbf7c9d63)

Change-Id: Ic2f55dd6235751169c5014f9d2ccf3f544259a87
2014-01-28 17:56:12 +00:00
Ashok Bhat
5753b45516 AArch64: Use long for pointers in graphics/Camera
For storing pointers, long is used in
android/graphics/Camera class, as native
pointers can be 64-bit.

In addition, some minor changes have been done
to conform with standard JNI practice (e.g. use of
jint instead of int in JNI function prototypes)

Change-Id: Ic05ebf2051a225a1638a43f476bab6176c0b5c38
Signed-off-by: Ashok Bhat <ashok.bhat@arm.com>
Signed-off-by: Marcus Oakland <marcus.oakland@arm.com>
2014-01-28 17:53:30 +00:00
Ashok Bhat
a0398430fc AArch64: Make graphics classes 64-bit compatible
Changes in this patch include

[x] Long is used to store native pointers as they can
    be 64-bit.

[x] Some minor changes have been done to conform with
    standard JNI practice (e.g. use of jint instead of int
    in JNI function prototypes)

[x] AssetAtlasManager is not completely 64-bit compatible
    yet. Specifically mAtlasMap member has to be converted
    to hold native pointer using long. Added a TODO to
    AssetAtlasManager.java to indicate the change required.

Change-Id: I940433f601c6db998c1a8ffff338f5361200d5ed
Signed-off-by: Ashok Bhat <ashok.bhat@arm.com>
Signed-off-by: Craig Barber <craig.barber@arm.com>
Signed-off-by: Kévin PETIT <kevin.petit@arm.com>
Signed-off-by: Marcus Oakland <marcus.oakland@arm.com>
2014-01-28 17:40:38 +00:00
louis_chang
d5c91ece7b [ActivityManager]: Fix the activity visibility state not sync between ActivityManager and WindowManager
Symptom:
When press Home key to home screen, user is able to see the activity's window shown on top of wallpaper and below launcher(widgets).

Root Cause:
The ensureActivitiesVisibleLocked() is called pretty often (for example when a new process bound).
If the top activity "B" was finishing, then the previous activity "A" should be visible.
Therefore, the activity "A" window will be set to visible and then launched activity "A", but it does not updates the visible state in ActivityRecord for "A".
There has a timing issue that if a new activity "C" is started, "C" becomes the new top activity and be resumed.
In that case, Activity "A" window will remain visible even if it is behind a full screen activity "C" because the ActivityRecord.visble of "A" is still false, so the window visibility won't be update.
So when user press home key and back to launcher, the surface of activity "A" will be composed on top of wallpaper.

Solution:
Updates ActivityRecord.visible to true for "A". After "C" is started, the "A" will be called WindowManagerService.setAppVisibility() to set invisible, then called onStop() when execute ensureActivitiesVisibleLocked() again.

Change-Id: I536ba04b95d8d274fea6d679a6493e620bc981e2
2014-01-28 18:38:06 +08:00
lina.x.pi
334778981d Release locked buffer when it fails to acquire graphics buffer
The JNI buffer in ImageReader_imageSetup is not released when
it fails to acquire graphics buffer. After all JNI buffers are
exhausted, ACQUIRE_MAX_IMAGES will be returned and leads to
error. The JNI buffer should be released when it fails to acquire
graphics buffer.

Change-Id: I3319a58ac44e36c8593b404672a685c4b589a735
2014-01-28 06:08:52 +00:00
Mark Salyzyn
3ed8e2e679 jni: Resolve build warnings
(cherry picked from commit 087f58dd80e3296a53c6e3c74c089e9a0265f3bd)

Change-Id: I3659193f1ba1ba94561e4684cdb6627880ffc2fa
2014-01-27 15:25:51 -08:00
Mark Salyzyn
7933c2943f jni: Incorporate liblog reading API
(cherry picked from commit e11cbd441df4a1689c89b2ab91b84523c9f2fd10)

Change-Id: I8b78e4db67b6daabb975ce740fb40478df4ffcef
2014-01-27 15:25:09 -08:00
Christopher Tate
1ff4293e33 Merge "Fixed race condition in Spinner.DialogPopup on null reference." 2014-01-27 19:29:56 +00:00
Mathieu Chartier
db52572486 Merge "Fix dest == src bugs in Matrix.cpp." 2014-01-27 17:26:48 +00:00
Narayan Kamath
d5970e9ca3 Merge "AssetManager cookies should be int32_t and not void*." 2014-01-27 11:56:03 +00:00
Narayan Kamath
745d4efc83 AssetManager cookies should be int32_t and not void*.
Cookies are really indices into vectors and arrays, so
they don't need to be void*. We choose int32_t instead
of size_t to allow their width to be well specified.

(cherry picked from commit ebfdd0f467e39c3af8d92cade78263935340acb7)
(cherry picked from commit a7fa2e592e2e579e5acdb903dba83fc074ebc215)
(cherry picked from commit a9d5701b034ed2d9771b3f0943e1add00741d7cd)

Change-Id: I2aed3db568b6fdc487bf99e2c5dd123206736fda
2014-01-27 11:20:24 +00:00
Mathieu Chartier
768480c245 Fix dest == src bugs in Matrix.cpp.
The main bug was that the AutoJavaFloatArray autoSrc was not passing in
read only. This meant that the destructor overwrote the data which
the autoDst AutoJavaFloatArray had written in it's destructor.
This case only happened if src == dest and the arrays were copies.
Also improved performance by passing in read only a few other places.

Bug: 12570144

Change-Id: Idc8764087dc165433c584b87a0f9d4ed0ec795e8
2014-01-25 17:54:22 -08:00
Wink Saville
d1eeb67478 Merge "Telephony: Modify code to check that PUK code length is always 8." 2014-01-25 21:51:34 +00:00
Narayan Kamath
3c30eff63f Merge "Remove unused field from AssetManager." 2014-01-24 09:27:48 +00:00
Selim Gurun
a3106d1dbe Merge "Revert "Adding freeMemoryForTests static method to WebView."" 2014-01-23 22:26:33 +00:00