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

Commit 4685a424 authored by Treehugger Robot's avatar Treehugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Improve robustness when migrating from appops xml" into main am: c1b1e8a5

parents f9ce27d9 c1b1e8a5
Loading
Loading
Loading
Loading
+1 −11
Original line number Original line Diff line number Diff line
@@ -4973,17 +4973,7 @@ public class AppOpsService extends IAppOpsService.Stub {
                    }
                    }


                    success = true;
                    success = true;
                } catch (IllegalStateException e) {
                } catch (Exception e) {
                    Slog.w(TAG, "Failed parsing " + e);
                } catch (NullPointerException e) {
                    Slog.w(TAG, "Failed parsing " + e);
                } catch (NumberFormatException e) {
                    Slog.w(TAG, "Failed parsing " + e);
                } catch (XmlPullParserException e) {
                    Slog.w(TAG, "Failed parsing " + e);
                } catch (IOException e) {
                    Slog.w(TAG, "Failed parsing " + e);
                } catch (IndexOutOfBoundsException e) {
                    Slog.w(TAG, "Failed parsing " + e);
                    Slog.w(TAG, "Failed parsing " + e);
                } finally {
                } finally {
                    if (!success) {
                    if (!success) {
+23 −8
Original line number Original line Diff line number Diff line
@@ -50,6 +50,10 @@ class LegacyAppOpStateParser {
    public int readState(AtomicFile file, SparseArray<SparseIntArray> uidModes,
    public int readState(AtomicFile file, SparseArray<SparseIntArray> uidModes,
            SparseArray<ArrayMap<String, SparseIntArray>> userPackageModes) {
            SparseArray<ArrayMap<String, SparseIntArray>> userPackageModes) {
        try (FileInputStream stream = file.openRead()) {
        try (FileInputStream stream = file.openRead()) {
            SparseArray<SparseIntArray> parsedUidModes = new SparseArray<>();
            SparseArray<ArrayMap<String, SparseIntArray>> parsedUserPackageModes =
                    new SparseArray<>();

            TypedXmlPullParser parser = Xml.resolvePullParser(stream);
            TypedXmlPullParser parser = Xml.resolvePullParser(stream);
            int type;
            int type;
            while ((type = parser.next()) != XmlPullParser.START_TAG
            while ((type = parser.next()) != XmlPullParser.START_TAG
@@ -75,26 +79,37 @@ class LegacyAppOpStateParser {
                    // version 2 has the structure pkg -> uid -> op ->
                    // version 2 has the structure pkg -> uid -> op ->
                    // in version 3, since pkg and uid states are kept completely
                    // in version 3, since pkg and uid states are kept completely
                    // independent we switch to user -> pkg -> op
                    // independent we switch to user -> pkg -> op
                    readPackage(parser, userPackageModes);
                    readPackage(parser, parsedUserPackageModes);
                } else if (tagName.equals("uid")) {
                } else if (tagName.equals("uid")) {
                    readUidOps(parser, uidModes);
                    readUidOps(parser, parsedUidModes);
                } else if (tagName.equals("user")) {
                } else if (tagName.equals("user")) {
                    readUser(parser, userPackageModes);
                    readUser(parser, parsedUserPackageModes);
                } else {
                } else {
                    Slog.w(TAG, "Unknown element under <app-ops>: "
                    Slog.w(TAG, "Unknown element under <app-ops>: "
                            + parser.getName());
                            + parser.getName());
                    XmlUtils.skipCurrentTag(parser);
                    XmlUtils.skipCurrentTag(parser);
                }
                }
            }
            }

            // Parsing is complete, copy all parsed values to output
            final int parsedUidModesSize = parsedUidModes.size();
            for (int i = 0; i < parsedUidModesSize; i++) {
                uidModes.put(parsedUidModes.keyAt(i), parsedUidModes.valueAt(i));
            }
            final int parsedUserPackageModesSize = parsedUserPackageModes.size();
            for (int i = 0; i < parsedUserPackageModesSize; i++) {
                userPackageModes.put(parsedUserPackageModes.keyAt(i),
                                     parsedUserPackageModes.valueAt(i));
            }

            return versionAtBoot;
            return versionAtBoot;
        } catch (FileNotFoundException e) {
        } catch (FileNotFoundException e) {
            Slog.i(TAG, "No existing app ops " + file.getBaseFile() + "; starting empty");
            Slog.i(TAG, "No existing app ops " + file.getBaseFile() + "; starting empty");
            return NO_FILE_VERSION;
        } catch (Exception e) {
        } catch (XmlPullParserException e) {
            // All exceptions must be caught, otherwise device will not be able to boot
            throw new RuntimeException(e);
            Slog.wtf(TAG, "Failed parsing " + e);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        }
        return NO_FILE_VERSION;
    }
    }


    private void readPackage(TypedXmlPullParser parser,
    private void readPackage(TypedXmlPullParser parser,