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