Loading libs/WindowManager/Jetpack/Android.bp +10 −1 Original line number Diff line number Diff line Loading @@ -63,6 +63,12 @@ android_library_import { sdk_version: "current", } android_library_import { name: "window-extensions-core", aars: ["window-extensions-core-release.aar"], sdk_version: "current", } java_library { name: "androidx.window.extensions", srcs: [ Loading @@ -70,7 +76,10 @@ java_library { "src/androidx/window/util/**/*.java", "src/androidx/window/common/**/*.java", ], static_libs: ["window-extensions"], static_libs: [ "window-extensions", "window-extensions-core", ], installable: true, sdk_version: "core_platform", system_ext_specific: true, Loading libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/SplitController.java +25 −7 Original line number Diff line number Diff line Loading @@ -75,7 +75,10 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.window.common.CommonFoldingFeature; import androidx.window.common.EmptyLifecycleCallbacksAdapter; import androidx.window.extensions.WindowExtensionsImpl; import androidx.window.extensions.WindowExtensionsProvider; import androidx.window.extensions.core.util.function.Consumer; import androidx.window.extensions.core.util.function.Function; import androidx.window.extensions.embedding.TransactionManager.TransactionRecord; import androidx.window.extensions.layout.WindowLayoutComponentImpl; Loading @@ -86,7 +89,6 @@ import java.util.List; import java.util.Objects; import java.util.Set; import java.util.concurrent.Executor; import java.util.function.Consumer; /** * Main controller class that manages split states and presentation. Loading @@ -112,7 +114,7 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen /** * A developer-defined {@link SplitAttributes} calculator to compute the current * {@link SplitAttributes} with the current device and window states. * It is registered via {@link #setSplitAttributesCalculator(SplitAttributesCalculator)} * It is registered via {@link #setSplitAttributesCalculator(Function)} * and unregistered via {@link #clearSplitAttributesCalculator()}. * This is called when: * <ul> Loading @@ -125,7 +127,7 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen */ @GuardedBy("mLock") @Nullable private SplitAttributesCalculator mSplitAttributesCalculator; private Function<SplitAttributesCalculatorParams, SplitAttributes> mSplitAttributesCalculator; /** * Map from Task id to {@link TaskContainer} which contains all TaskFragment and split pair info Loading @@ -138,6 +140,7 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen final SparseArray<TaskContainer> mTaskContainers = new SparseArray<>(); /** Callback to Jetpack to notify about changes to split states. */ @GuardedBy("mLock") @Nullable private Consumer<List<SplitInfo>> mEmbeddingCallback; private final List<SplitInfo> mLastReportedSplitStates = new ArrayList<>(); Loading Loading @@ -171,7 +174,8 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen mWindowLayoutComponent.addFoldingStateChangedCallback(new FoldingFeatureListener()); } private class FoldingFeatureListener implements Consumer<List<CommonFoldingFeature>> { private class FoldingFeatureListener implements java.util.function.Consumer<List<CommonFoldingFeature>> { @Override public void accept(List<CommonFoldingFeature> foldingFeatures) { synchronized (mLock) { Loading Loading @@ -212,7 +216,8 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen } @Override public void setSplitAttributesCalculator(@NonNull SplitAttributesCalculator calculator) { public void setSplitAttributesCalculator( @NonNull Function<SplitAttributesCalculatorParams, SplitAttributes> calculator) { synchronized (mLock) { mSplitAttributesCalculator = calculator; } Loading @@ -227,7 +232,7 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen @GuardedBy("mLock") @Nullable SplitAttributesCalculator getSplitAttributesCalculator() { Function<SplitAttributesCalculatorParams, SplitAttributes> getSplitAttributesCalculator() { return mSplitAttributesCalculator; } Loading @@ -240,9 +245,22 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen /** * Registers the split organizer callback to notify about changes to active splits. * @deprecated Use {@link #setSplitInfoCallback(Consumer)} starting with * {@link WindowExtensionsImpl#getVendorApiLevel()} 2. */ @Deprecated @Override public void setSplitInfoCallback(@NonNull Consumer<List<SplitInfo>> callback) { public void setSplitInfoCallback( @NonNull java.util.function.Consumer<List<SplitInfo>> callback) { Consumer<List<SplitInfo>> oemConsumer = callback::accept; setSplitInfoCallback(oemConsumer); } /** * Registers the split organizer callback to notify about changes to active splits. * @since {@link WindowExtensionsImpl#getVendorApiLevel()} 2 */ public void setSplitInfoCallback(Consumer<List<SplitInfo>> callback) { synchronized (mLock) { mEmbeddingCallback = callback; updateCallbackIfNecessary(); Loading libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/SplitPresenter.java +4 −3 Original line number Diff line number Diff line Loading @@ -42,11 +42,11 @@ import android.window.WindowContainerTransaction; import androidx.annotation.IntDef; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.window.extensions.core.util.function.Function; import androidx.window.extensions.embedding.SplitAttributes.SplitType; import androidx.window.extensions.embedding.SplitAttributes.SplitType.ExpandContainersSplitType; import androidx.window.extensions.embedding.SplitAttributes.SplitType.HingeSplitType; import androidx.window.extensions.embedding.SplitAttributes.SplitType.RatioSplitType; import androidx.window.extensions.embedding.SplitAttributesCalculator.SplitAttributesCalculatorParams; import androidx.window.extensions.embedding.TaskContainer.TaskProperties; import androidx.window.extensions.layout.DisplayFeature; import androidx.window.extensions.layout.FoldingFeature; Loading Loading @@ -522,7 +522,8 @@ class SplitPresenter extends JetpackTaskFragmentOrganizer { @NonNull SplitRule rule, @Nullable Pair<Size, Size> minDimensionsPair) { final Configuration taskConfiguration = taskProperties.getConfiguration(); final WindowMetrics taskWindowMetrics = getTaskWindowMetrics(taskConfiguration); final SplitAttributesCalculator calculator = mController.getSplitAttributesCalculator(); final Function<SplitAttributesCalculatorParams, SplitAttributes> calculator = mController.getSplitAttributesCalculator(); final SplitAttributes defaultSplitAttributes = rule.getDefaultSplitAttributes(); final boolean isDefaultMinSizeSatisfied = rule.checkParentMetrics(taskWindowMetrics); if (calculator == null) { Loading @@ -538,7 +539,7 @@ class SplitPresenter extends JetpackTaskFragmentOrganizer { final SplitAttributesCalculatorParams params = new SplitAttributesCalculatorParams( taskWindowMetrics, taskConfiguration, defaultSplitAttributes, isDefaultMinSizeSatisfied, windowLayoutInfo, rule.getTag()); final SplitAttributes splitAttributes = calculator.computeSplitAttributesForParams(params); final SplitAttributes splitAttributes = calculator.apply(params); return sanitizeSplitAttributes(taskProperties, splitAttributes, minDimensionsPair); } Loading libs/WindowManager/Jetpack/src/androidx/window/extensions/layout/WindowLayoutComponentImpl.java +27 −6 Original line number Diff line number Diff line Loading @@ -44,6 +44,7 @@ import androidx.window.common.CommonFoldingFeature; import androidx.window.common.DeviceStateManagerFoldingFeatureProducer; import androidx.window.common.EmptyLifecycleCallbacksAdapter; import androidx.window.common.RawFoldingFeatureProducer; import androidx.window.extensions.core.util.function.Consumer; import androidx.window.util.DataProducer; import java.util.ArrayList; Loading @@ -51,7 +52,6 @@ import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Set; import java.util.function.Consumer; /** * Reference implementation of androidx.window.extensions.layout OEM interface for use with Loading Loading @@ -80,6 +80,10 @@ public class WindowLayoutComponentImpl implements WindowLayoutComponent { private final Map<IBinder, ConfigurationChangeListener> mConfigurationChangeListeners = new ArrayMap<>(); @GuardedBy("mLock") private final Map<java.util.function.Consumer<WindowLayoutInfo>, Consumer<WindowLayoutInfo>> mJavaToExtConsumers = new ArrayMap<>(); public WindowLayoutComponentImpl(@NonNull Context context) { ((Application) context.getApplicationContext()) .registerActivityLifecycleCallbacks(new NotifyOnConfigurationChanged()); Loading @@ -90,7 +94,8 @@ public class WindowLayoutComponentImpl implements WindowLayoutComponent { } /** Registers to listen to {@link CommonFoldingFeature} changes */ public void addFoldingStateChangedCallback(Consumer<List<CommonFoldingFeature>> consumer) { public void addFoldingStateChangedCallback( java.util.function.Consumer<List<CommonFoldingFeature>> consumer) { synchronized (mLock) { mFoldingFeatureProducer.addDataChangedCallback(consumer); } Loading @@ -104,13 +109,17 @@ public class WindowLayoutComponentImpl implements WindowLayoutComponent { */ @Override public void addWindowLayoutInfoListener(@NonNull Activity activity, @NonNull Consumer<WindowLayoutInfo> consumer) { addWindowLayoutInfoListener((Context) activity, consumer); @NonNull java.util.function.Consumer<WindowLayoutInfo> consumer) { final Consumer<WindowLayoutInfo> extConsumer = consumer::accept; synchronized (mLock) { mJavaToExtConsumers.put(consumer, extConsumer); } addWindowLayoutInfoListener(activity, extConsumer); } /** * Similar to {@link #addWindowLayoutInfoListener(Activity, Consumer)}, but takes a UI Context * as a parameter. * Similar to {@link #addWindowLayoutInfoListener(Activity, java.util.function.Consumer)}, but * takes a UI Context as a parameter. * * Jetpack {@link androidx.window.layout.ExtensionWindowLayoutInfoBackend} makes sure all * consumers related to the same {@link Context} gets updated {@link WindowLayoutInfo} Loading Loading @@ -151,6 +160,18 @@ public class WindowLayoutComponentImpl implements WindowLayoutComponent { } } @Override public void removeWindowLayoutInfoListener( @NonNull java.util.function.Consumer<WindowLayoutInfo> consumer) { final Consumer<WindowLayoutInfo> extConsumer; synchronized (mLock) { extConsumer = mJavaToExtConsumers.remove(consumer); } if (extConsumer != null) { removeWindowLayoutInfoListener(extConsumer); } } /** * Removes a listener no longer interested in receiving updates. * Loading libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/EmbeddingTestUtils.java +26 −2 Original line number Diff line number Diff line Loading @@ -34,9 +34,11 @@ import android.content.res.Resources; import android.graphics.Point; import android.graphics.Rect; import android.util.Pair; import android.view.WindowMetrics; import android.window.TaskFragmentInfo; import android.window.WindowContainerToken; import androidx.window.extensions.core.util.function.Predicate; import androidx.window.extensions.embedding.SplitAttributes.SplitType; import androidx.window.extensions.layout.DisplayFeature; import androidx.window.extensions.layout.FoldingFeature; Loading Loading @@ -107,7 +109,7 @@ public class EmbeddingTestUtils { static SplitRule createSplitRule(@NonNull Activity primaryActivity, @NonNull Intent secondaryIntent, boolean clearTop) { final Pair<Activity, Intent> targetPair = new Pair<>(primaryActivity, secondaryIntent); return new SplitPairRule.Builder( return createSplitPairRuleBuilder( activityPair -> false, targetPair::equals, w -> true) Loading Loading @@ -144,7 +146,7 @@ public class EmbeddingTestUtils { @NonNull Activity secondaryActivity, int finishPrimaryWithSecondary, int finishSecondaryWithPrimary, boolean clearTop) { final Pair<Activity, Activity> targetPair = new Pair<>(primaryActivity, secondaryActivity); return new SplitPairRule.Builder( return createSplitPairRuleBuilder( targetPair::equals, activityIntentPair -> false, w -> true) Loading Loading @@ -223,4 +225,26 @@ public class EmbeddingTestUtils { displayFeatures.add(foldingFeature); return new WindowLayoutInfo(displayFeatures); } static ActivityRule.Builder createActivityBuilder( @NonNull Predicate<Activity> activityPredicate, @NonNull Predicate<Intent> intentPredicate) { return new ActivityRule.Builder(activityPredicate, intentPredicate); } static SplitPairRule.Builder createSplitPairRuleBuilder( @NonNull Predicate<Pair<Activity, Activity>> activitiesPairPredicate, @NonNull Predicate<Pair<Activity, Intent>> activityIntentPairPredicate, @NonNull Predicate<WindowMetrics> windowMetricsPredicate) { return new SplitPairRule.Builder(activitiesPairPredicate, activityIntentPairPredicate, windowMetricsPredicate); } static SplitPlaceholderRule.Builder createSplitPlaceholderRuleBuilder( @NonNull Intent placeholderIntent, @NonNull Predicate<Activity> activityPredicate, @NonNull Predicate<Intent> intentPredicate, @NonNull Predicate<WindowMetrics> windowMetricsPredicate) { return new SplitPlaceholderRule.Builder(placeholderIntent, activityPredicate, intentPredicate, windowMetricsPredicate); } } Loading
libs/WindowManager/Jetpack/Android.bp +10 −1 Original line number Diff line number Diff line Loading @@ -63,6 +63,12 @@ android_library_import { sdk_version: "current", } android_library_import { name: "window-extensions-core", aars: ["window-extensions-core-release.aar"], sdk_version: "current", } java_library { name: "androidx.window.extensions", srcs: [ Loading @@ -70,7 +76,10 @@ java_library { "src/androidx/window/util/**/*.java", "src/androidx/window/common/**/*.java", ], static_libs: ["window-extensions"], static_libs: [ "window-extensions", "window-extensions-core", ], installable: true, sdk_version: "core_platform", system_ext_specific: true, Loading
libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/SplitController.java +25 −7 Original line number Diff line number Diff line Loading @@ -75,7 +75,10 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.window.common.CommonFoldingFeature; import androidx.window.common.EmptyLifecycleCallbacksAdapter; import androidx.window.extensions.WindowExtensionsImpl; import androidx.window.extensions.WindowExtensionsProvider; import androidx.window.extensions.core.util.function.Consumer; import androidx.window.extensions.core.util.function.Function; import androidx.window.extensions.embedding.TransactionManager.TransactionRecord; import androidx.window.extensions.layout.WindowLayoutComponentImpl; Loading @@ -86,7 +89,6 @@ import java.util.List; import java.util.Objects; import java.util.Set; import java.util.concurrent.Executor; import java.util.function.Consumer; /** * Main controller class that manages split states and presentation. Loading @@ -112,7 +114,7 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen /** * A developer-defined {@link SplitAttributes} calculator to compute the current * {@link SplitAttributes} with the current device and window states. * It is registered via {@link #setSplitAttributesCalculator(SplitAttributesCalculator)} * It is registered via {@link #setSplitAttributesCalculator(Function)} * and unregistered via {@link #clearSplitAttributesCalculator()}. * This is called when: * <ul> Loading @@ -125,7 +127,7 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen */ @GuardedBy("mLock") @Nullable private SplitAttributesCalculator mSplitAttributesCalculator; private Function<SplitAttributesCalculatorParams, SplitAttributes> mSplitAttributesCalculator; /** * Map from Task id to {@link TaskContainer} which contains all TaskFragment and split pair info Loading @@ -138,6 +140,7 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen final SparseArray<TaskContainer> mTaskContainers = new SparseArray<>(); /** Callback to Jetpack to notify about changes to split states. */ @GuardedBy("mLock") @Nullable private Consumer<List<SplitInfo>> mEmbeddingCallback; private final List<SplitInfo> mLastReportedSplitStates = new ArrayList<>(); Loading Loading @@ -171,7 +174,8 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen mWindowLayoutComponent.addFoldingStateChangedCallback(new FoldingFeatureListener()); } private class FoldingFeatureListener implements Consumer<List<CommonFoldingFeature>> { private class FoldingFeatureListener implements java.util.function.Consumer<List<CommonFoldingFeature>> { @Override public void accept(List<CommonFoldingFeature> foldingFeatures) { synchronized (mLock) { Loading Loading @@ -212,7 +216,8 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen } @Override public void setSplitAttributesCalculator(@NonNull SplitAttributesCalculator calculator) { public void setSplitAttributesCalculator( @NonNull Function<SplitAttributesCalculatorParams, SplitAttributes> calculator) { synchronized (mLock) { mSplitAttributesCalculator = calculator; } Loading @@ -227,7 +232,7 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen @GuardedBy("mLock") @Nullable SplitAttributesCalculator getSplitAttributesCalculator() { Function<SplitAttributesCalculatorParams, SplitAttributes> getSplitAttributesCalculator() { return mSplitAttributesCalculator; } Loading @@ -240,9 +245,22 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen /** * Registers the split organizer callback to notify about changes to active splits. * @deprecated Use {@link #setSplitInfoCallback(Consumer)} starting with * {@link WindowExtensionsImpl#getVendorApiLevel()} 2. */ @Deprecated @Override public void setSplitInfoCallback(@NonNull Consumer<List<SplitInfo>> callback) { public void setSplitInfoCallback( @NonNull java.util.function.Consumer<List<SplitInfo>> callback) { Consumer<List<SplitInfo>> oemConsumer = callback::accept; setSplitInfoCallback(oemConsumer); } /** * Registers the split organizer callback to notify about changes to active splits. * @since {@link WindowExtensionsImpl#getVendorApiLevel()} 2 */ public void setSplitInfoCallback(Consumer<List<SplitInfo>> callback) { synchronized (mLock) { mEmbeddingCallback = callback; updateCallbackIfNecessary(); Loading
libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/SplitPresenter.java +4 −3 Original line number Diff line number Diff line Loading @@ -42,11 +42,11 @@ import android.window.WindowContainerTransaction; import androidx.annotation.IntDef; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.window.extensions.core.util.function.Function; import androidx.window.extensions.embedding.SplitAttributes.SplitType; import androidx.window.extensions.embedding.SplitAttributes.SplitType.ExpandContainersSplitType; import androidx.window.extensions.embedding.SplitAttributes.SplitType.HingeSplitType; import androidx.window.extensions.embedding.SplitAttributes.SplitType.RatioSplitType; import androidx.window.extensions.embedding.SplitAttributesCalculator.SplitAttributesCalculatorParams; import androidx.window.extensions.embedding.TaskContainer.TaskProperties; import androidx.window.extensions.layout.DisplayFeature; import androidx.window.extensions.layout.FoldingFeature; Loading Loading @@ -522,7 +522,8 @@ class SplitPresenter extends JetpackTaskFragmentOrganizer { @NonNull SplitRule rule, @Nullable Pair<Size, Size> minDimensionsPair) { final Configuration taskConfiguration = taskProperties.getConfiguration(); final WindowMetrics taskWindowMetrics = getTaskWindowMetrics(taskConfiguration); final SplitAttributesCalculator calculator = mController.getSplitAttributesCalculator(); final Function<SplitAttributesCalculatorParams, SplitAttributes> calculator = mController.getSplitAttributesCalculator(); final SplitAttributes defaultSplitAttributes = rule.getDefaultSplitAttributes(); final boolean isDefaultMinSizeSatisfied = rule.checkParentMetrics(taskWindowMetrics); if (calculator == null) { Loading @@ -538,7 +539,7 @@ class SplitPresenter extends JetpackTaskFragmentOrganizer { final SplitAttributesCalculatorParams params = new SplitAttributesCalculatorParams( taskWindowMetrics, taskConfiguration, defaultSplitAttributes, isDefaultMinSizeSatisfied, windowLayoutInfo, rule.getTag()); final SplitAttributes splitAttributes = calculator.computeSplitAttributesForParams(params); final SplitAttributes splitAttributes = calculator.apply(params); return sanitizeSplitAttributes(taskProperties, splitAttributes, minDimensionsPair); } Loading
libs/WindowManager/Jetpack/src/androidx/window/extensions/layout/WindowLayoutComponentImpl.java +27 −6 Original line number Diff line number Diff line Loading @@ -44,6 +44,7 @@ import androidx.window.common.CommonFoldingFeature; import androidx.window.common.DeviceStateManagerFoldingFeatureProducer; import androidx.window.common.EmptyLifecycleCallbacksAdapter; import androidx.window.common.RawFoldingFeatureProducer; import androidx.window.extensions.core.util.function.Consumer; import androidx.window.util.DataProducer; import java.util.ArrayList; Loading @@ -51,7 +52,6 @@ import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Set; import java.util.function.Consumer; /** * Reference implementation of androidx.window.extensions.layout OEM interface for use with Loading Loading @@ -80,6 +80,10 @@ public class WindowLayoutComponentImpl implements WindowLayoutComponent { private final Map<IBinder, ConfigurationChangeListener> mConfigurationChangeListeners = new ArrayMap<>(); @GuardedBy("mLock") private final Map<java.util.function.Consumer<WindowLayoutInfo>, Consumer<WindowLayoutInfo>> mJavaToExtConsumers = new ArrayMap<>(); public WindowLayoutComponentImpl(@NonNull Context context) { ((Application) context.getApplicationContext()) .registerActivityLifecycleCallbacks(new NotifyOnConfigurationChanged()); Loading @@ -90,7 +94,8 @@ public class WindowLayoutComponentImpl implements WindowLayoutComponent { } /** Registers to listen to {@link CommonFoldingFeature} changes */ public void addFoldingStateChangedCallback(Consumer<List<CommonFoldingFeature>> consumer) { public void addFoldingStateChangedCallback( java.util.function.Consumer<List<CommonFoldingFeature>> consumer) { synchronized (mLock) { mFoldingFeatureProducer.addDataChangedCallback(consumer); } Loading @@ -104,13 +109,17 @@ public class WindowLayoutComponentImpl implements WindowLayoutComponent { */ @Override public void addWindowLayoutInfoListener(@NonNull Activity activity, @NonNull Consumer<WindowLayoutInfo> consumer) { addWindowLayoutInfoListener((Context) activity, consumer); @NonNull java.util.function.Consumer<WindowLayoutInfo> consumer) { final Consumer<WindowLayoutInfo> extConsumer = consumer::accept; synchronized (mLock) { mJavaToExtConsumers.put(consumer, extConsumer); } addWindowLayoutInfoListener(activity, extConsumer); } /** * Similar to {@link #addWindowLayoutInfoListener(Activity, Consumer)}, but takes a UI Context * as a parameter. * Similar to {@link #addWindowLayoutInfoListener(Activity, java.util.function.Consumer)}, but * takes a UI Context as a parameter. * * Jetpack {@link androidx.window.layout.ExtensionWindowLayoutInfoBackend} makes sure all * consumers related to the same {@link Context} gets updated {@link WindowLayoutInfo} Loading Loading @@ -151,6 +160,18 @@ public class WindowLayoutComponentImpl implements WindowLayoutComponent { } } @Override public void removeWindowLayoutInfoListener( @NonNull java.util.function.Consumer<WindowLayoutInfo> consumer) { final Consumer<WindowLayoutInfo> extConsumer; synchronized (mLock) { extConsumer = mJavaToExtConsumers.remove(consumer); } if (extConsumer != null) { removeWindowLayoutInfoListener(extConsumer); } } /** * Removes a listener no longer interested in receiving updates. * Loading
libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/EmbeddingTestUtils.java +26 −2 Original line number Diff line number Diff line Loading @@ -34,9 +34,11 @@ import android.content.res.Resources; import android.graphics.Point; import android.graphics.Rect; import android.util.Pair; import android.view.WindowMetrics; import android.window.TaskFragmentInfo; import android.window.WindowContainerToken; import androidx.window.extensions.core.util.function.Predicate; import androidx.window.extensions.embedding.SplitAttributes.SplitType; import androidx.window.extensions.layout.DisplayFeature; import androidx.window.extensions.layout.FoldingFeature; Loading Loading @@ -107,7 +109,7 @@ public class EmbeddingTestUtils { static SplitRule createSplitRule(@NonNull Activity primaryActivity, @NonNull Intent secondaryIntent, boolean clearTop) { final Pair<Activity, Intent> targetPair = new Pair<>(primaryActivity, secondaryIntent); return new SplitPairRule.Builder( return createSplitPairRuleBuilder( activityPair -> false, targetPair::equals, w -> true) Loading Loading @@ -144,7 +146,7 @@ public class EmbeddingTestUtils { @NonNull Activity secondaryActivity, int finishPrimaryWithSecondary, int finishSecondaryWithPrimary, boolean clearTop) { final Pair<Activity, Activity> targetPair = new Pair<>(primaryActivity, secondaryActivity); return new SplitPairRule.Builder( return createSplitPairRuleBuilder( targetPair::equals, activityIntentPair -> false, w -> true) Loading Loading @@ -223,4 +225,26 @@ public class EmbeddingTestUtils { displayFeatures.add(foldingFeature); return new WindowLayoutInfo(displayFeatures); } static ActivityRule.Builder createActivityBuilder( @NonNull Predicate<Activity> activityPredicate, @NonNull Predicate<Intent> intentPredicate) { return new ActivityRule.Builder(activityPredicate, intentPredicate); } static SplitPairRule.Builder createSplitPairRuleBuilder( @NonNull Predicate<Pair<Activity, Activity>> activitiesPairPredicate, @NonNull Predicate<Pair<Activity, Intent>> activityIntentPairPredicate, @NonNull Predicate<WindowMetrics> windowMetricsPredicate) { return new SplitPairRule.Builder(activitiesPairPredicate, activityIntentPairPredicate, windowMetricsPredicate); } static SplitPlaceholderRule.Builder createSplitPlaceholderRuleBuilder( @NonNull Intent placeholderIntent, @NonNull Predicate<Activity> activityPredicate, @NonNull Predicate<Intent> intentPredicate, @NonNull Predicate<WindowMetrics> windowMetricsPredicate) { return new SplitPlaceholderRule.Builder(placeholderIntent, activityPredicate, intentPredicate, windowMetricsPredicate); } }