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;