RecentsActivity.java revision bd91297e895410bb27df3e930be5d9eab30129af
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)) { 5747c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung // Dismiss recents and launch the first task if possible 5847c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung dismissRecentsIfVisible(); 5947c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung } 6047c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung } 6147c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung }; 62303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 63303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung /** Updates the set of recent tasks */ 64303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung void updateRecentsTasks() { 65303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung RecentsTaskLoader loader = RecentsTaskLoader.getInstance(); 66303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung SpaceNode root = loader.reload(this, Constants.Values.RecentsTaskLoader.PreloadFirstTasksCount); 67303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung ArrayList<TaskStack> stacks = root.getStacks(); 68303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung if (!stacks.isEmpty()) { 69303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung mRecentsView.setBSP(root); 70303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung } 71303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 72303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung // Add the default no-recents layout 73303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung if (stacks.size() == 1 && stacks.get(0).getTaskCount() == 0) { 74303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung mEmptyView.setVisibility(View.VISIBLE); 75303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 76303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung // Dim the background even more 77303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung WindowManager.LayoutParams wlp = getWindow().getAttributes(); 78303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung wlp.dimAmount = Constants.Values.Window.DarkBackgroundDim; 79303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung getWindow().setAttributes(wlp); 80303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); 81303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung } else { 82303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung mEmptyView.setVisibility(View.GONE); 83303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung } 84303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung } 85303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 86303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung /** Dismisses recents if we are already visible and the intent is to toggle the recents view */ 8747c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung boolean dismissRecentsIfVisible() { 8847c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung if (mVisible) { 8947c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung if (!mRecentsView.launchFirstTask()) { 9047c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung finish(); 91303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung } 9247c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung return true; 93303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung } 94303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung return false; 95303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung } 96303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 97303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung /** Called with the activity is first created. */ 98303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung @Override 99303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung public void onCreate(Bundle savedInstanceState) { 100303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung super.onCreate(savedInstanceState); 101303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung Console.logDivider(Constants.DebugFlags.App.SystemUIHandshake); 102303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung Console.log(Constants.DebugFlags.App.SystemUIHandshake, "[RecentsActivity|onCreate]", 103303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung getIntent().getAction() + " visible: " + mVisible, Console.AnsiRed); 104bd91297e895410bb27df3e930be5d9eab30129afWinson Chung Console.logTraceTime(Constants.DebugFlags.App.TimeRecentsStartup, 105bd91297e895410bb27df3e930be5d9eab30129afWinson Chung Constants.DebugFlags.App.TimeRecentsStartupKey, "onCreate"); 106303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 107303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung // Initialize the loader and the configuration 108303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung RecentsTaskLoader.initialize(this); 109303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung RecentsConfiguration.reinitialize(this); 110303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 111303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung // Set the background dim 112303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung WindowManager.LayoutParams wlp = getWindow().getAttributes(); 113303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung wlp.dimAmount = Constants.Values.Window.BackgroundDim; 114303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung getWindow().setAttributes(wlp); 115303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); 116303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 117303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung // Create the view hierarchy 118303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung mRecentsView = new RecentsView(this); 11947c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung mRecentsView.setCallbacks(this); 120303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung mRecentsView.setLayoutParams(new FrameLayout.LayoutParams( 121303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung FrameLayout.LayoutParams.MATCH_PARENT, 122303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung FrameLayout.LayoutParams.MATCH_PARENT)); 123303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 124303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung // Create the empty view 125303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung LayoutInflater inflater = LayoutInflater.from(this); 126303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung mEmptyView = inflater.inflate(R.layout.recents_empty, mContainerView, false); 127303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 128303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung mContainerView = new FrameLayout(this); 129303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung mContainerView.addView(mRecentsView); 130303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung mContainerView.addView(mEmptyView); 131303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung setContentView(mContainerView); 132303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 133303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung // Update the recent tasks 134303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung updateRecentsTasks(); 135303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung } 136303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 137303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung @Override 138303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung protected void onNewIntent(Intent intent) { 139303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung super.onNewIntent(intent); 14047c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung // Reset the task launched flag if we encounter an onNewIntent() before onStop() 14147c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung mTaskLaunched = false; 14247c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung 143303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung Console.logDivider(Constants.DebugFlags.App.SystemUIHandshake); 144303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung Console.log(Constants.DebugFlags.App.SystemUIHandshake, "[RecentsActivity|onNewIntent]", 145303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung intent.getAction() + " visible: " + mVisible, Console.AnsiRed); 146bd91297e895410bb27df3e930be5d9eab30129afWinson Chung Console.logTraceTime(Constants.DebugFlags.App.TimeRecentsStartup, 147bd91297e895410bb27df3e930be5d9eab30129afWinson Chung Constants.DebugFlags.App.TimeRecentsStartupKey, "onNewIntent"); 148303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 149303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung // Initialize the loader and the configuration 150303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung RecentsTaskLoader.initialize(this); 151303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung RecentsConfiguration.reinitialize(this); 152303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 153303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung // Update the recent tasks 154303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung updateRecentsTasks(); 155303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung } 156303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 157303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung @Override 158303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung protected void onStart() { 159303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung Console.log(Constants.DebugFlags.App.SystemUIHandshake, "[RecentsActivity|onStart]", "", 160303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung Console.AnsiRed); 161303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung super.onStart(); 162303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung mVisible = true; 163303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung } 164303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 165303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung @Override 166303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung protected void onResume() { 167303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung Console.log(Constants.DebugFlags.App.SystemUIHandshake, "[RecentsActivity|onResume]", "", 168303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung Console.AnsiRed); 169303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung super.onResume(); 17047c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung 17147c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung // Register the broadcast receiver to handle messages from our service 17247c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung IntentFilter filter = new IntentFilter(); 17347c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung filter.addAction(RecentsService.ACTION_TOGGLE_RECENTS_ACTIVITY); 17447c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung filter.addAction(RecentsService.ACTION_FINISH_RECENTS_ACTIVITY); 17547c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung registerReceiver(mServiceBroadcastReceiver, filter); 176303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung } 177303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 178303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung @Override 179303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung protected void onPause() { 180303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung Console.log(Constants.DebugFlags.App.SystemUIHandshake, "[RecentsActivity|onPause]", "", 181303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung Console.AnsiRed); 182303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung super.onPause(); 183303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 18447c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung // Unregister any broadcast receivers we have registered 18547c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung unregisterReceiver(mServiceBroadcastReceiver); 186303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung } 187303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 188303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung @Override 189303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung protected void onStop() { 190303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung Console.log(Constants.DebugFlags.App.SystemUIHandshake, "[RecentsActivity|onStop]", "", 191303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung Console.AnsiRed); 192303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung super.onStop(); 19347c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung 19447c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung // Finish the current recents activity after we have launched a task 19547c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung if (mTaskLaunched && Constants.DebugFlags.App.EnableToggleNewRecentsActivity) { 19647c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung finish(); 19747c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung } 19847c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung 199303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung mVisible = false; 20047c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung mTaskLaunched = false; 20147c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung } 20247c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung 20347c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung @Override 20447c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung protected void onDestroy() { 20547c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung Console.log(Constants.DebugFlags.App.SystemUIHandshake, "[RecentsActivity|onDestroy]", "", 20647c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung Console.AnsiRed); 20747c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung super.onDestroy(); 208303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung } 209303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 210303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung @Override 2114d7b092a866d2fce3e11b5a12cda2b87a83af52dWinson Chung public void onTrimMemory(int level) { 2124d7b092a866d2fce3e11b5a12cda2b87a83af52dWinson Chung RecentsTaskLoader loader = RecentsTaskLoader.getInstance(); 2134d7b092a866d2fce3e11b5a12cda2b87a83af52dWinson Chung if (loader != null) { 2144d7b092a866d2fce3e11b5a12cda2b87a83af52dWinson Chung loader.onTrimMemory(level); 2154d7b092a866d2fce3e11b5a12cda2b87a83af52dWinson Chung } 2164d7b092a866d2fce3e11b5a12cda2b87a83af52dWinson Chung } 2174d7b092a866d2fce3e11b5a12cda2b87a83af52dWinson Chung 2184d7b092a866d2fce3e11b5a12cda2b87a83af52dWinson Chung @Override 219303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung public void onBackPressed() { 220303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung if (!mRecentsView.unfilterFilteredStacks()) { 221303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung super.onBackPressed(); 222303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung } 223303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung } 22447c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung 22547c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung @Override 22647c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung public void onTaskLaunching() { 22747c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung mTaskLaunched = true; 22847c4c69575e94635a9356e8a1faf4b56a0120452Winson Chung } 229303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung} 230