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:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user