ActivityTestMain.java revision b5a380d409a1431a38db978864b9d85b689e3cce
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; 2489ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackbornimport android.app.ActivityOptions; 258a59b7f95f84ecc1f961a57d013ac68743c35d74Dianne Hackbornimport android.app.AlertDialog; 26b5a380d409a1431a38db978864b9d85b689e3cceDianne Hackbornimport android.app.PendingIntent; 270c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackbornimport android.content.ActivityNotFoundException; 287d19e0242faac8017033dabb872cdf1542fa184cDianne Hackbornimport android.content.BroadcastReceiver; 29b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackbornimport android.content.ComponentName; 307d19e0242faac8017033dabb872cdf1542fa184cDianne Hackbornimport android.content.ContentProviderClient; 31b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackbornimport android.content.Intent; 32b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackbornimport android.content.ServiceConnection; 33aec68bb89fe614181a20eb97340149406218ce2fDianne Hackbornimport android.graphics.BitmapFactory; 34f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackbornimport android.os.Bundle; 3589ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackbornimport android.os.Handler; 36b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackbornimport android.os.IBinder; 3789ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackbornimport android.os.Message; 387d19e0242faac8017033dabb872cdf1542fa184cDianne Hackbornimport android.os.RemoteException; 3979af1dd54c16cde063152922b42c96d72ae9eca8Dianne Hackbornimport android.os.UserHandle; 403992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackbornimport android.os.UserManager; 41f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackbornimport android.graphics.Bitmap; 42f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackbornimport android.widget.ImageView; 43f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackbornimport android.widget.LinearLayout; 44f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackbornimport android.widget.TextView; 45f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackbornimport android.widget.ScrollView; 467d19e0242faac8017033dabb872cdf1542fa184cDianne Hackbornimport android.widget.Toast; 478a59b7f95f84ecc1f961a57d013ac68743c35d74Dianne Hackbornimport android.view.Menu; 488a59b7f95f84ecc1f961a57d013ac68743c35d74Dianne Hackbornimport android.view.MenuItem; 49f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackbornimport android.view.View; 50f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackbornimport android.content.Context; 513992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackbornimport android.content.pm.UserInfo; 52756220bd1912535840388a6743830d2e59ad4964Dianne Hackbornimport android.content.res.Configuration; 53f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackbornimport android.util.Log; 54f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn 55f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackbornpublic class ActivityTestMain extends Activity { 56b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn static final String TAG = "ActivityTest"; 57b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn 58756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn static final String KEY_CONFIGURATION = "configuration"; 59756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn 600c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn ActivityManager mAm; 61756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn Configuration mOverrideConfig; 623992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn int mSecondUser; 633992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn 643992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn ArrayList<ServiceConnection> mConnections = new ArrayList<ServiceConnection>(); 650c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn 66875e464e362c1e5527c5830c107c7ef84ecfbf0dDianne Hackborn ServiceConnection mIsolatedConnection; 67875e464e362c1e5527c5830c107c7ef84ecfbf0dDianne Hackborn 6889ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn static final int MSG_SPAM = 1; 6989ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn 7089ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn final Handler mHandler = new Handler() { 7189ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn @Override 7289ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn public void handleMessage(Message msg) { 7389ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn switch (msg.what) { 7489ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn case MSG_SPAM: { 7589ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn boolean fg = msg.arg1 != 0; 7689ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn Intent intent = new Intent(ActivityTestMain.this, SpamActivity.class); 7789ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn Bundle options = null; 7889ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn if (fg) { 790321573fa7583cd2ac4ece015c2eb784e3b24eb8Craig Mautner ActivityOptions opts = ActivityOptions.makeTaskLaunchBehind(); 8089ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn options = opts.toBundle(); 8189ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn } 8289ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn startActivity(intent, options); 8389ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn scheduleSpam(!fg); 8489ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn } break; 8589ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn } 8689ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn super.handleMessage(msg); 8789ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn } 8889ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn }; 8989ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn 907d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn class BroadcastResultReceiver extends BroadcastReceiver { 917d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn @Override 927d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn public void onReceive(Context context, Intent intent) { 937d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn Bundle res = getResultExtras(true); 947d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn int user = res.getInt("user", -1); 957d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn Toast.makeText(ActivityTestMain.this, 967d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn "Receiver executed as user " 977d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn + (user >= 0 ? Integer.toString(user) : "unknown"), 987d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn Toast.LENGTH_LONG).show(); 997d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn } 1007d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn } 1017d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn 1020c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn private void addThumbnail(LinearLayout container, Bitmap bm, 1030c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn final ActivityManager.RecentTaskInfo task, 104c0ffce5ddd6446f1d46a49cdfaeda4a2ce408e1dCraig Mautner final ActivityManager.TaskThumbnail thumbs) { 105f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn ImageView iv = new ImageView(this); 106f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn if (bm != null) { 107f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn iv.setImageBitmap(bm); 108f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn } 109f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn iv.setBackgroundResource(android.R.drawable.gallery_thumb); 110f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn int w = getResources().getDimensionPixelSize(android.R.dimen.thumbnail_width); 111f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn int h = getResources().getDimensionPixelSize(android.R.dimen.thumbnail_height); 112f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn container.addView(iv, new LinearLayout.LayoutParams(w, h)); 1130c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn 1140c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn iv.setOnClickListener(new View.OnClickListener() { 1150c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn @Override 1160c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn public void onClick(View v) { 1170c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn if (task.id >= 0 && thumbs != null) { 1180c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn mAm.moveTaskToFront(task.id, ActivityManager.MOVE_TASK_WITH_HOME); 1190c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn } else { 1200c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn try { 1210c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn startActivity(task.baseIntent); 1220c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn } catch (ActivityNotFoundException e) { 1230c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn Log.w("foo", "Unable to start task: " + e); 1240c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn } 1250c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn } 1260c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn buildUi(); 1270c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn } 1280c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn }); 1290c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn iv.setOnLongClickListener(new View.OnLongClickListener() { 1300c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn @Override 1310c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn public boolean onLongClick(View v) { 1320c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn if (task.id >= 0 && thumbs != null) { 133d54b578e47fb410c776bb3a4272c2c523153f657Wale Ogunwale mAm.removeTask(task.id); 1340c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn buildUi(); 1350c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn return true; 1360c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn } 1370c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn return false; 1380c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn } 1390c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn }); 140f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn } 141f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn 142f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn @Override 143f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn protected void onCreate(Bundle savedInstanceState) { 144f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn super.onCreate(savedInstanceState); 145f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn 14685d558cd486d195aabfc4b43cff8f338126f60a5Dianne Hackborn Log.i(TAG, "Referrer: " + getReferrer()); 14785d558cd486d195aabfc4b43cff8f338126f60a5Dianne Hackborn 1480c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn mAm = (ActivityManager)getSystemService(ACTIVITY_SERVICE); 149756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn if (savedInstanceState != null) { 150756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn mOverrideConfig = savedInstanceState.getParcelable(KEY_CONFIGURATION); 151756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn if (mOverrideConfig != null) { 152756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn applyOverrideConfiguration(mOverrideConfig); 153756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn } 154756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn } 1553992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn 1563992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn UserManager um = (UserManager)getSystemService(Context.USER_SERVICE); 1573992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn List<UserInfo> users = um.getUsers(); 1583992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn mSecondUser = Integer.MAX_VALUE; 1593992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn for (UserInfo ui : users) { 1603992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn if (ui.id != 0 && mSecondUser > ui.id) { 1613992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn mSecondUser = ui.id; 1623992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn } 1633992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn } 16415ed2754a308546a54ab1061b4e365d6fe9b898dDianne Hackborn 16515ed2754a308546a54ab1061b4e365d6fe9b898dDianne Hackborn /* 16615ed2754a308546a54ab1061b4e365d6fe9b898dDianne Hackborn AlertDialog ad = new AlertDialog.Builder(this).setTitle("title").setMessage("message").create(); 16715ed2754a308546a54ab1061b4e365d6fe9b898dDianne Hackborn ad.getWindow().getAttributes().type = WindowManager.LayoutParams.TYPE_SYSTEM_ERROR; 16815ed2754a308546a54ab1061b4e365d6fe9b898dDianne Hackborn ad.show(); 16915ed2754a308546a54ab1061b4e365d6fe9b898dDianne Hackborn */ 1700c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn } 1710c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn 1720c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn @Override 1738a59b7f95f84ecc1f961a57d013ac68743c35d74Dianne Hackborn public boolean onCreateOptionsMenu(Menu menu) { 1748a59b7f95f84ecc1f961a57d013ac68743c35d74Dianne Hackborn menu.add("Animate!").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { 17589ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn @Override 17689ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn public boolean onMenuItemClick(MenuItem item) { 1778a59b7f95f84ecc1f961a57d013ac68743c35d74Dianne Hackborn AlertDialog.Builder builder = new AlertDialog.Builder(ActivityTestMain.this, 1788a59b7f95f84ecc1f961a57d013ac68743c35d74Dianne Hackborn R.style.SlowDialog); 1798a59b7f95f84ecc1f961a57d013ac68743c35d74Dianne Hackborn builder.setTitle("This is a title"); 1808a59b7f95f84ecc1f961a57d013ac68743c35d74Dianne Hackborn builder.show(); 1818a59b7f95f84ecc1f961a57d013ac68743c35d74Dianne Hackborn return true; 1828a59b7f95f84ecc1f961a57d013ac68743c35d74Dianne Hackborn } 1838a59b7f95f84ecc1f961a57d013ac68743c35d74Dianne Hackborn }); 184b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn menu.add("Bind!").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { 185b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn @Override public boolean onMenuItemClick(MenuItem item) { 186b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn Intent intent = new Intent(ActivityTestMain.this, SingleUserService.class); 187b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn ServiceConnection conn = new ServiceConnection() { 188b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn @Override 189b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn public void onServiceConnected(ComponentName name, IBinder service) { 190b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn Log.i(TAG, "Service connected " + name + " " + service); 191b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn } 192b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn @Override 193b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn public void onServiceDisconnected(ComponentName name) { 194b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn Log.i(TAG, "Service disconnected " + name); 195b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn } 196b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn }; 1973992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn if (bindService(intent, conn, Context.BIND_AUTO_CREATE)) { 1983992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn mConnections.add(conn); 1993992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn } else { 2003992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn Toast.makeText(ActivityTestMain.this, "Failed to bind", 2013992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn Toast.LENGTH_LONG).show(); 2023992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn } 203b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn return true; 204b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn } 205b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn }); 206b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn menu.add("Start!").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { 207b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn @Override public boolean onMenuItemClick(MenuItem item) { 208b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn Intent intent = new Intent(ActivityTestMain.this, SingleUserService.class); 209b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn startService(intent); 210b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn return true; 211b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn } 212b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn }); 213875e464e362c1e5527c5830c107c7ef84ecfbf0dDianne Hackborn menu.add("Rebind Isolated!").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { 214875e464e362c1e5527c5830c107c7ef84ecfbf0dDianne Hackborn @Override public boolean onMenuItemClick(MenuItem item) { 215875e464e362c1e5527c5830c107c7ef84ecfbf0dDianne Hackborn Intent intent = new Intent(ActivityTestMain.this, IsolatedService.class); 216875e464e362c1e5527c5830c107c7ef84ecfbf0dDianne Hackborn ServiceConnection conn = new ServiceConnection() { 217875e464e362c1e5527c5830c107c7ef84ecfbf0dDianne Hackborn @Override 218875e464e362c1e5527c5830c107c7ef84ecfbf0dDianne Hackborn public void onServiceConnected(ComponentName name, IBinder service) { 219875e464e362c1e5527c5830c107c7ef84ecfbf0dDianne Hackborn Log.i(TAG, "Isolated service connected " + name + " " + service); 220875e464e362c1e5527c5830c107c7ef84ecfbf0dDianne Hackborn } 221875e464e362c1e5527c5830c107c7ef84ecfbf0dDianne Hackborn @Override 222875e464e362c1e5527c5830c107c7ef84ecfbf0dDianne Hackborn public void onServiceDisconnected(ComponentName name) { 223875e464e362c1e5527c5830c107c7ef84ecfbf0dDianne Hackborn Log.i(TAG, "Isolated service disconnected " + name); 224875e464e362c1e5527c5830c107c7ef84ecfbf0dDianne Hackborn } 225875e464e362c1e5527c5830c107c7ef84ecfbf0dDianne Hackborn }; 226875e464e362c1e5527c5830c107c7ef84ecfbf0dDianne Hackborn if (mIsolatedConnection != null) { 227875e464e362c1e5527c5830c107c7ef84ecfbf0dDianne Hackborn Log.i(TAG, "Unbinding existing service: " + mIsolatedConnection); 228875e464e362c1e5527c5830c107c7ef84ecfbf0dDianne Hackborn unbindService(mIsolatedConnection); 229875e464e362c1e5527c5830c107c7ef84ecfbf0dDianne Hackborn mIsolatedConnection = null; 230875e464e362c1e5527c5830c107c7ef84ecfbf0dDianne Hackborn } 231875e464e362c1e5527c5830c107c7ef84ecfbf0dDianne Hackborn Log.i(TAG, "Binding new service: " + conn); 232875e464e362c1e5527c5830c107c7ef84ecfbf0dDianne Hackborn if (bindService(intent, conn, Context.BIND_AUTO_CREATE)) { 233875e464e362c1e5527c5830c107c7ef84ecfbf0dDianne Hackborn mIsolatedConnection = conn; 234875e464e362c1e5527c5830c107c7ef84ecfbf0dDianne Hackborn } else { 235875e464e362c1e5527c5830c107c7ef84ecfbf0dDianne Hackborn Toast.makeText(ActivityTestMain.this, "Failed to bind", 236875e464e362c1e5527c5830c107c7ef84ecfbf0dDianne Hackborn Toast.LENGTH_LONG).show(); 237875e464e362c1e5527c5830c107c7ef84ecfbf0dDianne Hackborn } 238875e464e362c1e5527c5830c107c7ef84ecfbf0dDianne Hackborn return true; 239875e464e362c1e5527c5830c107c7ef84ecfbf0dDianne Hackborn } 240875e464e362c1e5527c5830c107c7ef84ecfbf0dDianne Hackborn }); 241b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn menu.add("Send!").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { 242b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn @Override public boolean onMenuItemClick(MenuItem item) { 2437d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn Intent intent = new Intent(ActivityTestMain.this, SingleUserReceiver.class); 244f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn sendOrderedBroadcast(intent, null, new BroadcastResultReceiver(), 2457d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn null, Activity.RESULT_OK, null, null); 2467d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn return true; 2477d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn } 2487d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn }); 2497d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn menu.add("Call!").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { 2507d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn @Override public boolean onMenuItemClick(MenuItem item) { 2517d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn ContentProviderClient cpl = getContentResolver().acquireContentProviderClient( 2527d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn SingleUserProvider.AUTHORITY); 2537d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn Bundle res = null; 2547d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn try { 2557d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn res = cpl.call("getuser", null, null); 2567d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn } catch (RemoteException e) { 2577d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn } 2587d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn int user = res != null ? res.getInt("user", -1) : -1; 2597d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn Toast.makeText(ActivityTestMain.this, 2607d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn "Provider executed as user " 2617d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn + (user >= 0 ? Integer.toString(user) : "unknown"), 2627d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn Toast.LENGTH_LONG).show(); 2637d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn cpl.release(); 2647d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn return true; 2657d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn } 2667d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn }); 2673992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn menu.add("Send to user 0!").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { 2683992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn @Override public boolean onMenuItemClick(MenuItem item) { 2693992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn Intent intent = new Intent(ActivityTestMain.this, UserTarget.class); 2703992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn sendOrderedBroadcastAsUser(intent, new UserHandle(0), null, 2713992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn new BroadcastResultReceiver(), 2723992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn null, Activity.RESULT_OK, null, null); 2733992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn return true; 2743992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn } 2753992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn }); 2763992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn menu.add("Send to user " + mSecondUser + "!").setOnMenuItemClickListener( 2773992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn new MenuItem.OnMenuItemClickListener() { 2787d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn @Override public boolean onMenuItemClick(MenuItem item) { 279b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn Intent intent = new Intent(ActivityTestMain.this, UserTarget.class); 2803992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn sendOrderedBroadcastAsUser(intent, new UserHandle(mSecondUser), null, 281aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn new BroadcastResultReceiver(), 2827d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn null, Activity.RESULT_OK, null, null); 283b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn return true; 284b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn } 285b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn }); 2863992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn menu.add("Bind to user 0!").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { 2873992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn @Override public boolean onMenuItemClick(MenuItem item) { 2883992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn Intent intent = new Intent(ActivityTestMain.this, ServiceUserTarget.class); 2893992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn ServiceConnection conn = new ServiceConnection() { 2903992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn @Override 2913992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn public void onServiceConnected(ComponentName name, IBinder service) { 2923992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn Log.i(TAG, "Service connected " + name + " " + service); 2933992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn } 2943992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn @Override 2953992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn public void onServiceDisconnected(ComponentName name) { 2963992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn Log.i(TAG, "Service disconnected " + name); 2973992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn } 2983992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn }; 29945c0924fbbb2bdd38b5d154e2bc440abda4381c4Amith Yamasani if (bindServiceAsUser(intent, conn, Context.BIND_AUTO_CREATE, UserHandle.OWNER)) { 3003992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn mConnections.add(conn); 3013992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn } else { 3023992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn Toast.makeText(ActivityTestMain.this, "Failed to bind", 3033992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn Toast.LENGTH_LONG).show(); 3043992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn } 3053992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn return true; 3063992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn } 3073992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn }); 3083992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn menu.add("Bind to user " + mSecondUser + "!").setOnMenuItemClickListener( 3093992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn new MenuItem.OnMenuItemClickListener() { 3103992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn @Override public boolean onMenuItemClick(MenuItem item) { 3113992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn Intent intent = new Intent(ActivityTestMain.this, ServiceUserTarget.class); 3123992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn ServiceConnection conn = new ServiceConnection() { 3133992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn @Override 3143992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn public void onServiceConnected(ComponentName name, IBinder service) { 3153992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn Log.i(TAG, "Service connected " + name + " " + service); 3163992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn } 3173992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn @Override 3183992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn public void onServiceDisconnected(ComponentName name) { 3193992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn Log.i(TAG, "Service disconnected " + name); 3203992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn } 3213992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn }; 32245c0924fbbb2bdd38b5d154e2bc440abda4381c4Amith Yamasani if (bindServiceAsUser(intent, conn, Context.BIND_AUTO_CREATE, 32345c0924fbbb2bdd38b5d154e2bc440abda4381c4Amith Yamasani new UserHandle(mSecondUser))) { 3243992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn mConnections.add(conn); 3253992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn } else { 3263992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn Toast.makeText(ActivityTestMain.this, "Failed to bind", 3273992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn Toast.LENGTH_LONG).show(); 3283992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn } 3293992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn return true; 3303992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn } 3313992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn }); 332756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn menu.add("Density!").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { 333756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn @Override public boolean onMenuItemClick(MenuItem item) { 334756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn if (mOverrideConfig == null) { 335756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn mOverrideConfig = new Configuration(); 336756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn } 337756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn if (mOverrideConfig.densityDpi == Configuration.DENSITY_DPI_UNDEFINED) { 338756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn mOverrideConfig.densityDpi = (getApplicationContext().getResources() 339756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn .getConfiguration().densityDpi*2)/3; 340756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn } else { 341756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn mOverrideConfig.densityDpi = Configuration.DENSITY_DPI_UNDEFINED; 342756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn } 343756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn recreate(); 344756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn return true; 345756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn } 346756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn }); 347f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn menu.add("HashArray").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { 348f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn @Override public boolean onMenuItemClick(MenuItem item) { 349f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn ArrayMapTests.run(); 350f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn return true; 351f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 352f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn }); 353aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn menu.add("Add App Recent").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { 354aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn @Override public boolean onMenuItemClick(MenuItem item) { 355aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn addAppRecents(1); 356aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn return true; 357aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn } 358aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn }); 359aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn menu.add("Add App 10x Recent").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { 360aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn @Override public boolean onMenuItemClick(MenuItem item) { 361aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn addAppRecents(10); 362aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn return true; 363aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn } 364aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn }); 365aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn menu.add("Exclude!").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { 366aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn @Override public boolean onMenuItemClick(MenuItem item) { 367aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn setExclude(true); 368aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn return true; 369aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn } 370aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn }); 371aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn menu.add("Include!").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { 372aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn @Override public boolean onMenuItemClick(MenuItem item) { 373aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn setExclude(false); 374aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn return true; 375aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn } 376aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn }); 37789ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn menu.add("Open Doc").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { 37889ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn @Override public boolean onMenuItemClick(MenuItem item) { 37989ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn ActivityManager.AppTask task = findDocTask(); 38089ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn if (task == null) { 38189ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn Intent intent = new Intent(ActivityTestMain.this, DocActivity.class); 38289ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn intent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT 38389ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn | Intent.FLAG_ACTIVITY_MULTIPLE_TASK 38489ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn | Intent.FLAG_ACTIVITY_RETAIN_IN_RECENTS); 38589ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn startActivity(intent); 38689ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn } else { 38789ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn task.moveToFront(); 38889ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn } 38989ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn return true; 39089ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn } 39189ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn }); 39289ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn menu.add("Stack Doc").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { 39389ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn @Override public boolean onMenuItemClick(MenuItem item) { 39489ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn ActivityManager.AppTask task = findDocTask(); 39589ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn if (task != null) { 39689ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn ActivityManager.RecentTaskInfo recent = task.getTaskInfo(); 39789ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn Intent intent = new Intent(ActivityTestMain.this, DocActivity.class); 39889ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn if (recent.id >= 0) { 39989ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn // Stack on top. 40089ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn intent.putExtra(DocActivity.LABEL, "Stacked"); 40189ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn } else { 40289ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn // Start root activity. 40389ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn intent.putExtra(DocActivity.LABEL, "New Root"); 40489ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn } 405d7c9289f935992f4ae2fc032747f9e04bb86a7d0Dianne Hackborn task.startActivity(ActivityTestMain.this, intent, null); 40689ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn } 40789ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn return true; 40889ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn } 40989ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn }); 41089ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn menu.add("Spam!").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { 41189ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn @Override public boolean onMenuItemClick(MenuItem item) { 41289ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn scheduleSpam(false); 41389ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn return true; 41489ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn } 41589ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn }); 416b5a380d409a1431a38db978864b9d85b689e3cceDianne Hackborn menu.add("Track time").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { 417b5a380d409a1431a38db978864b9d85b689e3cceDianne Hackborn @Override public boolean onMenuItemClick(MenuItem item) { 418b5a380d409a1431a38db978864b9d85b689e3cceDianne Hackborn Intent intent = new Intent(Intent.ACTION_SEND); 419b5a380d409a1431a38db978864b9d85b689e3cceDianne Hackborn intent.setType("text/plain"); 420b5a380d409a1431a38db978864b9d85b689e3cceDianne Hackborn intent.putExtra(Intent.EXTRA_TEXT, "We are sharing this with you!"); 421b5a380d409a1431a38db978864b9d85b689e3cceDianne Hackborn ActivityOptions options = ActivityOptions.makeBasic(); 422b5a380d409a1431a38db978864b9d85b689e3cceDianne Hackborn Intent receiveIntent = new Intent(ActivityTestMain.this, TrackTimeReceiver.class); 423b5a380d409a1431a38db978864b9d85b689e3cceDianne Hackborn receiveIntent.putExtra("something", "yeah, this is us!"); 424b5a380d409a1431a38db978864b9d85b689e3cceDianne Hackborn options.requestUsageTimeReport(PendingIntent.getBroadcast(ActivityTestMain.this, 425b5a380d409a1431a38db978864b9d85b689e3cceDianne Hackborn 0, receiveIntent, PendingIntent.FLAG_CANCEL_CURRENT)); 426b5a380d409a1431a38db978864b9d85b689e3cceDianne Hackborn startActivity(Intent.createChooser(intent, "Who do you love?"), options.toBundle()); 427b5a380d409a1431a38db978864b9d85b689e3cceDianne Hackborn return true; 428b5a380d409a1431a38db978864b9d85b689e3cceDianne Hackborn } 429b5a380d409a1431a38db978864b9d85b689e3cceDianne Hackborn }); 4308a59b7f95f84ecc1f961a57d013ac68743c35d74Dianne Hackborn return true; 4318a59b7f95f84ecc1f961a57d013ac68743c35d74Dianne Hackborn } 4328a59b7f95f84ecc1f961a57d013ac68743c35d74Dianne Hackborn 4338a59b7f95f84ecc1f961a57d013ac68743c35d74Dianne Hackborn @Override 4340c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn protected void onStart() { 4350c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn super.onStart(); 4360c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn buildUi(); 4370c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn } 4380c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn 439756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn @Override 440a4e102ee580282dc7abeb22f4a025813e53b9431Dianne Hackborn protected void onPause() { 441a4e102ee580282dc7abeb22f4a025813e53b9431Dianne Hackborn super.onPause(); 442a4e102ee580282dc7abeb22f4a025813e53b9431Dianne Hackborn Log.i(TAG, "I'm such a slooow poor loser"); 443a4e102ee580282dc7abeb22f4a025813e53b9431Dianne Hackborn try { 444a4e102ee580282dc7abeb22f4a025813e53b9431Dianne Hackborn Thread.sleep(500); 445a4e102ee580282dc7abeb22f4a025813e53b9431Dianne Hackborn } catch (InterruptedException e) { 446a4e102ee580282dc7abeb22f4a025813e53b9431Dianne Hackborn } 447a4e102ee580282dc7abeb22f4a025813e53b9431Dianne Hackborn Log.i(TAG, "See?"); 448a4e102ee580282dc7abeb22f4a025813e53b9431Dianne Hackborn } 449a4e102ee580282dc7abeb22f4a025813e53b9431Dianne Hackborn 450a4e102ee580282dc7abeb22f4a025813e53b9431Dianne Hackborn @Override 451756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn protected void onSaveInstanceState(Bundle outState) { 452756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn super.onSaveInstanceState(outState); 453756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn if (mOverrideConfig != null) { 454756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn outState.putParcelable(KEY_CONFIGURATION, mOverrideConfig); 455756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn } 456756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn } 457756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn 4583992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn @Override 4593992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn protected void onStop() { 4603992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn super.onStop(); 4613992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn for (ServiceConnection conn : mConnections) { 4623992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn unbindService(conn); 4633992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn } 4643992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn mConnections.clear(); 465875e464e362c1e5527c5830c107c7ef84ecfbf0dDianne Hackborn if (mIsolatedConnection != null) { 466875e464e362c1e5527c5830c107c7ef84ecfbf0dDianne Hackborn unbindService(mIsolatedConnection); 467875e464e362c1e5527c5830c107c7ef84ecfbf0dDianne Hackborn mIsolatedConnection = null; 468875e464e362c1e5527c5830c107c7ef84ecfbf0dDianne Hackborn } 4693992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn } 4703992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn 47189ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn @Override 47289ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn protected void onDestroy() { 47389ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn super.onDestroy(); 47489ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn mHandler.removeMessages(MSG_SPAM); 47589ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn } 47689ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn 477aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn void addAppRecents(int count) { 478aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn ActivityManager am = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE); 479aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn Intent intent = new Intent(Intent.ACTION_MAIN); 480aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn intent.addCategory(Intent.CATEGORY_LAUNCHER); 481aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn intent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT); 482aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn intent.setComponent(new ComponentName(this, ActivityTestMain.class)); 483aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn for (int i=0; i<count; i++) { 484aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn ActivityManager.TaskDescription desc = new ActivityManager.TaskDescription(); 485aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn desc.setLabel("Added #" + i); 486aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.icon); 487aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn if ((i&1) == 0) { 488aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn desc.setIcon(bitmap); 489aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn } 490aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn int taskId = am.addAppTask(this, intent, desc, bitmap); 491aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn Log.i(TAG, "Added new task id #" + taskId); 492aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn } 493aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn } 494aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn 495aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn void setExclude(boolean exclude) { 496aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn ActivityManager am = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE); 497aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn List<ActivityManager.AppTask> tasks = am.getAppTasks(); 498aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn int taskId = getTaskId(); 499aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn for (int i=0; i<tasks.size(); i++) { 500aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn ActivityManager.AppTask task = tasks.get(i); 501aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn if (task.getTaskInfo().id == taskId) { 502aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn task.setExcludeFromRecents(exclude); 503aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn } 504aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn } 505aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn } 50689ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn 50789ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn ActivityManager.AppTask findDocTask() { 50889ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn ActivityManager am = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE); 50989ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn List<ActivityManager.AppTask> tasks = am.getAppTasks(); 51089ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn if (tasks != null) { 51189ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn for (int i=0; i<tasks.size(); i++) { 51289ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn ActivityManager.AppTask task = tasks.get(i); 51389ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn ActivityManager.RecentTaskInfo recent = task.getTaskInfo(); 51489ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn if (recent.baseIntent != null 51589ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn && recent.baseIntent.getComponent().getClassName().equals( 51689ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn DocActivity.class.getCanonicalName())) { 51789ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn return task; 51889ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn } 51989ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn } 52089ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn } 52189ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn return null; 52289ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn } 52389ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn 52489ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn void scheduleSpam(boolean fg) { 52589ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn mHandler.removeMessages(MSG_SPAM); 52689ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn Message msg = mHandler.obtainMessage(MSG_SPAM, fg ? 1 : 0, 0); 52789ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn mHandler.sendMessageDelayed(msg, 500); 52889ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn } 52989ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn 53089ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn private View scrollWrap(View view) { 5310c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn ScrollView scroller = new ScrollView(this); 5320c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn scroller.addView(view, new ScrollView.LayoutParams(ScrollView.LayoutParams.MATCH_PARENT, 5330c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn ScrollView.LayoutParams.MATCH_PARENT)); 5340c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn return scroller; 5350c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn } 536f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn 5370c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn private void buildUi() { 538f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn LinearLayout top = new LinearLayout(this); 539f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn top.setOrientation(LinearLayout.VERTICAL); 540f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn 5410c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn List<ActivityManager.RecentTaskInfo> recents = mAm.getRecentTasks(10, 542f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn ActivityManager.RECENT_WITH_EXCLUDED); 543f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn if (recents != null) { 544f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn for (int i=0; i<recents.size(); i++) { 545f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn ActivityManager.RecentTaskInfo r = recents.get(i); 546c0ffce5ddd6446f1d46a49cdfaeda4a2ce408e1dCraig Mautner ActivityManager.TaskThumbnail tt = mAm.getTaskThumbnail(r.persistentId); 547f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn TextView tv = new TextView(this); 548f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn tv.setText(r.baseIntent.getComponent().flattenToShortString()); 549f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn top.addView(tv, new LinearLayout.LayoutParams( 550f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn LinearLayout.LayoutParams.WRAP_CONTENT, 551f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn LinearLayout.LayoutParams.WRAP_CONTENT)); 552f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn LinearLayout item = new LinearLayout(this); 553f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn item.setOrientation(LinearLayout.HORIZONTAL); 554c0ffce5ddd6446f1d46a49cdfaeda4a2ce408e1dCraig Mautner addThumbnail(item, tt != null ? tt.mainThumbnail : null, r, tt); 555f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn top.addView(item, new LinearLayout.LayoutParams( 556f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn LinearLayout.LayoutParams.WRAP_CONTENT, 557f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn LinearLayout.LayoutParams.WRAP_CONTENT)); 558f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn } 559f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn } 560f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn 561f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn setContentView(scrollWrap(top)); 562f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn } 563f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn} 564