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

Commit cf5df870 authored by Eugene Susla's avatar Eugene Susla Committed by Android (Google) Code Review
Browse files

Merge "Add ability to dump settings as proto buf"

parents 69ab7123 d72c3970
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