feat: Add option to clear home screen in settings (#6125)

Signed-off-by: abhixv <abhi.sharma1@hotmail.com>
This commit is contained in:
Abhishek Sharma
2025-12-20 03:26:30 +05:30
committed by Pun Butrach
parent 9898749619
commit 5f3a03f4fb
1577 changed files with 112563 additions and 80248 deletions
@@ -1,13 +1,13 @@
package com.android.systemui.shared;
// TODO(b/303773055): Remove the annotation after access issue is resolved.
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.function.BiPredicate;
import java.util.function.Predicate;
/** @hide */
public class CustomFeatureFlags implements FeatureFlags {
@@ -17,182 +17,56 @@ public class CustomFeatureFlags implements FeatureFlags {
mGetValueImpl = getValueImpl;
}
@Override
public boolean ambientAod() {
return getValue(Flags.FLAG_AMBIENT_AOD,
FeatureFlags::ambientAod);
}
@Override
public boolean bouncerAreaExclusion() {
return getValue(Flags.FLAG_BOUNCER_AREA_EXCLUSION,
FeatureFlags::bouncerAreaExclusion);
FeatureFlags::bouncerAreaExclusion);
}
@Override
public boolean clockReactiveSmartspaceLayout() {
return getValue(Flags.FLAG_CLOCK_REACTIVE_SMARTSPACE_LAYOUT,
FeatureFlags::clockReactiveSmartspaceLayout);
}
@Override
public boolean clockReactiveVariants() {
return getValue(Flags.FLAG_CLOCK_REACTIVE_VARIANTS,
FeatureFlags::clockReactiveVariants);
}
@Override
public boolean cursorHotCorner() {
return getValue(Flags.FLAG_CURSOR_HOT_CORNER,
FeatureFlags::cursorHotCorner);
}
@Override
public boolean enableHomeDelay() {
return getValue(Flags.FLAG_ENABLE_HOME_DELAY,
FeatureFlags::enableHomeDelay);
FeatureFlags::enableHomeDelay);
}
@Override
public boolean enableLppSqueezeEffect() {
return getValue(Flags.FLAG_ENABLE_LPP_SQUEEZE_EFFECT,
FeatureFlags::enableLppSqueezeEffect);
}
@Override
public boolean exampleSharedFlag() {
return getValue(Flags.FLAG_EXAMPLE_SHARED_FLAG,
FeatureFlags::exampleSharedFlag);
FeatureFlags::exampleSharedFlag);
}
@Override
public boolean extendedWallpaperEffects() {
return getValue(Flags.FLAG_EXTENDED_WALLPAPER_EFFECTS,
FeatureFlags::extendedWallpaperEffects);
}
@Override
public boolean lockscreenCustomClocks() {
return getValue(Flags.FLAG_LOCKSCREEN_CUSTOM_CLOCKS,
FeatureFlags::lockscreenCustomClocks);
}
@Override
public boolean newCustomizationPickerUi() {
return getValue(Flags.FLAG_NEW_CUSTOMIZATION_PICKER_UI,
FeatureFlags::newCustomizationPickerUi);
}
@Override
public boolean newTouchpadGesturesTutorial() {
return getValue(Flags.FLAG_NEW_TOUCHPAD_GESTURES_TUTORIAL,
FeatureFlags::newTouchpadGesturesTutorial);
}
@Override
public boolean returnAnimationFrameworkLibrary() {
return getValue(Flags.FLAG_RETURN_ANIMATION_FRAMEWORK_LIBRARY,
FeatureFlags::returnAnimationFrameworkLibrary);
FeatureFlags::returnAnimationFrameworkLibrary);
}
@Override
public boolean returnAnimationFrameworkLongLived() {
return getValue(Flags.FLAG_RETURN_ANIMATION_FRAMEWORK_LONG_LIVED,
FeatureFlags::returnAnimationFrameworkLongLived);
}
@Override
public boolean screenshotContextUrl() {
return getValue(Flags.FLAG_SCREENSHOT_CONTEXT_URL,
FeatureFlags::screenshotContextUrl);
}
@Override
public boolean shadeAllowBackGesture() {
return getValue(Flags.FLAG_SHADE_ALLOW_BACK_GESTURE,
FeatureFlags::shadeAllowBackGesture);
FeatureFlags::shadeAllowBackGesture);
}
@Override
public boolean sidefpsControllerRefactor() {
return getValue(Flags.FLAG_SIDEFPS_CONTROLLER_REFACTOR,
FeatureFlags::sidefpsControllerRefactor);
}
@Override
public boolean smartspaceRemoteviewsIntentHandler() {
return getValue(Flags.FLAG_SMARTSPACE_REMOTEVIEWS_INTENT_HANDLER,
FeatureFlags::smartspaceRemoteviewsIntentHandler);
}
@Override
public boolean smartspaceSportsCardBackground() {
return getValue(Flags.FLAG_SMARTSPACE_SPORTS_CARD_BACKGROUND,
FeatureFlags::smartspaceSportsCardBackground);
}
@Override
public boolean smartspaceUiUpdate() {
return getValue(Flags.FLAG_SMARTSPACE_UI_UPDATE,
FeatureFlags::smartspaceUiUpdate);
}
@Override
public boolean smartspaceUiUpdateResources() {
return getValue(Flags.FLAG_SMARTSPACE_UI_UPDATE_RESOURCES,
FeatureFlags::smartspaceUiUpdateResources);
}
@Override
public boolean statusBarConnectedDisplays() {
return getValue(Flags.FLAG_STATUS_BAR_CONNECTED_DISPLAYS,
FeatureFlags::statusBarConnectedDisplays);
}
@Override
public boolean threeButtonCornerSwipe() {
return getValue(Flags.FLAG_THREE_BUTTON_CORNER_SWIPE,
FeatureFlags::threeButtonCornerSwipe);
}
@Override
public boolean usePreferredImageEditor() {
return getValue(Flags.FLAG_USE_PREFERRED_IMAGE_EDITOR,
FeatureFlags::usePreferredImageEditor);
FeatureFlags::sidefpsControllerRefactor);
}
public boolean isFlagReadOnlyOptimized(String flagName) {
if (mReadOnlyFlagsSet.contains(flagName) &&
isOptimizationEnabled()) {
return true;
isOptimizationEnabled()) {
return true;
}
return false;
}
private boolean isOptimizationEnabled() {
return false;
}
@@ -203,60 +77,18 @@ public class CustomFeatureFlags implements FeatureFlags {
public List<String> getFlagNames() {
return Arrays.asList(
Flags.FLAG_AMBIENT_AOD,
Flags.FLAG_BOUNCER_AREA_EXCLUSION,
Flags.FLAG_CLOCK_REACTIVE_SMARTSPACE_LAYOUT,
Flags.FLAG_CLOCK_REACTIVE_VARIANTS,
Flags.FLAG_CURSOR_HOT_CORNER,
Flags.FLAG_ENABLE_HOME_DELAY,
Flags.FLAG_ENABLE_LPP_SQUEEZE_EFFECT,
Flags.FLAG_EXAMPLE_SHARED_FLAG,
Flags.FLAG_EXTENDED_WALLPAPER_EFFECTS,
Flags.FLAG_LOCKSCREEN_CUSTOM_CLOCKS,
Flags.FLAG_NEW_CUSTOMIZATION_PICKER_UI,
Flags.FLAG_NEW_TOUCHPAD_GESTURES_TUTORIAL,
Flags.FLAG_RETURN_ANIMATION_FRAMEWORK_LIBRARY,
Flags.FLAG_RETURN_ANIMATION_FRAMEWORK_LONG_LIVED,
Flags.FLAG_SCREENSHOT_CONTEXT_URL,
Flags.FLAG_SHADE_ALLOW_BACK_GESTURE,
Flags.FLAG_SIDEFPS_CONTROLLER_REFACTOR,
Flags.FLAG_SMARTSPACE_REMOTEVIEWS_INTENT_HANDLER,
Flags.FLAG_SMARTSPACE_SPORTS_CARD_BACKGROUND,
Flags.FLAG_SMARTSPACE_UI_UPDATE,
Flags.FLAG_SMARTSPACE_UI_UPDATE_RESOURCES,
Flags.FLAG_STATUS_BAR_CONNECTED_DISPLAYS,
Flags.FLAG_THREE_BUTTON_CORNER_SWIPE,
Flags.FLAG_USE_PREFERRED_IMAGE_EDITOR
Flags.FLAG_BOUNCER_AREA_EXCLUSION,
Flags.FLAG_ENABLE_HOME_DELAY,
Flags.FLAG_EXAMPLE_SHARED_FLAG,
Flags.FLAG_RETURN_ANIMATION_FRAMEWORK_LIBRARY,
Flags.FLAG_SHADE_ALLOW_BACK_GESTURE,
Flags.FLAG_SIDEFPS_CONTROLLER_REFACTOR
);
}
private Set<String> mReadOnlyFlagsSet = new HashSet<>(
Arrays.asList(
Flags.FLAG_AMBIENT_AOD,
Flags.FLAG_BOUNCER_AREA_EXCLUSION,
Flags.FLAG_CLOCK_REACTIVE_SMARTSPACE_LAYOUT,
Flags.FLAG_CLOCK_REACTIVE_VARIANTS,
Flags.FLAG_CURSOR_HOT_CORNER,
Flags.FLAG_ENABLE_HOME_DELAY,
Flags.FLAG_ENABLE_LPP_SQUEEZE_EFFECT,
Flags.FLAG_EXAMPLE_SHARED_FLAG,
Flags.FLAG_EXTENDED_WALLPAPER_EFFECTS,
Flags.FLAG_LOCKSCREEN_CUSTOM_CLOCKS,
Flags.FLAG_NEW_CUSTOMIZATION_PICKER_UI,
Flags.FLAG_NEW_TOUCHPAD_GESTURES_TUTORIAL,
Flags.FLAG_RETURN_ANIMATION_FRAMEWORK_LIBRARY,
Flags.FLAG_RETURN_ANIMATION_FRAMEWORK_LONG_LIVED,
Flags.FLAG_SCREENSHOT_CONTEXT_URL,
Flags.FLAG_SHADE_ALLOW_BACK_GESTURE,
Flags.FLAG_SIDEFPS_CONTROLLER_REFACTOR,
Flags.FLAG_SMARTSPACE_REMOTEVIEWS_INTENT_HANDLER,
Flags.FLAG_SMARTSPACE_SPORTS_CARD_BACKGROUND,
Flags.FLAG_SMARTSPACE_UI_UPDATE,
Flags.FLAG_SMARTSPACE_UI_UPDATE_RESOURCES,
Flags.FLAG_STATUS_BAR_CONNECTED_DISPLAYS,
Flags.FLAG_THREE_BUTTON_CORNER_SWIPE,
Flags.FLAG_USE_PREFERRED_IMAGE_EDITOR,
""
)
Arrays.asList(
""
)
);
}
@@ -3,6 +3,7 @@ package com.android.systemui.shared;
import java.util.HashMap;
import java.util.Map;
import java.util.function.Predicate;
/** @hide */
public class FakeFeatureFlagsImpl extends CustomFeatureFlags {
private final Map<String, Boolean> mFlagMap = new HashMap<>();
@@ -1,103 +1,24 @@
package com.android.systemui.shared;
// TODO(b/303773055): Remove the annotation after access issue is resolved.
/** @hide */
public interface FeatureFlags {
boolean ambientAod();
boolean bouncerAreaExclusion();
boolean clockReactiveSmartspaceLayout();
boolean clockReactiveVariants();
boolean cursorHotCorner();
boolean enableHomeDelay();
boolean enableLppSqueezeEffect();
boolean exampleSharedFlag();
boolean extendedWallpaperEffects();
boolean lockscreenCustomClocks();
boolean newCustomizationPickerUi();
boolean newTouchpadGesturesTutorial();
boolean returnAnimationFrameworkLibrary();
boolean returnAnimationFrameworkLongLived();
boolean screenshotContextUrl();
boolean shadeAllowBackGesture();
boolean sidefpsControllerRefactor();
boolean smartspaceRemoteviewsIntentHandler();
boolean smartspaceSportsCardBackground();
boolean smartspaceUiUpdate();
boolean smartspaceUiUpdateResources();
boolean statusBarConnectedDisplays();
boolean threeButtonCornerSwipe();
boolean usePreferredImageEditor();
}
@@ -1,174 +1,195 @@
package com.android.systemui.shared;
// TODO(b/303773055): Remove the annotation after access issue is resolved.
import com.android.quickstep.util.DeviceConfigHelper;
import java.nio.file.Files;
import java.nio.file.Paths;
/** @hide */
public final class FeatureFlagsImpl implements FeatureFlags {
@Override
private static final boolean isReadFromNew = Files.exists(Paths.get("/metadata/aconfig/boot/enable_only_new_storage"));
private static volatile boolean isCached = false;
private static volatile boolean biometrics_framework_is_cached = false;
private static volatile boolean systemui_is_cached = false;
private static boolean bouncerAreaExclusion = true;
private static boolean enableHomeDelay = false;
private static boolean exampleSharedFlag = false;
private static boolean returnAnimationFrameworkLibrary = false;
private static boolean shadeAllowBackGesture = false;
private static boolean sidefpsControllerRefactor = true;
public boolean ambientAod() {
return false;
private void init() {
boolean foundPackage = true;
sidefpsControllerRefactor = foundPackage;
bouncerAreaExclusion = foundPackage;
enableHomeDelay = foundPackage;
exampleSharedFlag = foundPackage;
returnAnimationFrameworkLibrary = foundPackage ;
shadeAllowBackGesture = foundPackage;
isCached = true;
}
private void load_overrides_biometrics_framework() {
try {
var properties = DeviceConfigHelper.Companion.getPrefs();
sidefpsControllerRefactor =
properties.getBoolean(Flags.FLAG_SIDEFPS_CONTROLLER_REFACTOR, true);
} catch (NullPointerException e) {
throw new RuntimeException(
"Cannot read value from namespace biometrics_framework "
+ "from DeviceConfig. It could be that the code using flag "
+ "executed before SettingsProvider initialization. Please use "
+ "fixed read-only flag by adding is_fixed_read_only: true in "
+ "flag declaration.",
e
);
}
biometrics_framework_is_cached = true;
}
private void load_overrides_systemui() {
try {
var properties = DeviceConfigHelper.Companion.getPrefs();
bouncerAreaExclusion =
properties.getBoolean(Flags.FLAG_BOUNCER_AREA_EXCLUSION, true);
enableHomeDelay =
properties.getBoolean(Flags.FLAG_ENABLE_HOME_DELAY, false);
exampleSharedFlag =
properties.getBoolean(Flags.FLAG_EXAMPLE_SHARED_FLAG, false);
returnAnimationFrameworkLibrary =
properties.getBoolean(Flags.FLAG_RETURN_ANIMATION_FRAMEWORK_LIBRARY, false);
shadeAllowBackGesture =
properties.getBoolean(Flags.FLAG_SHADE_ALLOW_BACK_GESTURE, false);
} catch (NullPointerException e) {
throw new RuntimeException(
"Cannot read value from namespace systemui "
+ "from DeviceConfig. It could be that the code using flag "
+ "executed before SettingsProvider initialization. Please use "
+ "fixed read-only flag by adding is_fixed_read_only: true in "
+ "flag declaration.",
e
);
}
systemui_is_cached = true;
}
@Override
public boolean bouncerAreaExclusion() {
return true;
if (isReadFromNew) {
if (!isCached) {
init();
}
} else {
if (!systemui_is_cached) {
load_overrides_systemui();
}
}
return bouncerAreaExclusion;
}
@Override
public boolean clockReactiveSmartspaceLayout() {
return false;
}
@Override
public boolean clockReactiveVariants() {
return false;
}
@Override
public boolean cursorHotCorner() {
return false;
}
@Override
public boolean enableHomeDelay() {
return false;
if (isReadFromNew) {
if (!isCached) {
init();
}
} else {
if (!systemui_is_cached) {
load_overrides_systemui();
}
}
return enableHomeDelay;
}
@Override
public boolean enableLppSqueezeEffect() {
return false;
}
@Override
public boolean exampleSharedFlag() {
return false;
if (isReadFromNew) {
if (!isCached) {
init();
}
} else {
if (!systemui_is_cached) {
load_overrides_systemui();
}
}
return exampleSharedFlag;
}
@Override
public boolean extendedWallpaperEffects() {
return false;
}
@Override
public boolean lockscreenCustomClocks() {
return false;
}
@Override
public boolean newCustomizationPickerUi() {
return false;
}
@Override
public boolean newTouchpadGesturesTutorial() {
return true;
}
@Override
public boolean returnAnimationFrameworkLibrary() {
return true;
if (isReadFromNew) {
if (!isCached) {
init();
}
} else {
if (!systemui_is_cached) {
load_overrides_systemui();
}
}
return returnAnimationFrameworkLibrary;
}
@Override
public boolean returnAnimationFrameworkLongLived() {
return true;
}
@Override
public boolean screenshotContextUrl() {
return false;
}
@Override
public boolean shadeAllowBackGesture() {
return false;
if (isReadFromNew) {
if (!isCached) {
init();
}
} else {
if (!systemui_is_cached) {
load_overrides_systemui();
}
}
return shadeAllowBackGesture;
}
@Override
public boolean sidefpsControllerRefactor() {
return true;
}
if (isReadFromNew) {
if (!isCached) {
init();
}
} else {
if (!biometrics_framework_is_cached) {
load_overrides_biometrics_framework();
}
}
return sidefpsControllerRefactor;
@Override
public boolean smartspaceRemoteviewsIntentHandler() {
return true;
}
@Override
public boolean smartspaceSportsCardBackground() {
return false;
}
@Override
public boolean smartspaceUiUpdate() {
return false;
}
@Override
public boolean smartspaceUiUpdateResources() {
return false;
}
@Override
public boolean statusBarConnectedDisplays() {
return false;
}
@Override
public boolean threeButtonCornerSwipe() {
return false;
}
@Override
public boolean usePreferredImageEditor() {
return false;
}
}
+12 -188
View File
@@ -1,226 +1,50 @@
package com.android.systemui.shared;
// TODO(b/303773055): Remove the annotation after access issue is resolved.
/** @hide */
public final class Flags {
/** @hide */
public static final String FLAG_AMBIENT_AOD = "com.android.systemui.shared.ambient_aod";
/** @hide */
public static final String FLAG_BOUNCER_AREA_EXCLUSION = "com.android.systemui.shared.bouncer_area_exclusion";
/** @hide */
public static final String FLAG_CLOCK_REACTIVE_SMARTSPACE_LAYOUT = "com.android.systemui.shared.clock_reactive_smartspace_layout";
/** @hide */
public static final String FLAG_CLOCK_REACTIVE_VARIANTS = "com.android.systemui.shared.clock_reactive_variants";
/** @hide */
public static final String FLAG_CURSOR_HOT_CORNER = "com.android.systemui.shared.cursor_hot_corner";
/** @hide */
public static final String FLAG_ENABLE_HOME_DELAY = "com.android.systemui.shared.enable_home_delay";
/** @hide */
public static final String FLAG_ENABLE_LPP_SQUEEZE_EFFECT = "com.android.systemui.shared.enable_lpp_squeeze_effect";
/** @hide */
public static final String FLAG_EXAMPLE_SHARED_FLAG = "com.android.systemui.shared.example_shared_flag";
/** @hide */
public static final String FLAG_EXTENDED_WALLPAPER_EFFECTS = "com.android.systemui.shared.extended_wallpaper_effects";
/** @hide */
public static final String FLAG_LOCKSCREEN_CUSTOM_CLOCKS = "com.android.systemui.shared.lockscreen_custom_clocks";
/** @hide */
public static final String FLAG_NEW_CUSTOMIZATION_PICKER_UI = "com.android.systemui.shared.new_customization_picker_ui";
/** @hide */
public static final String FLAG_NEW_TOUCHPAD_GESTURES_TUTORIAL = "com.android.systemui.shared.new_touchpad_gestures_tutorial";
/** @hide */
public static final String FLAG_RETURN_ANIMATION_FRAMEWORK_LIBRARY = "com.android.systemui.shared.return_animation_framework_library";
/** @hide */
public static final String FLAG_RETURN_ANIMATION_FRAMEWORK_LONG_LIVED = "com.android.systemui.shared.return_animation_framework_long_lived";
/** @hide */
public static final String FLAG_SCREENSHOT_CONTEXT_URL = "com.android.systemui.shared.screenshot_context_url";
/** @hide */
public static final String FLAG_SHADE_ALLOW_BACK_GESTURE = "com.android.systemui.shared.shade_allow_back_gesture";
/** @hide */
public static final String FLAG_SIDEFPS_CONTROLLER_REFACTOR = "com.android.systemui.shared.sidefps_controller_refactor";
/** @hide */
public static final String FLAG_SMARTSPACE_REMOTEVIEWS_INTENT_HANDLER = "com.android.systemui.shared.smartspace_remoteviews_intent_handler";
/** @hide */
public static final String FLAG_SMARTSPACE_SPORTS_CARD_BACKGROUND = "com.android.systemui.shared.smartspace_sports_card_background";
/** @hide */
public static final String FLAG_SMARTSPACE_UI_UPDATE = "com.android.systemui.shared.smartspace_ui_update";
/** @hide */
public static final String FLAG_SMARTSPACE_UI_UPDATE_RESOURCES = "com.android.systemui.shared.smartspace_ui_update_resources";
/** @hide */
public static final String FLAG_STATUS_BAR_CONNECTED_DISPLAYS = "com.android.systemui.shared.status_bar_connected_displays";
/** @hide */
public static final String FLAG_THREE_BUTTON_CORNER_SWIPE = "com.android.systemui.shared.three_button_corner_swipe";
/** @hide */
public static final String FLAG_USE_PREFERRED_IMAGE_EDITOR = "com.android.systemui.shared.use_preferred_image_editor";
public static boolean ambientAod() {
return FEATURE_FLAGS.ambientAod();
}
public static boolean bouncerAreaExclusion() {
return FEATURE_FLAGS.bouncerAreaExclusion();
}
public static boolean clockReactiveSmartspaceLayout() {
return FEATURE_FLAGS.clockReactiveSmartspaceLayout();
}
public static boolean clockReactiveVariants() {
return FEATURE_FLAGS.clockReactiveVariants();
}
public static boolean cursorHotCorner() {
return FEATURE_FLAGS.cursorHotCorner();
}
public static boolean enableHomeDelay() {
return FEATURE_FLAGS.enableHomeDelay();
}
public static boolean enableLppSqueezeEffect() {
return FEATURE_FLAGS.enableLppSqueezeEffect();
}
public static boolean exampleSharedFlag() {
return FEATURE_FLAGS.exampleSharedFlag();
}
public static boolean extendedWallpaperEffects() {
return FEATURE_FLAGS.extendedWallpaperEffects();
}
public static boolean lockscreenCustomClocks() {
return FEATURE_FLAGS.lockscreenCustomClocks();
}
public static boolean newCustomizationPickerUi() {
return FEATURE_FLAGS.newCustomizationPickerUi();
}
public static boolean newTouchpadGesturesTutorial() {
return FEATURE_FLAGS.newTouchpadGesturesTutorial();
}
public static boolean returnAnimationFrameworkLibrary() {
return FEATURE_FLAGS.returnAnimationFrameworkLibrary();
}
public static boolean returnAnimationFrameworkLongLived() {
return FEATURE_FLAGS.returnAnimationFrameworkLongLived();
}
public static boolean screenshotContextUrl() {
return FEATURE_FLAGS.screenshotContextUrl();
}
public static boolean shadeAllowBackGesture() {
return FEATURE_FLAGS.shadeAllowBackGesture();
}
public static boolean sidefpsControllerRefactor() {
return FEATURE_FLAGS.sidefpsControllerRefactor();
}
public static boolean smartspaceRemoteviewsIntentHandler() {
return FEATURE_FLAGS.smartspaceRemoteviewsIntentHandler();
}
public static boolean smartspaceSportsCardBackground() {
return FEATURE_FLAGS.smartspaceSportsCardBackground();
}
public static boolean smartspaceUiUpdate() {
return FEATURE_FLAGS.smartspaceUiUpdate();
}
public static boolean smartspaceUiUpdateResources() {
return FEATURE_FLAGS.smartspaceUiUpdateResources();
}
public static boolean statusBarConnectedDisplays() {
return FEATURE_FLAGS.statusBarConnectedDisplays();
}
public static boolean threeButtonCornerSwipe() {
return FEATURE_FLAGS.threeButtonCornerSwipe();
}
public static boolean usePreferredImageEditor() {
return FEATURE_FLAGS.usePreferredImageEditor();
}
private static FeatureFlags FEATURE_FLAGS = new FeatureFlagsImpl();
}