1235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri/* 2235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri * Copyright (C) 2016 The Android Open Source Project 3235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri * 4235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 5235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri * in compliance with the License. You may obtain a copy of the License at 6235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri * 7235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri * http://www.apache.org/licenses/LICENSE-2.0 8235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri * 9235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri * Unless required by applicable law or agreed to in writing, software distributed under the License 10235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 11235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri * or implied. See the License for the specific language governing permissions and limitations under 12235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri * the License. 13235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri */ 14235b1ebe1ebdcdeaf8814be397dbeb8ed53e8074Keyvan Amiri 15b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiripackage android.support.v17.leanback.app.wizard; 16b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri 173103f63e99d47573823957f7aa34308555873221Aurimas Liutikasimport static org.junit.Assert.assertTrue; 183103f63e99d47573823957f7aa34308555873221Aurimas Liutikas 190b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiriimport android.content.Context; 20b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiriimport android.content.Intent; 21b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiriimport android.content.res.Resources; 223103f63e99d47573823957f7aa34308555873221Aurimas Liutikasimport android.support.test.InstrumentationRegistry; 2335232c6eaeb9b99f390cb8ef0ac83bf45fa0b3faAurimas Liutikasimport android.support.test.filters.LargeTest; 243103f63e99d47573823957f7aa34308555873221Aurimas Liutikasimport android.support.test.rule.ActivityTestRule; 253103f63e99d47573823957f7aa34308555873221Aurimas Liutikasimport android.support.test.runner.AndroidJUnit4; 26b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiriimport android.support.v17.leanback.app.GuidedStepFragment; 277d7bf9541e0203ec67df0fe53367e2c126355b9esusnataimport android.support.v17.leanback.test.R; 28b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiriimport android.support.v17.leanback.widget.GuidanceStylist; 29b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiriimport android.support.v17.leanback.widget.GuidedAction; 30b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiriimport android.view.KeyEvent; 31b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri 320b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiriimport org.junit.Before; 330b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiriimport org.junit.Rule; 340b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiriimport org.junit.Test; 350b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiriimport org.junit.runner.RunWith; 360b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri 373103f63e99d47573823957f7aa34308555873221Aurimas Liutikasimport java.util.ArrayList; 383103f63e99d47573823957f7aa34308555873221Aurimas Liutikasimport java.util.Arrays; 393103f63e99d47573823957f7aa34308555873221Aurimas Liutikasimport java.util.Collections; 403103f63e99d47573823957f7aa34308555873221Aurimas Liutikasimport java.util.List; 410b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri 4235232c6eaeb9b99f390cb8ef0ac83bf45fa0b3faAurimas Liutikas@LargeTest 430b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri@RunWith(AndroidJUnit4.class) 440b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiripublic class GuidedStepAttributesTest { 45b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri static final long TRANSITION_LENGTH = 1000; 46b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri 47b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri static final String TAG = "GuidedStepAttributesTest"; 48b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri 490b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri @Rule 503103f63e99d47573823957f7aa34308555873221Aurimas Liutikas public ActivityTestRule<GuidedStepAttributesTestActivity> activityTestRule = 513103f63e99d47573823957f7aa34308555873221Aurimas Liutikas new ActivityTestRule<>(GuidedStepAttributesTestActivity.class, false, false); 52b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri 530b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri GuidedStepAttributesTestActivity mActivity; 54b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri 55b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri private void initActivity(Intent intent) { 560b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri mActivity = activityTestRule.launchActivity(intent); 57b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri try { 58b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri Thread.sleep(2000); 59b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri } catch(InterruptedException e) { 60b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri e.printStackTrace(); 61b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri } 62b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri } 63b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri 640b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri Context mContext; 650b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri @Before 660b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri public void setUp() { 670b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri mContext = InstrumentationRegistry.getInstrumentation().getTargetContext();; 680b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri } 690b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri 700b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri public static void sendKey(int keyCode) { 710b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri InstrumentationRegistry.getInstrumentation().sendKeyDownUpSync(keyCode); 720b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri } 730b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri 740b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri @Test 75b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri public void testFocusDisabledOnActions() throws Throwable { 76b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri 770b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri Intent intent = new Intent(); 780b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri Resources res = mContext.getResources(); 79b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri 80b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri final int NUM_SEARCH_ACTIONS = 10; 81b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri final List<Integer> ACTIONS_WITH_DISABLED_FOCUS = new ArrayList<>( 82b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri Arrays.asList(1, 3, 4, 5, 8)); 83b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri final int ACTION_ID_SEARCH = 1; 84b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri List<Integer> EXPECTED_ACTIONS_ID_AFTER_EACH_SELECT = new ArrayList<>(); 85b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri 86b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri // we will traverse actions from top to bottom and then back to the top 87b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri for(int i = 0; i < NUM_SEARCH_ACTIONS; i++) { 88b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri if (!ACTIONS_WITH_DISABLED_FOCUS.contains(i)) 89b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri EXPECTED_ACTIONS_ID_AFTER_EACH_SELECT.add(i); 90b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri } 91b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri for(int i = EXPECTED_ACTIONS_ID_AFTER_EACH_SELECT.size(); i-- != 0;) { 92b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri EXPECTED_ACTIONS_ID_AFTER_EACH_SELECT.add(EXPECTED_ACTIONS_ID_AFTER_EACH_SELECT.get(i)); 93b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri } 94b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri 95b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri 96b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri String title = "Guided Actions Focusable Test"; 97b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri String breadcrumb = "Focusable Test Demo"; 98b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri String description = ""; 99b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri GuidanceStylist.Guidance guidance = new GuidanceStylist.Guidance(title, description, 100b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri breadcrumb, null); 101b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri 102b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri List<GuidedAction> actionList = new ArrayList<>(); 103b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri for (int i = 0; i < NUM_SEARCH_ACTIONS; i++ ) { 1040b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri actionList.add(new GuidedAction.Builder(mContext) 105b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri .id(ACTION_ID_SEARCH) 106b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri .title(res.getString(R.string.search) + "" + i) 107b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri .description(res.getString(R.string.search_description) + i) 108b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri .build() 109b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri ); 110b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri } 111b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri for(int action_id : ACTIONS_WITH_DISABLED_FOCUS ) 112b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri actionList.get(action_id).setFocusable(false); 113b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri 114b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri GuidedStepAttributesTestFragment.GUIDANCE = guidance; 115b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri GuidedStepAttributesTestFragment.ACTION_LIST = actionList; 116b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri 117b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri initActivity(intent); 118b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri 119b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri int lastSelectedActionId = -1; 120b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri int selectIndex = 0; 121b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri GuidedStepFragment mFragment = (GuidedStepFragment) mActivity.getGuidedStepTestFragment(); 122b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri int prevSelectedActionPosition = -1; 123b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri int nextSelectedActionPosition = mFragment.getSelectedActionPosition(); 124b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri while ( nextSelectedActionPosition != prevSelectedActionPosition ) { 125b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri lastSelectedActionId = mFragment.getSelectedActionPosition(); 126b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri assertTrue(res.getString(R.string.focusable_test_error_message, 127b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri actionList.get(lastSelectedActionId).getTitle()), 128b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri lastSelectedActionId == EXPECTED_ACTIONS_ID_AFTER_EACH_SELECT.get(selectIndex)); 129b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri selectIndex++; 1300b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri sendKey(KeyEvent.KEYCODE_DPAD_DOWN); 131b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri prevSelectedActionPosition = nextSelectedActionPosition; 132b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri nextSelectedActionPosition = mFragment.getSelectedActionPosition(); 133b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri Thread.sleep(TRANSITION_LENGTH); 134b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri } 135b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri 136b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri prevSelectedActionPosition = -1; 137b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri while ( nextSelectedActionPosition != prevSelectedActionPosition ) { 138b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri lastSelectedActionId = mFragment.getSelectedActionPosition(); 139b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri assertTrue(res.getString(R.string.focusable_test_error_message, 140b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri actionList.get(lastSelectedActionId).getTitle()), 141b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri lastSelectedActionId == EXPECTED_ACTIONS_ID_AFTER_EACH_SELECT.get(selectIndex)); 142b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri selectIndex++; 1430b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri sendKey(KeyEvent.KEYCODE_DPAD_UP); 144b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri prevSelectedActionPosition = nextSelectedActionPosition; 145b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri nextSelectedActionPosition = mFragment.getSelectedActionPosition(); 146b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri Thread.sleep(TRANSITION_LENGTH); 147b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri } 148b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri 149b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri } 150b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri 151b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri // Note: do not remove final or sRevertCallback gets null from 2nd test on! 152b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri static final GuidedStepAttributesTestFragment.Callback sRevertCallback = new 153b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri GuidedStepAttributesTestFragment.Callback() { 154b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri @Override 155b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri public void onActionClicked(GuidedStepFragment fragment, long id) { 156b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri List<GuidedAction> allActions = fragment.getActions(); 157b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri for(int i = 1; i < allActions.size(); i++) { 158b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri GuidedAction action = allActions.get(i); 159b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri action.setEnabled(!action.isEnabled()); 160b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri fragment.notifyActionChanged(fragment.findActionPositionById(action.getId())); 161b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri } 162b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri } 163b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri }; 164b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri 1650b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri /** 1660b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri * Creates a number of enabled and disable actions and tests whether the flag is correctly set 1670b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri * by clicking on each individual action and checking whether the click event is triggered. 1680b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri * @throws Throwable 1690b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri */ 1700b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri @Test 171b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri public void testDisabledActions() throws Throwable { 172b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri 1730b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri Intent intent = new Intent(); 1740b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri Resources res = mContext.getResources(); 175b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri 176b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri final int NUM_SEARCH_ACTIONS = 10; 177b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri final List<Integer> DISABLED_ACTIONS = new ArrayList<>( 178b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri Arrays.asList(1, 3, 5, 7)); 179b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri final int ACTION_ID_REVERT_BUTTON = 0; 180b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri final int ACTION_ID_SEARCH_BEGIN = ACTION_ID_REVERT_BUTTON + 1; 181b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri int ACTION_ID_SEARCH_END = ACTION_ID_SEARCH_BEGIN; 182b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri 183b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri // sequence of clicked actions simulated in the test 184b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri List<Integer> CLICK_SEQUENCE = new ArrayList<>(); 185b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri 186b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri // Expected Clicked sequence can be different from focused ones since some of the actions 187b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri // are disabled hence not clickable 188b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri List<Integer> EXPECTED_FOCUSED_SEQUENCE = new ArrayList<>(); 189b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri List<Integer> EXPECTED_CLICKED_SEQUENCE = new ArrayList<>(); 190b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri // Expected actions state according to list of DISABLED_ACTIONS: false for disabled actions 191b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri List<Boolean> EXPECTED_ACTIONS_STATE = new ArrayList<>( 192b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri Arrays.asList(new Boolean[NUM_SEARCH_ACTIONS]) 193b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri ); 194b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri Collections.fill(EXPECTED_ACTIONS_STATE, Boolean.TRUE); 195b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri 196b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri for(int i = 0; i < NUM_SEARCH_ACTIONS; i++) { 197b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri CLICK_SEQUENCE.add(i + 1); 198b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri } 199b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri for(int clickedActionId : CLICK_SEQUENCE) { 200b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri EXPECTED_FOCUSED_SEQUENCE.add(clickedActionId); 201b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri if (!DISABLED_ACTIONS.contains(clickedActionId - 1)) 202b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri EXPECTED_CLICKED_SEQUENCE.add(clickedActionId); 203b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri else 204b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri EXPECTED_CLICKED_SEQUENCE.add(-1); 205b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri } 206b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri 207b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri String title = "Guided Actions Enabled Test"; 208b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri String breadcrumb = "Enabled Test Demo"; 209b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri String description = ""; 210b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri GuidanceStylist.Guidance guidance = new GuidanceStylist.Guidance(title, description, 211b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri breadcrumb, null); 212b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri 213b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri List<GuidedAction> actionList = new ArrayList<>(); 2140b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri actionList.add(new GuidedAction.Builder(mContext) 215b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri .id(ACTION_ID_REVERT_BUTTON) 216b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri .title(res.getString(R.string.invert_title)) 217b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri .description(res.getString(R.string.revert_description)) 218b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri .build() 219b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri ); 220b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri 221b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri for (int i = 0; i < NUM_SEARCH_ACTIONS; i++ ) { 2220b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri actionList.add(new GuidedAction.Builder(mContext) 223b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri .id(ACTION_ID_SEARCH_END++) 224b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri .title(res.getString(R.string.search) + "" + i) 225b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri .description(res.getString(R.string.search_description) + i) 226b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri .build() 227b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri ); 228b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri } 229b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri for(int action_id : DISABLED_ACTIONS ) { 230b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri if ( action_id >= 0 && action_id < NUM_SEARCH_ACTIONS ) { 231b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri actionList.get(action_id + 1).setEnabled(false); 232b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri EXPECTED_ACTIONS_STATE.set(action_id, Boolean.FALSE); 233b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri } 234b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri } 235b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri 236b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri GuidedStepAttributesTestFragment.clear(); 237b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri GuidedStepAttributesTestFragment.GUIDANCE = guidance; 238b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri GuidedStepAttributesTestFragment.ACTION_LIST = actionList; 239b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri GuidedStepAttributesTestFragment.setActionClickCallback(ACTION_ID_REVERT_BUTTON, 240b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri sRevertCallback); 241b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri 242b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri initActivity(intent); 243b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri 2440b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri examineEnabledAndDisabledActions(actionList, CLICK_SEQUENCE, EXPECTED_FOCUSED_SEQUENCE, 2450b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri EXPECTED_CLICKED_SEQUENCE); 2460b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri } 2470b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri 2480b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri /** 2490b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri * Toggles Enabled flags in oll the actions of the prior test, and tests whether they are 2500b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri * correctly reverted. 2510b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri */ 2520b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri @Test 2530b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri public void testToggleEnabledFlags() throws Throwable { 2540b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri 2550b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri Intent intent = new Intent(); 2560b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri Resources res = mContext.getResources(); 2570b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri 2580b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri final int NUM_SEARCH_ACTIONS = 10; 2590b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri final List<Integer> DISABLED_ACTIONS = new ArrayList<>( 2600b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri Arrays.asList(1, 3, 5, 7)); 2610b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri final int ACTION_ID_REVERT_BUTTON = 0; 2620b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri final int ACTION_ID_SEARCH_BEGIN = ACTION_ID_REVERT_BUTTON + 1; 2630b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri int ACTION_ID_SEARCH_END = ACTION_ID_SEARCH_BEGIN; 2640b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri 2650b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri // sequence of clicked actions simulated in the test 2660b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri List<Integer> CLICK_SEQUENCE = new ArrayList<>(); 2670b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri 2680b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri // Expected Clicked sequence can be different from focused ones since some of the actions 2690b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri // are disabled hence not clickable 2700b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri List<Integer> EXPECTED_FOCUSED_SEQUENCE = new ArrayList<>(); 2710b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri List<Integer> EXPECTED_CLICKED_SEQUENCE = new ArrayList<>(); 2720b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri // Expected actions state according to list of DISABLED_ACTIONS: false for disabled actions 2730b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri List<Boolean> EXPECTED_ACTIONS_STATE = new ArrayList<>( 2740b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri Arrays.asList(new Boolean[NUM_SEARCH_ACTIONS]) 2750b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri ); 2760b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri Collections.fill(EXPECTED_ACTIONS_STATE, Boolean.FALSE); 2770b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri 2780b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri for(int i = 0; i < NUM_SEARCH_ACTIONS; i++) { 2790b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri CLICK_SEQUENCE.add(i + 1); 2800b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri } 2810b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri for(int clickedActionId : CLICK_SEQUENCE) { 2820b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri EXPECTED_FOCUSED_SEQUENCE.add(clickedActionId); 2830b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri if (DISABLED_ACTIONS.contains(clickedActionId - 1)) 2840b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri EXPECTED_CLICKED_SEQUENCE.add(clickedActionId); 2850b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri else 2860b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri EXPECTED_CLICKED_SEQUENCE.add(-1); 2870b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri } 2880b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri 2890b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri String title = "Guided Actions Enabled Test"; 2900b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri String breadcrumb = "Toggle Enabled Flag Test Demo"; 2910b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri String description = ""; 2920b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri GuidanceStylist.Guidance guidance = new GuidanceStylist.Guidance(title, description, 2930b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri breadcrumb, null); 2940b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri 2950b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri List<GuidedAction> actionList = new ArrayList<>(); 2960b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri actionList.add(new GuidedAction.Builder(mContext) 2970b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri .id(ACTION_ID_REVERT_BUTTON) 2980b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri .title(res.getString(R.string.invert_title)) 2990b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri .description(res.getString(R.string.revert_description)) 3000b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri .build() 3010b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri ); 3020b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri 3030b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri for (int i = 0; i < NUM_SEARCH_ACTIONS; i++ ) { 3040b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri actionList.add(new GuidedAction.Builder(mContext) 3050b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri .id(ACTION_ID_SEARCH_END++) 3060b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri .title(res.getString(R.string.search) + "" + i) 3070b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri .description(res.getString(R.string.search_description) + i) 3080b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri .build() 3090b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri ); 3100b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri } 3110b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri for(int action_id : DISABLED_ACTIONS ) { 3120b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri if ( action_id >= 0 && action_id < NUM_SEARCH_ACTIONS ) { 3130b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri actionList.get(action_id + 1).setEnabled(false); 3140b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri EXPECTED_ACTIONS_STATE.set(action_id, Boolean.TRUE); 3150b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri } 3160b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri } 3170b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri 3180b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri GuidedStepAttributesTestFragment.clear(); 3190b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri GuidedStepAttributesTestFragment.GUIDANCE = guidance; 3200b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri GuidedStepAttributesTestFragment.ACTION_LIST = actionList; 3210b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri GuidedStepAttributesTestFragment.setActionClickCallback(ACTION_ID_REVERT_BUTTON, 3220b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri sRevertCallback); 3230b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri 3240b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri initActivity(intent); 3250b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri 326b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri final GuidedStepFragment mFragment = (GuidedStepFragment) 327b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri mActivity.getGuidedStepTestFragment(); 328b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri 3290b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri mActivity.runOnUiThread(new Runnable() { 330b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri @Override 331b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri public void run() { 332b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri mFragment.setSelectedActionPosition(0); 333b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri } 334b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri }); 335b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri Thread.sleep(TRANSITION_LENGTH); 3360b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri sendKey(KeyEvent.KEYCODE_DPAD_CENTER); 337b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri Thread.sleep(TRANSITION_LENGTH); 338b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri examineEnabledAndDisabledActions(actionList, CLICK_SEQUENCE, EXPECTED_FOCUSED_SEQUENCE, 339b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri EXPECTED_CLICKED_SEQUENCE); 340b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri } 341b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri 342b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri private void examineEnabledAndDisabledActions( 343b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri List<GuidedAction> actionList, List<Integer> CLICK_SEQUENCE, 344b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri List<Integer> EXPECTED_FOCUSED_SEQUENCE, 345b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri List<Integer> EXPECTED_CLICKED_SEQUENCE) 346b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri throws Throwable { 347b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri 348b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri final GuidedStepFragment mFragment = (GuidedStepFragment) 349b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri mActivity.getGuidedStepTestFragment(); 350b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri 351b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri for(int i = 0; i < CLICK_SEQUENCE.size(); i++) { 352b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri GuidedStepAttributesTestFragment.LAST_SELECTED_ACTION_ID = 353b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri GuidedStepAttributesTestFragment.LAST_CLICKED_ACTION_ID = -1; 354b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri final int id = CLICK_SEQUENCE.get(i); 3550b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri mActivity.runOnUiThread(new Runnable() { 356b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri @Override 357b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri public void run() { 358b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri mFragment.setSelectedActionPosition(id); 359b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri } 360b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri }); 361b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri Thread.sleep(TRANSITION_LENGTH); 362b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri 3630b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri sendKey(KeyEvent.KEYCODE_DPAD_CENTER); 364b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri Thread.sleep(TRANSITION_LENGTH); 365b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri 3660b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri assertTrue(mContext.getResources().getString( 367b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri R.string.enabled_test_wrong_focus_error_message), 3683103f63e99d47573823957f7aa34308555873221Aurimas Liutikas GuidedStepAttributesTestFragment.LAST_SELECTED_ACTION_ID 3693103f63e99d47573823957f7aa34308555873221Aurimas Liutikas == EXPECTED_FOCUSED_SEQUENCE.get(i) 370b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri ); 3710b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri assertTrue(mContext.getResources().getString( 372b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri R.string.enabled_test_wrong_click_error_message), 3733103f63e99d47573823957f7aa34308555873221Aurimas Liutikas GuidedStepAttributesTestFragment.LAST_CLICKED_ACTION_ID 3743103f63e99d47573823957f7aa34308555873221Aurimas Liutikas == EXPECTED_CLICKED_SEQUENCE.get(i) 375b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri ); 3760b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri assertTrue(mContext.getResources().getString( 377b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri R.string.enabled_test_wrong_flag_error_message), 3783103f63e99d47573823957f7aa34308555873221Aurimas Liutikas (GuidedStepAttributesTestFragment.LAST_CLICKED_ACTION_ID == -1) 3793103f63e99d47573823957f7aa34308555873221Aurimas Liutikas ? !actionList.get(id).isEnabled() 3803103f63e99d47573823957f7aa34308555873221Aurimas Liutikas : actionList.get(id).isEnabled() 381b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri ); 382b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri } 383b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri } 384b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri 3850b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri @Test 386b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri public void testCheckedActions() throws Throwable { 387b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri 3880b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri Intent intent = new Intent(); 3890b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri Resources res = mContext.getResources(); 390b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri 391b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri final int NUM_RADIO_ACTIONS = 3; 392b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri final int NUM_CHECK_BOX_ACTIONS = 3; 393b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri final int INITIALLY_CHECKED_RADIO_ACTION = 0; 394b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri final List<Integer> INITIALLY_CHECKED_CHECKBOX_ACTIONS = new ArrayList<>( 395b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri Arrays.asList(1, 2) 396b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri ); 397b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri 398b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri List<Integer> CLICK_SEQUENCE = new ArrayList<>(); 399b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri for(int i = 0; i < NUM_RADIO_ACTIONS + NUM_CHECK_BOX_ACTIONS; i++) { 400b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri CLICK_SEQUENCE.add(i); 401b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri } 402b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri 403b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri List<Boolean> EXPECTED_ACTIONS_STATE_AFTER_EACH_CLICK = new ArrayList<>( 404b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri Arrays.asList(new Boolean[CLICK_SEQUENCE.size()]) 405b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri ); 406b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri Collections.fill(EXPECTED_ACTIONS_STATE_AFTER_EACH_CLICK, Boolean.FALSE); 407b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri 408b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri // initial state of actions before any clicks happen 409b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri EXPECTED_ACTIONS_STATE_AFTER_EACH_CLICK.set(INITIALLY_CHECKED_RADIO_ACTION, true); 410b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri for(int checkedCheckBox : INITIALLY_CHECKED_CHECKBOX_ACTIONS) { 411b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri EXPECTED_ACTIONS_STATE_AFTER_EACH_CLICK.set(NUM_RADIO_ACTIONS + checkedCheckBox, true); 412b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri } 413b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri 414b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri String title = "Guided Actions Checked Test"; 415b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri String breadcrumb = "Checked Test Demo"; 416b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri String description = ""; 417b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri GuidanceStylist.Guidance guidance = new GuidanceStylist.Guidance(title, description, 418b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri breadcrumb, null); 419b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri 420b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri List<GuidedAction> actionList = new ArrayList<>(); 4210b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri actionList.add(new GuidedAction.Builder(mContext) 422b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri .title(res.getString(R.string.radio_actions_info_title)) 423b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri .description(res.getString(R.string.radio_actions_info_desc)) 424b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri .infoOnly(true) 425b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri .enabled(true) 426b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri .focusable(false) 427b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri .build() 428b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri ); 429b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri 430b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri int firstRadioActionIndex = actionList.size(); 431b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri for(int i = 0; i < NUM_RADIO_ACTIONS; i++) { 4320b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri actionList.add(new GuidedAction.Builder(mContext) 433b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri .title(res.getString(R.string.checkbox_title) + i) 434b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri .description(res.getString(R.string.checkbox_desc) + i) 435b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri .checkSetId(GuidedAction.DEFAULT_CHECK_SET_ID) 436b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri .build() 437b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri ); 438b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri if (i == INITIALLY_CHECKED_RADIO_ACTION) 439b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri actionList.get(firstRadioActionIndex + i).setChecked(true); 440b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri } 441b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri 4420b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri actionList.add(new GuidedAction.Builder(mContext) 443b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri .title(res.getString(R.string.checkbox_actions_info_title)) 444b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri .description(res.getString(R.string.checkbox_actions_info_desc)) 445b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri .infoOnly(true) 446b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri .enabled(true) 447b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri .focusable(false) 448b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri .build() 449b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri ); 450b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri int firstCheckBoxActionIndex = actionList.size(); 451b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri for(int i = 0; i < NUM_CHECK_BOX_ACTIONS; i++) { 4520b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri actionList.add(new GuidedAction.Builder(mContext) 453b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri .title(res.getString(R.string.checkbox_title) + i) 454b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri .description(res.getString(R.string.checkbox_desc) + i) 455b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri .checkSetId(GuidedAction.CHECKBOX_CHECK_SET_ID) 456b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri .build() 457b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri ); 458b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri } 459b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri for(int i = 0; i < INITIALLY_CHECKED_CHECKBOX_ACTIONS.size(); i++ ) { 460b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri actionList.get(firstCheckBoxActionIndex + INITIALLY_CHECKED_CHECKBOX_ACTIONS.get(i)) 461b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri .setChecked(true); 462b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri } 463b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri 464b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri GuidedStepAttributesTestFragment.GUIDANCE = guidance; 465b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri GuidedStepAttributesTestFragment.ACTION_LIST = actionList; 466b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri initActivity(intent); 467b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri 468b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri examineCheckedAndUncheckedActions(actionList, EXPECTED_ACTIONS_STATE_AFTER_EACH_CLICK, 469b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri NUM_RADIO_ACTIONS, NUM_CHECK_BOX_ACTIONS); 470b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri } 471b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri 472b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri private void updateExpectedActionsStateAfterClick( 473b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri List<Boolean> EXPECTED_ACTIONS_STATE_AFTER_EACH_CLICK, int NUM_RADIO_ACTIONS, 474b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri int NUM_CHECK_BOX_ACTIONS, int clickedActionIndex) { 475b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri 476b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri if (clickedActionIndex < NUM_RADIO_ACTIONS) { 477b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri for(int i = 0; i < NUM_RADIO_ACTIONS; i++) 478b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri EXPECTED_ACTIONS_STATE_AFTER_EACH_CLICK.set(i, false); 479b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri EXPECTED_ACTIONS_STATE_AFTER_EACH_CLICK.set(clickedActionIndex, true); 480b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri } 481b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri else if (clickedActionIndex < NUM_RADIO_ACTIONS + NUM_CHECK_BOX_ACTIONS) { 482b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri EXPECTED_ACTIONS_STATE_AFTER_EACH_CLICK.set(clickedActionIndex, 483b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri !EXPECTED_ACTIONS_STATE_AFTER_EACH_CLICK.get(clickedActionIndex)); 484b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri } 485b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri } 486b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri 487b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri private void verifyIfActionsStateIsCorrect(List<GuidedAction> actionList, 488b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri List<Boolean> EXPECTED_ACTIONS_STATE_AFTER_EACH_CLICK) { 489b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri 490b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri int actionIndex = 0; 491b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri for(GuidedAction checkAction : actionList) { 492b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri if (checkAction.infoOnly()) 493b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri continue; 4943103f63e99d47573823957f7aa34308555873221Aurimas Liutikas assertTrue("Action " + actionIndex + " is " + (!checkAction.isChecked() ? "un-" : "") 4953103f63e99d47573823957f7aa34308555873221Aurimas Liutikas + "checked while it shouldn't be!", checkAction.isChecked() 4963103f63e99d47573823957f7aa34308555873221Aurimas Liutikas == EXPECTED_ACTIONS_STATE_AFTER_EACH_CLICK.get(actionIndex)); 497b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri actionIndex++; 498b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri } 499b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri } 500b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri 501b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri private void examineCheckedAndUncheckedActions(List<GuidedAction> actionList, 502b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri List<Boolean> EXPECTED_ACTIONS_STATE_AFTER_EACH_CLICK, 503b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri int NUM_RADIO_ACTIONS, 504b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri int NUM_CHECK_BOX_ACTIONS) throws Throwable { 505b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri 506b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri final GuidedStepFragment guidedStepCheckedFragment = (GuidedStepFragment) 507b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri mActivity.getGuidedStepTestFragment(); 508b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri final int firstRadioActionIndex = 1; 509b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri final int firstCheckBoxActionIndex = firstRadioActionIndex + NUM_RADIO_ACTIONS + 1; 510b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri for(int actionId = 0; actionId < NUM_RADIO_ACTIONS; actionId++) { 511b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri final int id = actionId; 5120b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri mActivity.runOnUiThread(new Runnable() { 513b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri @Override 514b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri public void run() { 515b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri guidedStepCheckedFragment 516b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri .setSelectedActionPosition(firstRadioActionIndex + id); 517b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri } 518b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri }); 519b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri Thread.sleep(TRANSITION_LENGTH); 520b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri 5210b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri sendKey(KeyEvent.KEYCODE_DPAD_CENTER); 522b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri Thread.sleep(TRANSITION_LENGTH); 523b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri updateExpectedActionsStateAfterClick(EXPECTED_ACTIONS_STATE_AFTER_EACH_CLICK, 524b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri NUM_RADIO_ACTIONS, NUM_CHECK_BOX_ACTIONS, actionId); 525b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri verifyIfActionsStateIsCorrect(actionList, EXPECTED_ACTIONS_STATE_AFTER_EACH_CLICK); 526b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri } 527b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri 528b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri for(int actionId = 0; actionId < NUM_CHECK_BOX_ACTIONS; actionId++) { 529b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri final int id = actionId; 5300b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri mActivity.runOnUiThread(new Runnable() { 531b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri @Override 532b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri public void run() { 533b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri guidedStepCheckedFragment 534b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri .setSelectedActionPosition(firstCheckBoxActionIndex + id); 535b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri } 536b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri }); 537b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri Thread.sleep(TRANSITION_LENGTH); 538b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri 5390b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri sendKey(KeyEvent.KEYCODE_DPAD_CENTER); 540b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri Thread.sleep(TRANSITION_LENGTH); 541b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri updateExpectedActionsStateAfterClick(EXPECTED_ACTIONS_STATE_AFTER_EACH_CLICK, 542b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri NUM_RADIO_ACTIONS, NUM_CHECK_BOX_ACTIONS, NUM_RADIO_ACTIONS + actionId); 543b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri verifyIfActionsStateIsCorrect(actionList, EXPECTED_ACTIONS_STATE_AFTER_EACH_CLICK); 544b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri } 545b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri } 546b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri 5470b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri @Test 5480b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri public void testActionWithTwoSubActions() throws Throwable { 5490b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri ExpectedSubActionResult result = setUpActionsForSubActionsTest(); 5500b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri 5510b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri final int actionPos = 0; 5520b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri final GuidedAction selectedAction = result.actionList.get(actionPos); 5530b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri List<Integer> expectedFocusedSeq = result.expectedFocusedSeq.get(actionPos); 5540b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri List<Integer> expectedClickedSeq = result.expectedClickedSeq.get(actionPos); 5550b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri 5560b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri traverseSubActionsAndVerifyFocusAndClickEvents(selectedAction, actionPos, expectedFocusedSeq, 5570b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri expectedClickedSeq); 5580b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri } 5590b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri 5600b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri @Test 5610b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri public void testActionWithOneSubAction() throws Throwable { 5620b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri ExpectedSubActionResult result = setUpActionsForSubActionsTest(); 5630b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri 5640b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri final int actionPos = 1; 5650b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri final GuidedAction selectedAction = result.actionList.get(actionPos); 5660b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri List<Integer> expectedFocusedSeq = result.expectedFocusedSeq.get(actionPos); 5670b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri List<Integer> expectedClickedSeq = result.expectedClickedSeq.get(actionPos); 5680b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri 5690b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri traverseSubActionsAndVerifyFocusAndClickEvents(selectedAction, actionPos, expectedFocusedSeq, 5700b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri expectedClickedSeq); 5710b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri } 5720b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri 5730b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri @Test 5740b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri public void testActionWithZeroSubActions() throws Throwable { 5750b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri ExpectedSubActionResult result = setUpActionsForSubActionsTest(); 576b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri 5770b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri final int actionPos = 2; 5780b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri final GuidedAction selectedAction = result.actionList.get(actionPos); 5790b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri List<Integer> expectedFocusedSeq = result.expectedFocusedSeq.get(actionPos); 5800b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri List<Integer> expectedClickedSeq = result.expectedClickedSeq.get(actionPos); 5810b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri 5820b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri traverseSubActionsAndVerifyFocusAndClickEvents(selectedAction, actionPos, expectedFocusedSeq, 5830b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri expectedClickedSeq); 5840b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri } 5850b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri 5860b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri @Test 5870b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri public void testActionWithThreeSubActions() throws Throwable { 5880b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri ExpectedSubActionResult result = setUpActionsForSubActionsTest(); 5890b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri 5900b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri final int actionPos = 3; 5910b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri final GuidedAction selectedAction = result.actionList.get(actionPos); 5920b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri List<Integer> expectedFocusedSeq = result.expectedFocusedSeq.get(actionPos); 5930b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri List<Integer> expectedClickedSeq = result.expectedClickedSeq.get(actionPos); 5940b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri 5950b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri traverseSubActionsAndVerifyFocusAndClickEvents(selectedAction, actionPos, expectedFocusedSeq, 5960b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri expectedClickedSeq); 5970b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri } 5980b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri 5990b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri /** 6000b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri * Traverses the list of sub actions of a gudied action. It also verifies the correct action 6010b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri * or sub action is focused or clicked as the traversal is performed. 6020b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri * @param selectedAction The action of interest 6030b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri * @param actionPos The position of selectedAction within the array of guidedactions 6040b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri * @param expectedFocusedSeq The actual actions IDs used as a reference to verify focused actions 6050b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri * @param expectedClickedSeq The actual action IDs used as a reference to verify clicked actions 6060b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri * @throws Throwable 6070b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri */ 6080b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri private void traverseSubActionsAndVerifyFocusAndClickEvents(GuidedAction selectedAction, 6090b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri int actionPos, 6100b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri List<Integer> expectedFocusedSeq, 6110b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri List<Integer> expectedClickedSeq) 6120b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri throws Throwable{ 6130b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri 6143103f63e99d47573823957f7aa34308555873221Aurimas Liutikas final GuidedStepFragment mFragment = 6153103f63e99d47573823957f7aa34308555873221Aurimas Liutikas (GuidedStepFragment) mActivity.getGuidedStepTestFragment(); 6160b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri int focusStep = 0, clickStep = 0; 6170b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri GuidedStepAttributesTestFragment.LAST_SELECTED_ACTION_ID = 6180b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri GuidedStepAttributesTestFragment.LAST_CLICKED_ACTION_ID = -1; 6190b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri 6200b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri 6210b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri final int pos = actionPos; 6220b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri mActivity.runOnUiThread(new Runnable() { 6230b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri @Override 6240b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri public void run() { 6250b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri mFragment.setSelectedActionPosition(pos); 6260b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri } 6270b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri }); 6280b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri Thread.sleep(TRANSITION_LENGTH); 6290b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri 6300b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri if (mFragment.getSelectedActionPosition() != actionPos) { 6310b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri assertTrue(mContext.getResources().getString( 6320b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri R.string.subaction_test_wrong_focus_error_message), 6333103f63e99d47573823957f7aa34308555873221Aurimas Liutikas GuidedStepAttributesTestFragment.LAST_SELECTED_ACTION_ID 6343103f63e99d47573823957f7aa34308555873221Aurimas Liutikas == expectedFocusedSeq.get(focusStep++) 6350b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri ); 6360b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri } else { 6370b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri // If the currently focused position is the same as the position of the action of interest, 6380b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri // then GuidedStepFragment won't received onGuidedActionFocused callback. Since the first 6390b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri // element in the expectedFocusSeq is always the id of this action, we need to move focusStep 6400b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri // one step forward. 6410b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri focusStep++; 6420b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri } 6430b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri if (selectedAction.hasSubActions()) { 6440b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri // Following for loop clicks on a specific action and scrolls & clicks through 6450b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri // all its subactions 6460b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri for (int j = 0; j < selectedAction.getSubActions().size(); j++) { 6470b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri sendKey(KeyEvent.KEYCODE_DPAD_CENTER); 6480b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri Thread.sleep(TRANSITION_LENGTH); 6490b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri assertTrue(mContext.getResources().getString( 6500b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri R.string.subaction_test_wrong_focus_error_message), 6513103f63e99d47573823957f7aa34308555873221Aurimas Liutikas GuidedStepAttributesTestFragment.LAST_SELECTED_ACTION_ID 6523103f63e99d47573823957f7aa34308555873221Aurimas Liutikas == expectedFocusedSeq.get(focusStep++) 6530b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri ); 6540b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri assertTrue(mContext.getResources().getString( 6550b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri R.string.subaction_test_wrong_click_error_message), 6563103f63e99d47573823957f7aa34308555873221Aurimas Liutikas GuidedStepAttributesTestFragment.LAST_CLICKED_ACTION_ID 6573103f63e99d47573823957f7aa34308555873221Aurimas Liutikas == expectedClickedSeq.get(clickStep++) 6580b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri ); 6590b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri 6600b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri for (int k = 0; k < j; k++) { 6610b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri sendKey(KeyEvent.KEYCODE_DPAD_DOWN); 6620b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri Thread.sleep(TRANSITION_LENGTH); 6630b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri assertTrue(mContext.getResources().getString( 6640b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri R.string.subaction_test_wrong_focus_error_message), 6653103f63e99d47573823957f7aa34308555873221Aurimas Liutikas GuidedStepAttributesTestFragment.LAST_SELECTED_ACTION_ID 6663103f63e99d47573823957f7aa34308555873221Aurimas Liutikas == expectedFocusedSeq.get(focusStep++) 6670b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri ); 6680b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri } 6690b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri sendKey(KeyEvent.KEYCODE_DPAD_CENTER); 6700b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri Thread.sleep(TRANSITION_LENGTH); 6710b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri 6720b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri assertTrue(mContext.getResources().getString( 6730b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri R.string.subaction_test_wrong_focus_error_message), 6743103f63e99d47573823957f7aa34308555873221Aurimas Liutikas GuidedStepAttributesTestFragment.LAST_SELECTED_ACTION_ID 6753103f63e99d47573823957f7aa34308555873221Aurimas Liutikas == expectedFocusedSeq.get(focusStep++) 6760b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri ); 6770b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri assertTrue(mContext.getResources().getString( 6780b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri R.string.subaction_test_wrong_click_error_message), 6793103f63e99d47573823957f7aa34308555873221Aurimas Liutikas GuidedStepAttributesTestFragment.LAST_CLICKED_ACTION_ID 6803103f63e99d47573823957f7aa34308555873221Aurimas Liutikas == expectedClickedSeq.get(clickStep++) 6810b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri ); 6820b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri } 6830b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri } else { 6840b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri sendKey(KeyEvent.KEYCODE_DPAD_CENTER); 6850b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri Thread.sleep(TRANSITION_LENGTH); 6860b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri assertTrue(mContext.getResources().getString( 6870b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri R.string.subaction_test_wrong_focus_error_message), 6883103f63e99d47573823957f7aa34308555873221Aurimas Liutikas GuidedStepAttributesTestFragment.LAST_SELECTED_ACTION_ID 6893103f63e99d47573823957f7aa34308555873221Aurimas Liutikas == expectedFocusedSeq.get(focusStep++) 6900b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri ); 6910b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri assertTrue(mContext.getResources().getString( 6920b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri R.string.subaction_test_wrong_click_error_message), 6933103f63e99d47573823957f7aa34308555873221Aurimas Liutikas GuidedStepAttributesTestFragment.LAST_CLICKED_ACTION_ID 6943103f63e99d47573823957f7aa34308555873221Aurimas Liutikas == expectedClickedSeq.get(clickStep++) 6950b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri ); 6960b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri } 6970b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri } 6980b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri 6990b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri static class ExpectedSubActionResult { 7000b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri List<List<Integer>> expectedFocusedSeq; // Expected sequence of action (or subaction) ids to receive focus events; 7010b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri // Each entry corresponds to an action item in the guidedactions pane 7020b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri List<List<Integer>> expectedClickedSeq; // Expected sequence of action (or subaction) ids to receive click events; 7030b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri // Each entry corresponds to an action item in the guidedactions pane 7040b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri List<GuidedAction> actionList; // List of GuidedActions in the guidedactions pane 7050b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri } 7060b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri 7070b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri /** 7080b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri * Populates a sample list of actions and subactions in the guidedactions pane. 7090b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri * @return An object holding the expected sequence of action and subactions IDs that receive 7100b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri * focus and click events as well as the list of GuidedActions. 7110b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri */ 7120b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri private ExpectedSubActionResult setUpActionsForSubActionsTest() { 7130b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri Intent intent = new Intent(); 7140b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri Resources res = mContext.getResources(); 7150b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri 7160b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri ExpectedSubActionResult result = new ExpectedSubActionResult(); 7170b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri result.expectedFocusedSeq = new ArrayList<>(); 7180b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri result.expectedClickedSeq = new ArrayList<>(); 719b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri 720b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri final int NUM_REGULAR_ACTIONS = 4; 721b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri final int[] NUM_SUBACTIONS_PER_ACTION = {2, 1, 0, 3}; 722b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri final int[] REGULAR_ACTIONS_INDEX = new int[NUM_REGULAR_ACTIONS]; 723b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri final int[] BEGIN_SUBACTION_INDEX_PER_ACTION = new int[NUM_REGULAR_ACTIONS]; 724b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri final int[] END_SUBACTION_INDEX_PER_ACTION = new int[NUM_REGULAR_ACTIONS]; 7250b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri // Actions and SubActions are assigned unique sequential IDs 726b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri int lastIndex = 0; 727b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri for(int i = 0; i < NUM_REGULAR_ACTIONS; i++) { 728b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri REGULAR_ACTIONS_INDEX[i] = lastIndex; 729b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri lastIndex++; 730b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri BEGIN_SUBACTION_INDEX_PER_ACTION[i] = lastIndex; 731b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri END_SUBACTION_INDEX_PER_ACTION[i] = (lastIndex += NUM_SUBACTIONS_PER_ACTION[i]); 732b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri } 733b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri 7340b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri for (int i = 0; i < NUM_REGULAR_ACTIONS; i++) { 7350b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri List<Integer> expectedFocusSeqForEachAction = new ArrayList<>(); 7360b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri List<Integer> expectedClickedSeqForEachAction = new ArrayList<>(); 7370b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri expectedFocusSeqForEachAction.add(REGULAR_ACTIONS_INDEX[i]); 738b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri 7390b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri if (NUM_SUBACTIONS_PER_ACTION[i] > 0) { 7403103f63e99d47573823957f7aa34308555873221Aurimas Liutikas for (int j = BEGIN_SUBACTION_INDEX_PER_ACTION[i]; 7413103f63e99d47573823957f7aa34308555873221Aurimas Liutikas j < END_SUBACTION_INDEX_PER_ACTION[i]; j++) { 7420b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri expectedClickedSeqForEachAction.add(REGULAR_ACTIONS_INDEX[i]); 7430b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri for (int k = BEGIN_SUBACTION_INDEX_PER_ACTION[i]; k <= j; k++) { 7440b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri expectedFocusSeqForEachAction.add(k); 745b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri } 7460b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri expectedClickedSeqForEachAction.add(j); 7470b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri expectedFocusSeqForEachAction.add(REGULAR_ACTIONS_INDEX[i]); 748b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri } 749b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri } else { 7500b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri expectedClickedSeqForEachAction.add(REGULAR_ACTIONS_INDEX[i]); 7510b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri expectedFocusSeqForEachAction.add(REGULAR_ACTIONS_INDEX[i]); 752b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri } 7530b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri result.expectedFocusedSeq.add(expectedFocusSeqForEachAction); 7540b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri result.expectedClickedSeq.add(expectedClickedSeqForEachAction); 755b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri } 756b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri 757b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri String title = "Guided SubActions Test"; 758b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri String breadcrumb = "SubActions Test Demo"; 759b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri String description = ""; 760b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri GuidanceStylist.Guidance guidance = new GuidanceStylist.Guidance(title, description, 761b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri breadcrumb, null); 762b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri 763b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri List<GuidedAction> actionList = new ArrayList<>(); 764b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri 765b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri lastIndex = 0; 766b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri for (int i = 0; i < NUM_REGULAR_ACTIONS; i++ ) { 7670b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri GuidedAction action = new GuidedAction.Builder(mContext) 768b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri .id(lastIndex++) 769b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri .title(res.getString(R.string.dropdown_action_title, i)) 770b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri .description(res.getString(R.string.dropdown_action_desc, i)) 771b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri .build(); 772b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri if (NUM_SUBACTIONS_PER_ACTION[i] > 0) { 773b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri List<GuidedAction> subActions = new ArrayList<>(); 774b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri action.setSubActions(subActions); 775b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri for(int j = 0; j < NUM_SUBACTIONS_PER_ACTION[i]; j++) { 7760b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri subActions.add(new GuidedAction.Builder(mContext) 777b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri .id(lastIndex++) 778b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri .title(res.getString(R.string.subaction_title, j)) 779b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri .description("") 780b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri .build() 781b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri ); 782b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri } 783b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri } 784b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri actionList.add(action); 785b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri } 7860b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri result.actionList = actionList; 787b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri 788b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri GuidedStepAttributesTestFragment.clear(); 789b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri GuidedStepAttributesTestFragment.GUIDANCE = guidance; 790b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri GuidedStepAttributesTestFragment.ACTION_LIST = actionList; 791b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri 792b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri initActivity(intent); 7930b168ed894445f4e128c6edb52a8797a0ee532c9Keyvan Amiri return result; 794b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri } 795b9c5c04779dbd2b6f2f617da825a02bdfb3dab4fKeyvan Amiri} 796