1cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka/* 2cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka * Copyright (C) 2012 The Android Open Source Project 3cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka * 4cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka * Licensed under the Apache License, Version 2.0 (the "License"); 5cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka * you may not use this file except in compliance with the License. 6cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka * You may obtain a copy of the License at 7cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka * 8cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka * http://www.apache.org/licenses/LICENSE-2.0 9cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka * 10cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka * Unless required by applicable law or agreed to in writing, software 11cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka * distributed under the License is distributed on an "AS IS" BASIS, 12cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka * See the License for the specific language governing permissions and 14cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka * limitations under the License. 15cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka */ 16cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka 17cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurkapackage com.android.systemui.recent; 18cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka 19cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurkaimport android.app.Activity; 20e5923631f06406f5f5e23a3a2ab4b24bb53a9094Michael Jurkaimport android.app.ActivityManager; 21071316e5612ae1554309912ad4ad4680b80c718dMichael Jurkaimport android.app.WallpaperManager; 22cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurkaimport android.content.BroadcastReceiver; 23cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurkaimport android.content.Context; 24cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurkaimport android.content.Intent; 25cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurkaimport android.content.IntentFilter; 26cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurkaimport android.os.Bundle; 27cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurkaimport android.os.UserHandle; 28cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurkaimport android.view.MotionEvent; 29cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurkaimport android.view.View; 30071316e5612ae1554309912ad4ad4680b80c718dMichael Jurkaimport android.view.WindowManager; 31cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka 32cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurkaimport com.android.systemui.R; 33cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurkaimport com.android.systemui.statusbar.tablet.StatusBarPanel; 34cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka 35e5923631f06406f5f5e23a3a2ab4b24bb53a9094Michael Jurkaimport java.util.List; 36e5923631f06406f5f5e23a3a2ab4b24bb53a9094Michael Jurka 37cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurkapublic class RecentsActivity extends Activity { 3880343f646f9686528212f82163a77ef48e30f4c3Michael Jurka public static final String TOGGLE_RECENTS_INTENT = "com.android.systemui.recent.action.TOGGLE_RECENTS"; 3980343f646f9686528212f82163a77ef48e30f4c3Michael Jurka public static final String PRELOAD_INTENT = "com.android.systemui.recent.action.PRELOAD"; 4080343f646f9686528212f82163a77ef48e30f4c3Michael Jurka public static final String CANCEL_PRELOAD_INTENT = "com.android.systemui.recent.CANCEL_PRELOAD"; 4180343f646f9686528212f82163a77ef48e30f4c3Michael Jurka public static final String CLOSE_RECENTS_INTENT = "com.android.systemui.recent.action.CLOSE"; 4280343f646f9686528212f82163a77ef48e30f4c3Michael Jurka public static final String WINDOW_ANIMATION_START_INTENT = "com.android.systemui.recent.action.WINDOW_ANIMATION_START"; 4380343f646f9686528212f82163a77ef48e30f4c3Michael Jurka public static final String PRELOAD_PERMISSION = "com.android.systemui.recent.permission.PRELOAD"; 4480343f646f9686528212f82163a77ef48e30f4c3Michael Jurka public static final String WAITING_FOR_WINDOW_ANIMATION_PARAM = "com.android.systemui.recent.WAITING_FOR_WINDOW_ANIMATION"; 45cbe69206c0046d3f4c1f385425e69751d7048156Michael Jurka private static final String WAS_SHOWING = "was_showing"; 46cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka 47cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka private RecentsPanelView mRecentsPanel; 48cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka private IntentFilter mIntentFilter; 49cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka private boolean mShowing; 50cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka private boolean mForeground; 51071316e5612ae1554309912ad4ad4680b80c718dMichael Jurka 52cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka private BroadcastReceiver mIntentReceiver = new BroadcastReceiver() { 53cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka @Override 54cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka public void onReceive(Context context, Intent intent) { 5580343f646f9686528212f82163a77ef48e30f4c3Michael Jurka if (CLOSE_RECENTS_INTENT.equals(intent.getAction())) { 5680343f646f9686528212f82163a77ef48e30f4c3Michael Jurka if (mRecentsPanel != null && mRecentsPanel.isShowing()) { 5780343f646f9686528212f82163a77ef48e30f4c3Michael Jurka if (mShowing && !mForeground) { 5880343f646f9686528212f82163a77ef48e30f4c3Michael Jurka // Captures the case right before we transition to another activity 5980343f646f9686528212f82163a77ef48e30f4c3Michael Jurka mRecentsPanel.show(false); 6080343f646f9686528212f82163a77ef48e30f4c3Michael Jurka } 6180343f646f9686528212f82163a77ef48e30f4c3Michael Jurka } 6280343f646f9686528212f82163a77ef48e30f4c3Michael Jurka } else if (WINDOW_ANIMATION_START_INTENT.equals(intent.getAction())) { 6380343f646f9686528212f82163a77ef48e30f4c3Michael Jurka if (mRecentsPanel != null) { 6480343f646f9686528212f82163a77ef48e30f4c3Michael Jurka mRecentsPanel.onWindowAnimationStart(); 65cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka } 66cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka } 67cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka } 68cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka }; 69cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka 70cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka public class TouchOutsideListener implements View.OnTouchListener { 71cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka private StatusBarPanel mPanel; 72cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka 73cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka public TouchOutsideListener(StatusBarPanel panel) { 74cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka mPanel = panel; 75cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka } 76cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka 77cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka public boolean onTouch(View v, MotionEvent ev) { 78cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka final int action = ev.getAction(); 79cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka if (action == MotionEvent.ACTION_OUTSIDE 80cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka || (action == MotionEvent.ACTION_DOWN 81cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka && !mPanel.isInContentArea((int) ev.getX(), (int) ev.getY()))) { 82cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka dismissAndGoHome(); 83cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka return true; 84cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka } 85cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka return false; 86cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka } 87cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka } 88cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka 89cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka @Override 90cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka public void onPause() { 91071316e5612ae1554309912ad4ad4680b80c718dMichael Jurka overridePendingTransition( 92071316e5612ae1554309912ad4ad4680b80c718dMichael Jurka R.anim.recents_return_to_launcher_enter, 93071316e5612ae1554309912ad4ad4680b80c718dMichael Jurka R.anim.recents_return_to_launcher_exit); 94cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka mForeground = false; 95cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka super.onPause(); 96cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka } 97cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka 98cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka @Override 99cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka public void onStop() { 100cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka mShowing = false; 101cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka if (mRecentsPanel != null) { 102cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka mRecentsPanel.onUiHidden(); 103cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka } 104cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka super.onStop(); 105cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka } 106cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka 107071316e5612ae1554309912ad4ad4680b80c718dMichael Jurka private void updateWallpaperVisibility(boolean visible) { 108071316e5612ae1554309912ad4ad4680b80c718dMichael Jurka int wpflags = visible ? WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER : 0; 109071316e5612ae1554309912ad4ad4680b80c718dMichael Jurka int curflags = getWindow().getAttributes().flags 110071316e5612ae1554309912ad4ad4680b80c718dMichael Jurka & WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER; 111071316e5612ae1554309912ad4ad4680b80c718dMichael Jurka if (wpflags != curflags) { 112071316e5612ae1554309912ad4ad4680b80c718dMichael Jurka getWindow().setFlags(wpflags, WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER); 113071316e5612ae1554309912ad4ad4680b80c718dMichael Jurka } 114071316e5612ae1554309912ad4ad4680b80c718dMichael Jurka } 115071316e5612ae1554309912ad4ad4680b80c718dMichael Jurka 116833808d0c69be8533759afdaa8ca4c004835f6a0Michael Jurka public static boolean forceOpaqueBackground(Context context) { 117833808d0c69be8533759afdaa8ca4c004835f6a0Michael Jurka return WallpaperManager.getInstance(context).getWallpaperInfo() != null; 118833808d0c69be8533759afdaa8ca4c004835f6a0Michael Jurka } 119833808d0c69be8533759afdaa8ca4c004835f6a0Michael Jurka 120cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka @Override 121cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka public void onStart() { 122071316e5612ae1554309912ad4ad4680b80c718dMichael Jurka // Hide wallpaper if it's not a static image 123833808d0c69be8533759afdaa8ca4c004835f6a0Michael Jurka if (forceOpaqueBackground(this)) { 124071316e5612ae1554309912ad4ad4680b80c718dMichael Jurka updateWallpaperVisibility(false); 125071316e5612ae1554309912ad4ad4680b80c718dMichael Jurka } else { 126071316e5612ae1554309912ad4ad4680b80c718dMichael Jurka updateWallpaperVisibility(true); 127071316e5612ae1554309912ad4ad4680b80c718dMichael Jurka } 128cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka mShowing = true; 1299bdaada95c481b8164417696649a1ffb584552f1Michael Jurka if (mRecentsPanel != null) { 1309bdaada95c481b8164417696649a1ffb584552f1Michael Jurka mRecentsPanel.refreshViews(); 1319bdaada95c481b8164417696649a1ffb584552f1Michael Jurka } 132cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka super.onStart(); 133cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka } 134cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka 135cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka @Override 136cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka public void onResume() { 137cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka mForeground = true; 138cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka super.onResume(); 139cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka } 140cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka 141cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka @Override 142cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka public void onBackPressed() { 143cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka dismissAndGoBack(); 144cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka } 145cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka 146cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka public void dismissAndGoHome() { 147cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka if (mRecentsPanel != null) { 148cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka Intent homeIntent = new Intent(Intent.ACTION_MAIN, null); 149cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka homeIntent.addCategory(Intent.CATEGORY_HOME); 150cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka homeIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK 151cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); 152cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka startActivityAsUser(homeIntent, new UserHandle(UserHandle.USER_CURRENT)); 153cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka mRecentsPanel.show(false); 154cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka } 155cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka } 156cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka 157cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka public void dismissAndGoBack() { 158cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka if (mRecentsPanel != null) { 159e5923631f06406f5f5e23a3a2ab4b24bb53a9094Michael Jurka final ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); 160e5923631f06406f5f5e23a3a2ab4b24bb53a9094Michael Jurka 161e5923631f06406f5f5e23a3a2ab4b24bb53a9094Michael Jurka final List<ActivityManager.RecentTaskInfo> recentTasks = 162e5923631f06406f5f5e23a3a2ab4b24bb53a9094Michael Jurka am.getRecentTasks(2, 163e5923631f06406f5f5e23a3a2ab4b24bb53a9094Michael Jurka ActivityManager.RECENT_WITH_EXCLUDED | 164e5923631f06406f5f5e23a3a2ab4b24bb53a9094Michael Jurka ActivityManager.RECENT_IGNORE_UNAVAILABLE); 165e5923631f06406f5f5e23a3a2ab4b24bb53a9094Michael Jurka if (recentTasks.size() > 1 && 166e5923631f06406f5f5e23a3a2ab4b24bb53a9094Michael Jurka mRecentsPanel.simulateClick(recentTasks.get(1).persistentId)) { 167e5923631f06406f5f5e23a3a2ab4b24bb53a9094Michael Jurka // recents panel will take care of calling show(false) through simulateClick 168cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka return; 169cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka } 170cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka mRecentsPanel.show(false); 171cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka } 172cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka finish(); 173cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka } 174cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka 175cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka @Override 176cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka protected void onCreate(Bundle savedInstanceState) { 177cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka setContentView(R.layout.status_bar_recent_panel); 178cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka mRecentsPanel = (RecentsPanelView) findViewById(R.id.recents_root); 179cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka mRecentsPanel.setOnTouchListener(new TouchOutsideListener(mRecentsPanel)); 18080343f646f9686528212f82163a77ef48e30f4c3Michael Jurka 18180343f646f9686528212f82163a77ef48e30f4c3Michael Jurka final RecentTasksLoader recentTasksLoader = RecentTasksLoader.getInstance(this); 182cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka recentTasksLoader.setRecentsPanel(mRecentsPanel, mRecentsPanel); 183adf0b215908f8fd921fcb734b9809c806cb67042Michael Jurka mRecentsPanel.setMinSwipeAlpha( 184adf0b215908f8fd921fcb734b9809c806cb67042Michael Jurka getResources().getInteger(R.integer.config_recent_item_min_alpha) / 100f); 185cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka 186cbe69206c0046d3f4c1f385425e69751d7048156Michael Jurka if (savedInstanceState == null || 187cbe69206c0046d3f4c1f385425e69751d7048156Michael Jurka savedInstanceState.getBoolean(WAS_SHOWING)) { 18880343f646f9686528212f82163a77ef48e30f4c3Michael Jurka handleIntent(getIntent(), (savedInstanceState == null)); 189cbe69206c0046d3f4c1f385425e69751d7048156Michael Jurka } 190cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka mIntentFilter = new IntentFilter(); 191cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka mIntentFilter.addAction(CLOSE_RECENTS_INTENT); 19280343f646f9686528212f82163a77ef48e30f4c3Michael Jurka mIntentFilter.addAction(WINDOW_ANIMATION_START_INTENT); 193cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka registerReceiver(mIntentReceiver, mIntentFilter); 194cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka super.onCreate(savedInstanceState); 195cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka } 196cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka 197cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka @Override 198cbe69206c0046d3f4c1f385425e69751d7048156Michael Jurka protected void onSaveInstanceState(Bundle outState) { 199cbe69206c0046d3f4c1f385425e69751d7048156Michael Jurka outState.putBoolean(WAS_SHOWING, mRecentsPanel.isShowing()); 200cbe69206c0046d3f4c1f385425e69751d7048156Michael Jurka } 201cbe69206c0046d3f4c1f385425e69751d7048156Michael Jurka 202cbe69206c0046d3f4c1f385425e69751d7048156Michael Jurka @Override 203cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka protected void onDestroy() { 20480343f646f9686528212f82163a77ef48e30f4c3Michael Jurka RecentTasksLoader.getInstance(this).setRecentsPanel(null, mRecentsPanel); 205cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka unregisterReceiver(mIntentReceiver); 206cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka super.onDestroy(); 207cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka } 208cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka 209cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka @Override 210cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka protected void onNewIntent(Intent intent) { 21180343f646f9686528212f82163a77ef48e30f4c3Michael Jurka handleIntent(intent, true); 212cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka } 213cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka 21480343f646f9686528212f82163a77ef48e30f4c3Michael Jurka private void handleIntent(Intent intent, boolean checkWaitingForAnimationParam) { 215cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka super.onNewIntent(intent); 216cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka 217cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka if (TOGGLE_RECENTS_INTENT.equals(intent.getAction())) { 218482f159dc46c2aab5990b4a12294623d28447e2eMichael Jurka if (mRecentsPanel != null) { 219cbe69206c0046d3f4c1f385425e69751d7048156Michael Jurka if (mRecentsPanel.isShowing()) { 220482f159dc46c2aab5990b4a12294623d28447e2eMichael Jurka dismissAndGoBack(); 221482f159dc46c2aab5990b4a12294623d28447e2eMichael Jurka } else { 22280343f646f9686528212f82163a77ef48e30f4c3Michael Jurka final RecentTasksLoader recentTasksLoader = RecentTasksLoader.getInstance(this); 22380343f646f9686528212f82163a77ef48e30f4c3Michael Jurka boolean waitingForWindowAnimation = checkWaitingForAnimationParam && 22480343f646f9686528212f82163a77ef48e30f4c3Michael Jurka intent.getBooleanExtra(WAITING_FOR_WINDOW_ANIMATION_PARAM, false); 225482f159dc46c2aab5990b4a12294623d28447e2eMichael Jurka mRecentsPanel.show(true, recentTasksLoader.getLoadedTasks(), 22680343f646f9686528212f82163a77ef48e30f4c3Michael Jurka recentTasksLoader.isFirstScreenful(), waitingForWindowAnimation); 227482f159dc46c2aab5990b4a12294623d28447e2eMichael Jurka } 228cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka } 229cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka } 230cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka } 231cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka 232ca6da00f6c5381ce21b45bcea4381e8b33f84252Craig Mautner boolean isForeground() { 233ca6da00f6c5381ce21b45bcea4381e8b33f84252Craig Mautner return mForeground; 234ca6da00f6c5381ce21b45bcea4381e8b33f84252Craig Mautner } 2357ed267f53852aa18aacb605297e56f88d7c08333Michael Jurka 2367ed267f53852aa18aacb605297e56f88d7c08333Michael Jurka boolean isActivityShowing() { 2377ed267f53852aa18aacb605297e56f88d7c08333Michael Jurka return mShowing; 2387ed267f53852aa18aacb605297e56f88d7c08333Michael Jurka } 239cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka} 240