ActivityTestMain.java revision f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccda
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 193992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackbornimport java.util.ArrayList; 20f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackbornimport java.util.List; 21f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn 22f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackbornimport android.app.Activity; 23f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackbornimport android.app.ActivityManager; 248a59b7f95f84ecc1f961a57d013ac68743c35d74Dianne Hackbornimport android.app.AlertDialog; 250c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackbornimport android.content.ActivityNotFoundException; 267d19e0242faac8017033dabb872cdf1542fa184cDianne Hackbornimport android.content.BroadcastReceiver; 27b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackbornimport android.content.ComponentName; 287d19e0242faac8017033dabb872cdf1542fa184cDianne Hackbornimport android.content.ContentProviderClient; 29b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackbornimport android.content.Intent; 30b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackbornimport android.content.ServiceConnection; 31f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackbornimport android.os.Bundle; 32b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackbornimport android.os.IBinder; 337d19e0242faac8017033dabb872cdf1542fa184cDianne Hackbornimport android.os.RemoteException; 3479af1dd54c16cde063152922b42c96d72ae9eca8Dianne Hackbornimport android.os.UserHandle; 353992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackbornimport android.os.UserManager; 36f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackbornimport android.graphics.Bitmap; 37f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackbornimport android.widget.ImageView; 38f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackbornimport android.widget.LinearLayout; 39f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackbornimport android.widget.TextView; 40f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackbornimport android.widget.ScrollView; 417d19e0242faac8017033dabb872cdf1542fa184cDianne Hackbornimport android.widget.Toast; 428a59b7f95f84ecc1f961a57d013ac68743c35d74Dianne Hackbornimport android.view.Menu; 438a59b7f95f84ecc1f961a57d013ac68743c35d74Dianne Hackbornimport android.view.MenuItem; 44f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackbornimport android.view.View; 45f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackbornimport android.content.Context; 463992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackbornimport android.content.pm.UserInfo; 47756220bd1912535840388a6743830d2e59ad4964Dianne Hackbornimport android.content.res.Configuration; 48f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackbornimport android.util.Log; 49f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn 50f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackbornpublic class ActivityTestMain extends Activity { 51b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn static final String TAG = "ActivityTest"; 52b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn 53756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn static final String KEY_CONFIGURATION = "configuration"; 54756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn 550c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn ActivityManager mAm; 56756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn Configuration mOverrideConfig; 573992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn int mSecondUser; 583992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn 593992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn ArrayList<ServiceConnection> mConnections = new ArrayList<ServiceConnection>(); 600c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn 617d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn class BroadcastResultReceiver extends BroadcastReceiver { 627d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn @Override 637d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn public void onReceive(Context context, Intent intent) { 647d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn Bundle res = getResultExtras(true); 657d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn int user = res.getInt("user", -1); 667d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn Toast.makeText(ActivityTestMain.this, 677d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn "Receiver executed as user " 687d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn + (user >= 0 ? Integer.toString(user) : "unknown"), 697d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn Toast.LENGTH_LONG).show(); 707d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn } 717d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn } 727d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn 730c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn private void addThumbnail(LinearLayout container, Bitmap bm, 740c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn final ActivityManager.RecentTaskInfo task, 750c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn final ActivityManager.TaskThumbnails thumbs, final int subIndex) { 76f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn ImageView iv = new ImageView(this); 77f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn if (bm != null) { 78f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn iv.setImageBitmap(bm); 79f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn } 80f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn iv.setBackgroundResource(android.R.drawable.gallery_thumb); 81f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn int w = getResources().getDimensionPixelSize(android.R.dimen.thumbnail_width); 82f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn int h = getResources().getDimensionPixelSize(android.R.dimen.thumbnail_height); 83f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn container.addView(iv, new LinearLayout.LayoutParams(w, h)); 840c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn 850c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn iv.setOnClickListener(new View.OnClickListener() { 860c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn @Override 870c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn public void onClick(View v) { 880c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn if (task.id >= 0 && thumbs != null) { 890c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn if (subIndex < (thumbs.numSubThumbbails-1)) { 900c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn mAm.removeSubTask(task.id, subIndex+1); 910c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn } 920c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn mAm.moveTaskToFront(task.id, ActivityManager.MOVE_TASK_WITH_HOME); 930c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn } else { 940c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn try { 950c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn startActivity(task.baseIntent); 960c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn } catch (ActivityNotFoundException e) { 970c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn Log.w("foo", "Unable to start task: " + e); 980c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn } 990c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn } 1000c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn buildUi(); 1010c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn } 1020c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn }); 1030c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn iv.setOnLongClickListener(new View.OnLongClickListener() { 1040c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn @Override 1050c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn public boolean onLongClick(View v) { 1060c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn if (task.id >= 0 && thumbs != null) { 1070c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn if (subIndex < 0) { 1080c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn mAm.removeTask(task.id, ActivityManager.REMOVE_TASK_KILL_PROCESS); 1090c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn } else { 1100c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn mAm.removeSubTask(task.id, subIndex); 1110c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn } 1120c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn buildUi(); 1130c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn return true; 1140c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn } 1150c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn return false; 1160c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn } 1170c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn }); 118f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn } 119f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn 120f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn @Override 121f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn protected void onCreate(Bundle savedInstanceState) { 122f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn super.onCreate(savedInstanceState); 123f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn 1240c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn mAm = (ActivityManager)getSystemService(ACTIVITY_SERVICE); 125756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn if (savedInstanceState != null) { 126756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn mOverrideConfig = savedInstanceState.getParcelable(KEY_CONFIGURATION); 127756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn if (mOverrideConfig != null) { 128756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn applyOverrideConfiguration(mOverrideConfig); 129756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn } 130756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn } 1313992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn 1323992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn UserManager um = (UserManager)getSystemService(Context.USER_SERVICE); 1333992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn List<UserInfo> users = um.getUsers(); 1343992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn mSecondUser = Integer.MAX_VALUE; 1353992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn for (UserInfo ui : users) { 1363992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn if (ui.id != 0 && mSecondUser > ui.id) { 1373992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn mSecondUser = ui.id; 1383992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn } 1393992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn } 1400c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn } 1410c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn 1420c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn @Override 1438a59b7f95f84ecc1f961a57d013ac68743c35d74Dianne Hackborn public boolean onCreateOptionsMenu(Menu menu) { 1448a59b7f95f84ecc1f961a57d013ac68743c35d74Dianne Hackborn menu.add("Animate!").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { 1458a59b7f95f84ecc1f961a57d013ac68743c35d74Dianne Hackborn @Override public boolean onMenuItemClick(MenuItem item) { 1468a59b7f95f84ecc1f961a57d013ac68743c35d74Dianne Hackborn AlertDialog.Builder builder = new AlertDialog.Builder(ActivityTestMain.this, 1478a59b7f95f84ecc1f961a57d013ac68743c35d74Dianne Hackborn R.style.SlowDialog); 1488a59b7f95f84ecc1f961a57d013ac68743c35d74Dianne Hackborn builder.setTitle("This is a title"); 1498a59b7f95f84ecc1f961a57d013ac68743c35d74Dianne Hackborn builder.show(); 1508a59b7f95f84ecc1f961a57d013ac68743c35d74Dianne Hackborn return true; 1518a59b7f95f84ecc1f961a57d013ac68743c35d74Dianne Hackborn } 1528a59b7f95f84ecc1f961a57d013ac68743c35d74Dianne Hackborn }); 153b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn menu.add("Bind!").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { 154b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn @Override public boolean onMenuItemClick(MenuItem item) { 155b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn Intent intent = new Intent(ActivityTestMain.this, SingleUserService.class); 156b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn ServiceConnection conn = new ServiceConnection() { 157b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn @Override 158b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn public void onServiceConnected(ComponentName name, IBinder service) { 159b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn Log.i(TAG, "Service connected " + name + " " + service); 160b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn } 161b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn @Override 162b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn public void onServiceDisconnected(ComponentName name) { 163b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn Log.i(TAG, "Service disconnected " + name); 164b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn } 165b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn }; 1663992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn if (bindService(intent, conn, Context.BIND_AUTO_CREATE)) { 1673992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn mConnections.add(conn); 1683992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn } else { 1693992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn Toast.makeText(ActivityTestMain.this, "Failed to bind", 1703992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn Toast.LENGTH_LONG).show(); 1713992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn } 172b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn return true; 173b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn } 174b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn }); 175b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn menu.add("Start!").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { 176b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn @Override public boolean onMenuItemClick(MenuItem item) { 177b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn Intent intent = new Intent(ActivityTestMain.this, SingleUserService.class); 178b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn startService(intent); 179b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn return true; 180b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn } 181b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn }); 182b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn menu.add("Send!").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { 183b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn @Override public boolean onMenuItemClick(MenuItem item) { 1847d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn Intent intent = new Intent(ActivityTestMain.this, SingleUserReceiver.class); 185f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn sendOrderedBroadcast(intent, null, new BroadcastResultReceiver(), 1867d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn null, Activity.RESULT_OK, null, null); 1877d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn return true; 1887d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn } 1897d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn }); 1907d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn menu.add("Call!").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { 1917d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn @Override public boolean onMenuItemClick(MenuItem item) { 1927d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn ContentProviderClient cpl = getContentResolver().acquireContentProviderClient( 1937d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn SingleUserProvider.AUTHORITY); 1947d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn Bundle res = null; 1957d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn try { 1967d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn res = cpl.call("getuser", null, null); 1977d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn } catch (RemoteException e) { 1987d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn } 1997d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn int user = res != null ? res.getInt("user", -1) : -1; 2007d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn Toast.makeText(ActivityTestMain.this, 2017d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn "Provider executed as user " 2027d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn + (user >= 0 ? Integer.toString(user) : "unknown"), 2037d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn Toast.LENGTH_LONG).show(); 2047d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn cpl.release(); 2057d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn return true; 2067d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn } 2077d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn }); 2083992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn menu.add("Send to user 0!").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { 2093992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn @Override public boolean onMenuItemClick(MenuItem item) { 2103992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn Intent intent = new Intent(ActivityTestMain.this, UserTarget.class); 2113992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn sendOrderedBroadcastAsUser(intent, new UserHandle(0), null, 2123992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn new BroadcastResultReceiver(), 2133992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn null, Activity.RESULT_OK, null, null); 2143992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn return true; 2153992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn } 2163992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn }); 2173992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn menu.add("Send to user " + mSecondUser + "!").setOnMenuItemClickListener( 2183992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn new MenuItem.OnMenuItemClickListener() { 2197d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn @Override public boolean onMenuItemClick(MenuItem item) { 220b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn Intent intent = new Intent(ActivityTestMain.this, UserTarget.class); 2213992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn sendOrderedBroadcastAsUser(intent, new UserHandle(mSecondUser), null, 2225ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn new BroadcastResultReceiver(), 2237d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn null, Activity.RESULT_OK, null, null); 224b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn return true; 225b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn } 226b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn }); 2273992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn menu.add("Bind to user 0!").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { 2283992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn @Override public boolean onMenuItemClick(MenuItem item) { 2293992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn Intent intent = new Intent(ActivityTestMain.this, ServiceUserTarget.class); 2303992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn ServiceConnection conn = new ServiceConnection() { 2313992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn @Override 2323992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn public void onServiceConnected(ComponentName name, IBinder service) { 2333992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn Log.i(TAG, "Service connected " + name + " " + service); 2343992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn } 2353992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn @Override 2363992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn public void onServiceDisconnected(ComponentName name) { 2373992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn Log.i(TAG, "Service disconnected " + name); 2383992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn } 2393992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn }; 24045c0924fbbb2bdd38b5d154e2bc440abda4381c4Amith Yamasani if (bindServiceAsUser(intent, conn, Context.BIND_AUTO_CREATE, UserHandle.OWNER)) { 2413992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn mConnections.add(conn); 2423992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn } else { 2433992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn Toast.makeText(ActivityTestMain.this, "Failed to bind", 2443992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn Toast.LENGTH_LONG).show(); 2453992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn } 2463992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn return true; 2473992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn } 2483992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn }); 2493992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn menu.add("Bind to user " + mSecondUser + "!").setOnMenuItemClickListener( 2503992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn new MenuItem.OnMenuItemClickListener() { 2513992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn @Override public boolean onMenuItemClick(MenuItem item) { 2523992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn Intent intent = new Intent(ActivityTestMain.this, ServiceUserTarget.class); 2533992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn ServiceConnection conn = new ServiceConnection() { 2543992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn @Override 2553992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn public void onServiceConnected(ComponentName name, IBinder service) { 2563992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn Log.i(TAG, "Service connected " + name + " " + service); 2573992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn } 2583992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn @Override 2593992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn public void onServiceDisconnected(ComponentName name) { 2603992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn Log.i(TAG, "Service disconnected " + name); 2613992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn } 2623992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn }; 26345c0924fbbb2bdd38b5d154e2bc440abda4381c4Amith Yamasani if (bindServiceAsUser(intent, conn, Context.BIND_AUTO_CREATE, 26445c0924fbbb2bdd38b5d154e2bc440abda4381c4Amith Yamasani new UserHandle(mSecondUser))) { 2653992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn mConnections.add(conn); 2663992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn } else { 2673992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn Toast.makeText(ActivityTestMain.this, "Failed to bind", 2683992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn Toast.LENGTH_LONG).show(); 2693992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn } 2703992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn return true; 2713992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn } 2723992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn }); 273756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn menu.add("Density!").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { 274756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn @Override public boolean onMenuItemClick(MenuItem item) { 275756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn if (mOverrideConfig == null) { 276756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn mOverrideConfig = new Configuration(); 277756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn } 278756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn if (mOverrideConfig.densityDpi == Configuration.DENSITY_DPI_UNDEFINED) { 279756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn mOverrideConfig.densityDpi = (getApplicationContext().getResources() 280756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn .getConfiguration().densityDpi*2)/3; 281756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn } else { 282756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn mOverrideConfig.densityDpi = Configuration.DENSITY_DPI_UNDEFINED; 283756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn } 284756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn recreate(); 285756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn return true; 286756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn } 287756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn }); 288f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn menu.add("HashArray").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { 289f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn @Override public boolean onMenuItemClick(MenuItem item) { 290f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn ArrayMapTests.run(); 291f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn return true; 292f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 293f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn }); 2948a59b7f95f84ecc1f961a57d013ac68743c35d74Dianne Hackborn return true; 2958a59b7f95f84ecc1f961a57d013ac68743c35d74Dianne Hackborn } 2968a59b7f95f84ecc1f961a57d013ac68743c35d74Dianne Hackborn 2978a59b7f95f84ecc1f961a57d013ac68743c35d74Dianne Hackborn @Override 2980c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn protected void onStart() { 2990c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn super.onStart(); 3000c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn buildUi(); 3010c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn } 3020c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn 303756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn @Override 304756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn protected void onSaveInstanceState(Bundle outState) { 305756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn super.onSaveInstanceState(outState); 306756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn if (mOverrideConfig != null) { 307756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn outState.putParcelable(KEY_CONFIGURATION, mOverrideConfig); 308756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn } 309756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn } 310756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn 3113992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn @Override 3123992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn protected void onStop() { 3133992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn super.onStop(); 3143992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn for (ServiceConnection conn : mConnections) { 3153992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn unbindService(conn); 3163992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn } 3173992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn mConnections.clear(); 3183992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn } 3193992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn 3200c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn private View scrollWrap(View view) { 3210c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn ScrollView scroller = new ScrollView(this); 3220c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn scroller.addView(view, new ScrollView.LayoutParams(ScrollView.LayoutParams.MATCH_PARENT, 3230c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn ScrollView.LayoutParams.MATCH_PARENT)); 3240c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn return scroller; 3250c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn } 326f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn 3270c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn private void buildUi() { 328f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn LinearLayout top = new LinearLayout(this); 329f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn top.setOrientation(LinearLayout.VERTICAL); 330f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn 3310c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn List<ActivityManager.RecentTaskInfo> recents = mAm.getRecentTasks(10, 332f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn ActivityManager.RECENT_WITH_EXCLUDED); 333f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn if (recents != null) { 334f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn for (int i=0; i<recents.size(); i++) { 335f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn ActivityManager.RecentTaskInfo r = recents.get(i); 3360c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn ActivityManager.TaskThumbnails tt = mAm.getTaskThumbnails(r.persistentId); 337f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn TextView tv = new TextView(this); 338f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn tv.setText(r.baseIntent.getComponent().flattenToShortString()); 339f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn top.addView(tv, new LinearLayout.LayoutParams( 340f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn LinearLayout.LayoutParams.WRAP_CONTENT, 341f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn LinearLayout.LayoutParams.WRAP_CONTENT)); 342f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn LinearLayout item = new LinearLayout(this); 343f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn item.setOrientation(LinearLayout.HORIZONTAL); 3440c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn addThumbnail(item, tt != null ? tt.mainThumbnail : null, r, tt, -1); 345f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn for (int j=0; j<tt.numSubThumbbails; j++) { 3460c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn addThumbnail(item, tt.getSubThumbnail(j), r, tt, j); 347f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn } 348f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn top.addView(item, new LinearLayout.LayoutParams( 349f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn LinearLayout.LayoutParams.WRAP_CONTENT, 350f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn LinearLayout.LayoutParams.WRAP_CONTENT)); 351f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn } 352f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn } 353f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn 354f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn setContentView(scrollWrap(top)); 355f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn } 356f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn} 357