DO NOT MERGE: 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
Merged-In: I9c39429421643ebc10e78679c2bec52827603da1
diff --git a/services/core/java/com/android/server/appop/AppOpsService.java b/services/core/java/com/android/server/appop/AppOpsService.java
index c9e7cfa..d073bc6 100644
--- a/services/core/java/com/android/server/appop/AppOpsService.java
+++ b/services/core/java/com/android/server/appop/AppOpsService.java
@@ -782,13 +782,20 @@
                 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);