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

Commit 2ae82e13 authored by Svet Ganov's avatar Svet Ganov
Browse files

Fix a serialization issue in sync op reporting

If the application thread is not ready yet we cannot
get the package name and were shrt circuiting which
let to leaving the remainder of the payload in the
parcel breaking subsequent content reads.

bug: 184616098

Test: atest CtsAppOpsTestCases

Change-Id: I83f0d74deb87f2b4517d8a4d10b5331c7d41bb89
parent 4bf102ae
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -9038,8 +9038,11 @@ public class AppOpsManager {
     *
     * @hide
     */
    // TODO (b/186872903) Refactor how sync noted ops are propagaged.
    // TODO (b/186872903) Refactor how sync noted ops are propagated.
    public static void prefixParcelWithAppOpsIfNeeded(@NonNull Parcel p) {
        if (!isListeningForOpNotedInBinderTransaction()) {
            return;
        }
        final ArrayMap<String, ArrayMap<String, long[]>> notedAppOps =
                sAppOpsNotedInThisBinderTransaction.get();
        if (notedAppOps == null) {
@@ -9083,9 +9086,6 @@ public class AppOpsManager {
        }

        final String myPackageName = ActivityThread.currentPackageName();
        if (myPackageName == null) {
            return;
        }

        synchronized (sLock) {
            for (int i = 0; i < packageCount; i++) {
@@ -9105,7 +9105,7 @@ public class AppOpsManager {
                    final BitSet notedAppOps = BitSet.valueOf(rawNotedAppOps);
                    for (int code = notedAppOps.nextSetBit(0); code != -1;
                            code = notedAppOps.nextSetBit(code + 1)) {
                        if (myPackageName.equals(packageName)) {
                        if (Objects.equals(myPackageName, packageName)) {
                            if (sOnOpNotedCallback != null) {
                                sOnOpNotedCallback.onNoted(new SyncNotedAppOp(code,
                                        attributionTag, packageName));
@@ -9123,7 +9123,7 @@ public class AppOpsManager {
                    }
                    for (int code = notedAppOps.nextSetBit(0); code != -1;
                            code = notedAppOps.nextSetBit(code + 1)) {
                        if (myPackageName.equals(packageName)) {
                        if (Objects.equals(myPackageName, packageName)) {
                            sMessageCollector.onNoted(new SyncNotedAppOp(code,
                                    attributionTag, packageName));
                        }