package com.android.wm.shell;
// 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 {
    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 multitasking_is_cached = false;
    private static boolean animateBubbleSizeChange = false;
    private static boolean enableAppPairs = true;
    private static boolean enableBubbleAnything = false;
    private static boolean enableBubbleBar = false;
    private static boolean enableBubbleStashing = false;
    private static boolean enableBubbleToFullscreen = false;
    private static boolean enableBubblesLongPressNavHandle = false;
    private static boolean enableLeftRightSplitInPortrait = true;
    private static boolean enableNewBubbleAnimations = false;
    private static boolean enableOptionalBubbleOverflow = true;
    private static boolean enablePipUmoExperience = false;
    private static boolean enableRetrievableBubbles = false;
    private static boolean enableSplitContextual = true;
    private static boolean enableTaskbarNavbarUnification = true;
    private static boolean enableTinyTaskbar = false;
    private static boolean onlyReuseBubbledTaskWhenLaunchedFromBubble = false;


    private void init() {
        boolean foundPackage = true;

        animateBubbleSizeChange = foundPackage;


        enableAppPairs = foundPackage;


        enableBubbleAnything = foundPackage;


        enableBubbleBar = foundPackage;


        enableBubbleStashing = foundPackage;


        enableBubbleToFullscreen = foundPackage;


        enableBubblesLongPressNavHandle = foundPackage;


        enableLeftRightSplitInPortrait = foundPackage;


        enableNewBubbleAnimations = foundPackage;


        enableOptionalBubbleOverflow = foundPackage;



        enablePipUmoExperience = foundPackage;


        enableRetrievableBubbles = foundPackage;


        enableSplitContextual = foundPackage;


        enableTaskbarNavbarUnification = foundPackage;


        enableTinyTaskbar = foundPackage;


        onlyReuseBubbledTaskWhenLaunchedFromBubble = foundPackage ;

        isCached = true;
    }




    private void load_overrides_multitasking() {
        try {
            var properties = DeviceConfigHelper.Companion.getPrefs();
            animateBubbleSizeChange =
                    properties.getBoolean(Flags.FLAG_ANIMATE_BUBBLE_SIZE_CHANGE, false);
            enableAppPairs =
                    properties.getBoolean(Flags.FLAG_ENABLE_APP_PAIRS, true);
            enableBubbleAnything =
                    properties.getBoolean(Flags.FLAG_ENABLE_BUBBLE_ANYTHING, false);
            enableBubbleBar =
                    properties.getBoolean(Flags.FLAG_ENABLE_BUBBLE_BAR, false);
            enableBubbleStashing =
                    properties.getBoolean(Flags.FLAG_ENABLE_BUBBLE_STASHING, false);
            enableBubbleToFullscreen =
                    properties.getBoolean(Flags.FLAG_ENABLE_BUBBLE_TO_FULLSCREEN, false);
            enableLeftRightSplitInPortrait =
                    properties.getBoolean(Flags.FLAG_ENABLE_LEFT_RIGHT_SPLIT_IN_PORTRAIT, true);
            enableNewBubbleAnimations =
                    properties.getBoolean(Flags.FLAG_ENABLE_NEW_BUBBLE_ANIMATIONS, false);
            enableOptionalBubbleOverflow =
                    properties.getBoolean(Flags.FLAG_ENABLE_OPTIONAL_BUBBLE_OVERFLOW, true);
            enablePipUmoExperience =
                    properties.getBoolean(Flags.FLAG_ENABLE_PIP_UMO_EXPERIENCE, false);
            enableRetrievableBubbles =
                    properties.getBoolean(Flags.FLAG_ENABLE_RETRIEVABLE_BUBBLES, false);
            enableSplitContextual =
                    properties.getBoolean(Flags.FLAG_ENABLE_SPLIT_CONTEXTUAL, true);
            enableTaskbarNavbarUnification =
                    properties.getBoolean(Flags.FLAG_ENABLE_TASKBAR_NAVBAR_UNIFICATION, true);
            enableTinyTaskbar =
                    properties.getBoolean(Flags.FLAG_ENABLE_TINY_TASKBAR, false);
            onlyReuseBubbledTaskWhenLaunchedFromBubble =
                    properties.getBoolean(Flags.FLAG_ONLY_REUSE_BUBBLED_TASK_WHEN_LAUNCHED_FROM_BUBBLE, false);
        } catch (NullPointerException e) {
            throw new RuntimeException(
                    "Cannot read value from namespace multitasking "
                            + "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
            );
        }
        multitasking_is_cached = true;
    }

    @Override
    
    
    public boolean animateBubbleSizeChange() {
        if (isReadFromNew) {
            if (!isCached) {
                init();
            }
        } else {
            if (!multitasking_is_cached) {
                load_overrides_multitasking();
            }
        }
        return animateBubbleSizeChange;

    }

    @Override
    
    
    public boolean enableAppPairs() {
        if (isReadFromNew) {
            if (!isCached) {
                init();
            }
        } else {
            if (!multitasking_is_cached) {
                load_overrides_multitasking();
            }
        }
        return enableAppPairs;

    }

    @Override
    
    
    public boolean enableBubbleAnything() {
        if (isReadFromNew) {
            if (!isCached) {
                init();
            }
        } else {
            if (!multitasking_is_cached) {
                load_overrides_multitasking();
            }
        }
        return enableBubbleAnything;

    }

    @Override
    
    
    public boolean enableBubbleBar() {
        if (isReadFromNew) {
            if (!isCached) {
                init();
            }
        } else {
            if (!multitasking_is_cached) {
                load_overrides_multitasking();
            }
        }
        return enableBubbleBar;

    }

    @Override
    public boolean enableCreateAnyBubble() {
        return false;
    }

    @Override
    
    
    public boolean enableBubbleStashing() {
        if (isReadFromNew) {
            if (!isCached) {
                init();
            }
        } else {
            if (!multitasking_is_cached) {
                load_overrides_multitasking();
            }
        }
        return enableBubbleStashing;

    }

    @Override


    public boolean enableBubbleToFullscreen() {
        if (isReadFromNew) {
            if (!isCached) {
                init();
            }
        } else {
            if (!multitasking_is_cached) {
                load_overrides_multitasking();
            }
        }
        return enableBubbleToFullscreen;

    }

    @Override
    
    
    public boolean enableBubblesLongPressNavHandle() {
        if (isReadFromNew) {
            if (!isCached) {
                init();
            }
        } else {
            if (!multitasking_is_cached) {
                load_overrides_multitasking();
            }
        }
        return enableBubblesLongPressNavHandle;

    }

    @Override
    
    
    public boolean enableLeftRightSplitInPortrait() {
        if (isReadFromNew) {
            if (!isCached) {
                init();
            }
        } else {
            if (!multitasking_is_cached) {
                load_overrides_multitasking();
            }
        }
        return enableLeftRightSplitInPortrait;

    }

    @Override
    
    
    public boolean enableNewBubbleAnimations() {
        if (isReadFromNew) {
            if (!isCached) {
                init();
            }
        } else {
            if (!multitasking_is_cached) {
                load_overrides_multitasking();
            }
        }
        return enableNewBubbleAnimations;

    }

    @Override
    
    
    public boolean enableOptionalBubbleOverflow() {
        if (isReadFromNew) {
            if (!isCached) {
                init();
            }
        } else {
            if (!multitasking_is_cached) {
                load_overrides_multitasking();
            }
        }
        return enableOptionalBubbleOverflow;

    }

    @Override
    
    
    public boolean enablePip2Implementation() {
        return false;

    }

    @Override
    
    
    public boolean enablePipUmoExperience() {
        if (isReadFromNew) {
            if (!isCached) {
                init();
            }
        } else {
            if (!multitasking_is_cached) {
                load_overrides_multitasking();
            }
        }
        return enablePipUmoExperience;

    }

    @Override
    
    
    public boolean enableRetrievableBubbles() {
        if (isReadFromNew) {
            if (!isCached) {
                init();
            }
        } else {
            if (!multitasking_is_cached) {
                load_overrides_multitasking();
            }
        }
        return enableRetrievableBubbles;

    }

    @Override
    
    
    public boolean enableSplitContextual() {
        if (isReadFromNew) {
            if (!isCached) {
                init();
            }
        } else {
            if (!multitasking_is_cached) {
                load_overrides_multitasking();
            }
        }
        return enableSplitContextual;

    }

    @Override
    
    
    public boolean enableTaskbarNavbarUnification() {
        if (isReadFromNew) {
            if (!isCached) {
                init();
            }
        } else {
            if (!multitasking_is_cached) {
                load_overrides_multitasking();
            }
        }
        return enableTaskbarNavbarUnification;

    }

    @Override
    public boolean enableDynamicInsetsForAppLaunch() {
        return false;
    }

    @Override
    public boolean enableShellTopTaskTracking() {
        return false;
    }

    @Override
    public boolean enableFlexibleSplit() {
        return false;
    }

    @Override
    
    
    public boolean enableTinyTaskbar() {
        if (isReadFromNew) {
            if (!isCached) {
                init();
            }
        } else {
            if (!multitasking_is_cached) {
                load_overrides_multitasking();
            }
        }
        return enableTinyTaskbar;

    }

    @Override
    
    
    public boolean onlyReuseBubbledTaskWhenLaunchedFromBubble() {
        if (isReadFromNew) {
            if (!isCached) {
                init();
            }
        } else {
            if (!multitasking_is_cached) {
                load_overrides_multitasking();
            }
        }
        return onlyReuseBubbledTaskWhenLaunchedFromBubble;

    }

}

