135f3050959e43bf378f9a0adcaef13729206c7e4Winson/* 235f3050959e43bf378f9a0adcaef13729206c7e4Winson * Copyright (C) 2014 The Android Open Source Project 335f3050959e43bf378f9a0adcaef13729206c7e4Winson * 435f3050959e43bf378f9a0adcaef13729206c7e4Winson * Licensed under the Apache License, Version 2.0 (the "License"); 535f3050959e43bf378f9a0adcaef13729206c7e4Winson * you may not use this file except in compliance with the License. 635f3050959e43bf378f9a0adcaef13729206c7e4Winson * You may obtain a copy of the License at 735f3050959e43bf378f9a0adcaef13729206c7e4Winson * 835f3050959e43bf378f9a0adcaef13729206c7e4Winson * http://www.apache.org/licenses/LICENSE-2.0 935f3050959e43bf378f9a0adcaef13729206c7e4Winson * 1035f3050959e43bf378f9a0adcaef13729206c7e4Winson * Unless required by applicable law or agreed to in writing, software 1135f3050959e43bf378f9a0adcaef13729206c7e4Winson * distributed under the License is distributed on an "AS IS" BASIS, 1235f3050959e43bf378f9a0adcaef13729206c7e4Winson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1335f3050959e43bf378f9a0adcaef13729206c7e4Winson * See the License for the specific language governing permissions and 1435f3050959e43bf378f9a0adcaef13729206c7e4Winson * limitations under the License. 1535f3050959e43bf378f9a0adcaef13729206c7e4Winson */ 1635f3050959e43bf378f9a0adcaef13729206c7e4Winson 1735f3050959e43bf378f9a0adcaef13729206c7e4Winsonpackage com.android.systemui.recents; 1835f3050959e43bf378f9a0adcaef13729206c7e4Winson 1935f3050959e43bf378f9a0adcaef13729206c7e4Winson/** 2035f3050959e43bf378f9a0adcaef13729206c7e4Winson * The launch state of the RecentsActivity. 2135f3050959e43bf378f9a0adcaef13729206c7e4Winson * 2235f3050959e43bf378f9a0adcaef13729206c7e4Winson * Current Constraints: 2335f3050959e43bf378f9a0adcaef13729206c7e4Winson * - needed in onStart() before onNewIntent() 2435f3050959e43bf378f9a0adcaef13729206c7e4Winson * - needs to be reset when Recents is hidden 2535f3050959e43bf378f9a0adcaef13729206c7e4Winson * - needs to be computed in Recents component 2635f3050959e43bf378f9a0adcaef13729206c7e4Winson * - needs to be accessible by views 2735f3050959e43bf378f9a0adcaef13729206c7e4Winson */ 2835f3050959e43bf378f9a0adcaef13729206c7e4Winsonpublic class RecentsActivityLaunchState { 2935f3050959e43bf378f9a0adcaef13729206c7e4Winson 3035f3050959e43bf378f9a0adcaef13729206c7e4Winson public boolean launchedWithAltTab; 31e693aafe0511c2a7ffc571b22abeefba44046225Winson public boolean launchedFromApp; 32b502690e2d0a120993279a6fe800ad07dccc8872Winson Chung // Set if the activity that we launched from entered PiP during the transition into Recents 33b502690e2d0a120993279a6fe800ad07dccc8872Winson Chung public boolean launchedFromPipApp; 34b502690e2d0a120993279a6fe800ad07dccc8872Winson Chung // Set if the next activity that quick-switch will launch is the PiP activity 35b502690e2d0a120993279a6fe800ad07dccc8872Winson Chung public boolean launchedWithNextPipApp; 36fc73eec235131dbf3216891f3cb2b1407e6cc099Winson public boolean launchedFromBlacklistedApp; 3735f3050959e43bf378f9a0adcaef13729206c7e4Winson public boolean launchedFromHome; 38b1e71d09f24be2c18120146eaae1ffd9444feb9aWinson public boolean launchedViaDragGesture; 39c69249fd6f30398780342baed8752ef0eeff7d22Winson public boolean launchedViaDockGesture; 4035f3050959e43bf378f9a0adcaef13729206c7e4Winson public int launchedToTaskId; 4135f3050959e43bf378f9a0adcaef13729206c7e4Winson public int launchedNumVisibleTasks; 4235f3050959e43bf378f9a0adcaef13729206c7e4Winson public int launchedNumVisibleThumbnails; 4335f3050959e43bf378f9a0adcaef13729206c7e4Winson 44e161f08e98fdbe6fe83f70ffa1ea11142a027ebeJorim Jaggi public void reset() { 45e161f08e98fdbe6fe83f70ffa1ea11142a027ebeJorim Jaggi launchedFromHome = false; 46e693aafe0511c2a7ffc571b22abeefba44046225Winson launchedFromApp = false; 47fc73eec235131dbf3216891f3cb2b1407e6cc099Winson launchedFromBlacklistedApp = false; 48b502690e2d0a120993279a6fe800ad07dccc8872Winson Chung launchedFromPipApp = false; 49b502690e2d0a120993279a6fe800ad07dccc8872Winson Chung launchedWithNextPipApp = false; 50e161f08e98fdbe6fe83f70ffa1ea11142a027ebeJorim Jaggi launchedToTaskId = -1; 51e161f08e98fdbe6fe83f70ffa1ea11142a027ebeJorim Jaggi launchedWithAltTab = false; 52e161f08e98fdbe6fe83f70ffa1ea11142a027ebeJorim Jaggi launchedViaDragGesture = false; 53c69249fd6f30398780342baed8752ef0eeff7d22Winson launchedViaDockGesture = false; 5435f3050959e43bf378f9a0adcaef13729206c7e4Winson } 5535f3050959e43bf378f9a0adcaef13729206c7e4Winson 565da4347b41b105dc6c6c01bf2810af3ce3013229Winson /** 575da4347b41b105dc6c6c01bf2810af3ce3013229Winson * Returns the task to focus given the current launch state. 585da4347b41b105dc6c6c01bf2810af3ce3013229Winson */ 5921f495f07b1b9ace99986a110d01a763847687b1Jiaquan He public int getInitialFocusTaskIndex(int numTasks, boolean useGridLayout) { 60b61e654b9a46e79827355104760a3ac5228380bcWinson RecentsDebugFlags debugFlags = Recents.getDebugFlags(); 6105e46ca8f3d24cf333e745c8cebb420b2996e9eaWinson RecentsActivityLaunchState launchState = Recents.getConfiguration().getLaunchState(); 62e693aafe0511c2a7ffc571b22abeefba44046225Winson if (launchedFromApp) { 6305e46ca8f3d24cf333e745c8cebb420b2996e9eaWinson if (!launchState.launchedWithAltTab && debugFlags.isFastToggleRecentsEnabled()) { 64fc73eec235131dbf3216891f3cb2b1407e6cc099Winson // If fast toggling, focus the front most task so that the next tap will launch the 65fc73eec235131dbf3216891f3cb2b1407e6cc099Winson // task 66fc73eec235131dbf3216891f3cb2b1407e6cc099Winson return numTasks - 1; 67fc73eec235131dbf3216891f3cb2b1407e6cc099Winson } 68fc73eec235131dbf3216891f3cb2b1407e6cc099Winson 69fc73eec235131dbf3216891f3cb2b1407e6cc099Winson if (launchState.launchedFromBlacklistedApp) { 70fc73eec235131dbf3216891f3cb2b1407e6cc099Winson // If we are launching from a blacklisted app, focus the front most task so that the 71fc73eec235131dbf3216891f3cb2b1407e6cc099Winson // next tap will launch the task 72b61e654b9a46e79827355104760a3ac5228380bcWinson return numTasks - 1; 73b61e654b9a46e79827355104760a3ac5228380bcWinson } 74b61e654b9a46e79827355104760a3ac5228380bcWinson 7521f495f07b1b9ace99986a110d01a763847687b1Jiaquan He if (useGridLayout) { 7621f495f07b1b9ace99986a110d01a763847687b1Jiaquan He // If coming from another app to the grid layout, focus the front most task 7721f495f07b1b9ace99986a110d01a763847687b1Jiaquan He return numTasks - 1; 7821f495f07b1b9ace99986a110d01a763847687b1Jiaquan He } 7921f495f07b1b9ace99986a110d01a763847687b1Jiaquan He 804b9cded14346a7d8781ee6549c44888eb4ec9d83Winson // If coming from another app, focus the next task 8123b0d3f66e8280c8638d8b0954edc0409d14de7fWinson return Math.max(0, numTasks - 2); 82ead5c0fc20e5c60a68cd017af0b8eacaf1167a1cWinson Chung } else { 8305e46ca8f3d24cf333e745c8cebb420b2996e9eaWinson if (!launchState.launchedWithAltTab && debugFlags.isFastToggleRecentsEnabled()) { 84b61e654b9a46e79827355104760a3ac5228380bcWinson // If fast toggling, defer focusing until the next tap (which will automatically 85b61e654b9a46e79827355104760a3ac5228380bcWinson // focus the front most task) 86b61e654b9a46e79827355104760a3ac5228380bcWinson return -1; 87b61e654b9a46e79827355104760a3ac5228380bcWinson } 88b61e654b9a46e79827355104760a3ac5228380bcWinson 89fc73eec235131dbf3216891f3cb2b1407e6cc099Winson // If coming from home, focus the front most task 904b9cded14346a7d8781ee6549c44888eb4ec9d83Winson return numTasks - 1; 915da4347b41b105dc6c6c01bf2810af3ce3013229Winson } 925da4347b41b105dc6c6c01bf2810af3ce3013229Winson } 9335f3050959e43bf378f9a0adcaef13729206c7e4Winson} 94