24
24
import android .os .Bundle ;
25
25
import android .window .BackEvent ;
26
26
import android .window .OnBackAnimationCallback ;
27
+ import android .window .OnBackInvokedCallback ;
27
28
import androidx .annotation .NonNull ;
28
29
import androidx .annotation .Nullable ;
29
30
import androidx .lifecycle .DefaultLifecycleObserver ;
@@ -125,8 +126,47 @@ public void itUnregistersOnBackInvokedCallbackOnRelease() {
125
126
}
126
127
127
128
@ Test
128
- @ TargetApi (34 )
129
- public void itHandlesOnBackAnimationCallbackAsExpected () {
129
+ @ Config (maxSdk = Build .VERSION_CODES .S_V2 )
130
+ public void onBackInvokedCallbackIsNullForSdk32OrLower () {
131
+ Intent intent = FlutterActivity .createDefaultIntent (ctx );
132
+ ActivityController <FlutterActivity > activityController =
133
+ Robolectric .buildActivity (FlutterActivity .class , intent );
134
+ FlutterActivity flutterActivity = activityController .get ();
135
+
136
+ flutterActivity .onCreate (null );
137
+
138
+ assertNull (
139
+ "onBackInvokedCallback should be null for SDK 32 or lower" ,
140
+ flutterActivity .onBackInvokedCallback );
141
+ }
142
+
143
+ @ Test
144
+ @ Config (
145
+ sdk = Build .VERSION_CODES .TIRAMISU ,
146
+ minSdk = Build .VERSION_CODES .TIRAMISU ,
147
+ maxSdk = Build .VERSION_CODES .TIRAMISU )
148
+ @ TargetApi (Build .VERSION_CODES .TIRAMISU )
149
+ public void onBackInvokedCallbackIsOnBackInvokedCallbackForSdk33 () {
150
+ Intent intent = FlutterActivityWithReportFullyDrawn .createDefaultIntent (ctx );
151
+ ActivityController <FlutterActivityWithReportFullyDrawn > activityController =
152
+ Robolectric .buildActivity (FlutterActivityWithReportFullyDrawn .class , intent );
153
+ FlutterActivityWithReportFullyDrawn activity = spy (activityController .get ());
154
+
155
+ activity .onCreate (null );
156
+
157
+ assertNotNull (
158
+ "onBackInvokedCallback should not be null for SDK 33" , activity .onBackInvokedCallback );
159
+
160
+ OnBackInvokedCallback callback = activity .onBackInvokedCallback ;
161
+
162
+ callback .onBackInvoked ();
163
+ verify (activity , times (1 )).onBackPressed ();
164
+ }
165
+
166
+ @ Test
167
+ @ Config (sdk = Build .VERSION_CODES .UPSIDE_DOWN_CAKE , minSdk = Build .VERSION_CODES .UPSIDE_DOWN_CAKE )
168
+ @ TargetApi (Build .VERSION_CODES .UPSIDE_DOWN_CAKE )
169
+ public void itHandlesOnBackAnimationCallbackAsExpectedForSdk34OrHigher () {
130
170
Intent intent = FlutterActivityWithReportFullyDrawn .createDefaultIntent (ctx );
131
171
ActivityController <FlutterActivityWithReportFullyDrawn > activityController =
132
172
Robolectric .buildActivity (FlutterActivityWithReportFullyDrawn .class , intent );
@@ -135,7 +175,7 @@ public void itHandlesOnBackAnimationCallbackAsExpected() {
135
175
activity .onCreate (null );
136
176
137
177
assertTrue (
138
- "onBackInvokedCallback should be an instance of OnBackAnimationCallback" ,
178
+ "onBackInvokedCallback should be an instance of OnBackAnimationCallback for SDK 34 or higher " ,
139
179
activity .onBackInvokedCallback instanceof OnBackAnimationCallback );
140
180
141
181
OnBackAnimationCallback callback = (OnBackAnimationCallback ) activity .onBackInvokedCallback ;
0 commit comments