Recents.java revision 7048fea75c06324a748d49f25bc05be908cda9ff
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; 29303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chungimport android.os.SystemProperties; 30d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlockimport android.os.UserHandle; 31d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlockimport android.util.DisplayMetrics; 32d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlockimport android.util.Log; 33d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlockimport android.view.Display; 34d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlockimport android.view.View; 35d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlockimport com.android.systemui.R; 36d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlockimport com.android.systemui.RecentsComponent; 37d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlockimport com.android.systemui.SystemUI; 387048fea75c06324a748d49f25bc05be908cda9ffWinson Chungimport com.android.systemui.recents.AlternateRecentsComponent; 39303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 40303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 41d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlockpublic class Recents extends SystemUI implements RecentsComponent { 42d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock private static final String TAG = "Recents"; 43303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung private static final boolean DEBUG = true; 44303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 45303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung // Which recents to use 46303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung boolean mUseAlternateRecents; 477048fea75c06324a748d49f25bc05be908cda9ffWinson Chung AlternateRecentsComponent mAlternateRecents; 48d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock 49d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock @Override 50d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock public void start() { 517048fea75c06324a748d49f25bc05be908cda9ffWinson Chung mUseAlternateRecents = SystemProperties.getBoolean("persist.recents.use_alternate", false); 52303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung if (mUseAlternateRecents) { 537048fea75c06324a748d49f25bc05be908cda9ffWinson Chung if (mAlternateRecents == null) { 547048fea75c06324a748d49f25bc05be908cda9ffWinson Chung mAlternateRecents = new AlternateRecentsComponent(mContext); 557048fea75c06324a748d49f25bc05be908cda9ffWinson Chung } 567048fea75c06324a748d49f25bc05be908cda9ffWinson Chung mAlternateRecents.onStart(); 57303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung } 587048fea75c06324a748d49f25bc05be908cda9ffWinson Chung 597048fea75c06324a748d49f25bc05be908cda9ffWinson Chung putComponent(RecentsComponent.class, this); 60d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock } 61d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock 62d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock @Override 63d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock public void toggleRecents(Display display, int layoutDirection, View statusBarView) { 64303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung if (mUseAlternateRecents) { 65303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung // Launch the alternate recents if required 667048fea75c06324a748d49f25bc05be908cda9ffWinson Chung mAlternateRecents.onToggleRecents(display, layoutDirection, statusBarView); 67303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung return; 68303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung } 69303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 70d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock if (DEBUG) Log.d(TAG, "toggle recents panel"); 71d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock try { 72d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock TaskDescription firstTask = RecentTasksLoader.getInstance(mContext).getFirstTask(); 73d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock 74d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock Intent intent = new Intent(RecentsActivity.TOGGLE_RECENTS_INTENT); 75d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock intent.setClassName("com.android.systemui", 76d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock "com.android.systemui.recent.RecentsActivity"); 77d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK 78d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); 79d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock 80d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock if (firstTask == null) { 81d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock if (RecentsActivity.forceOpaqueBackground(mContext)) { 82d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock ActivityOptions opts = ActivityOptions.makeCustomAnimation(mContext, 83d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock R.anim.recents_launch_from_launcher_enter, 84d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock R.anim.recents_launch_from_launcher_exit); 85d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock mContext.startActivityAsUser(intent, opts.toBundle(), new UserHandle( 86d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock UserHandle.USER_CURRENT)); 87d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock } else { 88d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock // The correct window animation will be applied via the activity's style 89d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock mContext.startActivityAsUser(intent, new UserHandle( 90d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock UserHandle.USER_CURRENT)); 91d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock } 92d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock 93d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock } else { 949926272f32868c858b24b45e048210cf3515741eMichael Jurka Bitmap first = null; 959926272f32868c858b24b45e048210cf3515741eMichael Jurka if (firstTask.getThumbnail() instanceof BitmapDrawable) { 969926272f32868c858b24b45e048210cf3515741eMichael Jurka first = ((BitmapDrawable) firstTask.getThumbnail()).getBitmap(); 979926272f32868c858b24b45e048210cf3515741eMichael Jurka } else { 989926272f32868c858b24b45e048210cf3515741eMichael Jurka first = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888); 999926272f32868c858b24b45e048210cf3515741eMichael Jurka Drawable d = RecentTasksLoader.getInstance(mContext).getDefaultThumbnail(); 1009926272f32868c858b24b45e048210cf3515741eMichael Jurka d.draw(new Canvas(first)); 1019926272f32868c858b24b45e048210cf3515741eMichael Jurka } 102d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock final Resources res = mContext.getResources(); 103d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock 104d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock float thumbWidth = res 105d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock .getDimensionPixelSize(R.dimen.status_bar_recents_thumbnail_width); 106d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock float thumbHeight = res 107d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock .getDimensionPixelSize(R.dimen.status_bar_recents_thumbnail_height); 108d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock if (first == null) { 109d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock throw new RuntimeException("Recents thumbnail is null"); 110d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock } 111d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock if (first.getWidth() != thumbWidth || first.getHeight() != thumbHeight) { 112d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock first = Bitmap.createScaledBitmap(first, (int) thumbWidth, (int) thumbHeight, 113d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock true); 114d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock if (first == null) { 115d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock throw new RuntimeException("Recents thumbnail is null"); 116d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock } 117d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock } 118d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock 119d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock 120d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock DisplayMetrics dm = new DisplayMetrics(); 121d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock display.getMetrics(dm); 122d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock // calculate it here, but consider moving it elsewhere 123d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock // first, determine which orientation you're in. 124d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock final Configuration config = res.getConfiguration(); 125d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock int x, y; 126d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock 127d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock if (config.orientation == Configuration.ORIENTATION_PORTRAIT) { 128d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock float appLabelLeftMargin = res.getDimensionPixelSize( 129d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock R.dimen.status_bar_recents_app_label_left_margin); 130d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock float appLabelWidth = res.getDimensionPixelSize( 131d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock R.dimen.status_bar_recents_app_label_width); 132d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock float thumbLeftMargin = res.getDimensionPixelSize( 133d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock R.dimen.status_bar_recents_thumbnail_left_margin); 134d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock float thumbBgPadding = res.getDimensionPixelSize( 135d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock R.dimen.status_bar_recents_thumbnail_bg_padding); 136d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock 137d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock float width = appLabelLeftMargin + 138d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock +appLabelWidth 139d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock + thumbLeftMargin 140d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock + thumbWidth 141d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock + 2 * thumbBgPadding; 142d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock 143d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock x = (int) ((dm.widthPixels - width) / 2f + appLabelLeftMargin + appLabelWidth 144d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock + thumbBgPadding + thumbLeftMargin); 145d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock y = (int) (dm.heightPixels 146d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock - res.getDimensionPixelSize(R.dimen.status_bar_recents_thumbnail_height) 147d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock - thumbBgPadding); 148d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock if (layoutDirection == View.LAYOUT_DIRECTION_RTL) { 149d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock x = dm.widthPixels - x - res.getDimensionPixelSize( 150d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock R.dimen.status_bar_recents_thumbnail_width); 151d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock } 152d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock 153d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock } else { // if (config.orientation == Configuration.ORIENTATION_LANDSCAPE) { 154d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock float thumbTopMargin = res.getDimensionPixelSize( 155d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock R.dimen.status_bar_recents_thumbnail_top_margin); 156d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock float thumbBgPadding = res.getDimensionPixelSize( 157d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock R.dimen.status_bar_recents_thumbnail_bg_padding); 158d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock float textPadding = res.getDimensionPixelSize( 159d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock R.dimen.status_bar_recents_text_description_padding); 160d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock float labelTextSize = res.getDimensionPixelSize( 161d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock R.dimen.status_bar_recents_app_label_text_size); 162d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock Paint p = new Paint(); 163d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock p.setTextSize(labelTextSize); 164d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock float labelTextHeight = p.getFontMetricsInt().bottom 165d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock - p.getFontMetricsInt().top; 166d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock float descriptionTextSize = res.getDimensionPixelSize( 167d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock R.dimen.status_bar_recents_app_description_text_size); 168d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock p.setTextSize(descriptionTextSize); 169d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock float descriptionTextHeight = p.getFontMetricsInt().bottom 170d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock - p.getFontMetricsInt().top; 171d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock 172d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock float statusBarHeight = res.getDimensionPixelSize( 173d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock com.android.internal.R.dimen.status_bar_height); 174d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock float recentsItemTopPadding = statusBarHeight; 175d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock 176d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock float height = thumbTopMargin 177d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock + thumbHeight 178d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock + 2 * thumbBgPadding + textPadding + labelTextHeight 179d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock + recentsItemTopPadding + textPadding + descriptionTextHeight; 180d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock float recentsItemRightPadding = res 181d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock .getDimensionPixelSize(R.dimen.status_bar_recents_item_padding); 182d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock float recentsScrollViewRightPadding = res 183d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock .getDimensionPixelSize(R.dimen.status_bar_recents_right_glow_margin); 184d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock x = (int) (dm.widthPixels - res 185d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock .getDimensionPixelSize(R.dimen.status_bar_recents_thumbnail_width) 186d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock - thumbBgPadding - recentsItemRightPadding 187d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock - recentsScrollViewRightPadding); 188d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock y = (int) ((dm.heightPixels - statusBarHeight - height) / 2f + thumbTopMargin 189d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock + recentsItemTopPadding + thumbBgPadding + statusBarHeight); 190d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock } 191d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock 192d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock ActivityOptions opts = ActivityOptions.makeThumbnailScaleDownAnimation( 193d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock statusBarView, 194d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock first, x, y, 195d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock new ActivityOptions.OnAnimationStartedListener() { 196d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock public void onAnimationStarted() { 197d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock Intent intent = 198d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock new Intent(RecentsActivity.WINDOW_ANIMATION_START_INTENT); 199d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock intent.setPackage("com.android.systemui"); 200d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock mContext.sendBroadcastAsUser(intent, 201d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock new UserHandle(UserHandle.USER_CURRENT)); 202d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock } 203d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock }); 204d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock intent.putExtra(RecentsActivity.WAITING_FOR_WINDOW_ANIMATION_PARAM, true); 205d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock mContext.startActivityAsUser(intent, opts.toBundle(), new UserHandle( 206d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock UserHandle.USER_CURRENT)); 207d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock } 208d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock } catch (ActivityNotFoundException e) { 209d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock Log.e(TAG, "Failed to launch RecentAppsIntent", e); 210d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock } 211d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock } 212d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock 213303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung @Override 214303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung protected void onConfigurationChanged(Configuration newConfig) { 2157048fea75c06324a748d49f25bc05be908cda9ffWinson Chung if (mUseAlternateRecents) { 2167048fea75c06324a748d49f25bc05be908cda9ffWinson Chung mAlternateRecents.onConfigurationChanged(newConfig); 217303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung } 218303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung } 219303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 220d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock @Override 221d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock public void preloadRecentTasksList() { 222303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung if (mUseAlternateRecents) { 2237048fea75c06324a748d49f25bc05be908cda9ffWinson Chung mAlternateRecents.onPreloadRecents(); 224303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung } else { 225303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung Intent intent = new Intent(RecentsActivity.PRELOAD_INTENT); 226303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung intent.setClassName("com.android.systemui", 227303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung "com.android.systemui.recent.RecentsPreloadReceiver"); 228303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung mContext.sendBroadcastAsUser(intent, new UserHandle(UserHandle.USER_CURRENT)); 229d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock 230303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung RecentTasksLoader.getInstance(mContext).preloadFirstTask(); 231303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung } 232d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock } 233d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock 234d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock @Override 235d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock public void cancelPreloadingRecentTasksList() { 236303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung if (mUseAlternateRecents) { 2377048fea75c06324a748d49f25bc05be908cda9ffWinson Chung mAlternateRecents.onCancelPreloadingRecents(); 238303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung } else { 239303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung Intent intent = new Intent(RecentsActivity.CANCEL_PRELOAD_INTENT); 240303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung intent.setClassName("com.android.systemui", 241303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung "com.android.systemui.recent.RecentsPreloadReceiver"); 242303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung mContext.sendBroadcastAsUser(intent, new UserHandle(UserHandle.USER_CURRENT)); 243d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock 244303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung RecentTasksLoader.getInstance(mContext).cancelPreloadingFirstTask(); 245303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung } 246d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock } 247d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock 248d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock @Override 249d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock public void closeRecents() { 250303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung if (mUseAlternateRecents) { 2517048fea75c06324a748d49f25bc05be908cda9ffWinson Chung mAlternateRecents.onCloseRecents(); 252303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung } else { 253303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung Intent intent = new Intent(RecentsActivity.CLOSE_RECENTS_INTENT); 254303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung intent.setPackage("com.android.systemui"); 255303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung mContext.sendBroadcastAsUser(intent, new UserHandle(UserHandle.USER_CURRENT)); 256303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 257303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung RecentTasksLoader.getInstance(mContext).cancelPreloadingFirstTask(); 258303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung } 259d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock } 260d08de37a2223d5183620098737eb93907a4ba92cJohn Spurlock} 261