diff --git a/build.gradle b/build.gradle index 5bdb7f7f35..605df57222 100644 --- a/build.gradle +++ b/build.gradle @@ -278,7 +278,7 @@ android { lawn { java.srcDirs = ['src_flags', 'src_shortcuts_overrides', 'lawnchair/src', 'tests/shared'] aidl.srcDirs = ['lawnchair/aidl'] - res.srcDirs = ['lawnchair/res'] + res.srcDirs = ['lawnchair/res', 'platform_frameworks_libs_systemui/animationlib/res'] manifest.srcFile "lawnchair/AndroidManifest.xml" assets { srcDirs 'lawnchair/assets' @@ -354,9 +354,10 @@ dependencies { withQuickstepImplementation projects.compatLib.compatLibVV withQuickstepImplementation projects.wmshell withQuickstepImplementation projects.flags - withQuickstepImplementation projects.androidxLib +// withQuickstepImplementation projects.androidxLib + implementation 'androidx.dynamicanimation:dynamicanimation:1.0.0' - implementation fileTree(dir: FRAMEWORK_PREBUILTS_DIR, include: 'SystemUI-statsd-14.jar') + implementation fileTree(dir: FRAMEWORK_PREBUILTS_DIR, include: 'SystemUI-statsd-15.jar') implementation fileTree(dir: FRAMEWORK_PREBUILTS_DIR, include: 'WindowManager-Shell-15.jar') withQuickstepCompileOnly fileTree(dir: FRAMEWORK_PREBUILTS_DIR, include: 'framework-15.jar') diff --git a/flags/build.gradle b/flags/build.gradle index ee1b25c573..d3ace21187 100644 --- a/flags/build.gradle +++ b/flags/build.gradle @@ -4,11 +4,10 @@ plugins { } android { - namespace "com.android.launcher3" + namespace "com.android.launcher3.flags" sourceSets { main { java.srcDirs = ['src'] - res.srcDirs = ['res'] } } } diff --git a/flags/src/com/android/wm/shell/CustomFeatureFlags.java b/flags/src/com/android/wm/shell/CustomFeatureFlags.java new file mode 100644 index 0000000000..e8a55c4591 --- /dev/null +++ b/flags/src/com/android/wm/shell/CustomFeatureFlags.java @@ -0,0 +1,174 @@ +package com.android.wm.shell; + +// 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 { + + private BiPredicate> mGetValueImpl; + + public CustomFeatureFlags(BiPredicate> getValueImpl) { + mGetValueImpl = getValueImpl; + } + @Override + + public boolean animateBubbleSizeChange() { + return getValue(Flags.FLAG_ANIMATE_BUBBLE_SIZE_CHANGE, + FeatureFlags::animateBubbleSizeChange); + } + + @Override + + public boolean enableAppPairs() { + return getValue(Flags.FLAG_ENABLE_APP_PAIRS, + FeatureFlags::enableAppPairs); + } + + @Override + + public boolean enableBubbleAnything() { + return getValue(Flags.FLAG_ENABLE_BUBBLE_ANYTHING, + FeatureFlags::enableBubbleAnything); + } + + @Override + + public boolean enableBubbleBar() { + return getValue(Flags.FLAG_ENABLE_BUBBLE_BAR, + FeatureFlags::enableBubbleBar); + } + + @Override + + public boolean enableBubbleStashing() { + return getValue(Flags.FLAG_ENABLE_BUBBLE_STASHING, + FeatureFlags::enableBubbleStashing); + } + + @Override + + public boolean enableBubblesLongPressNavHandle() { + return getValue(Flags.FLAG_ENABLE_BUBBLES_LONG_PRESS_NAV_HANDLE, + FeatureFlags::enableBubblesLongPressNavHandle); + } + + @Override + + public boolean enableLeftRightSplitInPortrait() { + return getValue(Flags.FLAG_ENABLE_LEFT_RIGHT_SPLIT_IN_PORTRAIT, + FeatureFlags::enableLeftRightSplitInPortrait); + } + + @Override + + public boolean enableNewBubbleAnimations() { + return getValue(Flags.FLAG_ENABLE_NEW_BUBBLE_ANIMATIONS, + FeatureFlags::enableNewBubbleAnimations); + } + + @Override + + public boolean enableOptionalBubbleOverflow() { + return getValue(Flags.FLAG_ENABLE_OPTIONAL_BUBBLE_OVERFLOW, + FeatureFlags::enableOptionalBubbleOverflow); + } + + @Override + + public boolean enablePip2Implementation() { + return getValue(Flags.FLAG_ENABLE_PIP2_IMPLEMENTATION, + FeatureFlags::enablePip2Implementation); + } + + @Override + + public boolean enablePipUmoExperience() { + return getValue(Flags.FLAG_ENABLE_PIP_UMO_EXPERIENCE, + FeatureFlags::enablePipUmoExperience); + } + + @Override + + public boolean enableRetrievableBubbles() { + return getValue(Flags.FLAG_ENABLE_RETRIEVABLE_BUBBLES, + FeatureFlags::enableRetrievableBubbles); + } + + @Override + + public boolean enableSplitContextual() { + return getValue(Flags.FLAG_ENABLE_SPLIT_CONTEXTUAL, + FeatureFlags::enableSplitContextual); + } + + @Override + + public boolean enableTaskbarNavbarUnification() { + return getValue(Flags.FLAG_ENABLE_TASKBAR_NAVBAR_UNIFICATION, + FeatureFlags::enableTaskbarNavbarUnification); + } + + @Override + + public boolean enableTinyTaskbar() { + return getValue(Flags.FLAG_ENABLE_TINY_TASKBAR, + FeatureFlags::enableTinyTaskbar); + } + + @Override + + public boolean onlyReuseBubbledTaskWhenLaunchedFromBubble() { + return getValue(Flags.FLAG_ONLY_REUSE_BUBBLED_TASK_WHEN_LAUNCHED_FROM_BUBBLE, + FeatureFlags::onlyReuseBubbledTaskWhenLaunchedFromBubble); + } + + public boolean isFlagReadOnlyOptimized(String flagName) { + if (mReadOnlyFlagsSet.contains(flagName) && + isOptimizationEnabled()) { + return true; + } + return false; + } + + private boolean isOptimizationEnabled() { + return false; + } + + protected boolean getValue(String flagName, Predicate getter) { + return mGetValueImpl.test(flagName, getter); + } + + public List getFlagNames() { + return Arrays.asList( + Flags.FLAG_ANIMATE_BUBBLE_SIZE_CHANGE, + Flags.FLAG_ENABLE_APP_PAIRS, + Flags.FLAG_ENABLE_BUBBLE_ANYTHING, + Flags.FLAG_ENABLE_BUBBLE_BAR, + Flags.FLAG_ENABLE_BUBBLE_STASHING, + Flags.FLAG_ENABLE_BUBBLES_LONG_PRESS_NAV_HANDLE, + Flags.FLAG_ENABLE_LEFT_RIGHT_SPLIT_IN_PORTRAIT, + Flags.FLAG_ENABLE_NEW_BUBBLE_ANIMATIONS, + Flags.FLAG_ENABLE_OPTIONAL_BUBBLE_OVERFLOW, + Flags.FLAG_ENABLE_PIP2_IMPLEMENTATION, + Flags.FLAG_ENABLE_PIP_UMO_EXPERIENCE, + Flags.FLAG_ENABLE_RETRIEVABLE_BUBBLES, + Flags.FLAG_ENABLE_SPLIT_CONTEXTUAL, + Flags.FLAG_ENABLE_TASKBAR_NAVBAR_UNIFICATION, + Flags.FLAG_ENABLE_TINY_TASKBAR, + Flags.FLAG_ONLY_REUSE_BUBBLED_TASK_WHEN_LAUNCHED_FROM_BUBBLE + ); + } + + private Set mReadOnlyFlagsSet = new HashSet<>( + Arrays.asList( + Flags.FLAG_ENABLE_PIP2_IMPLEMENTATION, + "" + ) + ); +} diff --git a/flags/src/com/android/wm/shell/FakeFeatureFlagsImpl.java b/flags/src/com/android/wm/shell/FakeFeatureFlagsImpl.java new file mode 100644 index 0000000000..c4594f283f --- /dev/null +++ b/flags/src/com/android/wm/shell/FakeFeatureFlagsImpl.java @@ -0,0 +1,49 @@ +package com.android.wm.shell; + +import java.util.HashMap; +import java.util.Map; +import java.util.function.Predicate; + +/** @hide */ +public class FakeFeatureFlagsImpl extends CustomFeatureFlags { + private final Map mFlagMap = new HashMap<>(); + private final FeatureFlags mDefaults; + + public FakeFeatureFlagsImpl() { + this(null); + } + + public FakeFeatureFlagsImpl(FeatureFlags defaults) { + super(null); + mDefaults = defaults; + // Initialize the map with null values + for (String flagName : getFlagNames()) { + mFlagMap.put(flagName, null); + } + } + + @Override + protected boolean getValue(String flagName, Predicate getter) { + Boolean value = this.mFlagMap.get(flagName); + if (value != null) { + return value; + } + if (mDefaults != null) { + return getter.test(mDefaults); + } + throw new IllegalArgumentException(flagName + " is not set"); + } + + public void setFlag(String flagName, boolean value) { + if (!this.mFlagMap.containsKey(flagName)) { + throw new IllegalArgumentException("no such flag " + flagName); + } + this.mFlagMap.put(flagName, value); + } + + public void resetAll() { + for (Map.Entry entry : mFlagMap.entrySet()) { + entry.setValue(null); + } + } +} diff --git a/flags/src/com/android/wm/shell/FeatureFlags.java b/flags/src/com/android/wm/shell/FeatureFlags.java new file mode 100644 index 0000000000..5c5ba5bcc0 --- /dev/null +++ b/flags/src/com/android/wm/shell/FeatureFlags.java @@ -0,0 +1,53 @@ +package com.android.wm.shell; +// TODO(b/303773055): Remove the annotation after access issue is resolved. +/** @hide */ +public interface FeatureFlags { + + + + boolean animateBubbleSizeChange(); + + + boolean enableAppPairs(); + + + boolean enableBubbleAnything(); + + + boolean enableBubbleBar(); + + + boolean enableBubbleStashing(); + + + boolean enableBubblesLongPressNavHandle(); + + + boolean enableLeftRightSplitInPortrait(); + + + boolean enableNewBubbleAnimations(); + + + boolean enableOptionalBubbleOverflow(); + + boolean enablePip2Implementation(); + + + boolean enablePipUmoExperience(); + + + boolean enableRetrievableBubbles(); + + + boolean enableSplitContextual(); + + + boolean enableTaskbarNavbarUnification(); + + + boolean enableTinyTaskbar(); + + + boolean onlyReuseBubbledTaskWhenLaunchedFromBubble(); +} diff --git a/flags/src/com/android/wm/shell/FeatureFlagsImpl.java b/flags/src/com/android/wm/shell/FeatureFlagsImpl.java new file mode 100644 index 0000000000..26af996c32 --- /dev/null +++ b/flags/src/com/android/wm/shell/FeatureFlagsImpl.java @@ -0,0 +1,393 @@ +package com.android.wm.shell; +// TODO(b/303773055): Remove the annotation after access issue is resolved. +import android.provider.DeviceConfig; +import android.provider.DeviceConfig.Properties; +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 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; + + + 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 { + Properties properties = DeviceConfig.getProperties("multitasking"); + 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); + enableBubblesLongPressNavHandle = + properties.getBoolean(Flags.FLAG_ENABLE_BUBBLES_LONG_PRESS_NAV_HANDLE, 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 enableBubbleStashing() { + if (isReadFromNew) { + if (!isCached) { + init(); + } + } else { + if (!multitasking_is_cached) { + load_overrides_multitasking(); + } + } + return enableBubbleStashing; + + } + + @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 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; + + } + +} + diff --git a/flags/src/com/android/wm/shell/Flags.java b/flags/src/com/android/wm/shell/Flags.java new file mode 100644 index 0000000000..5dd4ab7470 --- /dev/null +++ b/flags/src/com/android/wm/shell/Flags.java @@ -0,0 +1,119 @@ +package com.android.wm.shell; +// TODO(b/303773055): Remove the annotation after access issue is resolved. +/** @hide */ +public final class Flags { + /** @hide */ + public static final String FLAG_ANIMATE_BUBBLE_SIZE_CHANGE = "com.android.wm.shell.animate_bubble_size_change"; + /** @hide */ + public static final String FLAG_ENABLE_APP_PAIRS = "com.android.wm.shell.enable_app_pairs"; + /** @hide */ + public static final String FLAG_ENABLE_BUBBLE_ANYTHING = "com.android.wm.shell.enable_bubble_anything"; + /** @hide */ + public static final String FLAG_ENABLE_BUBBLE_BAR = "com.android.wm.shell.enable_bubble_bar"; + /** @hide */ + public static final String FLAG_ENABLE_BUBBLE_STASHING = "com.android.wm.shell.enable_bubble_stashing"; + /** @hide */ + public static final String FLAG_ENABLE_BUBBLES_LONG_PRESS_NAV_HANDLE = "com.android.wm.shell.enable_bubbles_long_press_nav_handle"; + /** @hide */ + public static final String FLAG_ENABLE_LEFT_RIGHT_SPLIT_IN_PORTRAIT = "com.android.wm.shell.enable_left_right_split_in_portrait"; + /** @hide */ + public static final String FLAG_ENABLE_NEW_BUBBLE_ANIMATIONS = "com.android.wm.shell.enable_new_bubble_animations"; + /** @hide */ + public static final String FLAG_ENABLE_OPTIONAL_BUBBLE_OVERFLOW = "com.android.wm.shell.enable_optional_bubble_overflow"; + /** @hide */ + public static final String FLAG_ENABLE_PIP2_IMPLEMENTATION = "com.android.wm.shell.enable_pip2_implementation"; + /** @hide */ + public static final String FLAG_ENABLE_PIP_UMO_EXPERIENCE = "com.android.wm.shell.enable_pip_umo_experience"; + /** @hide */ + public static final String FLAG_ENABLE_RETRIEVABLE_BUBBLES = "com.android.wm.shell.enable_retrievable_bubbles"; + /** @hide */ + public static final String FLAG_ENABLE_SPLIT_CONTEXTUAL = "com.android.wm.shell.enable_split_contextual"; + /** @hide */ + public static final String FLAG_ENABLE_TASKBAR_NAVBAR_UNIFICATION = "com.android.wm.shell.enable_taskbar_navbar_unification"; + /** @hide */ + public static final String FLAG_ENABLE_TINY_TASKBAR = "com.android.wm.shell.enable_tiny_taskbar"; + /** @hide */ + public static final String FLAG_ONLY_REUSE_BUBBLED_TASK_WHEN_LAUNCHED_FROM_BUBBLE = "com.android.wm.shell.only_reuse_bubbled_task_when_launched_from_bubble"; + + + public static boolean animateBubbleSizeChange() { + return FEATURE_FLAGS.animateBubbleSizeChange(); + } + + + public static boolean enableAppPairs() { + return FEATURE_FLAGS.enableAppPairs(); + } + + + public static boolean enableBubbleAnything() { + return FEATURE_FLAGS.enableBubbleAnything(); + } + + + public static boolean enableBubbleBar() { + return FEATURE_FLAGS.enableBubbleBar(); + } + + + public static boolean enableBubbleStashing() { + return FEATURE_FLAGS.enableBubbleStashing(); + } + + + public static boolean enableBubblesLongPressNavHandle() { + return FEATURE_FLAGS.enableBubblesLongPressNavHandle(); + } + + + public static boolean enableLeftRightSplitInPortrait() { + return FEATURE_FLAGS.enableLeftRightSplitInPortrait(); + } + + + public static boolean enableNewBubbleAnimations() { + return FEATURE_FLAGS.enableNewBubbleAnimations(); + } + + + public static boolean enableOptionalBubbleOverflow() { + return FEATURE_FLAGS.enableOptionalBubbleOverflow(); + } + + public static boolean enablePip2Implementation() { + return FEATURE_FLAGS.enablePip2Implementation(); + } + + + public static boolean enablePipUmoExperience() { + return FEATURE_FLAGS.enablePipUmoExperience(); + } + + + public static boolean enableRetrievableBubbles() { + return FEATURE_FLAGS.enableRetrievableBubbles(); + } + + + public static boolean enableSplitContextual() { + return FEATURE_FLAGS.enableSplitContextual(); + } + + + public static boolean enableTaskbarNavbarUnification() { + return FEATURE_FLAGS.enableTaskbarNavbarUnification(); + } + + + public static boolean enableTinyTaskbar() { + return FEATURE_FLAGS.enableTinyTaskbar(); + } + + + public static boolean onlyReuseBubbledTaskWhenLaunchedFromBubble() { + return FEATURE_FLAGS.onlyReuseBubbledTaskWhenLaunchedFromBubble(); + } + + private static FeatureFlags FEATURE_FLAGS = new FeatureFlagsImpl(); + +} diff --git a/lawnchair/res/layout/overview_actions_container.xml b/lawnchair/res/layout/overview_actions_container.xml deleted file mode 100644 index 2b40529519..0000000000 --- a/lawnchair/res/layout/overview_actions_container.xml +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - - - - - - - - - - - -