Fix issue #129936402: Runtime restart occurs when suspending an app...

NPE at com.android.server.appop.AppOpsService.notifyOpChanged(AppOpsService.java:1431)

Wasn't checking for a null callback list, and also fixed threading
issues.

Fixes: 129936402
Test: Manual
Change-Id: I9c39429421643ebc10e78679c2bec52827603da1
This commit is contained in:
Dianne Hackborn
2019-04-04 11:01:41 -07:00
parent bbc42684cc
commit 65e8de3fde

View File

@@ -782,13 +782,20 @@ public class AppOpsService extends IAppOpsService.Stub {
final int[] changedUids = intent.getIntArrayExtra(Intent.EXTRA_CHANGED_UID_LIST);
final String[] changedPkgs = intent.getStringArrayExtra(
Intent.EXTRA_CHANGED_PACKAGE_LIST);
final ArraySet<ModeCallback> callbacks = mOpModeWatchers.get(OP_PLAY_AUDIO);
ArraySet<ModeCallback> callbacks;
synchronized (AppOpsService.this) {
callbacks = mOpModeWatchers.get(OP_PLAY_AUDIO);
if (callbacks == null) {
return;
}
callbacks = new ArraySet<>(callbacks);
}
for (int i = 0; i < changedUids.length; i++) {
final int changedUid = changedUids[i];
final String changedPkg = changedPkgs[i];
// We trust packagemanager to insert matching uid and packageNames in the extras
mHandler.sendMessage(PooledLambda.obtainMessage(AppOpsService::notifyOpChanged,
AppOpsService.this, callbacks, OP_PLAY_AUDIO, changedUid, changedPkg));
// We trust packagemanager to insert matching uid and packageNames in the
// extras
notifyOpChanged(callbacks, OP_PLAY_AUDIO, changedUid, changedPkg);
}
}
}, packageSuspendFilter);