summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java2
-rw-r--r--core/java/android/text/method/PasswordTransformationMethod.java19
-rw-r--r--core/java/android/view/ViewRoot.java6
-rw-r--r--core/java/com/android/internal/widget/ContactHeaderWidget.java2
-rw-r--r--core/res/res/values/strings.xml4
-rw-r--r--core/tests/coretests/apks/Android.mk5
-rw-r--r--media/libstagefright/OMXCodec.cpp20
-rw-r--r--services/java/com/android/server/MountService.java46
-rw-r--r--services/java/com/android/server/PackageManagerService.java54
-rw-r--r--services/java/com/android/server/WifiService.java21
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();