Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 65e8de3f authored by Dianne Hackborn's avatar Dianne Hackborn
Browse files

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
parent bbc42684
Loading
Loading
Loading
Loading
+11 −4
Original line number Diff line number Diff line
@@ -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);