ActivityTestMain.java revision 756220bd1912535840388a6743830d2e59ad4964
1/* 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.List; 20 21import android.app.Activity; 22import android.app.ActivityManager; 23import android.app.AlertDialog; 24import android.content.ActivityNotFoundException; 25import android.content.BroadcastReceiver; 26import android.content.ComponentName; 27import android.content.ContentProviderClient; 28import android.content.Intent; 29import android.content.ServiceConnection; 30import android.os.Bundle; 31import android.os.IBinder; 32import android.os.RemoteException; 33import android.graphics.Bitmap; 34import android.widget.ImageView; 35import android.widget.LinearLayout; 36import android.widget.TextView; 37import android.widget.ScrollView; 38import android.widget.Toast; 39import android.view.Menu; 40import android.view.MenuItem; 41import android.view.View; 42import android.content.Context; 43import android.content.res.Configuration; 44import android.util.Log; 45 46public class ActivityTestMain extends Activity { 47 static final String TAG = "ActivityTest"; 48 49 static final String KEY_CONFIGURATION = "configuration"; 50 51 ActivityManager mAm; 52 Configuration mOverrideConfig; 53 54 class BroadcastResultReceiver extends BroadcastReceiver { 55 @Override 56 public void onReceive(Context context, Intent intent) { 57 Bundle res = getResultExtras(true); 58 int user = res.getInt("user", -1); 59 Toast.makeText(ActivityTestMain.this, 60 "Receiver executed as user " 61 + (user >= 0 ? Integer.toString(user) : "unknown"), 62 Toast.LENGTH_LONG).show(); 63 } 64 } 65 66 private void addThumbnail(LinearLayout container, Bitmap bm, 67 final ActivityManager.RecentTaskInfo task, 68 final ActivityManager.TaskThumbnails thumbs, final int subIndex) { 69 ImageView iv = new ImageView(this); 70 if (bm != null) { 71 iv.setImageBitmap(bm); 72 } 73 iv.setBackgroundResource(android.R.drawable.gallery_thumb); 74 int w = getResources().getDimensionPixelSize(android.R.dimen.thumbnail_width); 75 int h = getResources().getDimensionPixelSize(android.R.dimen.thumbnail_height); 76 container.addView(iv, new LinearLayout.LayoutParams(w, h)); 77 78 iv.setOnClickListener(new View.OnClickListener() { 79 @Override 80 public void onClick(View v) { 81 if (task.id >= 0 && thumbs != null) { 82 if (subIndex < (thumbs.numSubThumbbails-1)) { 83 mAm.removeSubTask(task.id, subIndex+1); 84 } 85 mAm.moveTaskToFront(task.id, ActivityManager.MOVE_TASK_WITH_HOME); 86 } else { 87 try { 88 startActivity(task.baseIntent); 89 } catch (ActivityNotFoundException e) { 90 Log.w("foo", "Unable to start task: " + e); 91 } 92 } 93 buildUi(); 94 } 95 }); 96 iv.setOnLongClickListener(new View.OnLongClickListener() { 97 @Override 98 public boolean onLongClick(View v) { 99 if (task.id >= 0 && thumbs != null) { 100 if (subIndex < 0) { 101 mAm.removeTask(task.id, ActivityManager.REMOVE_TASK_KILL_PROCESS); 102 } else { 103 mAm.removeSubTask(task.id, subIndex); 104 } 105 buildUi(); 106 return true; 107 } 108 return false; 109 } 110 }); 111 } 112 113 @Override 114 protected void onCreate(Bundle savedInstanceState) { 115 super.onCreate(savedInstanceState); 116 117 mAm = (ActivityManager)getSystemService(ACTIVITY_SERVICE); 118 if (savedInstanceState != null) { 119 mOverrideConfig = savedInstanceState.getParcelable(KEY_CONFIGURATION); 120 if (mOverrideConfig != null) { 121 applyOverrideConfiguration(mOverrideConfig); 122 } 123 } 124 } 125 126 @Override 127 public boolean onCreateOptionsMenu(Menu menu) { 128 menu.add("Animate!").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { 129 @Override public boolean onMenuItemClick(MenuItem item) { 130 AlertDialog.Builder builder = new AlertDialog.Builder(ActivityTestMain.this, 131 R.style.SlowDialog); 132 builder.setTitle("This is a title"); 133 builder.show(); 134 return true; 135 } 136 }); 137 menu.add("Bind!").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { 138 @Override public boolean onMenuItemClick(MenuItem item) { 139 Intent intent = new Intent(ActivityTestMain.this, SingleUserService.class); 140 ServiceConnection conn = new ServiceConnection() { 141 @Override 142 public void onServiceConnected(ComponentName name, IBinder service) { 143 Log.i(TAG, "Service connected " + name + " " + service); 144 } 145 @Override 146 public void onServiceDisconnected(ComponentName name) { 147 Log.i(TAG, "Service disconnected " + name); 148 } 149 }; 150 bindService(intent, conn, Context.BIND_AUTO_CREATE); 151 return true; 152 } 153 }); 154 menu.add("Start!").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { 155 @Override public boolean onMenuItemClick(MenuItem item) { 156 Intent intent = new Intent(ActivityTestMain.this, SingleUserService.class); 157 startService(intent); 158 return true; 159 } 160 }); 161 menu.add("Send!").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { 162 @Override public boolean onMenuItemClick(MenuItem item) { 163 Intent intent = new Intent(ActivityTestMain.this, SingleUserReceiver.class); 164 sendOrderedBroadcast(intent, null, new BroadcastResultReceiver(), 165 null, Activity.RESULT_OK, null, null); 166 return true; 167 } 168 }); 169 menu.add("Call!").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { 170 @Override public boolean onMenuItemClick(MenuItem item) { 171 ContentProviderClient cpl = getContentResolver().acquireContentProviderClient( 172 SingleUserProvider.AUTHORITY); 173 Bundle res = null; 174 try { 175 res = cpl.call("getuser", null, null); 176 } catch (RemoteException e) { 177 } 178 int user = res != null ? res.getInt("user", -1) : -1; 179 Toast.makeText(ActivityTestMain.this, 180 "Provider executed as user " 181 + (user >= 0 ? Integer.toString(user) : "unknown"), 182 Toast.LENGTH_LONG).show(); 183 cpl.release(); 184 return true; 185 } 186 }); 187 menu.add("Send to user 1!").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { 188 @Override public boolean onMenuItemClick(MenuItem item) { 189 Intent intent = new Intent(ActivityTestMain.this, UserTarget.class); 190 sendOrderedBroadcastToUser(intent, 1, new BroadcastResultReceiver(), 191 null, Activity.RESULT_OK, null, null); 192 return true; 193 } 194 }); 195 menu.add("Density!").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { 196 @Override public boolean onMenuItemClick(MenuItem item) { 197 if (mOverrideConfig == null) { 198 mOverrideConfig = new Configuration(); 199 } 200 if (mOverrideConfig.densityDpi == Configuration.DENSITY_DPI_UNDEFINED) { 201 mOverrideConfig.densityDpi = (getApplicationContext().getResources() 202 .getConfiguration().densityDpi*2)/3; 203 } else { 204 mOverrideConfig.densityDpi = Configuration.DENSITY_DPI_UNDEFINED; 205 } 206 recreate(); 207 return true; 208 } 209 }); 210 return true; 211 } 212 213 @Override 214 protected void onStart() { 215 super.onStart(); 216 buildUi(); 217 } 218 219 @Override 220 protected void onSaveInstanceState(Bundle outState) { 221 super.onSaveInstanceState(outState); 222 if (mOverrideConfig != null) { 223 outState.putParcelable(KEY_CONFIGURATION, mOverrideConfig); 224 } 225 } 226 227 private View scrollWrap(View view) { 228 ScrollView scroller = new ScrollView(this); 229 scroller.addView(view, new ScrollView.LayoutParams(ScrollView.LayoutParams.MATCH_PARENT, 230 ScrollView.LayoutParams.MATCH_PARENT)); 231 return scroller; 232 } 233 234 private void buildUi() { 235 LinearLayout top = new LinearLayout(this); 236 top.setOrientation(LinearLayout.VERTICAL); 237 238 List<ActivityManager.RecentTaskInfo> recents = mAm.getRecentTasks(10, 239 ActivityManager.RECENT_WITH_EXCLUDED); 240 if (recents != null) { 241 for (int i=0; i<recents.size(); i++) { 242 ActivityManager.RecentTaskInfo r = recents.get(i); 243 ActivityManager.TaskThumbnails tt = mAm.getTaskThumbnails(r.persistentId); 244 TextView tv = new TextView(this); 245 tv.setText(r.baseIntent.getComponent().flattenToShortString()); 246 top.addView(tv, new LinearLayout.LayoutParams( 247 LinearLayout.LayoutParams.WRAP_CONTENT, 248 LinearLayout.LayoutParams.WRAP_CONTENT)); 249 LinearLayout item = new LinearLayout(this); 250 item.setOrientation(LinearLayout.HORIZONTAL); 251 addThumbnail(item, tt != null ? tt.mainThumbnail : null, r, tt, -1); 252 for (int j=0; j<tt.numSubThumbbails; j++) { 253 addThumbnail(item, tt.getSubThumbnail(j), r, tt, j); 254 } 255 top.addView(item, new LinearLayout.LayoutParams( 256 LinearLayout.LayoutParams.WRAP_CONTENT, 257 LinearLayout.LayoutParams.WRAP_CONTENT)); 258 } 259 } 260 261 setContentView(scrollWrap(top)); 262 } 263} 264