RecentsActivity.java revision c6a1623cc48581380b698ae87b43bfafb9c935ba
1303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung/* 2303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung * Copyright (C) 2014 The Android Open Source Project 3303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung * 4303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung * Licensed under the Apache License, Version 2.0 (the "License"); 5303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung * you may not use this file except in compliance with the License. 6303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung * You may obtain a copy of the License at 7303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung * 8303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung * http://www.apache.org/licenses/LICENSE-2.0 9303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung * 10303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung * Unless required by applicable law or agreed to in writing, software 11303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung * distributed under the License is distributed on an "AS IS" BASIS, 12303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung * See the License for the specific language governing permissions and 14303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung * limitations under the License. 15303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung */ 16303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 17303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chungpackage com.android.systemui.recents; 18303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 19303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chungimport android.app.Activity; 2047c4c69575e94635a9356e8a1faf4b56a0120452Winson Chungimport android.content.BroadcastReceiver; 2147c4c69575e94635a9356e8a1faf4b56a0120452Winson Chungimport android.content.Context; 22303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chungimport android.content.Intent; 2347c4c69575e94635a9356e8a1faf4b56a0120452Winson Chungimport android.content.IntentFilter; 24303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chungimport android.os.Bundle; 25303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chungimport android.view.LayoutInflater; 26303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chungimport android.view.View; 27303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chungimport android.view.WindowManager; 28303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chungimport android.widget.FrameLayout; 2947c4c69575e94635a9356e8a1faf4b56a0120452Winson Chungimport com.android.systemui.R; 30303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chungimport com.android.systemui.recents.model.SpaceNode; 31303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chungimport com.android.systemui.recents.model.TaskStack; 32303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chungimport com.android.systemui.recents.views.RecentsView; 33303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 34303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chungimport java.util.ArrayList; 35303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 36303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 37303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung/* Activity */ 3847c4c69575e94635a9356e8a1faf4b56a0120452Winson Chungpublic class RecentsActivity extends Activity implements RecentsView.RecentsViewCallbacks { 39303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung FrameLayout mContainerView; 40303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung RecentsView mRecentsView; 41303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung View mEmptyView; 4247c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung 43303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung boolean mVisible; 4447c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung boolean mTaskLaunched; 4547c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung 4647c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung BroadcastReceiver mServiceBroadcastReceiver = new BroadcastReceiver() { 4747c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung @Override 4847c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung public void onReceive(Context context, Intent intent) { 4947c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung String action = intent.getAction(); 5047c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung Console.log(Constants.DebugFlags.App.SystemUIHandshake, 5147c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung "[RecentsActivity|serviceBroadcast]", action, Console.AnsiRed); 5247c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung if (action.equals(RecentsService.ACTION_FINISH_RECENTS_ACTIVITY)) { 5347c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung if (Constants.DebugFlags.App.EnableToggleNewRecentsActivity) { 5447c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung finish(); 5547c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung } 5647c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung } else if (action.equals(RecentsService.ACTION_TOGGLE_RECENTS_ACTIVITY)) { 57c6a1623cc48581380b698ae87b43bfafb9c935baWinson Chung // Try and unfilter and filtered stacks 58c6a1623cc48581380b698ae87b43bfafb9c935baWinson Chung if (!mRecentsView.unfilterFilteredStacks()) { 59c6a1623cc48581380b698ae87b43bfafb9c935baWinson Chung // If there are no filtered stacks, dismiss recents and launch the first task 60c6a1623cc48581380b698ae87b43bfafb9c935baWinson Chung dismissRecentsIfVisible(); 61c6a1623cc48581380b698ae87b43bfafb9c935baWinson Chung } 6247c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung } 6347c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung } 6447c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung }; 65303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 66303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung /** Updates the set of recent tasks */ 67303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung void updateRecentsTasks() { 68303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung RecentsTaskLoader loader = RecentsTaskLoader.getInstance(); 69303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung SpaceNode root = loader.reload(this, Constants.Values.RecentsTaskLoader.PreloadFirstTasksCount); 70303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung ArrayList<TaskStack> stacks = root.getStacks(); 71303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung if (!stacks.isEmpty()) { 72303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung mRecentsView.setBSP(root); 73303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung } 74303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 75303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung // Add the default no-recents layout 76303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung if (stacks.size() == 1 && stacks.get(0).getTaskCount() == 0) { 77303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung mEmptyView.setVisibility(View.VISIBLE); 78303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 79303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung // Dim the background even more 80303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung WindowManager.LayoutParams wlp = getWindow().getAttributes(); 81303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung wlp.dimAmount = Constants.Values.Window.DarkBackgroundDim; 82303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung getWindow().setAttributes(wlp); 83303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); 84303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung } else { 85303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung mEmptyView.setVisibility(View.GONE); 86303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung } 87303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung } 88303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 89303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung /** Dismisses recents if we are already visible and the intent is to toggle the recents view */ 9047c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung boolean dismissRecentsIfVisible() { 9147c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung if (mVisible) { 9247c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung if (!mRecentsView.launchFirstTask()) { 9347c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung finish(); 94303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung } 9547c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung return true; 96303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung } 97303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung return false; 98303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung } 99303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 100303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung /** Called with the activity is first created. */ 101303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung @Override 102303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung public void onCreate(Bundle savedInstanceState) { 103303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung super.onCreate(savedInstanceState); 104303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung Console.logDivider(Constants.DebugFlags.App.SystemUIHandshake); 105303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung Console.log(Constants.DebugFlags.App.SystemUIHandshake, "[RecentsActivity|onCreate]", 106303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung getIntent().getAction() + " visible: " + mVisible, Console.AnsiRed); 107bd91297e895410bb27df3e930be5d9eab30129afWinson Chung Console.logTraceTime(Constants.DebugFlags.App.TimeRecentsStartup, 108bd91297e895410bb27df3e930be5d9eab30129afWinson Chung Constants.DebugFlags.App.TimeRecentsStartupKey, "onCreate"); 109303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 110303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung // Initialize the loader and the configuration 111303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung RecentsTaskLoader.initialize(this); 112303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung RecentsConfiguration.reinitialize(this); 113303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 114303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung // Set the background dim 115303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung WindowManager.LayoutParams wlp = getWindow().getAttributes(); 116303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung wlp.dimAmount = Constants.Values.Window.BackgroundDim; 117303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung getWindow().setAttributes(wlp); 118303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); 119303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 120303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung // Create the view hierarchy 121303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung mRecentsView = new RecentsView(this); 12247c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung mRecentsView.setCallbacks(this); 123303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung mRecentsView.setLayoutParams(new FrameLayout.LayoutParams( 124303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung FrameLayout.LayoutParams.MATCH_PARENT, 125303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung FrameLayout.LayoutParams.MATCH_PARENT)); 126303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 127303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung // Create the empty view 128303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung LayoutInflater inflater = LayoutInflater.from(this); 129303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung mEmptyView = inflater.inflate(R.layout.recents_empty, mContainerView, false); 130303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 131303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung mContainerView = new FrameLayout(this); 132303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung mContainerView.addView(mRecentsView); 133303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung mContainerView.addView(mEmptyView); 134303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung setContentView(mContainerView); 135303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 136303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung // Update the recent tasks 137303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung updateRecentsTasks(); 138303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung } 139303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 140303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung @Override 141303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung protected void onNewIntent(Intent intent) { 142303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung super.onNewIntent(intent); 14347c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung // Reset the task launched flag if we encounter an onNewIntent() before onStop() 14447c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung mTaskLaunched = false; 14547c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung 146303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung Console.logDivider(Constants.DebugFlags.App.SystemUIHandshake); 147303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung Console.log(Constants.DebugFlags.App.SystemUIHandshake, "[RecentsActivity|onNewIntent]", 148303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung intent.getAction() + " visible: " + mVisible, Console.AnsiRed); 149bd91297e895410bb27df3e930be5d9eab30129afWinson Chung Console.logTraceTime(Constants.DebugFlags.App.TimeRecentsStartup, 150bd91297e895410bb27df3e930be5d9eab30129afWinson Chung Constants.DebugFlags.App.TimeRecentsStartupKey, "onNewIntent"); 151303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 152303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung // Initialize the loader and the configuration 153303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung RecentsTaskLoader.initialize(this); 154303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung RecentsConfiguration.reinitialize(this); 155303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 156303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung // Update the recent tasks 157303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung updateRecentsTasks(); 158303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung } 159303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 160303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung @Override 161303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung protected void onStart() { 162303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung Console.log(Constants.DebugFlags.App.SystemUIHandshake, "[RecentsActivity|onStart]", "", 163303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung Console.AnsiRed); 164303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung super.onStart(); 165303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung mVisible = true; 166303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung } 167303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 168303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung @Override 169303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung protected void onResume() { 170303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung Console.log(Constants.DebugFlags.App.SystemUIHandshake, "[RecentsActivity|onResume]", "", 171303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung Console.AnsiRed); 172303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung super.onResume(); 17347c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung 17447c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung // Register the broadcast receiver to handle messages from our service 17547c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung IntentFilter filter = new IntentFilter(); 17647c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung filter.addAction(RecentsService.ACTION_TOGGLE_RECENTS_ACTIVITY); 17747c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung filter.addAction(RecentsService.ACTION_FINISH_RECENTS_ACTIVITY); 17847c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung registerReceiver(mServiceBroadcastReceiver, filter); 179303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung } 180303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 181303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung @Override 182303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung protected void onPause() { 183303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung Console.log(Constants.DebugFlags.App.SystemUIHandshake, "[RecentsActivity|onPause]", "", 184303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung Console.AnsiRed); 185303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung super.onPause(); 186303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 18747c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung // Unregister any broadcast receivers we have registered 18847c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung unregisterReceiver(mServiceBroadcastReceiver); 189303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung } 190303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 191303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung @Override 192303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung protected void onStop() { 193303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung Console.log(Constants.DebugFlags.App.SystemUIHandshake, "[RecentsActivity|onStop]", "", 194303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung Console.AnsiRed); 195303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung super.onStop(); 19647c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung 19747c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung // Finish the current recents activity after we have launched a task 19847c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung if (mTaskLaunched && Constants.DebugFlags.App.EnableToggleNewRecentsActivity) { 19947c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung finish(); 20047c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung } 20147c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung 202303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung mVisible = false; 20347c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung mTaskLaunched = false; 20447c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung } 20547c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung 20647c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung @Override 20747c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung protected void onDestroy() { 20847c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung Console.log(Constants.DebugFlags.App.SystemUIHandshake, "[RecentsActivity|onDestroy]", "", 20947c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung Console.AnsiRed); 21047c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung super.onDestroy(); 211303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung } 212303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 213303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung @Override 2144d7b092a866d2fce3e11b5a12cda2b87a83af52dWinson Chung public void onTrimMemory(int level) { 2154d7b092a866d2fce3e11b5a12cda2b87a83af52dWinson Chung RecentsTaskLoader loader = RecentsTaskLoader.getInstance(); 2164d7b092a866d2fce3e11b5a12cda2b87a83af52dWinson Chung if (loader != null) { 2174d7b092a866d2fce3e11b5a12cda2b87a83af52dWinson Chung loader.onTrimMemory(level); 2184d7b092a866d2fce3e11b5a12cda2b87a83af52dWinson Chung } 2194d7b092a866d2fce3e11b5a12cda2b87a83af52dWinson Chung } 2204d7b092a866d2fce3e11b5a12cda2b87a83af52dWinson Chung 2214d7b092a866d2fce3e11b5a12cda2b87a83af52dWinson Chung @Override 222303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung public void onBackPressed() { 223303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung if (!mRecentsView.unfilterFilteredStacks()) { 224303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung super.onBackPressed(); 225303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung } 226303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung } 22747c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung 22847c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung @Override 22947c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung public void onTaskLaunching() { 23047c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung mTaskLaunched = true; 23147c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung } 232303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung} 233