blob: 583c13cd8ae8cbb814c5302b27455985bcaac01e [file] [log] [blame]
Dianne Hackbornf26fd992011-04-08 18:14:09 -07001/*
2 * Copyright (C) 2011 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.google.android.test.activity;
18
19import java.util.ArrayList;
20import java.util.List;
21
22import android.app.Activity;
23import android.app.ActivityManager;
24import android.app.ActivityThread;
25import android.app.Application;
Dianne Hackborn0c5001d2011-04-12 18:16:08 -070026import android.content.ActivityNotFoundException;
Dianne Hackbornf26fd992011-04-08 18:14:09 -070027import android.os.Bundle;
28import android.graphics.BitmapFactory;
29import android.graphics.Bitmap;
30import android.graphics.Canvas;
31import android.graphics.drawable.BitmapDrawable;
32import android.graphics.drawable.Drawable;
33import android.widget.ImageView;
34import android.widget.LinearLayout;
35import android.widget.TextView;
36import android.widget.ScrollView;
37import android.view.LayoutInflater;
38import android.view.View;
39import android.content.Context;
40import android.content.pm.ApplicationInfo;
41import android.content.pm.PackageManager;
42import android.content.res.CompatibilityInfo;
43import android.util.DisplayMetrics;
44import android.util.Log;
45
46public class ActivityTestMain extends Activity {
Dianne Hackborn0c5001d2011-04-12 18:16:08 -070047 ActivityManager mAm;
48
49 private void addThumbnail(LinearLayout container, Bitmap bm,
50 final ActivityManager.RecentTaskInfo task,
51 final ActivityManager.TaskThumbnails thumbs, final int subIndex) {
Dianne Hackbornf26fd992011-04-08 18:14:09 -070052 ImageView iv = new ImageView(this);
53 if (bm != null) {
54 iv.setImageBitmap(bm);
55 }
56 iv.setBackgroundResource(android.R.drawable.gallery_thumb);
57 int w = getResources().getDimensionPixelSize(android.R.dimen.thumbnail_width);
58 int h = getResources().getDimensionPixelSize(android.R.dimen.thumbnail_height);
59 container.addView(iv, new LinearLayout.LayoutParams(w, h));
Dianne Hackborn0c5001d2011-04-12 18:16:08 -070060
61 iv.setOnClickListener(new View.OnClickListener() {
62 @Override
63 public void onClick(View v) {
64 if (task.id >= 0 && thumbs != null) {
65 if (subIndex < (thumbs.numSubThumbbails-1)) {
66 mAm.removeSubTask(task.id, subIndex+1);
67 }
68 mAm.moveTaskToFront(task.id, ActivityManager.MOVE_TASK_WITH_HOME);
69 } else {
70 try {
71 startActivity(task.baseIntent);
72 } catch (ActivityNotFoundException e) {
73 Log.w("foo", "Unable to start task: " + e);
74 }
75 }
76 buildUi();
77 }
78 });
79 iv.setOnLongClickListener(new View.OnLongClickListener() {
80 @Override
81 public boolean onLongClick(View v) {
82 if (task.id >= 0 && thumbs != null) {
83 if (subIndex < 0) {
84 mAm.removeTask(task.id, ActivityManager.REMOVE_TASK_KILL_PROCESS);
85 } else {
86 mAm.removeSubTask(task.id, subIndex);
87 }
88 buildUi();
89 return true;
90 }
91 return false;
92 }
93 });
Dianne Hackbornf26fd992011-04-08 18:14:09 -070094 }
95
96 @Override
97 protected void onCreate(Bundle savedInstanceState) {
98 super.onCreate(savedInstanceState);
99
Dianne Hackborn0c5001d2011-04-12 18:16:08 -0700100 mAm = (ActivityManager)getSystemService(ACTIVITY_SERVICE);
101 }
Dianne Hackbornf26fd992011-04-08 18:14:09 -0700102
Dianne Hackborn0c5001d2011-04-12 18:16:08 -0700103 @Override
104 protected void onStart() {
105 super.onStart();
106 buildUi();
107 }
108
109 private View scrollWrap(View view) {
110 ScrollView scroller = new ScrollView(this);
111 scroller.addView(view, new ScrollView.LayoutParams(ScrollView.LayoutParams.MATCH_PARENT,
112 ScrollView.LayoutParams.MATCH_PARENT));
113 return scroller;
114 }
115
116 private void buildUi() {
Dianne Hackbornf26fd992011-04-08 18:14:09 -0700117 LinearLayout top = new LinearLayout(this);
118 top.setOrientation(LinearLayout.VERTICAL);
119
Dianne Hackborn0c5001d2011-04-12 18:16:08 -0700120 List<ActivityManager.RecentTaskInfo> recents = mAm.getRecentTasks(10,
Dianne Hackbornf26fd992011-04-08 18:14:09 -0700121 ActivityManager.RECENT_WITH_EXCLUDED);
122 if (recents != null) {
123 for (int i=0; i<recents.size(); i++) {
124 ActivityManager.RecentTaskInfo r = recents.get(i);
Dianne Hackborn0c5001d2011-04-12 18:16:08 -0700125 ActivityManager.TaskThumbnails tt = mAm.getTaskThumbnails(r.persistentId);
Dianne Hackbornf26fd992011-04-08 18:14:09 -0700126 TextView tv = new TextView(this);
127 tv.setText(r.baseIntent.getComponent().flattenToShortString());
128 top.addView(tv, new LinearLayout.LayoutParams(
129 LinearLayout.LayoutParams.WRAP_CONTENT,
130 LinearLayout.LayoutParams.WRAP_CONTENT));
131 LinearLayout item = new LinearLayout(this);
132 item.setOrientation(LinearLayout.HORIZONTAL);
Dianne Hackborn0c5001d2011-04-12 18:16:08 -0700133 addThumbnail(item, tt != null ? tt.mainThumbnail : null, r, tt, -1);
Dianne Hackbornf26fd992011-04-08 18:14:09 -0700134 for (int j=0; j<tt.numSubThumbbails; j++) {
Dianne Hackborn0c5001d2011-04-12 18:16:08 -0700135 addThumbnail(item, tt.getSubThumbnail(j), r, tt, j);
Dianne Hackbornf26fd992011-04-08 18:14:09 -0700136 }
137 top.addView(item, new LinearLayout.LayoutParams(
138 LinearLayout.LayoutParams.WRAP_CONTENT,
139 LinearLayout.LayoutParams.WRAP_CONTENT));
140 }
141 }
142
143 setContentView(scrollWrap(top));
144 }
Dianne Hackbornf26fd992011-04-08 18:14:09 -0700145}