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

Commit d72c3970 authored by Eugene Susla's avatar Eugene Susla
Browse files

Add ability to dump settings as proto buf

Test: Extracted the result via proto bug and as text and compared,
      ran new CTS Setting incident test
Change-Id: Icf7b54b9c5c0a613dfd413ad575001c7b637ca01
parent daca8ee6
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ option java_outer_classname = "IncidentProtoMetadata";
import "frameworks/base/libs/incident/proto/android/privacy.proto";
import "frameworks/base/core/proto/android/service/fingerprint.proto";
import "frameworks/base/core/proto/android/service/netstats.proto";
import "frameworks/base/core/proto/android/providers/settings.proto";

package android.os;

@@ -51,4 +52,5 @@ message IncidentProto {
    // System Services
    android.service.fingerprint.FingerprintServiceDumpProto fingerprint = 3000;
    android.service.NetworkStatsServiceDumpProto netstats = 3001;
    android.providers.settings.SettingsServiceDumpProto settings = 3002;
}
+605 −0

File added.

Preview size limit exceeded, changes collapsed.

+1655 −0

File added.

Preview size limit exceeded, changes collapsed.

+23 −4
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.providers.settings;

import android.Manifest;
import android.annotation.NonNull;
import android.app.ActivityManager;
import android.app.AppGlobals;
import android.app.backup.BackupManager;
@@ -65,6 +66,7 @@ import android.util.ByteStringUtils;
import android.util.Slog;
import android.util.SparseArray;
import android.util.SparseBooleanArray;
import android.util.proto.ProtoOutputStream;

import com.android.internal.annotations.GuardedBy;
import com.android.internal.content.PackageMonitor;
@@ -90,8 +92,9 @@ import java.util.Set;
import java.util.regex.Pattern;

import static android.os.Process.ROOT_UID;
import static android.os.Process.SYSTEM_UID;
import static android.os.Process.SHELL_UID;
import static android.os.Process.SYSTEM_UID;


/**
 * <p>
@@ -601,6 +604,22 @@ public class SettingsProvider extends ContentProvider {
        return cacheDir;
    }

    /**
     * Dump all settings as a proto buf.
     *
     * @param fd The file to dump to
     */
    void dumpProto(@NonNull FileDescriptor fd) {
        ProtoOutputStream proto = new ProtoOutputStream(fd);

        synchronized (mLock) {
            SettingsProtoDumpUtil.dumpProtoLocked(mSettingsRegistry, proto);

        }

        proto.flush();
    }

    public void dumpInternal(FileDescriptor fd, PrintWriter pw, String[] args) {
        synchronized (mLock) {
            final long identity = Binder.clearCallingIdentity();
@@ -663,7 +682,7 @@ public class SettingsProvider extends ContentProvider {
            pw.print(" value:"); pw.print(toDumpString(setting.getValue()));
            if (setting.getDefaultValue() != null) {
                pw.print(" default:"); pw.print(setting.getDefaultValue());
                pw.print(" defaultSystemSet:"); pw.print(setting.isDefaultSystemSet());
                pw.print(" defaultSystemSet:"); pw.print(setting.isDefaultFromSystem());
            }
            if (setting.getTag() != null) {
                pw.print(" tag:"); pw.print(setting.getTag());
@@ -2296,7 +2315,7 @@ public class SettingsProvider extends ContentProvider {
                        Setting setting = settingsState.getSettingLocked(name);
                        if (!SettingsState.isSystemPackage(getContext(),
                                setting.getPackageName())) {
                            if (setting.isDefaultSystemSet()) {
                            if (setting.isDefaultFromSystem()) {
                                if (settingsState.resetSettingLocked(name, packageName)) {
                                    notifyForSettingsChange(key, name);
                                }
@@ -2310,7 +2329,7 @@ public class SettingsProvider extends ContentProvider {
                case Settings.RESET_MODE_TRUSTED_DEFAULTS: {
                    for (String name : settingsState.getSettingNamesLocked()) {
                        Setting setting = settingsState.getSettingLocked(name);
                        if (setting.isDefaultSystemSet()) {
                        if (setting.isDefaultFromSystem()) {
                            if (settingsState.resetSettingLocked(name, packageName)) {
                                notifyForSettingsChange(key, name);
                            }
+12 −4
Original line number Diff line number Diff line
@@ -65,6 +65,7 @@ final public class SettingsService extends Binder {
        }

        int opti = 0;
        boolean dumpAsProto = false;
        while (opti < args.length) {
            String opt = args[opti];
            if (opt == null || opt.length() <= 0 || opt.charAt(0) != '-') {
@@ -74,16 +75,22 @@ final public class SettingsService extends Binder {
            if ("-h".equals(opt)) {
                MyShellCommand.dumpHelp(pw, true);
                return;
            } else if ("--proto".equals(opt)) {
                dumpAsProto = true;
            } else {
                pw.println("Unknown argument: " + opt + "; use -h for help");
            }
        }

        long caller = Binder.clearCallingIdentity();
        final long ident = Binder.clearCallingIdentity();
        try {
            if (dumpAsProto) {
                mProvider.dumpProto(fd);
            } else {
                mProvider.dumpInternal(fd, pw, args);
            }
        } finally {
            Binder.restoreCallingIdentity(caller);
            Binder.restoreCallingIdentity(ident);
        }
    }

@@ -449,8 +456,9 @@ final public class SettingsService extends Binder {
        static void dumpHelp(PrintWriter pw, boolean dumping) {
            if (dumping) {
                pw.println("Settings provider dump options:");
                pw.println("  [-h]");
                pw.println("  [-h] [--proto]");
                pw.println("  -h: print this help.");
                pw.println("  --proto: dump as protobuf.");
            } else {
                pw.println("Settings provider (settings) commands:");
                pw.println("  help");
Loading