ActivityTestMain.java revision 756220bd1912535840388a6743830d2e59ad4964
1f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn/* 2f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn * Copyright (C) 2011 The Android Open Source Project 3f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn * 4f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn * Licensed under the Apache License, Version 2.0 (the "License"); 5f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn * you may not use this file except in compliance with the License. 6f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn * You may obtain a copy of the License at 7f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn * 8f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn * http://www.apache.org/licenses/LICENSE-2.0 9f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn * 10f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn * Unless required by applicable law or agreed to in writing, software 11f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn * distributed under the License is distributed on an "AS IS" BASIS, 12f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn * See the License for the specific language governing permissions and 14f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn * limitations under the License. 15f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn */ 16f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn 17f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackbornpackage com.google.android.test.activity; 18f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn 19f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackbornimport java.util.List; 20f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn 21f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackbornimport android.app.Activity; 22f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackbornimport android.app.ActivityManager; 238a59b7f95f84ecc1f961a57d013ac68743c35d74Dianne Hackbornimport android.app.AlertDialog; 240c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackbornimport android.content.ActivityNotFoundException; 257d19e0242faac8017033dabb872cdf1542fa184cDianne Hackbornimport android.content.BroadcastReceiver; 26b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackbornimport android.content.ComponentName; 277d19e0242faac8017033dabb872cdf1542fa184cDianne Hackbornimport android.content.ContentProviderClient; 28b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackbornimport android.content.Intent; 29b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackbornimport android.content.ServiceConnection; 30f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackbornimport android.os.Bundle; 31b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackbornimport android.os.IBinder; 327d19e0242faac8017033dabb872cdf1542fa184cDianne Hackbornimport android.os.RemoteException; 33f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackbornimport android.graphics.Bitmap; 34f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackbornimport android.widget.ImageView; 35f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackbornimport android.widget.LinearLayout; 36f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackbornimport android.widget.TextView; 37f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackbornimport android.widget.ScrollView; 387d19e0242faac8017033dabb872cdf1542fa184cDianne Hackbornimport android.widget.Toast; 398a59b7f95f84ecc1f961a57d013ac68743c35d74Dianne Hackbornimport android.view.Menu; 408a59b7f95f84ecc1f961a57d013ac68743c35d74Dianne Hackbornimport android.view.MenuItem; 41f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackbornimport android.view.View; 42f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackbornimport android.content.Context; 43756220bd1912535840388a6743830d2e59ad4964Dianne Hackbornimport android.content.res.Configuration; 44f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackbornimport android.util.Log; 45f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn 46f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackbornpublic class ActivityTestMain extends Activity { 47b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn static final String TAG = "ActivityTest"; 48b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn 49756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn static final String KEY_CONFIGURATION = "configuration"; 50756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn 510c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn ActivityManager mAm; 52756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn Configuration mOverrideConfig; 530c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn 547d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn class BroadcastResultReceiver extends BroadcastReceiver { 557d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn @Override 567d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn public void onReceive(Context context, Intent intent) { 577d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn Bundle res = getResultExtras(true); 587d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn int user = res.getInt("user", -1); 597d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn Toast.makeText(ActivityTestMain.this, 607d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn "Receiver executed as user " 617d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn + (user >= 0 ? Integer.toString(user) : "unknown"), 627d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn Toast.LENGTH_LONG).show(); 637d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn } 647d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn } 657d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn 660c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn private void addThumbnail(LinearLayout container, Bitmap bm, 670c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn final ActivityManager.RecentTaskInfo task, 680c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn final ActivityManager.TaskThumbnails thumbs, final int subIndex) { 69f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn ImageView iv = new ImageView(this); 70f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn if (bm != null) { 71f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn iv.setImageBitmap(bm); 72f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn } 73f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn iv.setBackgroundResource(android.R.drawable.gallery_thumb); 74f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn int w = getResources().getDimensionPixelSize(android.R.dimen.thumbnail_width); 75f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn int h = getResources().getDimensionPixelSize(android.R.dimen.thumbnail_height); 76f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn container.addView(iv, new LinearLayout.LayoutParams(w, h)); 770c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn 780c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn iv.setOnClickListener(new View.OnClickListener() { 790c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn @Override 800c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn public void onClick(View v) { 810c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn if (task.id >= 0 && thumbs != null) { 820c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn if (subIndex < (thumbs.numSubThumbbails-1)) { 830c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn mAm.removeSubTask(task.id, subIndex+1); 840c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn } 850c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn mAm.moveTaskToFront(task.id, ActivityManager.MOVE_TASK_WITH_HOME); 860c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn } else { 870c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn try { 880c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn startActivity(task.baseIntent); 890c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn } catch (ActivityNotFoundException e) { 900c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn Log.w("foo", "Unable to start task: " + e); 910c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn } 920c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn } 930c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn buildUi(); 940c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn } 950c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn }); 960c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn iv.setOnLongClickListener(new View.OnLongClickListener() { 970c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn @Override 980c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn public boolean onLongClick(View v) { 990c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn if (task.id >= 0 && thumbs != null) { 1000c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn if (subIndex < 0) { 1010c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn mAm.removeTask(task.id, ActivityManager.REMOVE_TASK_KILL_PROCESS); 1020c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn } else { 1030c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn mAm.removeSubTask(task.id, subIndex); 1040c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn } 1050c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn buildUi(); 1060c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn return true; 1070c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn } 1080c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn return false; 1090c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn } 1100c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn }); 111f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn } 112f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn 113f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn @Override 114f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn protected void onCreate(Bundle savedInstanceState) { 115f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn super.onCreate(savedInstanceState); 116f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn 1170c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn mAm = (ActivityManager)getSystemService(ACTIVITY_SERVICE); 118756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn if (savedInstanceState != null) { 119756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn mOverrideConfig = savedInstanceState.getParcelable(KEY_CONFIGURATION); 120756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn if (mOverrideConfig != null) { 121756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn applyOverrideConfiguration(mOverrideConfig); 122756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn } 123756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn } 1240c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn } 1250c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn 1260c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn @Override 1278a59b7f95f84ecc1f961a57d013ac68743c35d74Dianne Hackborn public boolean onCreateOptionsMenu(Menu menu) { 1288a59b7f95f84ecc1f961a57d013ac68743c35d74Dianne Hackborn menu.add("Animate!").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { 1298a59b7f95f84ecc1f961a57d013ac68743c35d74Dianne Hackborn @Override public boolean onMenuItemClick(MenuItem item) { 1308a59b7f95f84ecc1f961a57d013ac68743c35d74Dianne Hackborn AlertDialog.Builder builder = new AlertDialog.Builder(ActivityTestMain.this, 1318a59b7f95f84ecc1f961a57d013ac68743c35d74Dianne Hackborn R.style.SlowDialog); 1328a59b7f95f84ecc1f961a57d013ac68743c35d74Dianne Hackborn builder.setTitle("This is a title"); 1338a59b7f95f84ecc1f961a57d013ac68743c35d74Dianne Hackborn builder.show(); 1348a59b7f95f84ecc1f961a57d013ac68743c35d74Dianne Hackborn return true; 1358a59b7f95f84ecc1f961a57d013ac68743c35d74Dianne Hackborn } 1368a59b7f95f84ecc1f961a57d013ac68743c35d74Dianne Hackborn }); 137b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn menu.add("Bind!").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { 138b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn @Override public boolean onMenuItemClick(MenuItem item) { 139b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn Intent intent = new Intent(ActivityTestMain.this, SingleUserService.class); 140b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn ServiceConnection conn = new ServiceConnection() { 141b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn @Override 142b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn public void onServiceConnected(ComponentName name, IBinder service) { 143b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn Log.i(TAG, "Service connected " + name + " " + service); 144b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn } 145b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn @Override 146b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn public void onServiceDisconnected(ComponentName name) { 147b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn Log.i(TAG, "Service disconnected " + name); 148b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn } 149b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn }; 150b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn bindService(intent, conn, Context.BIND_AUTO_CREATE); 151b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn return true; 152b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn } 153b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn }); 154b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn menu.add("Start!").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { 155b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn @Override public boolean onMenuItemClick(MenuItem item) { 156b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn Intent intent = new Intent(ActivityTestMain.this, SingleUserService.class); 157b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn startService(intent); 158b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn return true; 159b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn } 160b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn }); 161b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn menu.add("Send!").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { 162b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn @Override public boolean onMenuItemClick(MenuItem item) { 1637d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn Intent intent = new Intent(ActivityTestMain.this, SingleUserReceiver.class); 1647d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn sendOrderedBroadcast(intent, null, new BroadcastResultReceiver(), 1657d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn null, Activity.RESULT_OK, null, null); 1667d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn return true; 1677d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn } 1687d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn }); 1697d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn menu.add("Call!").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { 1707d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn @Override public boolean onMenuItemClick(MenuItem item) { 1717d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn ContentProviderClient cpl = getContentResolver().acquireContentProviderClient( 1727d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn SingleUserProvider.AUTHORITY); 1737d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn Bundle res = null; 1747d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn try { 1757d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn res = cpl.call("getuser", null, null); 1767d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn } catch (RemoteException e) { 1777d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn } 1787d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn int user = res != null ? res.getInt("user", -1) : -1; 1797d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn Toast.makeText(ActivityTestMain.this, 1807d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn "Provider executed as user " 1817d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn + (user >= 0 ? Integer.toString(user) : "unknown"), 1827d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn Toast.LENGTH_LONG).show(); 1837d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn cpl.release(); 1847d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn return true; 1857d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn } 1867d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn }); 1877d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn menu.add("Send to user 1!").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { 1887d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn @Override public boolean onMenuItemClick(MenuItem item) { 189b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn Intent intent = new Intent(ActivityTestMain.this, UserTarget.class); 1907d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn sendOrderedBroadcastToUser(intent, 1, new BroadcastResultReceiver(), 1917d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn null, Activity.RESULT_OK, null, null); 192b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn return true; 193b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn } 194b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn }); 195756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn menu.add("Density!").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { 196756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn @Override public boolean onMenuItemClick(MenuItem item) { 197756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn if (mOverrideConfig == null) { 198756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn mOverrideConfig = new Configuration(); 199756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn } 200756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn if (mOverrideConfig.densityDpi == Configuration.DENSITY_DPI_UNDEFINED) { 201756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn mOverrideConfig.densityDpi = (getApplicationContext().getResources() 202756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn .getConfiguration().densityDpi*2)/3; 203756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn } else { 204756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn mOverrideConfig.densityDpi = Configuration.DENSITY_DPI_UNDEFINED; 205756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn } 206756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn recreate(); 207756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn return true; 208756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn } 209756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn }); 2108a59b7f95f84ecc1f961a57d013ac68743c35d74Dianne Hackborn return true; 2118a59b7f95f84ecc1f961a57d013ac68743c35d74Dianne Hackborn } 2128a59b7f95f84ecc1f961a57d013ac68743c35d74Dianne Hackborn 2138a59b7f95f84ecc1f961a57d013ac68743c35d74Dianne Hackborn @Override 2140c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn protected void onStart() { 2150c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn super.onStart(); 2160c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn buildUi(); 2170c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn } 2180c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn 219756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn @Override 220756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn protected void onSaveInstanceState(Bundle outState) { 221756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn super.onSaveInstanceState(outState); 222756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn if (mOverrideConfig != null) { 223756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn outState.putParcelable(KEY_CONFIGURATION, mOverrideConfig); 224756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn } 225756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn } 226756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn 2270c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn private View scrollWrap(View view) { 2280c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn ScrollView scroller = new ScrollView(this); 2290c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn scroller.addView(view, new ScrollView.LayoutParams(ScrollView.LayoutParams.MATCH_PARENT, 2300c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn ScrollView.LayoutParams.MATCH_PARENT)); 2310c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn return scroller; 2320c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn } 233f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn 2340c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn private void buildUi() { 235f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn LinearLayout top = new LinearLayout(this); 236f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn top.setOrientation(LinearLayout.VERTICAL); 237f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn 2380c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn List<ActivityManager.RecentTaskInfo> recents = mAm.getRecentTasks(10, 239f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn ActivityManager.RECENT_WITH_EXCLUDED); 240f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn if (recents != null) { 241f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn for (int i=0; i<recents.size(); i++) { 242f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn ActivityManager.RecentTaskInfo r = recents.get(i); 2430c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn ActivityManager.TaskThumbnails tt = mAm.getTaskThumbnails(r.persistentId); 244f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn TextView tv = new TextView(this); 245f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn tv.setText(r.baseIntent.getComponent().flattenToShortString()); 246f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn top.addView(tv, new LinearLayout.LayoutParams( 247f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn LinearLayout.LayoutParams.WRAP_CONTENT, 248f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn LinearLayout.LayoutParams.WRAP_CONTENT)); 249f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn LinearLayout item = new LinearLayout(this); 250f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn item.setOrientation(LinearLayout.HORIZONTAL); 2510c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn addThumbnail(item, tt != null ? tt.mainThumbnail : null, r, tt, -1); 252f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn for (int j=0; j<tt.numSubThumbbails; j++) { 2530c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn addThumbnail(item, tt.getSubThumbnail(j), r, tt, j); 254f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn } 255f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn top.addView(item, new LinearLayout.LayoutParams( 256f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn LinearLayout.LayoutParams.WRAP_CONTENT, 257f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn LinearLayout.LayoutParams.WRAP_CONTENT)); 258f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn } 259f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn } 260f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn 261f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn setContentView(scrollWrap(top)); 262f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn } 263f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn} 264