diff options
| -rw-r--r-- | cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java | 2 | ||||
| -rw-r--r-- | core/java/android/text/method/PasswordTransformationMethod.java | 19 | ||||
| -rw-r--r-- | core/java/android/view/ViewRoot.java | 6 | ||||
| -rw-r--r-- | core/java/com/android/internal/widget/ContactHeaderWidget.java | 2 | ||||
| -rw-r--r-- | core/res/res/values/strings.xml | 4 | ||||
| -rw-r--r-- | core/tests/coretests/apks/Android.mk | 5 | ||||
| -rw-r--r-- | media/libstagefright/OMXCodec.cpp | 20 | ||||
| -rw-r--r-- | services/java/com/android/server/MountService.java | 46 | ||||
| -rw-r--r-- | services/java/com/android/server/PackageManagerService.java | 54 | ||||
| -rw-r--r-- | services/java/com/android/server/WifiService.java | 21 |
10 files changed, 116 insertions, 63 deletions
diff --git a/cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java b/cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java index 5612158021d5..8263e75c1672 100644 --- a/cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java +++ b/cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java @@ -373,7 +373,7 @@ public final class Bmgr { } RestoreSet[] sets = null; int err = mRestore.getAvailableRestoreSets(observer); - if (err != 0) { + if (err == 0) { observer.waitForCompletion(); sets = observer.sets; for (RestoreSet s : sets) { diff --git a/core/java/android/text/method/PasswordTransformationMethod.java b/core/java/android/text/method/PasswordTransformationMethod.java index fad4f64ffe1e..b769b76832ed 100644 --- a/core/java/android/text/method/PasswordTransformationMethod.java +++ b/core/java/android/text/method/PasswordTransformationMethod.java @@ -51,6 +51,8 @@ implements TransformationMethod, TextWatcher sp.removeSpan(vr[i]); } + removeVisibleSpans(sp); + sp.setSpan(new ViewReference(view), 0, 0, Spannable.SPAN_POINT_POINT); } @@ -100,10 +102,7 @@ implements TransformationMethod, TextWatcher int pref = TextKeyListener.getInstance().getPrefs(v.getContext()); if ((pref & TextKeyListener.SHOW_PASSWORD) != 0) { if (count > 0) { - Visible[] old = sp.getSpans(0, sp.length(), Visible.class); - for (int i = 0; i < old.length; i++) { - sp.removeSpan(old[i]); - } + removeVisibleSpans(sp); if (count == 1) { sp.setSpan(new Visible(sp, this), start, start + count, @@ -125,14 +124,18 @@ implements TransformationMethod, TextWatcher if (sourceText instanceof Spannable) { Spannable sp = (Spannable) sourceText; - Visible[] old = sp.getSpans(0, sp.length(), Visible.class); - for (int i = 0; i < old.length; i++) { - sp.removeSpan(old[i]); - } + removeVisibleSpans(sp); } } } + private static void removeVisibleSpans(Spannable sp) { + Visible[] old = sp.getSpans(0, sp.length(), Visible.class); + for (int i = 0; i < old.length; i++) { + sp.removeSpan(old[i]); + } + } + private static class PasswordCharSequence implements CharSequence, GetChars { 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/java/com/android/internal/widget/ContactHeaderWidget.java b/core/java/com/android/internal/widget/ContactHeaderWidget.java index 333257ea1570..f421466292d6 100644 --- a/core/java/com/android/internal/widget/ContactHeaderWidget.java +++ b/core/java/com/android/internal/widget/ContactHeaderWidget.java @@ -489,7 +489,7 @@ public class ContactHeaderWidget extends FrameLayout implements View.OnClickList resetAsyncQueryHandler(); } - mQueryHandler.startQuery(TOKEN_CONTACT_INFO, null, contactUri, ContactQuery.COLUMNS, + mQueryHandler.startQuery(TOKEN_CONTACT_INFO, contactUri, contactUri, ContactQuery.COLUMNS, null, null, null); } 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/core/tests/coretests/apks/Android.mk b/core/tests/coretests/apks/Android.mk new file mode 100644 index 000000000000..4670e219db4a --- /dev/null +++ b/core/tests/coretests/apks/Android.mk @@ -0,0 +1,5 @@ +LOCAL_PATH:= $(call my-dir) +include $(CLEAR_VARS) + +# build sub packages +include $(call all-makefiles-under,$(LOCAL_PATH)) diff --git a/media/libstagefright/OMXCodec.cpp b/media/libstagefright/OMXCodec.cpp index 234663937d05..603708806557 100644 --- a/media/libstagefright/OMXCodec.cpp +++ b/media/libstagefright/OMXCodec.cpp @@ -535,26 +535,6 @@ status_t OMXCodec::configureCodec(const sp<MetaData> &meta) { return err; } } - } else if (!strncasecmp(mMIME, "audio/", 6)) { - if ((mQuirks & kSupportsMultipleFramesPerInputBuffer) - && !strcmp(mComponentName, "OMX.TI.AAC.decode")) { - OMX_PARAM_PORTDEFINITIONTYPE def; - InitOMXParams(&def); - def.nPortIndex = kPortIndexInput; - - status_t err = mOMX->getParameter( - mNode, OMX_IndexParamPortDefinition, &def, sizeof(def)); - CHECK_EQ(err, OK); - - const size_t kMinBufferSize = 100 * 1024; - if (def.nBufferSize < kMinBufferSize) { - def.nBufferSize = kMinBufferSize; - } - - err = mOMX->setParameter( - mNode, OMX_IndexParamPortDefinition, &def, sizeof(def)); - CHECK_EQ(err, OK); - } } if (!strcasecmp(mMIME, MEDIA_MIMETYPE_IMAGE_JPEG) diff --git a/services/java/com/android/server/MountService.java b/services/java/com/android/server/MountService.java index 90cb585db1e6..6ceeb95852ec 100644 --- a/services/java/com/android/server/MountService.java +++ b/services/java/com/android/server/MountService.java @@ -213,15 +213,14 @@ class MountService extends IMountService.Stub } case H_UNMOUNT_PM_DONE: { if (DEBUG_UNMOUNT) Slog.i(TAG, "H_UNMOUNT_PM_DONE"); - if (!mUpdatingStatus) { - // Does not correspond to unmount's status update. - return; - } if (DEBUG_UNMOUNT) Slog.i(TAG, "Updated status. Processing requests"); mUpdatingStatus = false; int size = mForceUnmounts.size(); int sizeArr[] = new int[size]; int sizeArrN = 0; + // Kill processes holding references first + ActivityManagerService ams = (ActivityManagerService) + ServiceManager.getService("activity"); for (int i = 0; i < size; i++) { UnmountCallBack ucb = mForceUnmounts.get(i); String path = ucb.path; @@ -233,35 +232,30 @@ class MountService extends IMountService.Stub if (pids == null || pids.length == 0) { done = true; } else { - // Kill processes holding references first - ActivityManagerService ams = (ActivityManagerService) - ServiceManager.getService("activity"); // Eliminate system process here? - boolean ret = ams.killPids(pids, "Unmount media"); - if (ret) { - // Confirm if file references have been freed. - pids = getStorageUsers(path); - if (pids == null || pids.length == 0) { - done = true; - } + ams.killPids(pids, "unmount media"); + // Confirm if file references have been freed. + pids = getStorageUsers(path); + if (pids == null || pids.length == 0) { + done = true; } } } - if (done) { - sizeArr[sizeArrN++] = i; - mHandler.sendMessage(mHandler.obtainMessage(H_UNMOUNT_MS, - ucb)); + if (!done && (ucb.retries < MAX_UNMOUNT_RETRIES)) { + // Retry again + Slog.i(TAG, "Retrying to kill storage users again"); + mHandler.sendMessageDelayed( + mHandler.obtainMessage(H_UNMOUNT_PM_DONE, + ucb.retries++), + RETRY_UNMOUNT_DELAY); } else { if (ucb.retries >= MAX_UNMOUNT_RETRIES) { - Slog.i(TAG, "Cannot unmount media inspite of " + - MAX_UNMOUNT_RETRIES + " retries"); - // Send final broadcast indicating failure to unmount. - } else { - mHandler.sendMessageDelayed( - mHandler.obtainMessage(H_UNMOUNT_PM_DONE, - ucb.retries++), - RETRY_UNMOUNT_DELAY); + Slog.i(TAG, "Failed to unmount media inspite of " + + MAX_UNMOUNT_RETRIES + " retries. Forcibly killing processes now"); } + sizeArr[sizeArrN++] = i; + mHandler.sendMessage(mHandler.obtainMessage(H_UNMOUNT_MS, + ucb)); } } // Remove already processed elements from list. 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(); } diff --git a/services/java/com/android/server/WifiService.java b/services/java/com/android/server/WifiService.java index 3bfb4c6516df..c0a44918487d 100644 --- a/services/java/com/android/server/WifiService.java +++ b/services/java/com/android/server/WifiService.java @@ -190,6 +190,12 @@ public class WifiService extends IWifiManager.Stub { */ private int mLastEnableUid = Process.myUid(); + /* + * Last UID that asked to enable WIFI AP. + */ + private int mLastApEnableUid = Process.myUid(); + + /** * Number of allowed radio frequency channels in various regulatory domains. * This list is sufficient for 802.11b/g networks (2.4GHz range). @@ -240,6 +246,10 @@ public class WifiService extends IWifiManager.Stub { public void onReceive(Context context, Intent intent) { // clear our flag indicating the user has overwridden airplane mode mAirplaneModeOverwridden = false; + // on airplane disable, restore Wifi if the saved state indicates so + if (!isAirplaneModeOn() && testAndClearWifiSavedState()) { + persistWifiEnabled(true); + } updateWifiState(); } }, @@ -613,8 +623,7 @@ public class WifiService extends IWifiManager.Stub { sWakeLock.acquire(); Binder.restoreCallingIdentity(ident); - mLastEnableUid = Binder.getCallingUid(); - + mLastApEnableUid = Binder.getCallingUid(); sendAccessPointMessage(enabled, wifiConfig, Binder.getCallingUid()); } @@ -1802,6 +1811,14 @@ public class WifiService extends IWifiManager.Stub { if ((mWifiStateTracker.getWifiState() == WIFI_STATE_ENABLING) && !airplaneMode) { return; } + + /* Disable tethering when airplane mode is enabled */ + if (airplaneMode && + (mWifiApState == WIFI_AP_STATE_ENABLING || mWifiApState == WIFI_AP_STATE_ENABLED)) { + sWakeLock.acquire(); + sendAccessPointMessage(false, null, mLastApEnableUid); + } + if (wifiShouldBeEnabled) { if (wifiShouldBeStarted) { sWakeLock.acquire(); |