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