Move IndentingPrintWriter to android.util

The old implementation remains in its place for now.

IndentingPrintWriter is still hidden - it will be made public
separately.

Test: atest FrameworksUtilTests:android.util.IndentingPrintWriterTest
Bug: 142281756

Change-Id: Idd2bfa027733ef384b5a676866a89fb3c35b06cb
diff --git a/Android.bp b/Android.bp
index 8f0e341..9c01c17 100644
--- a/Android.bp
+++ b/Android.bp
@@ -703,6 +703,7 @@
         // TODO: remove these annotations as soon as we can use andoid.support.annotations.*
         ":framework-annotations",
         "core/java/android/net/DhcpResults.java",
+        "core/java/android/util/IndentingPrintWriter.java",
         "core/java/android/util/LocalLog.java",
         "core/java/com/android/internal/util/HexDump.java",
         "core/java/com/android/internal/util/IndentingPrintWriter.java",
@@ -733,6 +734,7 @@
 filegroup {
     name: "framework-tethering-shared-srcs",
     srcs: [
+        "core/java/android/util/IndentingPrintWriter.java",
         "core/java/android/util/LocalLog.java",
         "core/java/com/android/internal/util/IndentingPrintWriter.java",
         "core/java/com/android/internal/util/IState.java",
@@ -1131,6 +1133,7 @@
         "core/java/android/os/BasicShellCommandHandler.java",
         "core/java/android/os/RegistrantList.java",
         "core/java/android/os/Registrant.java",
+        "core/java/android/util/IndentingPrintWriter.java",
         "core/java/android/util/LocalLog.java",
         "core/java/android/util/TimeUtils.java",
         "core/java/com/android/internal/os/SomeArgs.java",
@@ -1153,6 +1156,7 @@
 filegroup {
     name: "framework-telephony-shared-srcs",
     srcs: [
+        "core/java/android/util/IndentingPrintWriter.java",
         "core/java/android/util/RecurrenceRule.java",
         "core/java/com/android/internal/os/SomeArgs.java",
         "core/java/com/android/internal/util/BitwiseInputStream.java",
diff --git a/apex/jobscheduler/framework/java/com/android/server/usage/AppStandbyInternal.java b/apex/jobscheduler/framework/java/com/android/server/usage/AppStandbyInternal.java
index 887d82c..648a1e1 100644
--- a/apex/jobscheduler/framework/java/com/android/server/usage/AppStandbyInternal.java
+++ b/apex/jobscheduler/framework/java/com/android/server/usage/AppStandbyInternal.java
@@ -8,8 +8,7 @@
 import android.app.usage.UsageStatsManager.SystemForcedReasons;
 import android.content.Context;
 import android.os.Looper;
-
-import com.android.internal.util.IndentingPrintWriter;
+import android.util.IndentingPrintWriter;
 
 import java.io.PrintWriter;
 import java.lang.reflect.Constructor;
diff --git a/apex/jobscheduler/service/java/com/android/server/job/JobConcurrencyManager.java b/apex/jobscheduler/service/java/com/android/server/job/JobConcurrencyManager.java
index 435384d..a8906ac 100644
--- a/apex/jobscheduler/service/java/com/android/server/job/JobConcurrencyManager.java
+++ b/apex/jobscheduler/service/java/com/android/server/job/JobConcurrencyManager.java
@@ -25,6 +25,7 @@
 import android.os.Handler;
 import android.os.PowerManager;
 import android.os.RemoteException;
+import android.util.IndentingPrintWriter;
 import android.util.Slog;
 import android.util.TimeUtils;
 import android.util.proto.ProtoOutputStream;
@@ -33,7 +34,6 @@
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.app.procstats.ProcessStats;
 import com.android.internal.os.BackgroundThread;
-import com.android.internal.util.IndentingPrintWriter;
 import com.android.internal.util.StatLogger;
 import com.android.server.job.JobSchedulerService.Constants;
 import com.android.server.job.JobSchedulerService.MaxJobCountsPerMemoryTrimLevel;
diff --git a/apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java b/apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java
index e888651..a1c13a9 100644
--- a/apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java
+++ b/apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java
@@ -70,6 +70,7 @@
 import android.provider.Settings;
 import android.text.format.DateUtils;
 import android.util.ArrayMap;
+import android.util.IndentingPrintWriter;
 import android.util.KeyValueListParser;
 import android.util.Log;
 import android.util.Slog;
@@ -84,7 +85,6 @@
 import com.android.internal.util.ArrayUtils;
 import com.android.internal.util.DumpUtils;
 import com.android.internal.util.FrameworkStatsLog;
-import com.android.internal.util.IndentingPrintWriter;
 import com.android.server.AppStateTracker;
 import com.android.server.DeviceIdleInternal;
 import com.android.server.FgThread;
@@ -684,12 +684,12 @@
         void dump(IndentingPrintWriter pw) {
             pw.println("Settings:");
             pw.increaseIndent();
-            pw.printPair(KEY_MIN_READY_NON_ACTIVE_JOBS_COUNT,
+            pw.print(KEY_MIN_READY_NON_ACTIVE_JOBS_COUNT,
                     MIN_READY_NON_ACTIVE_JOBS_COUNT).println();
-            pw.printPair(KEY_MAX_NON_ACTIVE_JOB_BATCH_DELAY_MS,
+            pw.print(KEY_MAX_NON_ACTIVE_JOB_BATCH_DELAY_MS,
                     MAX_NON_ACTIVE_JOB_BATCH_DELAY_MS).println();
-            pw.printPair(KEY_HEAVY_USE_FACTOR, HEAVY_USE_FACTOR).println();
-            pw.printPair(KEY_MODERATE_USE_FACTOR, MODERATE_USE_FACTOR).println();
+            pw.print(KEY_HEAVY_USE_FACTOR, HEAVY_USE_FACTOR).println();
+            pw.print(KEY_MODERATE_USE_FACTOR, MODERATE_USE_FACTOR).println();
 
             MAX_JOB_COUNTS_SCREEN_ON.normal.dump(pw, "");
             MAX_JOB_COUNTS_SCREEN_ON.moderate.dump(pw, "");
@@ -703,15 +703,15 @@
 
             SCREEN_OFF_JOB_CONCURRENCY_INCREASE_DELAY_MS.dump(pw, "");
 
-            pw.printPair(KEY_MIN_LINEAR_BACKOFF_TIME, MIN_LINEAR_BACKOFF_TIME).println();
-            pw.printPair(KEY_MIN_EXP_BACKOFF_TIME, MIN_EXP_BACKOFF_TIME).println();
-            pw.printPair(KEY_CONN_CONGESTION_DELAY_FRAC, CONN_CONGESTION_DELAY_FRAC).println();
-            pw.printPair(KEY_CONN_PREFETCH_RELAX_FRAC, CONN_PREFETCH_RELAX_FRAC).println();
+            pw.print(KEY_MIN_LINEAR_BACKOFF_TIME, MIN_LINEAR_BACKOFF_TIME).println();
+            pw.print(KEY_MIN_EXP_BACKOFF_TIME, MIN_EXP_BACKOFF_TIME).println();
+            pw.print(KEY_CONN_CONGESTION_DELAY_FRAC, CONN_CONGESTION_DELAY_FRAC).println();
+            pw.print(KEY_CONN_PREFETCH_RELAX_FRAC, CONN_PREFETCH_RELAX_FRAC).println();
 
-            pw.printPair(KEY_ENABLE_API_QUOTAS, ENABLE_API_QUOTAS).println();
-            pw.printPair(KEY_API_QUOTA_SCHEDULE_COUNT, API_QUOTA_SCHEDULE_COUNT).println();
-            pw.printPair(KEY_API_QUOTA_SCHEDULE_WINDOW_MS, API_QUOTA_SCHEDULE_WINDOW_MS).println();
-            pw.printPair(KEY_API_QUOTA_SCHEDULE_THROW_EXCEPTION,
+            pw.print(KEY_ENABLE_API_QUOTAS, ENABLE_API_QUOTAS).println();
+            pw.print(KEY_API_QUOTA_SCHEDULE_COUNT, API_QUOTA_SCHEDULE_COUNT).println();
+            pw.print(KEY_API_QUOTA_SCHEDULE_WINDOW_MS, API_QUOTA_SCHEDULE_WINDOW_MS).println();
+            pw.print(KEY_API_QUOTA_SCHEDULE_THROW_EXCEPTION,
                     API_QUOTA_SCHEDULE_THROW_EXCEPTION).println();
 
             pw.decreaseIndent();
diff --git a/apex/jobscheduler/service/java/com/android/server/job/controllers/BackgroundJobsController.java b/apex/jobscheduler/service/java/com/android/server/job/controllers/BackgroundJobsController.java
index 1645bcb..fd26b72 100644
--- a/apex/jobscheduler/service/java/com/android/server/job/controllers/BackgroundJobsController.java
+++ b/apex/jobscheduler/service/java/com/android/server/job/controllers/BackgroundJobsController.java
@@ -20,11 +20,11 @@
 
 import android.os.SystemClock;
 import android.os.UserHandle;
+import android.util.IndentingPrintWriter;
 import android.util.Log;
 import android.util.Slog;
 import android.util.proto.ProtoOutputStream;
 
-import com.android.internal.util.IndentingPrintWriter;
 import com.android.server.AppStateTracker;
 import com.android.server.AppStateTracker.Listener;
 import com.android.server.LocalServices;
diff --git a/apex/jobscheduler/service/java/com/android/server/job/controllers/BatteryController.java b/apex/jobscheduler/service/java/com/android/server/job/controllers/BatteryController.java
index 461ef21..28269c8 100644
--- a/apex/jobscheduler/service/java/com/android/server/job/controllers/BatteryController.java
+++ b/apex/jobscheduler/service/java/com/android/server/job/controllers/BatteryController.java
@@ -26,12 +26,12 @@
 import android.os.BatteryManagerInternal;
 import android.os.UserHandle;
 import android.util.ArraySet;
+import android.util.IndentingPrintWriter;
 import android.util.Log;
 import android.util.Slog;
 import android.util.proto.ProtoOutputStream;
 
 import com.android.internal.annotations.VisibleForTesting;
-import com.android.internal.util.IndentingPrintWriter;
 import com.android.server.LocalServices;
 import com.android.server.job.JobSchedulerService;
 import com.android.server.job.StateControllerProto;
diff --git a/apex/jobscheduler/service/java/com/android/server/job/controllers/ConnectivityController.java b/apex/jobscheduler/service/java/com/android/server/job/controllers/ConnectivityController.java
index bb94275..f1c624d 100644
--- a/apex/jobscheduler/service/java/com/android/server/job/controllers/ConnectivityController.java
+++ b/apex/jobscheduler/service/java/com/android/server/job/controllers/ConnectivityController.java
@@ -39,6 +39,7 @@
 import android.util.ArrayMap;
 import android.util.ArraySet;
 import android.util.DataUnit;
+import android.util.IndentingPrintWriter;
 import android.util.Log;
 import android.util.Slog;
 import android.util.SparseArray;
@@ -46,7 +47,6 @@
 
 import com.android.internal.annotations.GuardedBy;
 import com.android.internal.annotations.VisibleForTesting;
-import com.android.internal.util.IndentingPrintWriter;
 import com.android.server.LocalServices;
 import com.android.server.job.JobSchedulerService;
 import com.android.server.job.JobSchedulerService.Constants;
diff --git a/apex/jobscheduler/service/java/com/android/server/job/controllers/ContentObserverController.java b/apex/jobscheduler/service/java/com/android/server/job/controllers/ContentObserverController.java
index 5fcd774..50723c7 100644
--- a/apex/jobscheduler/service/java/com/android/server/job/controllers/ContentObserverController.java
+++ b/apex/jobscheduler/service/java/com/android/server/job/controllers/ContentObserverController.java
@@ -24,13 +24,13 @@
 import android.os.UserHandle;
 import android.util.ArrayMap;
 import android.util.ArraySet;
+import android.util.IndentingPrintWriter;
 import android.util.Log;
 import android.util.Slog;
 import android.util.SparseArray;
 import android.util.TimeUtils;
 import android.util.proto.ProtoOutputStream;
 
-import com.android.internal.util.IndentingPrintWriter;
 import com.android.server.job.JobSchedulerService;
 import com.android.server.job.StateControllerProto;
 import com.android.server.job.StateControllerProto.ContentObserverController.Observer.TriggerContentData;
diff --git a/apex/jobscheduler/service/java/com/android/server/job/controllers/DeviceIdleJobsController.java b/apex/jobscheduler/service/java/com/android/server/job/controllers/DeviceIdleJobsController.java
index 01f5fa6..04b4164 100644
--- a/apex/jobscheduler/service/java/com/android/server/job/controllers/DeviceIdleJobsController.java
+++ b/apex/jobscheduler/service/java/com/android/server/job/controllers/DeviceIdleJobsController.java
@@ -27,13 +27,13 @@
 import android.os.PowerManager;
 import android.os.UserHandle;
 import android.util.ArraySet;
+import android.util.IndentingPrintWriter;
 import android.util.Log;
 import android.util.Slog;
 import android.util.SparseBooleanArray;
 import android.util.proto.ProtoOutputStream;
 
 import com.android.internal.util.ArrayUtils;
-import com.android.internal.util.IndentingPrintWriter;
 import com.android.server.DeviceIdleInternal;
 import com.android.server.LocalServices;
 import com.android.server.job.JobSchedulerService;
diff --git a/apex/jobscheduler/service/java/com/android/server/job/controllers/IdleController.java b/apex/jobscheduler/service/java/com/android/server/job/controllers/IdleController.java
index c0b3204..2fe827e 100644
--- a/apex/jobscheduler/service/java/com/android/server/job/controllers/IdleController.java
+++ b/apex/jobscheduler/service/java/com/android/server/job/controllers/IdleController.java
@@ -20,9 +20,9 @@
 import android.content.pm.PackageManager;
 import android.os.UserHandle;
 import android.util.ArraySet;
+import android.util.IndentingPrintWriter;
 import android.util.proto.ProtoOutputStream;
 
-import com.android.internal.util.IndentingPrintWriter;
 import com.android.server.job.JobSchedulerService;
 import com.android.server.job.StateControllerProto;
 import com.android.server.job.controllers.idle.CarIdlenessTracker;
diff --git a/apex/jobscheduler/service/java/com/android/server/job/controllers/QuotaController.java b/apex/jobscheduler/service/java/com/android/server/job/controllers/QuotaController.java
index d108f0b..bc4e396 100644
--- a/apex/jobscheduler/service/java/com/android/server/job/controllers/QuotaController.java
+++ b/apex/jobscheduler/service/java/com/android/server/job/controllers/QuotaController.java
@@ -52,6 +52,7 @@
 import android.os.UserHandle;
 import android.provider.Settings;
 import android.util.ArraySet;
+import android.util.IndentingPrintWriter;
 import android.util.KeyValueListParser;
 import android.util.Log;
 import android.util.Pair;
@@ -64,7 +65,6 @@
 import com.android.internal.annotations.GuardedBy;
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.os.BackgroundThread;
-import com.android.internal.util.IndentingPrintWriter;
 import com.android.server.LocalServices;
 import com.android.server.job.ConstantsProto;
 import com.android.server.job.JobSchedulerService;
@@ -2496,32 +2496,32 @@
             pw.println();
             pw.println("QuotaController:");
             pw.increaseIndent();
-            pw.printPair(KEY_ALLOWED_TIME_PER_PERIOD_MS, ALLOWED_TIME_PER_PERIOD_MS).println();
-            pw.printPair(KEY_IN_QUOTA_BUFFER_MS, IN_QUOTA_BUFFER_MS).println();
-            pw.printPair(KEY_WINDOW_SIZE_ACTIVE_MS, WINDOW_SIZE_ACTIVE_MS).println();
-            pw.printPair(KEY_WINDOW_SIZE_WORKING_MS, WINDOW_SIZE_WORKING_MS).println();
-            pw.printPair(KEY_WINDOW_SIZE_FREQUENT_MS, WINDOW_SIZE_FREQUENT_MS).println();
-            pw.printPair(KEY_WINDOW_SIZE_RARE_MS, WINDOW_SIZE_RARE_MS).println();
-            pw.printPair(KEY_WINDOW_SIZE_RESTRICTED_MS, WINDOW_SIZE_RESTRICTED_MS).println();
-            pw.printPair(KEY_MAX_EXECUTION_TIME_MS, MAX_EXECUTION_TIME_MS).println();
-            pw.printPair(KEY_MAX_JOB_COUNT_ACTIVE, MAX_JOB_COUNT_ACTIVE).println();
-            pw.printPair(KEY_MAX_JOB_COUNT_WORKING, MAX_JOB_COUNT_WORKING).println();
-            pw.printPair(KEY_MAX_JOB_COUNT_FREQUENT, MAX_JOB_COUNT_FREQUENT).println();
-            pw.printPair(KEY_MAX_JOB_COUNT_RARE, MAX_JOB_COUNT_RARE).println();
-            pw.printPair(KEY_MAX_JOB_COUNT_RESTRICTED, MAX_JOB_COUNT_RESTRICTED).println();
-            pw.printPair(KEY_RATE_LIMITING_WINDOW_MS, RATE_LIMITING_WINDOW_MS).println();
-            pw.printPair(KEY_MAX_JOB_COUNT_PER_RATE_LIMITING_WINDOW,
+            pw.print(KEY_ALLOWED_TIME_PER_PERIOD_MS, ALLOWED_TIME_PER_PERIOD_MS).println();
+            pw.print(KEY_IN_QUOTA_BUFFER_MS, IN_QUOTA_BUFFER_MS).println();
+            pw.print(KEY_WINDOW_SIZE_ACTIVE_MS, WINDOW_SIZE_ACTIVE_MS).println();
+            pw.print(KEY_WINDOW_SIZE_WORKING_MS, WINDOW_SIZE_WORKING_MS).println();
+            pw.print(KEY_WINDOW_SIZE_FREQUENT_MS, WINDOW_SIZE_FREQUENT_MS).println();
+            pw.print(KEY_WINDOW_SIZE_RARE_MS, WINDOW_SIZE_RARE_MS).println();
+            pw.print(KEY_WINDOW_SIZE_RESTRICTED_MS, WINDOW_SIZE_RESTRICTED_MS).println();
+            pw.print(KEY_MAX_EXECUTION_TIME_MS, MAX_EXECUTION_TIME_MS).println();
+            pw.print(KEY_MAX_JOB_COUNT_ACTIVE, MAX_JOB_COUNT_ACTIVE).println();
+            pw.print(KEY_MAX_JOB_COUNT_WORKING, MAX_JOB_COUNT_WORKING).println();
+            pw.print(KEY_MAX_JOB_COUNT_FREQUENT, MAX_JOB_COUNT_FREQUENT).println();
+            pw.print(KEY_MAX_JOB_COUNT_RARE, MAX_JOB_COUNT_RARE).println();
+            pw.print(KEY_MAX_JOB_COUNT_RESTRICTED, MAX_JOB_COUNT_RESTRICTED).println();
+            pw.print(KEY_RATE_LIMITING_WINDOW_MS, RATE_LIMITING_WINDOW_MS).println();
+            pw.print(KEY_MAX_JOB_COUNT_PER_RATE_LIMITING_WINDOW,
                     MAX_JOB_COUNT_PER_RATE_LIMITING_WINDOW).println();
-            pw.printPair(KEY_MAX_SESSION_COUNT_ACTIVE, MAX_SESSION_COUNT_ACTIVE).println();
-            pw.printPair(KEY_MAX_SESSION_COUNT_WORKING, MAX_SESSION_COUNT_WORKING).println();
-            pw.printPair(KEY_MAX_SESSION_COUNT_FREQUENT, MAX_SESSION_COUNT_FREQUENT).println();
-            pw.printPair(KEY_MAX_SESSION_COUNT_RARE, MAX_SESSION_COUNT_RARE).println();
-            pw.printPair(KEY_MAX_SESSION_COUNT_RESTRICTED, MAX_SESSION_COUNT_RESTRICTED).println();
-            pw.printPair(KEY_MAX_SESSION_COUNT_PER_RATE_LIMITING_WINDOW,
+            pw.print(KEY_MAX_SESSION_COUNT_ACTIVE, MAX_SESSION_COUNT_ACTIVE).println();
+            pw.print(KEY_MAX_SESSION_COUNT_WORKING, MAX_SESSION_COUNT_WORKING).println();
+            pw.print(KEY_MAX_SESSION_COUNT_FREQUENT, MAX_SESSION_COUNT_FREQUENT).println();
+            pw.print(KEY_MAX_SESSION_COUNT_RARE, MAX_SESSION_COUNT_RARE).println();
+            pw.print(KEY_MAX_SESSION_COUNT_RESTRICTED, MAX_SESSION_COUNT_RESTRICTED).println();
+            pw.print(KEY_MAX_SESSION_COUNT_PER_RATE_LIMITING_WINDOW,
                     MAX_SESSION_COUNT_PER_RATE_LIMITING_WINDOW).println();
-            pw.printPair(KEY_TIMING_SESSION_COALESCING_DURATION_MS,
+            pw.print(KEY_TIMING_SESSION_COALESCING_DURATION_MS,
                     TIMING_SESSION_COALESCING_DURATION_MS).println();
-            pw.printPair(KEY_MIN_QUOTA_CHECK_DELAY_MS, MIN_QUOTA_CHECK_DELAY_MS).println();
+            pw.print(KEY_MIN_QUOTA_CHECK_DELAY_MS, MIN_QUOTA_CHECK_DELAY_MS).println();
             pw.decreaseIndent();
         }
 
diff --git a/apex/jobscheduler/service/java/com/android/server/job/controllers/StateController.java b/apex/jobscheduler/service/java/com/android/server/job/controllers/StateController.java
index 51be38b..71c7599 100644
--- a/apex/jobscheduler/service/java/com/android/server/job/controllers/StateController.java
+++ b/apex/jobscheduler/service/java/com/android/server/job/controllers/StateController.java
@@ -19,10 +19,10 @@
 import static com.android.server.job.JobSchedulerService.DEBUG;
 
 import android.content.Context;
+import android.util.IndentingPrintWriter;
 import android.util.Slog;
 import android.util.proto.ProtoOutputStream;
 
-import com.android.internal.util.IndentingPrintWriter;
 import com.android.server.job.JobSchedulerService;
 import com.android.server.job.JobSchedulerService.Constants;
 import com.android.server.job.StateChangedListener;
diff --git a/apex/jobscheduler/service/java/com/android/server/job/controllers/StorageController.java b/apex/jobscheduler/service/java/com/android/server/job/controllers/StorageController.java
index 51187df..0731918 100644
--- a/apex/jobscheduler/service/java/com/android/server/job/controllers/StorageController.java
+++ b/apex/jobscheduler/service/java/com/android/server/job/controllers/StorageController.java
@@ -24,12 +24,12 @@
 import android.content.IntentFilter;
 import android.os.UserHandle;
 import android.util.ArraySet;
+import android.util.IndentingPrintWriter;
 import android.util.Log;
 import android.util.Slog;
 import android.util.proto.ProtoOutputStream;
 
 import com.android.internal.annotations.VisibleForTesting;
-import com.android.internal.util.IndentingPrintWriter;
 import com.android.server.job.JobSchedulerService;
 import com.android.server.job.StateControllerProto;
 import com.android.server.storage.DeviceStorageMonitorService;
diff --git a/apex/jobscheduler/service/java/com/android/server/job/controllers/TimeController.java b/apex/jobscheduler/service/java/com/android/server/job/controllers/TimeController.java
index 1bb9e96..361ebe5 100644
--- a/apex/jobscheduler/service/java/com/android/server/job/controllers/TimeController.java
+++ b/apex/jobscheduler/service/java/com/android/server/job/controllers/TimeController.java
@@ -31,6 +31,7 @@
 import android.os.UserHandle;
 import android.os.WorkSource;
 import android.provider.Settings;
+import android.util.IndentingPrintWriter;
 import android.util.KeyValueListParser;
 import android.util.Log;
 import android.util.Slog;
@@ -38,7 +39,6 @@
 import android.util.proto.ProtoOutputStream;
 
 import com.android.internal.annotations.VisibleForTesting;
-import com.android.internal.util.IndentingPrintWriter;
 import com.android.server.job.ConstantsProto;
 import com.android.server.job.JobSchedulerService;
 import com.android.server.job.StateControllerProto;
@@ -498,7 +498,7 @@
             pw.println();
             pw.println("TimeController:");
             pw.increaseIndent();
-            pw.printPair(KEY_USE_NON_WAKEUP_ALARM_FOR_DELAY,
+            pw.print(KEY_USE_NON_WAKEUP_ALARM_FOR_DELAY,
                     USE_NON_WAKEUP_ALARM_FOR_DELAY).println();
             pw.decreaseIndent();
         }
diff --git a/apex/jobscheduler/service/java/com/android/server/job/restrictions/JobRestriction.java b/apex/jobscheduler/service/java/com/android/server/job/restrictions/JobRestriction.java
index e180c55..ac59f95 100644
--- a/apex/jobscheduler/service/java/com/android/server/job/restrictions/JobRestriction.java
+++ b/apex/jobscheduler/service/java/com/android/server/job/restrictions/JobRestriction.java
@@ -17,9 +17,9 @@
 package com.android.server.job.restrictions;
 
 import android.app.job.JobInfo;
+import android.util.IndentingPrintWriter;
 import android.util.proto.ProtoOutputStream;
 
-import com.android.internal.util.IndentingPrintWriter;
 import com.android.server.job.JobSchedulerService;
 import com.android.server.job.controllers.JobStatus;
 
diff --git a/apex/jobscheduler/service/java/com/android/server/job/restrictions/ThermalStatusRestriction.java b/apex/jobscheduler/service/java/com/android/server/job/restrictions/ThermalStatusRestriction.java
index aa7696d..40c8ce0 100644
--- a/apex/jobscheduler/service/java/com/android/server/job/restrictions/ThermalStatusRestriction.java
+++ b/apex/jobscheduler/service/java/com/android/server/job/restrictions/ThermalStatusRestriction.java
@@ -19,9 +19,9 @@
 import android.app.job.JobParameters;
 import android.os.PowerManager;
 import android.os.PowerManager.OnThermalStatusChangedListener;
+import android.util.IndentingPrintWriter;
 import android.util.proto.ProtoOutputStream;
 
-import com.android.internal.util.IndentingPrintWriter;
 import com.android.server.job.JobSchedulerService;
 import com.android.server.job.JobSchedulerServiceDumpProto;
 import com.android.server.job.controllers.JobStatus;
diff --git a/apex/jobscheduler/service/java/com/android/server/usage/AppIdleHistory.java b/apex/jobscheduler/service/java/com/android/server/usage/AppIdleHistory.java
index 372ec98..4b8d6f3 100644
--- a/apex/jobscheduler/service/java/com/android/server/usage/AppIdleHistory.java
+++ b/apex/jobscheduler/service/java/com/android/server/usage/AppIdleHistory.java
@@ -36,6 +36,7 @@
 import android.os.SystemClock;
 import android.util.ArrayMap;
 import android.util.AtomicFile;
+import android.util.IndentingPrintWriter;
 import android.util.Slog;
 import android.util.SparseArray;
 import android.util.TimeUtils;
@@ -45,7 +46,6 @@
 import com.android.internal.util.CollectionUtils;
 import com.android.internal.util.FastXmlSerializer;
 import com.android.internal.util.FrameworkStatsLog;
-import com.android.internal.util.IndentingPrintWriter;
 
 import libcore.io.IoUtils;
 
diff --git a/apex/jobscheduler/service/java/com/android/server/usage/AppStandbyController.java b/apex/jobscheduler/service/java/com/android/server/usage/AppStandbyController.java
index 5bd9420..182e4e4 100644
--- a/apex/jobscheduler/service/java/com/android/server/usage/AppStandbyController.java
+++ b/apex/jobscheduler/service/java/com/android/server/usage/AppStandbyController.java
@@ -95,6 +95,7 @@
 import android.telephony.TelephonyManager;
 import android.util.ArrayMap;
 import android.util.ArraySet;
+import android.util.IndentingPrintWriter;
 import android.util.KeyValueListParser;
 import android.util.Slog;
 import android.util.SparseArray;
@@ -109,7 +110,6 @@
 import com.android.internal.app.IBatteryStats;
 import com.android.internal.util.ArrayUtils;
 import com.android.internal.util.ConcurrentUtils;
-import com.android.internal.util.IndentingPrintWriter;
 import com.android.server.LocalServices;
 import com.android.server.pm.parsing.pkg.AndroidPackage;
 import com.android.server.usage.AppIdleHistory.AppUsageHistory;
diff --git a/config/preloaded-classes b/config/preloaded-classes
index 36e73d2..feb0692 100644
--- a/config/preloaded-classes
+++ b/config/preloaded-classes
@@ -6315,6 +6315,7 @@
 android.util.FloatProperty
 android.util.Half
 android.util.IconDrawableFactory
+android.util.IndentingPrintWriter
 android.util.IntArray
 android.util.IntProperty
 android.util.JsonReader$1
@@ -9113,7 +9114,6 @@
 com.android.internal.util.HexDump
 com.android.internal.util.IState
 com.android.internal.util.ImageUtils
-com.android.internal.util.IndentingPrintWriter
 com.android.internal.util.IntPair
 com.android.internal.util.JournaledFile
 com.android.internal.util.LatencyTracker$1
diff --git a/core/java/android/util/IndentingPrintWriter.java b/core/java/android/util/IndentingPrintWriter.java
new file mode 100644
index 0000000..9d2ebe8
--- /dev/null
+++ b/core/java/android/util/IndentingPrintWriter.java
@@ -0,0 +1,252 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.util;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+
+import java.io.PrintWriter;
+import java.io.Writer;
+import java.util.Arrays;
+
+/**
+ * Lightweight wrapper around {@link PrintWriter} that automatically indents
+ * newlines based on internal state. It also automatically wraps long lines
+ * based on given line length.
+ * <p>
+ * Delays writing indent until first actual write on a newline, enabling indent
+ * modification after newline.
+ *
+ * @hide
+ */
+public class IndentingPrintWriter extends PrintWriter {
+    private final String mSingleIndent;
+    private final int mWrapLength;
+
+    /** Mutable version of current indent */
+    private StringBuilder mIndentBuilder = new StringBuilder();
+    /** Cache of current {@link #mIndentBuilder} value */
+    private char[] mCurrentIndent;
+    /** Length of current line being built, excluding any indent */
+    private int mCurrentLength;
+
+    /**
+     * Flag indicating if we're currently sitting on an empty line, and that
+     * next write should be prefixed with the current indent.
+     */
+    private boolean mEmptyLine = true;
+
+    private char[] mSingleChar = new char[1];
+
+    public IndentingPrintWriter(@NonNull Writer writer) {
+        this(writer, "  ", -1);
+    }
+
+    public IndentingPrintWriter(@NonNull Writer writer, @NonNull String singleIndent) {
+        this(writer, singleIndent, null, -1);
+    }
+
+    public IndentingPrintWriter(@NonNull Writer writer, @NonNull String singleIndent,
+            String prefix) {
+        this(writer, singleIndent, prefix, -1);
+    }
+
+    public IndentingPrintWriter(@NonNull Writer writer, @NonNull String singleIndent,
+            int wrapLength) {
+        this(writer, singleIndent, null, wrapLength);
+    }
+
+    public IndentingPrintWriter(@NonNull Writer writer, @NonNull String singleIndent,
+            @Nullable String prefix, int wrapLength) {
+        super(writer);
+        mSingleIndent = singleIndent;
+        mWrapLength = wrapLength;
+        if (prefix != null) {
+            mIndentBuilder.append(prefix);
+        }
+    }
+
+    /**
+     * Overrides the indent set in the constructor for the next printed line.
+     *
+     * @deprecated Use the "prefix" constructor parameter
+     * @hide
+     */
+    @NonNull
+    @Deprecated
+    public IndentingPrintWriter setIndent(@NonNull String indent) {
+        mIndentBuilder.setLength(0);
+        mIndentBuilder.append(indent);
+        mCurrentIndent = null;
+        return this;
+    }
+
+    /**
+     * Overrides the indent set in the constructor with {@code singleIndent} repeated {@code indent}
+     * times.
+     *
+     * @deprecated Use the "prefix" constructor parameter
+     * @hide
+     */
+    @NonNull
+    @Deprecated
+    public IndentingPrintWriter setIndent(int indent) {
+        mIndentBuilder.setLength(0);
+        for (int i = 0; i < indent; i++) {
+            increaseIndent();
+        }
+        return this;
+    }
+
+    /**
+     * Increases the indent starting with the next printed line.
+     */
+    @NonNull
+    public IndentingPrintWriter increaseIndent() {
+        mIndentBuilder.append(mSingleIndent);
+        mCurrentIndent = null;
+        return this;
+    }
+
+    /**
+     * Decreases the indent starting with the next printed line.
+     */
+    @NonNull
+    public IndentingPrintWriter decreaseIndent() {
+        mIndentBuilder.delete(0, mSingleIndent.length());
+        mCurrentIndent = null;
+        return this;
+    }
+
+    /**
+     * Prints a key-value pair.
+     */
+    @NonNull
+    public IndentingPrintWriter print(@NonNull String key, @Nullable Object value) {
+        String string;
+        if (value == null) {
+            string = "null";
+        } else if (value.getClass().isArray()) {
+            if (value.getClass() == boolean[].class) {
+                string = Arrays.toString((boolean[]) value);
+            } else if (value.getClass() == byte[].class) {
+                string = Arrays.toString((byte[]) value);
+            } else if (value.getClass() == char[].class) {
+                string = Arrays.toString((char[]) value);
+            } else if (value.getClass() == double[].class) {
+                string = Arrays.toString((double[]) value);
+            } else if (value.getClass() == float[].class) {
+                string = Arrays.toString((float[]) value);
+            } else if (value.getClass() == int[].class) {
+                string = Arrays.toString((int[]) value);
+            } else if (value.getClass() == long[].class) {
+                string = Arrays.toString((long[]) value);
+            } else if (value.getClass() == short[].class) {
+                string = Arrays.toString((short[]) value);
+            } else {
+                string = Arrays.toString((Object[]) value);
+            }
+        } else {
+            string = String.valueOf(value);
+        }
+        print(key + "=" + string + " ");
+        return this;
+    }
+
+    /**
+     * Prints a key-value pair, using hexadecimal format for the value.
+     */
+    @NonNull
+    public IndentingPrintWriter printHexInt(@NonNull String key, int value) {
+        print(key + "=0x" + Integer.toHexString(value) + " ");
+        return this;
+    }
+
+    @Override
+    public void println() {
+        write('\n');
+    }
+
+    @Override
+    public void write(int c) {
+        mSingleChar[0] = (char) c;
+        write(mSingleChar, 0, 1);
+    }
+
+    @Override
+    public void write(@NonNull String s, int off, int len) {
+        final char[] buf = new char[len];
+        s.getChars(off, len - off, buf, 0);
+        write(buf, 0, len);
+    }
+
+    @Override
+    public void write(@NonNull char[] buf, int offset, int count) {
+        final int indentLength = mIndentBuilder.length();
+        final int bufferEnd = offset + count;
+        int lineStart = offset;
+        int lineEnd = offset;
+
+        // March through incoming buffer looking for newlines
+        while (lineEnd < bufferEnd) {
+            char ch = buf[lineEnd++];
+            mCurrentLength++;
+            if (ch == '\n') {
+                maybeWriteIndent();
+                super.write(buf, lineStart, lineEnd - lineStart);
+                lineStart = lineEnd;
+                mEmptyLine = true;
+                mCurrentLength = 0;
+            }
+
+            // Wrap if we've pushed beyond line length
+            if (mWrapLength > 0 && mCurrentLength >= mWrapLength - indentLength) {
+                if (!mEmptyLine) {
+                    // Give ourselves a fresh line to work with
+                    super.write('\n');
+                    mEmptyLine = true;
+                    mCurrentLength = lineEnd - lineStart;
+                } else {
+                    // We need more than a dedicated line, slice it hard
+                    maybeWriteIndent();
+                    super.write(buf, lineStart, lineEnd - lineStart);
+                    super.write('\n');
+                    mEmptyLine = true;
+                    lineStart = lineEnd;
+                    mCurrentLength = 0;
+                }
+            }
+        }
+
+        if (lineStart != lineEnd) {
+            maybeWriteIndent();
+            super.write(buf, lineStart, lineEnd - lineStart);
+        }
+    }
+
+    private void maybeWriteIndent() {
+        if (mEmptyLine) {
+            mEmptyLine = false;
+            if (mIndentBuilder.length() != 0) {
+                if (mCurrentIndent == null) {
+                    mCurrentIndent = mIndentBuilder.toString().toCharArray();
+                }
+                super.write(mCurrentIndent, 0, mCurrentIndent.length);
+            }
+        }
+    }
+}
diff --git a/core/java/com/android/internal/util/IndentingPrintWriter.java b/core/java/com/android/internal/util/IndentingPrintWriter.java
index 34c6a05..2435afb 100644
--- a/core/java/com/android/internal/util/IndentingPrintWriter.java
+++ b/core/java/com/android/internal/util/IndentingPrintWriter.java
@@ -18,163 +18,61 @@
 
 import android.compat.annotation.UnsupportedAppUsage;
 
-import java.io.PrintWriter;
 import java.io.Writer;
-import java.util.Arrays;
 
 /**
- * Lightweight wrapper around {@link PrintWriter} that automatically indents
- * newlines based on internal state. It also automatically wraps long lines
- * based on given line length.
- * <p>
- * Delays writing indent until first actual write on a newline, enabling indent
- * modification after newline.
+ * @deprecated Use {@link android.util.IndentingPrintWriter}
  */
-public class IndentingPrintWriter extends PrintWriter {
-    private final String mSingleIndent;
-    private final int mWrapLength;
-
-    /** Mutable version of current indent */
-    private StringBuilder mIndentBuilder = new StringBuilder();
-    /** Cache of current {@link #mIndentBuilder} value */
-    private char[] mCurrentIndent;
-    /** Length of current line being built, excluding any indent */
-    private int mCurrentLength;
-
-    /**
-     * Flag indicating if we're currently sitting on an empty line, and that
-     * next write should be prefixed with the current indent.
-     */
-    private boolean mEmptyLine = true;
-
-    private char[] mSingleChar = new char[1];
+@Deprecated
+public class IndentingPrintWriter extends android.util.IndentingPrintWriter {
 
     @UnsupportedAppUsage
     public IndentingPrintWriter(Writer writer, String singleIndent) {
-        this(writer, singleIndent, -1);
+        super(writer, singleIndent, -1);
     }
 
     public IndentingPrintWriter(Writer writer, String singleIndent, int wrapLength) {
-        super(writer);
-        mSingleIndent = singleIndent;
-        mWrapLength = wrapLength;
+        super(writer, singleIndent, wrapLength);
+    }
+
+    public IndentingPrintWriter(Writer writer, String singleIndent, String prefix, int wrapLength) {
+        super(writer, singleIndent, prefix, wrapLength);
     }
 
     public IndentingPrintWriter setIndent(String indent) {
-        mIndentBuilder.setLength(0);
-        mIndentBuilder.append(indent);
-        mCurrentIndent = null;
+        super.setIndent(indent);
         return this;
     }
 
     public IndentingPrintWriter setIndent(int indent) {
-        mIndentBuilder.setLength(0);
-        for (int i = 0; i < indent; i++) {
-            increaseIndent();
-        }
+        super.setIndent(indent);
         return this;
     }
 
     @UnsupportedAppUsage
     public IndentingPrintWriter increaseIndent() {
-        mIndentBuilder.append(mSingleIndent);
-        mCurrentIndent = null;
+        super.increaseIndent();
         return this;
     }
 
     @UnsupportedAppUsage
     public IndentingPrintWriter decreaseIndent() {
-        mIndentBuilder.delete(0, mSingleIndent.length());
-        mCurrentIndent = null;
+        super.decreaseIndent();
         return this;
     }
 
     public IndentingPrintWriter printPair(String key, Object value) {
-        print(key + "=" + String.valueOf(value) + " ");
+        super.print(key, value);
         return this;
     }
 
     public IndentingPrintWriter printPair(String key, Object[] value) {
-        print(key + "=" + Arrays.toString(value) + " ");
+        super.print(key, value);
         return this;
     }
 
     public IndentingPrintWriter printHexPair(String key, int value) {
-        print(key + "=0x" + Integer.toHexString(value) + " ");
+        super.printHexInt(key, value);
         return this;
     }
-
-    @Override
-    public void println() {
-        write('\n');
-    }
-
-    @Override
-    public void write(int c) {
-        mSingleChar[0] = (char) c;
-        write(mSingleChar, 0, 1);
-    }
-
-    @Override
-    public void write(String s, int off, int len) {
-        final char[] buf = new char[len];
-        s.getChars(off, len - off, buf, 0);
-        write(buf, 0, len);
-    }
-
-    @Override
-    public void write(char[] buf, int offset, int count) {
-        final int indentLength = mIndentBuilder.length();
-        final int bufferEnd = offset + count;
-        int lineStart = offset;
-        int lineEnd = offset;
-
-        // March through incoming buffer looking for newlines
-        while (lineEnd < bufferEnd) {
-            char ch = buf[lineEnd++];
-            mCurrentLength++;
-            if (ch == '\n') {
-                maybeWriteIndent();
-                super.write(buf, lineStart, lineEnd - lineStart);
-                lineStart = lineEnd;
-                mEmptyLine = true;
-                mCurrentLength = 0;
-            }
-
-            // Wrap if we've pushed beyond line length
-            if (mWrapLength > 0 && mCurrentLength >= mWrapLength - indentLength) {
-                if (!mEmptyLine) {
-                    // Give ourselves a fresh line to work with
-                    super.write('\n');
-                    mEmptyLine = true;
-                    mCurrentLength = lineEnd - lineStart;
-                } else {
-                    // We need more than a dedicated line, slice it hard
-                    maybeWriteIndent();
-                    super.write(buf, lineStart, lineEnd - lineStart);
-                    super.write('\n');
-                    mEmptyLine = true;
-                    lineStart = lineEnd;
-                    mCurrentLength = 0;
-                }
-            }
-        }
-
-        if (lineStart != lineEnd) {
-            maybeWriteIndent();
-            super.write(buf, lineStart, lineEnd - lineStart);
-        }
-    }
-
-    private void maybeWriteIndent() {
-        if (mEmptyLine) {
-            mEmptyLine = false;
-            if (mIndentBuilder.length() != 0) {
-                if (mCurrentIndent == null) {
-                    mCurrentIndent = mIndentBuilder.toString().toCharArray();
-                }
-                super.write(mCurrentIndent, 0, mCurrentIndent.length);
-            }
-        }
-    }
 }
diff --git a/core/java/com/android/internal/util/StatLogger.java b/core/java/com/android/internal/util/StatLogger.java
index ca6acd6..29568d5 100644
--- a/core/java/com/android/internal/util/StatLogger.java
+++ b/core/java/com/android/internal/util/StatLogger.java
@@ -17,6 +17,7 @@
 package com.android.internal.util;
 
 import android.os.SystemClock;
+import android.util.IndentingPrintWriter;
 import android.util.Slog;
 import android.util.proto.ProtoOutputStream;
 
diff --git a/core/tests/benchmarks/src/com/android/internal/util/IndentingPrintWriterBenchmark.java b/core/tests/benchmarks/src/com/android/internal/util/IndentingPrintWriterBenchmark.java
index 1112d5c..3412994 100644
--- a/core/tests/benchmarks/src/com/android/internal/util/IndentingPrintWriterBenchmark.java
+++ b/core/tests/benchmarks/src/com/android/internal/util/IndentingPrintWriterBenchmark.java
@@ -16,9 +16,12 @@
 
 package com.android.internal.util;
 
+import android.util.IndentingPrintWriter;
+
 import com.google.android.collect.Lists;
 import com.google.caliper.AfterExperiment;
 import com.google.caliper.BeforeExperiment;
+
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
@@ -92,7 +95,7 @@
     public void timePairIndenting(int reps) {
         final int value = 1024;
         for (int i = 0; i < reps; i++) {
-            mIndenting.printPair("key", value);
+            mIndenting.print("key", value);
         }
     }
 
@@ -135,7 +138,7 @@
             pw.println();
         }
 
-        public void dumpIndenting(IndentingPrintWriter pw) {
+        public void dumpIndenting(android.util.IndentingPrintWriter pw) {
             dumpSelf(pw);
 
             if (children != null) {
diff --git a/core/tests/utiltests/src/com/android/internal/util/IndentingPrintWriterTest.java b/core/tests/utiltests/src/android/util/IndentingPrintWriterTest.java
similarity index 82%
rename from core/tests/utiltests/src/com/android/internal/util/IndentingPrintWriterTest.java
rename to core/tests/utiltests/src/android/util/IndentingPrintWriterTest.java
index 6773612..3c38c26 100644
--- a/core/tests/utiltests/src/com/android/internal/util/IndentingPrintWriterTest.java
+++ b/core/tests/utiltests/src/android/util/IndentingPrintWriterTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2013 The Android Open Source Project
+ * Copyright (C) 2020 The Android Open Source Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -14,9 +14,15 @@
  * limitations under the License.
  */
 
-package com.android.internal.util;
+package android.util;
 
-import junit.framework.TestCase;
+import static junit.framework.Assert.assertEquals;
+
+import androidx.test.runner.AndroidJUnit4;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
 
 import java.io.ByteArrayOutputStream;
 import java.io.PrintWriter;
@@ -24,19 +30,19 @@
 /**
  * Tests for {@link IndentingPrintWriter}.
  */
-public class IndentingPrintWriterTest extends TestCase {
+@RunWith(AndroidJUnit4.class)
+public class IndentingPrintWriterTest {
 
     private ByteArrayOutputStream mStream;
     private PrintWriter mWriter;
 
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-
+    @Before
+    public void setUp() throws Exception {
         mStream = new ByteArrayOutputStream();
         mWriter = new PrintWriter(mStream);
     }
 
+    @Test
     public void testMultipleIndents() throws Exception {
         final IndentingPrintWriter pw = new IndentingPrintWriter(mWriter, "  ");
 
@@ -59,6 +65,7 @@
         assertEquals("Hello\n  World\n    And\n  Goodbye\nWorld\n", mStream.toString());
     }
 
+    @Test
     public void testAdjustIndentAfterNewline() throws Exception {
         final IndentingPrintWriter pw = new IndentingPrintWriter(mWriter, "  ");
 
@@ -70,6 +77,7 @@
         assertEquals("Hello\n  World\n", mStream.toString());
     }
 
+    @Test
     public void testWrapping() throws Exception {
         final IndentingPrintWriter pw = new IndentingPrintWriter(mWriter, "", 10);
 
@@ -82,6 +90,7 @@
         assertEquals("dog cat \ncow meow ", mStream.toString());
     }
 
+    @Test
     public void testWrappingIndented() throws Exception {
         final IndentingPrintWriter pw = new IndentingPrintWriter(mWriter, "    ", 10);
 
@@ -96,6 +105,7 @@
         assertEquals("    dog \n    meow \n    a b \n    cow ", mStream.toString());
     }
 
+    @Test
     public void testWrappingEmbeddedNewlines() throws Exception {
         final IndentingPrintWriter pw = new IndentingPrintWriter(mWriter, "  ", 10);
 
@@ -107,6 +117,7 @@
                 + "  nsectetu\n  r \n  adipisci\n  ng elit.\n", mStream.toString());
     }
 
+    @Test
     public void testWrappingSingleGiant() throws Exception {
         final IndentingPrintWriter pw = new IndentingPrintWriter(mWriter, "  ", 10);
 
@@ -118,6 +129,7 @@
                 + "  ectetur \n  adipisci\n  ng elit.\n", mStream.toString());
     }
 
+    @Test
     public void testWrappingPrefixedGiant() throws Exception {
         final IndentingPrintWriter pw = new IndentingPrintWriter(mWriter, "  ", 10);
 
@@ -129,4 +141,15 @@
         assertEquals("  foo\n  Lorem ip\n  sum dolo\n  r sit am\n  et, cons\n"
                 + "  ectetur \n  adipisci\n  ng elit.\n", mStream.toString());
     }
+
+    @Test
+    public void testArrayValue() {
+        final IndentingPrintWriter pw = new IndentingPrintWriter(mWriter, "  ");
+        pw.increaseIndent();
+        pw.print("strings", new String[]{"a", "b", "c"});
+        pw.print("ints", new int[]{1, 2});
+        pw.flush();
+
+        assertEquals("  strings=[a, b, c] ints=[1, 2] ", mStream.toString());
+    }
 }
diff --git a/services/core/java/com/android/server/AppStateTracker.java b/services/core/java/com/android/server/AppStateTracker.java
index 7c01f36..92cfc24 100644
--- a/services/core/java/com/android/server/AppStateTracker.java
+++ b/services/core/java/com/android/server/AppStateTracker.java
@@ -40,6 +40,7 @@
 import android.os.UserHandle;
 import android.provider.Settings;
 import android.util.ArraySet;
+import android.util.IndentingPrintWriter;
 import android.util.Pair;
 import android.util.Slog;
 import android.util.SparseBooleanArray;
@@ -51,7 +52,6 @@
 import com.android.internal.app.IAppOpsCallback;
 import com.android.internal.app.IAppOpsService;
 import com.android.internal.util.ArrayUtils;
-import com.android.internal.util.IndentingPrintWriter;
 import com.android.internal.util.StatLogger;
 import com.android.server.AppStateTrackerProto.ExemptedPackage;
 import com.android.server.AppStateTrackerProto.RunAnyInBackgroundRestrictedPackages;
diff --git a/services/core/java/com/android/server/utils/quota/QuotaTracker.java b/services/core/java/com/android/server/utils/quota/QuotaTracker.java
index 115b5c8..7a17c64 100644
--- a/services/core/java/com/android/server/utils/quota/QuotaTracker.java
+++ b/services/core/java/com/android/server/utils/quota/QuotaTracker.java
@@ -32,6 +32,7 @@
 import android.os.SystemClock;
 import android.os.UserHandle;
 import android.util.ArraySet;
+import android.util.IndentingPrintWriter;
 import android.util.Pair;
 import android.util.Slog;
 import android.util.SparseArrayMap;
@@ -41,7 +42,6 @@
 import com.android.internal.annotations.GuardedBy;
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.os.BackgroundThread;
-import com.android.internal.util.IndentingPrintWriter;
 import com.android.server.FgThread;
 import com.android.server.LocalServices;
 import com.android.server.SystemServiceManager;
diff --git a/services/tests/mockingservicestests/src/com/android/server/job/controllers/StateControllerTest.java b/services/tests/mockingservicestests/src/com/android/server/job/controllers/StateControllerTest.java
index 7a12b42..612e906 100644
--- a/services/tests/mockingservicestests/src/com/android/server/job/controllers/StateControllerTest.java
+++ b/services/tests/mockingservicestests/src/com/android/server/job/controllers/StateControllerTest.java
@@ -32,11 +32,11 @@
 import android.content.Context;
 import android.content.pm.PackageManagerInternal;
 import android.os.SystemClock;
+import android.util.IndentingPrintWriter;
 import android.util.proto.ProtoOutputStream;
 
 import androidx.test.runner.AndroidJUnit4;
 
-import com.android.internal.util.IndentingPrintWriter;
 import com.android.server.LocalServices;
 import com.android.server.job.JobSchedulerService;
 import com.android.server.job.JobSchedulerService.Constants;