Merge cherrypicks of [14988379, 14988380, 14984749, 14988513, 14988333, 14988334, 14988398, 14985920, 14988097, 14988381, 14985921, 14988891, 14987186, 14988382, 14989110, 14988514, 14988515, 14988652, 14988653, 14988654, 14988399, 14988400, 14988401, 14984579, 14987188, 14988532, 14988533, 14988402, 14983067, 14983068, 14974447, 14974448, 14988656, 14988535, 14988536, 14988537, 14988538, 14988539, 14988540, 14988541] into rvc-qpr3-release
Change-Id: Idd585049e2143a8f672920e1099c5f081649d0c0
diff --git a/cmds/statsd/src/guardrail/StatsdStats.cpp b/cmds/statsd/src/guardrail/StatsdStats.cpp
index 6e89038..14b967a 100644
--- a/cmds/statsd/src/guardrail/StatsdStats.cpp
+++ b/cmds/statsd/src/guardrail/StatsdStats.cpp
@@ -459,9 +459,12 @@
void StatsdStats::noteAtomLogged(int atomId, int32_t timeSec) {
lock_guard<std::mutex> lock(mLock);
- if (atomId <= kMaxPushedAtomId) {
+ if (atomId >= 0 && atomId <= kMaxPushedAtomId) {
mPushedAtomStats[atomId]++;
} else {
+ if (atomId < 0) {
+ android_errorWriteLog(0x534e4554, "187957589");
+ }
if (mNonPlatformPushedAtomStats.size() < kMaxNonPlatformPushedAtoms) {
mNonPlatformPushedAtomStats[atomId]++;
}
diff --git a/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java b/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java
index 11d1b0a..087275e 100644
--- a/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java
+++ b/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java
@@ -322,6 +322,11 @@
return true;
}
+ if (TextUtils.equals(Environment.DIRECTORY_ANDROID.toLowerCase(),
+ path.toLowerCase())) {
+ return true;
+ }
+
return false;
} catch (IOException e) {
throw new IllegalArgumentException(
diff --git a/services/core/java/com/android/server/am/ActiveServices.java b/services/core/java/com/android/server/am/ActiveServices.java
index 1062e14..5abb87c 100644
--- a/services/core/java/com/android/server/am/ActiveServices.java
+++ b/services/core/java/com/android/server/am/ActiveServices.java
@@ -935,7 +935,18 @@
void killMisbehavingService(ServiceRecord r,
int appUid, int appPid, String localPackageName) {
synchronized (mAm) {
- stopServiceLocked(r);
+ if (!r.destroying) {
+ // This service is still alive, stop it.
+ stopServiceLocked(r);
+ } else {
+ // Check if there is another instance of it being started in parallel,
+ // if so, stop that too to avoid spamming the system.
+ final ServiceMap smap = getServiceMapLocked(r.userId);
+ final ServiceRecord found = smap.mServicesByInstanceName.remove(r.instanceName);
+ if (found != null) {
+ stopServiceLocked(found);
+ }
+ }
mAm.crashApplication(appUid, appPid, localPackageName, -1,
"Bad notification for startForeground", true /*force*/);
}
diff --git a/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java b/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java
index 486de39..68ff022 100644
--- a/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java
+++ b/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java
@@ -3362,7 +3362,11 @@
int pullFaceSettingsLocked(int atomTag, List<StatsEvent> pulledData) {
final long callingToken = Binder.clearCallingIdentity();
try {
- List<UserInfo> users = mContext.getSystemService(UserManager.class).getUsers();
+ UserManager manager = mContext.getSystemService(UserManager.class);
+ if (manager == null) {
+ return StatsManager.PULL_SKIP;
+ }
+ List<UserInfo> users = manager.getUsers();
int numUsers = users.size();
FaceManager faceManager = mContext.getSystemService(FaceManager.class);
diff --git a/telephony/java/android/telephony/SubscriptionInfo.java b/telephony/java/android/telephony/SubscriptionInfo.java
index 0ee6568b..90d7a16 100644
--- a/telephony/java/android/telephony/SubscriptionInfo.java
+++ b/telephony/java/android/telephony/SubscriptionInfo.java
@@ -569,6 +569,13 @@
/**
* @hide
*/
+ public void clearGroupUuid() {
+ this.mGroupUUID = null;
+ }
+
+ /**
+ * @hide
+ */
public List<String> getEhplmns() {
return mEhplmns == null ? Collections.emptyList() : Arrays.asList(mEhplmns);
}