15ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller/* 25ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * Copyright (C) 2010 The Android Open Source Project 35ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * 45ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * Licensed under the Apache License, Version 2.0 (the "License"); 55ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * you may not use this file except in compliance with the License. 65ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * You may obtain a copy of the License at 75ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * 85ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * http://www.apache.org/licenses/LICENSE-2.0 95ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * 105ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * Unless required by applicable law or agreed to in writing, software 115ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * distributed under the License is distributed on an "AS IS" BASIS, 125ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * See the License for the specific language governing permissions and 145ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * limitations under the License. 155ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller */ 165ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 175ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 185ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerpackage com.android.carouseltest; 195ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 205ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerimport java.util.ArrayList; 215ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerimport java.util.List; 225ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerimport com.android.carouseltest.R; 235ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 247cc5787b49708f63aeb818bdd06efed3d4229925Jim Shumaimport com.android.ex.carousel.CarouselController; 25a3cb716626b477c98ba912698c765eab20f27286Jim Millerimport com.android.ex.carousel.CarouselViewHelper; 265ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 275ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerimport android.app.Activity; 285ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerimport android.app.ActivityManager; 295ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerimport android.app.IThumbnailReceiver; 305ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerimport android.app.ActivityManager.RunningTaskInfo; 315ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerimport android.content.ActivityNotFoundException; 325ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerimport android.content.Context; 335ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerimport android.content.Intent; 345ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerimport android.content.pm.ActivityInfo; 355ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerimport android.content.pm.PackageManager; 365ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerimport android.content.pm.ResolveInfo; 375ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerimport android.content.res.Configuration; 385ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerimport android.content.res.Resources; 395ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerimport android.graphics.Bitmap; 405ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerimport android.graphics.BitmapFactory; 41a3cb716626b477c98ba912698c765eab20f27286Jim Millerimport android.graphics.Canvas; 425ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerimport android.graphics.Matrix; 43a3cb716626b477c98ba912698c765eab20f27286Jim Millerimport android.graphics.Paint; 445ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerimport android.graphics.Bitmap.Config; 455ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerimport android.graphics.drawable.Drawable; 465ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerimport android.os.Bundle; 475ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerimport android.os.RemoteException; 485ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerimport android.util.Log; 495ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerimport android.view.View; 505ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 515ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerpublic class TaskSwitcherActivity extends Activity { 525ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller private static final String TAG = "TaskSwitcherActivity"; 535ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller private static final int CARD_SLOTS = 56; 545ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller private static final int MAX_TASKS = 20; 555ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller private static final int VISIBLE_SLOTS = 7; 567cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller protected static final boolean DBG = false; 575ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller private ActivityManager mActivityManager; 585ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller private List<RunningTaskInfo> mRunningTaskList; 595ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller private boolean mPortraitMode = true; 605ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller private ArrayList<ActivityDescription> mActivityDescriptions 615ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller = new ArrayList<ActivityDescription>(); 627cc5787b49708f63aeb818bdd06efed3d4229925Jim Shuma private CarouselController mController; 635ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller private MyCarouselView mView; 645ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller private Bitmap mBlankBitmap = Bitmap.createBitmap(128, 128, Config.RGB_565); 65a3cb716626b477c98ba912698c765eab20f27286Jim Miller private LocalCarouselViewHelper mHelper; 665ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 675ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller static class ActivityDescription { 685ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller int id; 695ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller Bitmap thumbnail; 705ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller Drawable icon; 71a3cb716626b477c98ba912698c765eab20f27286Jim Miller CharSequence label; 72a3cb716626b477c98ba912698c765eab20f27286Jim Miller CharSequence description; 735ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller Intent intent; 745ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller Matrix matrix; 755ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 765ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public ActivityDescription(Bitmap _thumbnail, 775ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller Drawable _icon, String _label, String _desc, int _id) 785ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller { 795ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller thumbnail = _thumbnail; 805ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller icon = _icon; 815ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller label = _label; 825ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller description = _desc; 835ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller id = _id; 845ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 855ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 865ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public void clear() { 875ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller icon = null; 885ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller thumbnail = null; 895ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller label = null; 905ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller description = null; 915ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller intent = null; 925ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller matrix = null; 935ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller id = -1; 945ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 955ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller }; 965ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 975ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller private ActivityDescription findActivityDescription(int id) { 985ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller for (int i = 0; i < mActivityDescriptions.size(); i++) { 995ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller ActivityDescription item = mActivityDescriptions.get(i); 1005ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller if (item != null && item.id == id) { 1015ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller return item; 1025ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 1035ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 1045ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller return null; 1055ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 1065ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 107a3cb716626b477c98ba912698c765eab20f27286Jim Miller class LocalCarouselViewHelper extends CarouselViewHelper { 108a3cb716626b477c98ba912698c765eab20f27286Jim Miller private static final int DETAIL_TEXTURE_WIDTH = 256; 109a3cb716626b477c98ba912698c765eab20f27286Jim Miller private static final int DETAIL_TEXTURE_HEIGHT = 80; 110a3cb716626b477c98ba912698c765eab20f27286Jim Miller private Paint mPaint = new Paint(); 111a3cb716626b477c98ba912698c765eab20f27286Jim Miller private DetailTextureParameters mDetailTextureParameters 112a3cb716626b477c98ba912698c765eab20f27286Jim Miller = new DetailTextureParameters(5.0f, 5.0f); 1135ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 114a3cb716626b477c98ba912698c765eab20f27286Jim Miller public LocalCarouselViewHelper(Context context) { 115a3cb716626b477c98ba912698c765eab20f27286Jim Miller super(context); 1165ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 1175ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 118a3cb716626b477c98ba912698c765eab20f27286Jim Miller @Override 119a3cb716626b477c98ba912698c765eab20f27286Jim Miller public DetailTextureParameters getDetailTextureParameters(int id) { 120a3cb716626b477c98ba912698c765eab20f27286Jim Miller return mDetailTextureParameters; 1215ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 1225ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 123a3cb716626b477c98ba912698c765eab20f27286Jim Miller @Override 1245ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public void onCardSelected(int n) { 1255ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller if (n < mActivityDescriptions.size()) { 1265ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller ActivityDescription item = mActivityDescriptions.get(n); 1275ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller // prepare a launch intent and send it 1285ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller if (item.intent != null) { 1295ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller item.intent.addFlags(Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY); 1305ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller try { 1315ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller Log.v(TAG, "Starting intent " + item.intent); 1325ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller startActivity(item.intent); 1335ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller overridePendingTransition(R.anim.zoom_enter, R.anim.zoom_exit); 1345ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } catch (ActivityNotFoundException e) { 1355ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller Log.w("Recent", "Unable to launch recent task", e); 1365ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 1375ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller finish(); 1385ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 1395ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 1405ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 1415ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 142a3cb716626b477c98ba912698c765eab20f27286Jim Miller @Override 143a3cb716626b477c98ba912698c765eab20f27286Jim Miller public Bitmap getTexture(int n) { 144a3cb716626b477c98ba912698c765eab20f27286Jim Miller ActivityDescription desc = mActivityDescriptions.get(n); 145a3cb716626b477c98ba912698c765eab20f27286Jim Miller Bitmap bitmap = desc.thumbnail == null ? mBlankBitmap : desc.thumbnail; 146a3cb716626b477c98ba912698c765eab20f27286Jim Miller return bitmap; 1475ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 1485ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 149a3cb716626b477c98ba912698c765eab20f27286Jim Miller @Override 150a3cb716626b477c98ba912698c765eab20f27286Jim Miller public Bitmap getDetailTexture(int n) { 151a3cb716626b477c98ba912698c765eab20f27286Jim Miller Bitmap bitmap = null; 1525ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller if (n < mActivityDescriptions.size()) { 153a3cb716626b477c98ba912698c765eab20f27286Jim Miller ActivityDescription item = mActivityDescriptions.get(n); 154a3cb716626b477c98ba912698c765eab20f27286Jim Miller bitmap = Bitmap.createBitmap(DETAIL_TEXTURE_WIDTH, DETAIL_TEXTURE_HEIGHT, 155a3cb716626b477c98ba912698c765eab20f27286Jim Miller Bitmap.Config.ARGB_8888); 156a3cb716626b477c98ba912698c765eab20f27286Jim Miller Canvas canvas = new Canvas(bitmap); 157a3cb716626b477c98ba912698c765eab20f27286Jim Miller canvas.drawARGB(128,128,128,255); 158a3cb716626b477c98ba912698c765eab20f27286Jim Miller mPaint.setTextSize(15.0f); 159a3cb716626b477c98ba912698c765eab20f27286Jim Miller mPaint.setColor(0xffffffff); 160a3cb716626b477c98ba912698c765eab20f27286Jim Miller mPaint.setAntiAlias(true); 161a3cb716626b477c98ba912698c765eab20f27286Jim Miller canvas.drawText(item.label.toString(),0, DETAIL_TEXTURE_HEIGHT/2, mPaint); 1625ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 163a3cb716626b477c98ba912698c765eab20f27286Jim Miller return bitmap; 164198a060d650bc849ef0f25b597888fac9546803bJack Palevich } 1655ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller }; 1665ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 1675ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller private final IThumbnailReceiver mThumbnailReceiver = new IThumbnailReceiver.Stub() { 1685ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 1695ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public void finished() throws RemoteException { 1705ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 1715ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 1725ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 1735ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public void newThumbnail(final int id, final Bitmap bitmap, CharSequence description) 1745ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller throws RemoteException { 1755ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller int w = bitmap.getWidth(); 1765ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller int h = bitmap.getHeight(); 1775ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller Log.v(TAG, "New thumbnail for id=" + id + ", dimensions=" + w + "x" + h 1785ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller + " description '" + description + "'"); 1795ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller ActivityDescription info = findActivityDescription(id); 1805ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller if (info != null) { 1815ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller info.thumbnail = bitmap; 1825ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller final int thumbWidth = bitmap.getWidth(); 1835ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller final int thumbHeight = bitmap.getHeight(); 1845ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller if ((mPortraitMode && thumbWidth > thumbHeight) 1855ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller || (!mPortraitMode && thumbWidth < thumbHeight)) { 1865ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller Matrix matrix = new Matrix(); 1875ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller matrix.setRotate(90.0f, (float) thumbWidth / 2, (float) thumbHeight / 2); 1885ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller info.matrix = matrix; 1895ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } else { 1905ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller info.matrix = null; 1915ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 1925ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } else { 1935ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller Log.v(TAG, "Can't find view for id " + id); 1945ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 1955ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 1965ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller }; 1975ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 1985ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller @Override 1995ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller protected void onCreate(Bundle savedInstanceState) { 2005ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller super.onCreate(savedInstanceState); 2015ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 2025ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller final Resources res = getResources(); 2035ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller final View decorView = getWindow().getDecorView(); 2045ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 2057cc5787b49708f63aeb818bdd06efed3d4229925Jim Shuma mController = new CarouselController(); 2067cc5787b49708f63aeb818bdd06efed3d4229925Jim Shuma mView = new MyCarouselView(this, mController); 207a3cb716626b477c98ba912698c765eab20f27286Jim Miller mHelper = new LocalCarouselViewHelper(this); 208a3cb716626b477c98ba912698c765eab20f27286Jim Miller mHelper.setCarouselView(mView); 2095ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mView.setSlotCount(CARD_SLOTS); 2105ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mView.setVisibleSlots(VISIBLE_SLOTS); 2115ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mView.createCards(1); 2125ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mView.setStartAngle((float) -(2.0f*Math.PI * 5 / CARD_SLOTS)); 2135ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mView.setDefaultBitmap(BitmapFactory.decodeResource(res, R.drawable.wait)); 2145ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mView.setLoadingBitmap(BitmapFactory.decodeResource(res, R.drawable.wait)); 215a3cb716626b477c98ba912698c765eab20f27286Jim Miller mView.setBackgroundColor(0.1f, 0.1f, 0.1f, 1.0f); 2165ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 2175ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mActivityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); 2185ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mPortraitMode = decorView.getHeight() > decorView.getWidth(); 2195ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 2205ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller refresh(); 2215ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller setContentView(mView); 2225ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 2235ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 2245ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller @Override 2255ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller protected void onResume() { 2265ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller super.onResume(); 227a3cb716626b477c98ba912698c765eab20f27286Jim Miller mHelper.onResume(); 2285ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller refresh(); 2295ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 2305ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 2315ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller @Override 232a3cb716626b477c98ba912698c765eab20f27286Jim Miller protected void onPause() { 233a3cb716626b477c98ba912698c765eab20f27286Jim Miller super.onPause(); 234a3cb716626b477c98ba912698c765eab20f27286Jim Miller mHelper.onPause(); 235a3cb716626b477c98ba912698c765eab20f27286Jim Miller } 236a3cb716626b477c98ba912698c765eab20f27286Jim Miller 237a3cb716626b477c98ba912698c765eab20f27286Jim Miller @Override 2385ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public void onConfigurationChanged(Configuration newConfig) { 2395ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller super.onConfigurationChanged(newConfig); 2405ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mPortraitMode = newConfig.orientation == Configuration.ORIENTATION_PORTRAIT; 2415ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller Log.v(TAG, "CONFIG CHANGE, mPortraitMode = " + mPortraitMode); 2425ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller refresh(); 2435ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 2445ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 2455ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller void updateRunningTasks() { 2465ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mRunningTaskList = mActivityManager.getRunningTasks(MAX_TASKS + 2, 0, mThumbnailReceiver); 2475ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller Log.v(TAG, "Portrait: " + mPortraitMode); 2485ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller for (RunningTaskInfo r : mRunningTaskList) { 2495ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller if (r.thumbnail != null) { 2505ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller int thumbWidth = r.thumbnail.getWidth(); 2515ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller int thumbHeight = r.thumbnail.getHeight(); 2525ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller Log.v(TAG, "Got thumbnail " + thumbWidth + "x" + thumbHeight); 2535ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller ActivityDescription desc = findActivityDescription(r.id); 2545ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller if (desc != null) { 2555ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller desc.thumbnail = r.thumbnail; 256a3cb716626b477c98ba912698c765eab20f27286Jim Miller desc.description = r.description; 2575ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller if ((mPortraitMode && thumbWidth > thumbHeight) 2585ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller || (!mPortraitMode && thumbWidth < thumbHeight)) { 2595ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller Matrix matrix = new Matrix(); 2605ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller matrix.setRotate(90.0f, (float) thumbWidth / 2, (float) thumbHeight / 2); 2615ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller desc.matrix = matrix; 2625ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 2635ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } else { 2645ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller Log.v(TAG, "Couldn't find ActivityDesc for id=" + r.id); 2655ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 2665ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } else { 2675ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller Log.v(TAG, "*** RUNNING THUMBNAIL WAS NULL ***"); 2685ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 2695ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 2705ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller // HACK refresh carousel 2715ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mView.createCards(mActivityDescriptions.size()); 2725ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 2735ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 2745ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller private void updateRecentTasks() { 2755ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller final PackageManager pm = getPackageManager(); 2765ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller final ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); 2775ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 2785ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller final List<ActivityManager.RecentTaskInfo> recentTasks = 2795ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller am.getRecentTasks(MAX_TASKS + 2, ActivityManager.RECENT_IGNORE_UNAVAILABLE); 2805ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 2815ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller ActivityInfo homeInfo = new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME) 2825ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller .resolveActivityInfo(pm, 0); 2835ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 2845ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller //IconUtilities iconUtilities = new IconUtilities(this); 2855ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 2865ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller int numTasks = recentTasks.size(); 2875ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mActivityDescriptions.clear(); 2885ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller for (int i = 1, index = 0; i < numTasks && (index < MAX_TASKS + 2); ++i) { 2895ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller final ActivityManager.RecentTaskInfo recentInfo = recentTasks.get(i); 2905ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 2915ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller Intent intent = new Intent(recentInfo.baseIntent); 2925ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller if (recentInfo.origActivity != null) { 2935ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller intent.setComponent(recentInfo.origActivity); 2945ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 2955ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 2965ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller // Skip the current home activity. 2975ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller if (homeInfo != null 2985ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller && homeInfo.packageName.equals(intent.getComponent().getPackageName()) 2995ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller && homeInfo.name.equals(intent.getComponent().getClassName())) { 3005ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller continue; 3015ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 3025ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 3035ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller intent.setFlags((intent.getFlags()&~Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED) 3045ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller | Intent.FLAG_ACTIVITY_NEW_TASK); 3055ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller final ResolveInfo resolveInfo = pm.resolveActivity(intent, 0); 3065ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller if (resolveInfo != null) { 3075ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller final ActivityInfo info = resolveInfo.activityInfo; 3085ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller final String title = info.loadLabel(pm).toString(); 3095ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller Drawable icon = info.loadIcon(pm); 3105ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 311a3cb716626b477c98ba912698c765eab20f27286Jim Miller int id = recentInfo.id; 3125ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller if (id != -1 && title != null && title.length() > 0 && icon != null) { 3135ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller //icon = iconUtilities.createIconDrawable(icon); 3145ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller ActivityDescription item = new ActivityDescription(null, icon, title, null, id); 3155ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller item.intent = intent; 3165ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mActivityDescriptions.add(item); 3175ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller Log.v(TAG, "Added item[" + index + "], id=" + item.id); 3185ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller ++index; 3195ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } else { 3205ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller Log.v(TAG, "SKIPPING item " + id); 3215ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 3225ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 3235ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 3245ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 3255ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 3265ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller private void refresh() { 3275ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller updateRecentTasks(); 3285ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller updateRunningTasks(); 3295ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mView.createCards(mActivityDescriptions.size()); 3305ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 3315ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller} 332