RecentsActivity.java revision 071316e5612ae1554309912ad4ad4680b80c718d
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.SystemUIApplication;
34cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurkaimport com.android.systemui.statusbar.tablet.StatusBarPanel;
35cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka
36e5923631f06406f5f5e23a3a2ab4b24bb53a9094Michael Jurkaimport java.util.List;
37e5923631f06406f5f5e23a3a2ab4b24bb53a9094Michael Jurka
38cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurkapublic class RecentsActivity extends Activity {
39cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka    public static final String TOGGLE_RECENTS_INTENT = "com.android.systemui.TOGGLE_RECENTS";
40cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka    public static final String CLOSE_RECENTS_INTENT = "com.android.systemui.CLOSE_RECENTS";
41cbe69206c0046d3f4c1f385425e69751d7048156Michael Jurka    private static final String WAS_SHOWING = "was_showing";
42cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka
43cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka    private RecentsPanelView mRecentsPanel;
44cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka    private IntentFilter mIntentFilter;
45cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka    private boolean mShowing;
46cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka    private boolean mForeground;
47071316e5612ae1554309912ad4ad4680b80c718dMichael Jurka
48cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka    private BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
49cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka        @Override
50cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka        public void onReceive(Context context, Intent intent) {
51cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka            if (mRecentsPanel != null && mRecentsPanel.isShowing()) {
52cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka                if (mShowing && !mForeground) {
53cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka                    // Captures the case right before we transition to another activity
54cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka                    mRecentsPanel.show(false);
55cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka                }
56cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka            }
57cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka        }
58cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka    };
59cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka
609bdaada95c481b8164417696649a1ffb584552f1Michael Jurka    public static interface WindowAnimationStartListener {
619bdaada95c481b8164417696649a1ffb584552f1Michael Jurka        void onWindowAnimationStart();
629bdaada95c481b8164417696649a1ffb584552f1Michael Jurka    }
639bdaada95c481b8164417696649a1ffb584552f1Michael Jurka
64cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka    public class TouchOutsideListener implements View.OnTouchListener {
65cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka        private StatusBarPanel mPanel;
66cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka
67cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka        public TouchOutsideListener(StatusBarPanel panel) {
68cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka            mPanel = panel;
69cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka        }
70cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka
71cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka        public boolean onTouch(View v, MotionEvent ev) {
72cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka            final int action = ev.getAction();
73cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka            if (action == MotionEvent.ACTION_OUTSIDE
74cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka                    || (action == MotionEvent.ACTION_DOWN
75cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka                    && !mPanel.isInContentArea((int) ev.getX(), (int) ev.getY()))) {
76cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka                dismissAndGoHome();
77cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka                return true;
78cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka            }
79cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka            return false;
80cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka        }
81cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka    }
82cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka
83cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka    @Override
84cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka    public void onPause() {
85071316e5612ae1554309912ad4ad4680b80c718dMichael Jurka        overridePendingTransition(
86071316e5612ae1554309912ad4ad4680b80c718dMichael Jurka                R.anim.recents_return_to_launcher_enter,
87071316e5612ae1554309912ad4ad4680b80c718dMichael Jurka                R.anim.recents_return_to_launcher_exit);
88cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka        mForeground = false;
89cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka        super.onPause();
90cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka    }
91cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka
92cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka    @Override
93cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka    public void onStop() {
94cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka        mShowing = false;
95cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka        if (mRecentsPanel != null) {
96cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka            mRecentsPanel.onUiHidden();
97cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka        }
98cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka        super.onStop();
99cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka    }
100cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka
101071316e5612ae1554309912ad4ad4680b80c718dMichael Jurka    private void updateWallpaperVisibility(boolean visible) {
102071316e5612ae1554309912ad4ad4680b80c718dMichael Jurka        int wpflags = visible ? WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER : 0;
103071316e5612ae1554309912ad4ad4680b80c718dMichael Jurka        int curflags = getWindow().getAttributes().flags
104071316e5612ae1554309912ad4ad4680b80c718dMichael Jurka                & WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER;
105071316e5612ae1554309912ad4ad4680b80c718dMichael Jurka        if (wpflags != curflags) {
106071316e5612ae1554309912ad4ad4680b80c718dMichael Jurka            getWindow().setFlags(wpflags, WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER);
107071316e5612ae1554309912ad4ad4680b80c718dMichael Jurka        }
108071316e5612ae1554309912ad4ad4680b80c718dMichael Jurka    }
109071316e5612ae1554309912ad4ad4680b80c718dMichael Jurka
110cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka    @Override
111cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka    public void onStart() {
112071316e5612ae1554309912ad4ad4680b80c718dMichael Jurka        // Hide wallpaper if it's not a static image
113071316e5612ae1554309912ad4ad4680b80c718dMichael Jurka        if (WallpaperManager.getInstance(this).getWallpaperInfo() != null) {
114071316e5612ae1554309912ad4ad4680b80c718dMichael Jurka            updateWallpaperVisibility(false);
115071316e5612ae1554309912ad4ad4680b80c718dMichael Jurka        } else {
116071316e5612ae1554309912ad4ad4680b80c718dMichael Jurka            updateWallpaperVisibility(true);
117071316e5612ae1554309912ad4ad4680b80c718dMichael Jurka        }
118cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka        mShowing = true;
1199bdaada95c481b8164417696649a1ffb584552f1Michael Jurka        if (mRecentsPanel != null) {
1209bdaada95c481b8164417696649a1ffb584552f1Michael Jurka            mRecentsPanel.refreshViews();
1219bdaada95c481b8164417696649a1ffb584552f1Michael Jurka        }
122cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka        super.onStart();
123cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka    }
124cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka
125cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka    @Override
126cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka    public void onResume() {
127cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka        mForeground = true;
128cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka        super.onResume();
129cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka    }
130cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka
131cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka    @Override
132cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka    public void onBackPressed() {
133cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka        dismissAndGoBack();
134cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka    }
135cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka
136cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka    public void dismissAndGoHome() {
137cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka        if (mRecentsPanel != null) {
138cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka            Intent homeIntent = new Intent(Intent.ACTION_MAIN, null);
139cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka            homeIntent.addCategory(Intent.CATEGORY_HOME);
140cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka            homeIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
141cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka                    | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
142cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka            startActivityAsUser(homeIntent, new UserHandle(UserHandle.USER_CURRENT));
143cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka            mRecentsPanel.show(false);
144cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka        }
145cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka    }
146cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka
147cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka    public void dismissAndGoBack() {
148cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka        if (mRecentsPanel != null) {
149e5923631f06406f5f5e23a3a2ab4b24bb53a9094Michael Jurka            final ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
150e5923631f06406f5f5e23a3a2ab4b24bb53a9094Michael Jurka
151e5923631f06406f5f5e23a3a2ab4b24bb53a9094Michael Jurka            final List<ActivityManager.RecentTaskInfo> recentTasks =
152e5923631f06406f5f5e23a3a2ab4b24bb53a9094Michael Jurka                    am.getRecentTasks(2,
153e5923631f06406f5f5e23a3a2ab4b24bb53a9094Michael Jurka                            ActivityManager.RECENT_WITH_EXCLUDED |
154e5923631f06406f5f5e23a3a2ab4b24bb53a9094Michael Jurka                            ActivityManager.RECENT_IGNORE_UNAVAILABLE);
155e5923631f06406f5f5e23a3a2ab4b24bb53a9094Michael Jurka            if (recentTasks.size() > 1 &&
156e5923631f06406f5f5e23a3a2ab4b24bb53a9094Michael Jurka                    mRecentsPanel.simulateClick(recentTasks.get(1).persistentId)) {
157e5923631f06406f5f5e23a3a2ab4b24bb53a9094Michael Jurka                // recents panel will take care of calling show(false) through simulateClick
158cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka                return;
159cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka            }
160cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka            mRecentsPanel.show(false);
161cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka        }
162cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka        finish();
163cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka    }
164cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka
165cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka    @Override
166cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka    protected void onCreate(Bundle savedInstanceState) {
167cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka        final SystemUIApplication app = (SystemUIApplication) getApplication();
168cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka        final RecentTasksLoader recentTasksLoader = app.getRecentTasksLoader();
169cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka
170cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka        setContentView(R.layout.status_bar_recent_panel);
171cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka        mRecentsPanel = (RecentsPanelView) findViewById(R.id.recents_root);
172cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka        mRecentsPanel.setOnTouchListener(new TouchOutsideListener(mRecentsPanel));
173cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka        mRecentsPanel.setRecentTasksLoader(recentTasksLoader);
174cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka        recentTasksLoader.setRecentsPanel(mRecentsPanel, mRecentsPanel);
175adf0b215908f8fd921fcb734b9809c806cb67042Michael Jurka        mRecentsPanel.setMinSwipeAlpha(
176adf0b215908f8fd921fcb734b9809c806cb67042Michael Jurka                getResources().getInteger(R.integer.config_recent_item_min_alpha) / 100f);
177cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka
178cbe69206c0046d3f4c1f385425e69751d7048156Michael Jurka        if (savedInstanceState == null ||
179cbe69206c0046d3f4c1f385425e69751d7048156Michael Jurka                savedInstanceState.getBoolean(WAS_SHOWING)) {
180cbe69206c0046d3f4c1f385425e69751d7048156Michael Jurka            handleIntent(getIntent());
181cbe69206c0046d3f4c1f385425e69751d7048156Michael Jurka        }
182cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka        mIntentFilter = new IntentFilter();
183cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka        mIntentFilter.addAction(CLOSE_RECENTS_INTENT);
184cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka        registerReceiver(mIntentReceiver, mIntentFilter);
1859bdaada95c481b8164417696649a1ffb584552f1Michael Jurka        app.setWindowAnimationStartListener(mRecentsPanel);
186cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka        super.onCreate(savedInstanceState);
187cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka    }
188cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka
189cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka    @Override
190cbe69206c0046d3f4c1f385425e69751d7048156Michael Jurka    protected void onSaveInstanceState(Bundle outState) {
191cbe69206c0046d3f4c1f385425e69751d7048156Michael Jurka        outState.putBoolean(WAS_SHOWING, mRecentsPanel.isShowing());
192cbe69206c0046d3f4c1f385425e69751d7048156Michael Jurka    }
193cbe69206c0046d3f4c1f385425e69751d7048156Michael Jurka
194cbe69206c0046d3f4c1f385425e69751d7048156Michael Jurka    @Override
195cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka    protected void onDestroy() {
196cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka        final SystemUIApplication app = (SystemUIApplication) getApplication();
197cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka        final RecentTasksLoader recentTasksLoader = app.getRecentTasksLoader();
198cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka        recentTasksLoader.setRecentsPanel(null, mRecentsPanel);
199cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka        unregisterReceiver(mIntentReceiver);
2009bdaada95c481b8164417696649a1ffb584552f1Michael Jurka        app.setWindowAnimationStartListener(null);
201cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka        super.onDestroy();
202cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka    }
203cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka
204cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka    @Override
205cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka    protected void onNewIntent(Intent intent) {
206cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka        handleIntent(intent);
207cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka    }
208cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka
209cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka    private void handleIntent(Intent intent) {
210cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka        super.onNewIntent(intent);
211cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka
212cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka        if (TOGGLE_RECENTS_INTENT.equals(intent.getAction())) {
213482f159dc46c2aab5990b4a12294623d28447e2eMichael Jurka            if (mRecentsPanel != null) {
214cbe69206c0046d3f4c1f385425e69751d7048156Michael Jurka                if (mRecentsPanel.isShowing()) {
215482f159dc46c2aab5990b4a12294623d28447e2eMichael Jurka                    dismissAndGoBack();
216482f159dc46c2aab5990b4a12294623d28447e2eMichael Jurka                } else {
217482f159dc46c2aab5990b4a12294623d28447e2eMichael Jurka                    final SystemUIApplication app = (SystemUIApplication) getApplication();
218482f159dc46c2aab5990b4a12294623d28447e2eMichael Jurka                    final RecentTasksLoader recentTasksLoader = app.getRecentTasksLoader();
219482f159dc46c2aab5990b4a12294623d28447e2eMichael Jurka                    mRecentsPanel.show(true, recentTasksLoader.getLoadedTasks(),
220482f159dc46c2aab5990b4a12294623d28447e2eMichael Jurka                            recentTasksLoader.isFirstScreenful());
221482f159dc46c2aab5990b4a12294623d28447e2eMichael Jurka                }
222cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka            }
223cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka        }
224cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka    }
225cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka
226ca6da00f6c5381ce21b45bcea4381e8b33f84252Craig Mautner    boolean isForeground() {
227ca6da00f6c5381ce21b45bcea4381e8b33f84252Craig Mautner        return mForeground;
228ca6da00f6c5381ce21b45bcea4381e8b33f84252Craig Mautner    }
2297ed267f53852aa18aacb605297e56f88d7c08333Michael Jurka
2307ed267f53852aa18aacb605297e56f88d7c08333Michael Jurka    boolean isActivityShowing() {
2317ed267f53852aa18aacb605297e56f88d7c08333Michael Jurka         return mShowing;
2327ed267f53852aa18aacb605297e56f88d7c08333Michael Jurka    }
233cb2522c86d75fff277dc38ec7e444a5b5f5130eaMichael Jurka}
234