Add feature flag for early-screen-timeout-detector
Bug: 261744687
Test: adbt build
Change-Id: I305bfe0363a93f0685d5976b3c156227f644ae33
diff --git a/AconfigFlags.bp b/AconfigFlags.bp
index edd9d3a..ce311d0 100644
--- a/AconfigFlags.bp
+++ b/AconfigFlags.bp
@@ -73,6 +73,7 @@
":android.provider.flags-aconfig-java{.generated_srcjars}",
":android.chre.flags-aconfig-java{.generated_srcjars}",
":android.speech.flags-aconfig-java{.generated_srcjars}",
+ ":power_flags_lib{.generated_srcjars}",
]
filegroup {
@@ -932,3 +933,10 @@
aconfig_declarations: "android.speech.flags-aconfig",
defaults: ["framework-minus-apex-aconfig-java-defaults"],
}
+
+// Power
+java_aconfig_library {
+ name: "power_flags_lib",
+ aconfig_declarations: "power_flags",
+ defaults: ["framework-minus-apex-aconfig-java-defaults"],
+}
diff --git a/services/core/java/com/android/server/power/PowerManagerService.java b/services/core/java/com/android/server/power/PowerManagerService.java
index 2128c991..e226953 100644
--- a/services/core/java/com/android/server/power/PowerManagerService.java
+++ b/services/core/java/com/android/server/power/PowerManagerService.java
@@ -139,6 +139,7 @@
import com.android.server.power.batterysaver.BatterySaverPolicy;
import com.android.server.power.batterysaver.BatterySaverStateMachine;
import com.android.server.power.batterysaver.BatterySavingStats;
+import com.android.server.power.feature.PowerManagerFlags;
import dalvik.annotation.optimization.NeverCompile;
@@ -329,6 +330,8 @@
// True if battery saver is supported on this device.
private final boolean mBatterySaverSupported;
+ private final PowerManagerFlags mFeatureFlags;
+
private boolean mDisableScreenWakeLocksWhileCached;
private LightsManager mLightsManager;
@@ -1079,6 +1082,10 @@
DeviceConfigParameterProvider createDeviceConfigParameterProvider() {
return new DeviceConfigParameterProvider(DeviceConfigInterface.REAL);
}
+
+ PowerManagerFlags getFlags() {
+ return new PowerManagerFlags();
+ }
}
/** Interface for checking an app op permission */
@@ -1145,6 +1152,7 @@
mNativeWrapper = injector.createNativeWrapper();
mSystemProperties = injector.createSystemPropertiesWrapper();
mClock = injector.createClock();
+ mFeatureFlags = injector.getFlags();
mInjector = injector;
mHandlerThread = new ServiceThread(TAG,
@@ -4802,6 +4810,7 @@
mAmbientDisplaySuppressionController.dump(pw);
mLowPowerStandbyController.dump(pw);
+ mFeatureFlags.dump(pw);
}
private void dumpProto(FileDescriptor fd) {
diff --git a/services/core/java/com/android/server/power/feature/Android.bp b/services/core/java/com/android/server/power/feature/Android.bp
new file mode 100644
index 0000000..2295b41
--- /dev/null
+++ b/services/core/java/com/android/server/power/feature/Android.bp
@@ -0,0 +1,7 @@
+aconfig_declarations {
+ name: "power_flags",
+ package: "com.android.server.power.feature.flags",
+ srcs: [
+ "*.aconfig",
+ ],
+}
diff --git a/services/core/java/com/android/server/power/feature/PowerManagerFlags.java b/services/core/java/com/android/server/power/feature/PowerManagerFlags.java
new file mode 100644
index 0000000..a5a7069
--- /dev/null
+++ b/services/core/java/com/android/server/power/feature/PowerManagerFlags.java
@@ -0,0 +1,91 @@
+/*
+ * Copyright (C) 2023 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 com.android.server.power.feature;
+
+import android.text.TextUtils;
+import android.util.Slog;
+
+import com.android.server.power.feature.flags.Flags;
+
+import java.io.PrintWriter;
+import java.util.function.Supplier;
+
+/**
+ * Utility class to read the flags used in the power manager server.
+ */
+public class PowerManagerFlags {
+ private static final boolean DEBUG = false;
+ private static final String TAG = "PowerManagerFlags";
+
+ private final FlagState mEarlyScreenTimeoutDetectorFlagState = new FlagState(
+ Flags.FLAG_ENABLE_EARLY_SCREEN_TIMEOUT_DETECTOR,
+ Flags::enableEarlyScreenTimeoutDetector);
+
+ /** Returns whether early-screen-timeout-detector is enabled on not. */
+ public boolean isEarlyScreenTimeoutDetectorEnabled() {
+ return mEarlyScreenTimeoutDetectorFlagState.isEnabled();
+ }
+
+ /**
+ * dumps all flagstates
+ * @param pw printWriter
+ */
+ public void dump(PrintWriter pw) {
+ pw.println("PowerManagerFlags:");
+ pw.println(" " + mEarlyScreenTimeoutDetectorFlagState);
+ }
+
+ private static class FlagState {
+
+ private final String mName;
+
+ private final Supplier<Boolean> mFlagFunction;
+ private boolean mEnabledSet;
+ private boolean mEnabled;
+
+ private FlagState(String name, Supplier<Boolean> flagFunction) {
+ mName = name;
+ mFlagFunction = flagFunction;
+ }
+
+ private boolean isEnabled() {
+ if (mEnabledSet) {
+ if (DEBUG) {
+ Slog.d(TAG, mName + ": mEnabled. Recall = " + mEnabled);
+ }
+ return mEnabled;
+ }
+ mEnabled = mFlagFunction.get();
+ if (DEBUG) {
+ Slog.d(TAG, mName + ": mEnabled. Flag value = " + mEnabled);
+ }
+ mEnabledSet = true;
+ return mEnabled;
+ }
+
+ @Override
+ public String toString() {
+ // remove com.android.server.power.feature.flags. from the beginning of the name.
+ // align all isEnabled() values.
+ // Adjust lengths if we end up with longer names
+ final int nameLength = mName.length();
+ return TextUtils.substring(mName, 39, nameLength) + ": "
+ + TextUtils.formatSimple("%" + (91 - nameLength) + "s%s", " " , isEnabled())
+ + " (def:" + mFlagFunction.get() + ")";
+ }
+ }
+}
diff --git a/services/core/java/com/android/server/power/feature/power_flags.aconfig b/services/core/java/com/android/server/power/feature/power_flags.aconfig
new file mode 100644
index 0000000..c8c16db
--- /dev/null
+++ b/services/core/java/com/android/server/power/feature/power_flags.aconfig
@@ -0,0 +1,11 @@
+package: "com.android.server.power.feature.flags"
+
+# Important: Flags must be accessed through PowerManagerFlags.
+
+flag {
+ name: "enable_early_screen_timeout_detector"
+ namespace: "power_manager"
+ description: "Feature flag for Early Screen Timeout detector"
+ bug: "309861917"
+ is_fixed_read_only: true
+}