• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2023 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 package org.chromium.base.test.transit;
6 
7 import androidx.annotation.Nullable;
8 
9 import org.chromium.base.Log;
10 
11 import java.util.ArrayList;
12 import java.util.List;
13 
14 /** A {@link Transition} into a {@link StationFacility}. */
15 class FacilityCheckIn extends Transition {
16     private static final String TAG = "Transit";
17 
18     private StationFacility mFacility;
19 
20     /**
21      * Constructor. FacilityCheckIn is instantiated to enter a {@link StationFacility}.
22      *
23      * @param facility the {@link StationFacility} to enter.
24      * @param trigger the action that triggers the transition into the facility. e.g. clicking a
25      *     View.
26      */
FacilityCheckIn(StationFacility facility, @Nullable Trigger trigger)27     FacilityCheckIn(StationFacility facility, @Nullable Trigger trigger) {
28         super(trigger);
29         mFacility = facility;
30     }
31 
enterSync()32     void enterSync() {
33         onBeforeTransition();
34         triggerTransition();
35         List<ConditionWaiter.ConditionWaitStatus> waitStatuses = createWaitStatuses();
36         waitUntilEntry(waitStatuses);
37         onAfterTransition();
38         PublicTransitConfig.maybePauseAfterTransition(mFacility);
39     }
40 
onBeforeTransition()41     private void onBeforeTransition() {
42         mFacility.setStateTransitioningTo();
43         Log.i(TAG, "Will enter %s", mFacility);
44     }
45 
46     @Override
triggerTransition()47     protected void triggerTransition() {
48         super.triggerTransition();
49         Log.i(TAG, "Triggered entry into %s", mFacility);
50     }
51 
createWaitStatuses()52     private List<ConditionWaiter.ConditionWaitStatus> createWaitStatuses() {
53         ArrayList<ConditionWaiter.ConditionWaitStatus> waitStatuses = new ArrayList<>();
54         for (Condition condition : mFacility.getEnterConditions()) {
55             waitStatuses.add(
56                     new ConditionWaiter.ConditionWaitStatus(
57                             condition, ConditionWaiter.ConditionOrigin.ENTER));
58         }
59         for (Condition condition : getTransitionConditions()) {
60             waitStatuses.add(
61                     new ConditionWaiter.ConditionWaitStatus(
62                             condition, ConditionWaiter.ConditionOrigin.TRANSITION));
63         }
64         return waitStatuses;
65     }
66 
waitUntilEntry(List<ConditionWaiter.ConditionWaitStatus> transitionConditions)67     private void waitUntilEntry(List<ConditionWaiter.ConditionWaitStatus> transitionConditions) {
68         try {
69             ConditionWaiter.waitFor(transitionConditions);
70         } catch (AssertionError e) {
71             throw TravelException.newEnterFacilityException(mFacility, e);
72         }
73     }
74 
onAfterTransition()75     private void onAfterTransition() {
76         mFacility.setStateActive();
77         Log.i(TAG, "Entered %s", mFacility);
78     }
79 }
80