1d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock/* 2d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock * Copyright (C) 2013 The Android Open Source Project 3d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock * 4d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock * Licensed under the Apache License, Version 2.0 (the "License"); 5d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock * you may not use this file except in compliance with the License. 6d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock * You may obtain a copy of the License at 7d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock * 8d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock * http://www.apache.org/licenses/LICENSE-2.0 9d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock * 10d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock * Unless required by applicable law or agreed to in writing, software 11d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock * distributed under the License is distributed on an "AS IS" BASIS, 12d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock * See the License for the specific language governing permissions and 14d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock * limitations under the License. 15d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock */ 16d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock 17d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlockpackage com.android.systemui.recent; 18d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock 19d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlockimport android.app.ActivityOptions; 20d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlockimport android.content.ActivityNotFoundException; 21d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlockimport android.content.Intent; 22d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlockimport android.content.res.Configuration; 23d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlockimport android.content.res.Resources; 24d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlockimport android.graphics.Bitmap; 259926272f32868c858b24b45e048210cf3515741eMichael Jurkaimport android.graphics.Canvas; 26d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlockimport android.graphics.Paint; 279926272f32868c858b24b45e048210cf3515741eMichael Jurkaimport android.graphics.drawable.BitmapDrawable; 289926272f32868c858b24b45e048210cf3515741eMichael Jurkaimport android.graphics.drawable.Drawable; 29d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlockimport android.os.UserHandle; 30d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlockimport android.util.DisplayMetrics; 31d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlockimport android.util.Log; 32d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlockimport android.view.Display; 33d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlockimport android.view.View; 34d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock 35d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlockimport com.android.systemui.R; 36d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlockimport com.android.systemui.RecentsComponent; 37d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlockimport com.android.systemui.SystemUI; 38d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock 39d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlockpublic class Recents extends SystemUI implements RecentsComponent { 40d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock private static final String TAG = "Recents"; 41d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock private static final boolean DEBUG = false; 42d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock 43d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock @Override 44d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock public void start() { 45d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock putComponent(RecentsComponent.class, this); 46d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock } 47d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock 48d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock @Override 49d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock public void toggleRecents(Display display, int layoutDirection, View statusBarView) { 50d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock if (DEBUG) Log.d(TAG, "toggle recents panel"); 51d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock try { 52d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock TaskDescription firstTask = RecentTasksLoader.getInstance(mContext).getFirstTask(); 53d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock 54d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock Intent intent = new Intent(RecentsActivity.TOGGLE_RECENTS_INTENT); 55d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock intent.setClassName("com.android.systemui", 56d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock "com.android.systemui.recent.RecentsActivity"); 57d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK 58d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); 59d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock 60d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock if (firstTask == null) { 61d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock if (RecentsActivity.forceOpaqueBackground(mContext)) { 62d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock ActivityOptions opts = ActivityOptions.makeCustomAnimation(mContext, 63d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock R.anim.recents_launch_from_launcher_enter, 64d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock R.anim.recents_launch_from_launcher_exit); 65d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock mContext.startActivityAsUser(intent, opts.toBundle(), new UserHandle( 66d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock UserHandle.USER_CURRENT)); 67d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock } else { 68d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock // The correct window animation will be applied via the activity's style 69d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock mContext.startActivityAsUser(intent, new UserHandle( 70d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock UserHandle.USER_CURRENT)); 71d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock } 72d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock 73d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock } else { 749926272f32868c858b24b45e048210cf3515741eMichael Jurka Bitmap first = null; 759926272f32868c858b24b45e048210cf3515741eMichael Jurka if (firstTask.getThumbnail() instanceof BitmapDrawable) { 769926272f32868c858b24b45e048210cf3515741eMichael Jurka first = ((BitmapDrawable) firstTask.getThumbnail()).getBitmap(); 779926272f32868c858b24b45e048210cf3515741eMichael Jurka } else { 789926272f32868c858b24b45e048210cf3515741eMichael Jurka first = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888); 799926272f32868c858b24b45e048210cf3515741eMichael Jurka Drawable d = RecentTasksLoader.getInstance(mContext).getDefaultThumbnail(); 809926272f32868c858b24b45e048210cf3515741eMichael Jurka d.draw(new Canvas(first)); 819926272f32868c858b24b45e048210cf3515741eMichael Jurka } 82d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock final Resources res = mContext.getResources(); 83d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock 84d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock float thumbWidth = res 85d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock .getDimensionPixelSize(R.dimen.status_bar_recents_thumbnail_width); 86d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock float thumbHeight = res 87d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock .getDimensionPixelSize(R.dimen.status_bar_recents_thumbnail_height); 88d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock if (first == null) { 89d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock throw new RuntimeException("Recents thumbnail is null"); 90d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock } 91d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock if (first.getWidth() != thumbWidth || first.getHeight() != thumbHeight) { 92d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock first = Bitmap.createScaledBitmap(first, (int) thumbWidth, (int) thumbHeight, 93d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock true); 94d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock if (first == null) { 95d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock throw new RuntimeException("Recents thumbnail is null"); 96d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock } 97d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock } 98d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock 99d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock 100d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock DisplayMetrics dm = new DisplayMetrics(); 101d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock display.getMetrics(dm); 102d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock // calculate it here, but consider moving it elsewhere 103d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock // first, determine which orientation you're in. 104d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock final Configuration config = res.getConfiguration(); 105d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock int x, y; 106d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock 107d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock if (config.orientation == Configuration.ORIENTATION_PORTRAIT) { 108d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock float appLabelLeftMargin = res.getDimensionPixelSize( 109d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock R.dimen.status_bar_recents_app_label_left_margin); 110d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock float appLabelWidth = res.getDimensionPixelSize( 111d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock R.dimen.status_bar_recents_app_label_width); 112d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock float thumbLeftMargin = res.getDimensionPixelSize( 113d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock R.dimen.status_bar_recents_thumbnail_left_margin); 114d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock float thumbBgPadding = res.getDimensionPixelSize( 115d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock R.dimen.status_bar_recents_thumbnail_bg_padding); 116d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock 117d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock float width = appLabelLeftMargin + 118d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock +appLabelWidth 119d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock + thumbLeftMargin 120d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock + thumbWidth 121d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock + 2 * thumbBgPadding; 122d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock 123d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock x = (int) ((dm.widthPixels - width) / 2f + appLabelLeftMargin + appLabelWidth 124d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock + thumbBgPadding + thumbLeftMargin); 125d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock y = (int) (dm.heightPixels 126d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock - res.getDimensionPixelSize(R.dimen.status_bar_recents_thumbnail_height) 127d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock - thumbBgPadding); 128d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock if (layoutDirection == View.LAYOUT_DIRECTION_RTL) { 129d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock x = dm.widthPixels - x - res.getDimensionPixelSize( 130d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock R.dimen.status_bar_recents_thumbnail_width); 131d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock } 132d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock 133d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock } else { // if (config.orientation == Configuration.ORIENTATION_LANDSCAPE) { 134d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock float thumbTopMargin = res.getDimensionPixelSize( 135d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock R.dimen.status_bar_recents_thumbnail_top_margin); 136d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock float thumbBgPadding = res.getDimensionPixelSize( 137d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock R.dimen.status_bar_recents_thumbnail_bg_padding); 138d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock float textPadding = res.getDimensionPixelSize( 139d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock R.dimen.status_bar_recents_text_description_padding); 140d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock float labelTextSize = res.getDimensionPixelSize( 141d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock R.dimen.status_bar_recents_app_label_text_size); 142d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock Paint p = new Paint(); 143d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock p.setTextSize(labelTextSize); 144d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock float labelTextHeight = p.getFontMetricsInt().bottom 145d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock - p.getFontMetricsInt().top; 146d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock float descriptionTextSize = res.getDimensionPixelSize( 147d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock R.dimen.status_bar_recents_app_description_text_size); 148d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock p.setTextSize(descriptionTextSize); 149d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock float descriptionTextHeight = p.getFontMetricsInt().bottom 150d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock - p.getFontMetricsInt().top; 151d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock 152d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock float statusBarHeight = res.getDimensionPixelSize( 153d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock com.android.internal.R.dimen.status_bar_height); 154d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock float recentsItemTopPadding = statusBarHeight; 155d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock 156d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock float height = thumbTopMargin 157d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock + thumbHeight 158d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock + 2 * thumbBgPadding + textPadding + labelTextHeight 159d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock + recentsItemTopPadding + textPadding + descriptionTextHeight; 160d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock float recentsItemRightPadding = res 161d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock .getDimensionPixelSize(R.dimen.status_bar_recents_item_padding); 162d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock float recentsScrollViewRightPadding = res 163d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock .getDimensionPixelSize(R.dimen.status_bar_recents_right_glow_margin); 164d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock x = (int) (dm.widthPixels - res 165d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock .getDimensionPixelSize(R.dimen.status_bar_recents_thumbnail_width) 166d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock - thumbBgPadding - recentsItemRightPadding 167d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock - recentsScrollViewRightPadding); 168d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock y = (int) ((dm.heightPixels - statusBarHeight - height) / 2f + thumbTopMargin 169d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock + recentsItemTopPadding + thumbBgPadding + statusBarHeight); 170d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock } 171d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock 172d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock ActivityOptions opts = ActivityOptions.makeThumbnailScaleDownAnimation( 173d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock statusBarView, 174d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock first, x, y, 175d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock new ActivityOptions.OnAnimationStartedListener() { 176d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock public void onAnimationStarted() { 177d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock Intent intent = 178d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock new Intent(RecentsActivity.WINDOW_ANIMATION_START_INTENT); 179d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock intent.setPackage("com.android.systemui"); 180d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock mContext.sendBroadcastAsUser(intent, 181d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock new UserHandle(UserHandle.USER_CURRENT)); 182d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock } 183d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock }); 184d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock intent.putExtra(RecentsActivity.WAITING_FOR_WINDOW_ANIMATION_PARAM, true); 185d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock mContext.startActivityAsUser(intent, opts.toBundle(), new UserHandle( 186d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock UserHandle.USER_CURRENT)); 187d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock } 188d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock } catch (ActivityNotFoundException e) { 189d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock Log.e(TAG, "Failed to launch RecentAppsIntent", e); 190d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock } 191d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock } 192d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock 193d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock @Override 194d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock public void preloadRecentTasksList() { 195d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock if (DEBUG) Log.d(TAG, "preloading recents"); 196d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock Intent intent = new Intent(RecentsActivity.PRELOAD_INTENT); 197d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock intent.setClassName("com.android.systemui", 198d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock "com.android.systemui.recent.RecentsPreloadReceiver"); 199d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock mContext.sendBroadcastAsUser(intent, new UserHandle(UserHandle.USER_CURRENT)); 200d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock 201d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock RecentTasksLoader.getInstance(mContext).preloadFirstTask(); 202d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock } 203d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock 204d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock @Override 205d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock public void cancelPreloadingRecentTasksList() { 206d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock if (DEBUG) Log.d(TAG, "cancel preloading recents"); 207d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock Intent intent = new Intent(RecentsActivity.CANCEL_PRELOAD_INTENT); 208d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock intent.setClassName("com.android.systemui", 209d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock "com.android.systemui.recent.RecentsPreloadReceiver"); 210d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock mContext.sendBroadcastAsUser(intent, new UserHandle(UserHandle.USER_CURRENT)); 211d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock 212d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock RecentTasksLoader.getInstance(mContext).cancelPreloadingFirstTask(); 213d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock } 214d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock 215d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock @Override 216d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock public void closeRecents() { 217d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock if (DEBUG) Log.d(TAG, "closing recents panel"); 218d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock Intent intent = new Intent(RecentsActivity.CLOSE_RECENTS_INTENT); 219d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock intent.setPackage("com.android.systemui"); 220d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock mContext.sendBroadcastAsUser(intent, new UserHandle(UserHandle.USER_CURRENT)); 221d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock } 222d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock} 223