1 package org.robolectric.shadows;
2 
3 import android.os.Build;
4 import android.window.WindowOnBackInvokedDispatcher;
5 import org.robolectric.RuntimeEnvironment;
6 import org.robolectric.annotation.Implements;
7 import org.robolectric.annotation.Resetter;
8 import org.robolectric.util.ReflectionHelpers;
9 
10 /** Shadow for {@link WindowOnBackInvokedDispatcher}. */
11 @Implements(
12     value = WindowOnBackInvokedDispatcher.class,
13     minSdk = Build.VERSION_CODES.UPSIDE_DOWN_CAKE,
14     isInAndroidSdk = false)
15 public class ShadowWindowOnBackInvokedDispatcher {
16   private static final boolean ENABLE_PREDICTIVE_BACK_DEFAULT =
17       RuntimeEnvironment.getApiLevel() >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE
18           ? ReflectionHelpers.getStaticField(
19               WindowOnBackInvokedDispatcher.class, "ENABLE_PREDICTIVE_BACK")
20           : false;
21 
setEnablePredictiveBack(boolean isEnabled)22   static void setEnablePredictiveBack(boolean isEnabled) {
23     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
24       ReflectionHelpers.setStaticField(
25           WindowOnBackInvokedDispatcher.class, "ENABLE_PREDICTIVE_BACK", isEnabled);
26     }
27   }
28 
29   @Resetter
reset()30   public static void reset() {
31     ReflectionHelpers.setStaticField(
32         WindowOnBackInvokedDispatcher.class,
33         "ENABLE_PREDICTIVE_BACK",
34         ENABLE_PREDICTIVE_BACK_DEFAULT);
35   }
36 }
37