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