diff options
| -rw-r--r-- | core/java/android/view/ViewRoot.java | 6 | ||||
| -rw-r--r-- | core/res/res/values/strings.xml | 4 | ||||
| -rw-r--r-- | services/java/com/android/server/PackageManagerService.java | 54 |
3 files changed, 59 insertions, 5 deletions
diff --git a/core/java/android/view/ViewRoot.java b/core/java/android/view/ViewRoot.java index ed83bca73933..bf94707d7839 100644 --- a/core/java/android/view/ViewRoot.java +++ b/core/java/android/view/ViewRoot.java @@ -852,7 +852,11 @@ public final class ViewRoot extends Handler implements ViewParent, } boolean windowShouldResize = mLayoutRequested && windowResizesToFitContent - && (mWidth != host.mMeasuredWidth || mHeight != host.mMeasuredHeight); + && ((mWidth != host.mMeasuredWidth || mHeight != host.mMeasuredHeight) + || (lp.width == ViewGroup.LayoutParams.WRAP_CONTENT && + frame.width() < desiredWindowWidth && frame.width() != mWidth) + || (lp.height == ViewGroup.LayoutParams.WRAP_CONTENT && + frame.height() < desiredWindowHeight && frame.height() != mHeight)); final boolean computesInternalInsets = attachInfo.mTreeObserver.hasComputeInternalInsetsListeners(); diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml index bf7425f1cf33..48d1ad740069 100644 --- a/core/res/res/values/strings.xml +++ b/core/res/res/values/strings.xml @@ -1612,8 +1612,8 @@ <string name="factorytest_reboot">Reboot</string> <!-- Do not translate. WebView User Agent string --> - <string name="web_user_agent"><xliff:g id="x">Mozilla/5.0 (Linux; U; Android %s) - AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17</xliff:g></string> + <string name="web_user_agent" translatable="false"><xliff:g id="x">Mozilla/5.0 (Linux; U; Android %s) + AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1</xliff:g></string> <!-- Title for a JavaScript dialog. "The page at <url of current page> says:" --> <string name="js_dialog_title">The page at \'<xliff:g id="title">%s</xliff:g>\' says:</string> diff --git a/services/java/com/android/server/PackageManagerService.java b/services/java/com/android/server/PackageManagerService.java index b1bd263cdee5..b1b4028e5cd2 100644 --- a/services/java/com/android/server/PackageManagerService.java +++ b/services/java/com/android/server/PackageManagerService.java @@ -954,7 +954,20 @@ class PackageManagerService extends IPackageManager.Stub { + ((SystemClock.uptimeMillis()-startTime)/1000f) + " seconds"); - updatePermissionsLP(null, null, true, false); + // If the platform SDK has changed since the last time we booted, + // we need to re-grant app permission to catch any new ones that + // appear. This is really a hack, and means that apps can in some + // cases get permissions that the user didn't initially explicitly + // allow... it would be nice to have some better way to handle + // this situation. + final boolean regrantPermissions = mSettings.mInternalSdkPlatform + != mSdkVersion; + if (regrantPermissions) Slog.i(TAG, "Platform changed from " + + mSettings.mInternalSdkPlatform + " to " + mSdkVersion + + "; regranting permissions for internal storage"); + mSettings.mInternalSdkPlatform = mSdkVersion; + + updatePermissionsLP(null, null, true, regrantPermissions); mSettings.writeLP(); @@ -7707,6 +7720,12 @@ class PackageManagerService extends IPackageManager.Stub { final HashMap<String, PackageSetting> mDisabledSysPackages = new HashMap<String, PackageSetting>(); + // These are the last platform API version we were using for + // the apps installed on internal and external storage. It is + // used to grant newer permissions one time during a system upgrade. + int mInternalSdkPlatform; + int mExternalSdkPlatform; + // The user's preferred activities associated with particular intent // filters. private final IntentResolver<PreferredActivity, PreferredActivity> mPreferredActivities = @@ -8291,6 +8310,11 @@ class PackageManagerService extends IPackageManager.Stub { serializer.startTag(null, "packages"); + serializer.startTag(null, "last-platform-version"); + serializer.attribute(null, "internal", Integer.toString(mInternalSdkPlatform)); + serializer.attribute(null, "external", Integer.toString(mExternalSdkPlatform)); + serializer.endTag(null, "last-platform-version"); + serializer.startTag(null, "permission-trees"); for (BasePermission bp : mPermissionTrees.values()) { writePermission(serializer, bp); @@ -8684,6 +8708,19 @@ class PackageManagerService extends IPackageManager.Stub { if (nname != null && oname != null) { mRenamedPackages.put(nname, oname); } + } else if (tagName.equals("last-platform-version")) { + mInternalSdkPlatform = mExternalSdkPlatform = 0; + try { + String internal = parser.getAttributeValue(null, "internal"); + if (internal != null) { + mInternalSdkPlatform = Integer.parseInt(internal); + } + String external = parser.getAttributeValue(null, "external"); + if (external != null) { + mInternalSdkPlatform = Integer.parseInt(external); + } + } catch (NumberFormatException e) { + } } else { Slog.w(TAG, "Unknown element under <packages>: " + parser.getName()); @@ -9553,9 +9590,22 @@ class PackageManagerService extends IPackageManager.Stub { } } synchronized (mPackages) { + // If the platform SDK has changed since the last time we booted, + // we need to re-grant app permission to catch any new ones that + // appear. This is really a hack, and means that apps can in some + // cases get permissions that the user didn't initially explicitly + // allow... it would be nice to have some better way to handle + // this situation. + final boolean regrantPermissions = mSettings.mExternalSdkPlatform + != mSdkVersion; + if (regrantPermissions) Slog.i(TAG, "Platform changed from " + + mSettings.mExternalSdkPlatform + " to " + mSdkVersion + + "; regranting permissions for external storage"); + mSettings.mExternalSdkPlatform = mSdkVersion; + // Make sure group IDs have been assigned, and any permission // changes in other apps are accounted for - updatePermissionsLP(null, null, true, false); + updatePermissionsLP(null, null, true, regrantPermissions); // Persist settings mSettings.writeLP(); } |