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;
253d1933c45fe9ba2389ebd166d96abeceab1971d1Dianne Hackbornimport android.app.AlarmManager;
268a59b7f95f84ecc1f961a57d013ac68743c35d74Dianne Hackbornimport android.app.AlertDialog;
27b5a380d409a1431a38db978864b9d85b689e3cceDianne Hackbornimport android.app.PendingIntent;
280c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackbornimport android.content.ActivityNotFoundException;
297d19e0242faac8017033dabb872cdf1542fa184cDianne Hackbornimport android.content.BroadcastReceiver;
30b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackbornimport android.content.ComponentName;
317d19e0242faac8017033dabb872cdf1542fa184cDianne Hackbornimport android.content.ContentProviderClient;
32b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackbornimport android.content.Intent;
33b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackbornimport android.content.ServiceConnection;
34aec68bb89fe614181a20eb97340149406218ce2fDianne Hackbornimport android.graphics.BitmapFactory;
351958e5e7870579337f1d1d3e6c6fae096ba3abb9Dianne Hackbornimport android.net.Uri;
36f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackbornimport android.os.Bundle;
3789ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackbornimport android.os.Handler;
38b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackbornimport android.os.IBinder;
3989ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackbornimport android.os.Message;
401958e5e7870579337f1d1d3e6c6fae096ba3abb9Dianne Hackbornimport android.os.PowerManager;
417d19e0242faac8017033dabb872cdf1542fa184cDianne Hackbornimport android.os.RemoteException;
423d1933c45fe9ba2389ebd166d96abeceab1971d1Dianne Hackbornimport android.os.SystemClock;
4379af1dd54c16cde063152922b42c96d72ae9eca8Dianne Hackbornimport android.os.UserHandle;
443992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackbornimport android.os.UserManager;
45f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackbornimport android.graphics.Bitmap;
461958e5e7870579337f1d1d3e6c6fae096ba3abb9Dianne Hackbornimport android.provider.Settings;
47f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackbornimport android.widget.ImageView;
48f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackbornimport android.widget.LinearLayout;
49f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackbornimport android.widget.TextView;
50f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackbornimport android.widget.ScrollView;
517d19e0242faac8017033dabb872cdf1542fa184cDianne Hackbornimport android.widget.Toast;
528a59b7f95f84ecc1f961a57d013ac68743c35d74Dianne Hackbornimport android.view.Menu;
538a59b7f95f84ecc1f961a57d013ac68743c35d74Dianne Hackbornimport android.view.MenuItem;
54f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackbornimport android.view.View;
55f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackbornimport android.content.Context;
563992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackbornimport android.content.pm.UserInfo;
57756220bd1912535840388a6743830d2e59ad4964Dianne Hackbornimport android.content.res.Configuration;
58f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackbornimport android.util.Log;
59f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn
60e4de5a0d3b6e0c897c1cea0912b58e11db962365Xiaohui Chen
61f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackbornpublic class ActivityTestMain extends Activity {
62b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn    static final String TAG = "ActivityTest";
63b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn
64756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn    static final String KEY_CONFIGURATION = "configuration";
65756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn
660c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn    ActivityManager mAm;
671958e5e7870579337f1d1d3e6c6fae096ba3abb9Dianne Hackborn    PowerManager mPower;
683d1933c45fe9ba2389ebd166d96abeceab1971d1Dianne Hackborn    AlarmManager mAlarm;
69756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn    Configuration mOverrideConfig;
703992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn    int mSecondUser;
713992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn
723992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn    ArrayList<ServiceConnection> mConnections = new ArrayList<ServiceConnection>();
730c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn
74875e464e362c1e5527c5830c107c7ef84ecfbf0dDianne Hackborn    ServiceConnection mIsolatedConnection;
75875e464e362c1e5527c5830c107c7ef84ecfbf0dDianne Hackborn
7689ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn    static final int MSG_SPAM = 1;
773d1933c45fe9ba2389ebd166d96abeceab1971d1Dianne Hackborn    static final int MSG_SPAM_ALARM = 2;
7889ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn
7989ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn    final Handler mHandler = new Handler() {
8089ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn        @Override
8189ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn        public void handleMessage(Message msg) {
8289ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn            switch (msg.what) {
8389ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn                case MSG_SPAM: {
8489ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn                    boolean fg = msg.arg1 != 0;
8589ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn                    Intent intent = new Intent(ActivityTestMain.this, SpamActivity.class);
8689ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn                    Bundle options = null;
8789ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn                    if (fg) {
880321573fa7583cd2ac4ece015c2eb784e3b24eb8Craig Mautner                        ActivityOptions opts = ActivityOptions.makeTaskLaunchBehind();
8989ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn                        options = opts.toBundle();
9089ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn                    }
9189ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn                    startActivity(intent, options);
9289ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn                    scheduleSpam(!fg);
9389ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn                } break;
943d1933c45fe9ba2389ebd166d96abeceab1971d1Dianne Hackborn                case MSG_SPAM_ALARM: {
953d1933c45fe9ba2389ebd166d96abeceab1971d1Dianne Hackborn                    long when = SystemClock.elapsedRealtime();
963d1933c45fe9ba2389ebd166d96abeceab1971d1Dianne Hackborn                    Intent intent = new Intent(ActivityTestMain.this, AlarmSpamReceiver.class);
973d1933c45fe9ba2389ebd166d96abeceab1971d1Dianne Hackborn                    intent.setAction("com.example.SPAM_ALARM=" + when);
983d1933c45fe9ba2389ebd166d96abeceab1971d1Dianne Hackborn                    PendingIntent pi = PendingIntent.getBroadcast(ActivityTestMain.this,
993d1933c45fe9ba2389ebd166d96abeceab1971d1Dianne Hackborn                            0, intent, 0);
1003d1933c45fe9ba2389ebd166d96abeceab1971d1Dianne Hackborn                    mAlarm.setAndAllowWhileIdle(AlarmManager.ELAPSED_REALTIME, when+(30*1000), pi);
1013d1933c45fe9ba2389ebd166d96abeceab1971d1Dianne Hackborn                    scheduleSpamAlarm(30*1000);
1023d1933c45fe9ba2389ebd166d96abeceab1971d1Dianne Hackborn                } break;
10389ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn            }
10489ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn            super.handleMessage(msg);
10589ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn        }
10689ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn    };
10789ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn
1087d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn    class BroadcastResultReceiver extends BroadcastReceiver {
1097d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn        @Override
1107d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn        public void onReceive(Context context, Intent intent) {
1117d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn            Bundle res = getResultExtras(true);
1127d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn            int user = res.getInt("user", -1);
1137d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn            Toast.makeText(ActivityTestMain.this,
1147d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn                    "Receiver executed as user "
1157d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn                    + (user >= 0 ? Integer.toString(user) : "unknown"),
1167d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn                    Toast.LENGTH_LONG).show();
1177d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn        }
1187d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn    }
1197d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn
1200c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn    private void addThumbnail(LinearLayout container, Bitmap bm,
1210c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn            final ActivityManager.RecentTaskInfo task,
122c0ffce5ddd6446f1d46a49cdfaeda4a2ce408e1dCraig Mautner            final ActivityManager.TaskThumbnail thumbs) {
123f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn        ImageView iv = new ImageView(this);
124f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn        if (bm != null) {
125f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn            iv.setImageBitmap(bm);
126f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn        }
127f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn        iv.setBackgroundResource(android.R.drawable.gallery_thumb);
128f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn        int w = getResources().getDimensionPixelSize(android.R.dimen.thumbnail_width);
129f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn        int h = getResources().getDimensionPixelSize(android.R.dimen.thumbnail_height);
130f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn        container.addView(iv, new LinearLayout.LayoutParams(w, h));
1310c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn
1320c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn        iv.setOnClickListener(new View.OnClickListener() {
1330c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn            @Override
1340c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn            public void onClick(View v) {
1350c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn                if (task.id >= 0 && thumbs != null) {
1360c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn                    mAm.moveTaskToFront(task.id, ActivityManager.MOVE_TASK_WITH_HOME);
1370c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn                } else {
1380c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn                    try {
1390c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn                        startActivity(task.baseIntent);
1400c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn                    } catch (ActivityNotFoundException e) {
1410c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn                        Log.w("foo", "Unable to start task: " + e);
1420c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn                    }
1430c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn                }
1440c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn                buildUi();
1450c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn            }
1460c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn        });
1470c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn        iv.setOnLongClickListener(new View.OnLongClickListener() {
1480c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn            @Override
1490c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn            public boolean onLongClick(View v) {
1500c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn                if (task.id >= 0 && thumbs != null) {
151d54b578e47fb410c776bb3a4272c2c523153f657Wale Ogunwale                    mAm.removeTask(task.id);
1520c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn                    buildUi();
1530c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn                    return true;
1540c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn                }
1550c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn                return false;
1560c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn            }
1570c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn        });
158f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn    }
159f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn
160f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn    @Override
161f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn    protected void onCreate(Bundle savedInstanceState) {
162f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn        super.onCreate(savedInstanceState);
163f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn
16485d558cd486d195aabfc4b43cff8f338126f60a5Dianne Hackborn        Log.i(TAG, "Referrer: " + getReferrer());
16585d558cd486d195aabfc4b43cff8f338126f60a5Dianne Hackborn
1661958e5e7870579337f1d1d3e6c6fae096ba3abb9Dianne Hackborn        mAm = getSystemService(ActivityManager.class);
1671958e5e7870579337f1d1d3e6c6fae096ba3abb9Dianne Hackborn        mPower = getSystemService(PowerManager.class);
1681958e5e7870579337f1d1d3e6c6fae096ba3abb9Dianne Hackborn        mAlarm = getSystemService(AlarmManager.class);
169756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn        if (savedInstanceState != null) {
170756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn            mOverrideConfig = savedInstanceState.getParcelable(KEY_CONFIGURATION);
171756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn            if (mOverrideConfig != null) {
172756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn                applyOverrideConfiguration(mOverrideConfig);
173756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn            }
174756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn        }
1753992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn
1763992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn        UserManager um = (UserManager)getSystemService(Context.USER_SERVICE);
1773992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn        List<UserInfo> users = um.getUsers();
1783992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn        mSecondUser = Integer.MAX_VALUE;
1793992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn        for (UserInfo ui : users) {
1803992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn            if (ui.id != 0 && mSecondUser > ui.id) {
1813992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn                mSecondUser = ui.id;
1823992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn            }
1833992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn        }
18415ed2754a308546a54ab1061b4e365d6fe9b898dDianne Hackborn
18515ed2754a308546a54ab1061b4e365d6fe9b898dDianne Hackborn        /*
18615ed2754a308546a54ab1061b4e365d6fe9b898dDianne Hackborn        AlertDialog ad = new AlertDialog.Builder(this).setTitle("title").setMessage("message").create();
18715ed2754a308546a54ab1061b4e365d6fe9b898dDianne Hackborn        ad.getWindow().getAttributes().type = WindowManager.LayoutParams.TYPE_SYSTEM_ERROR;
18815ed2754a308546a54ab1061b4e365d6fe9b898dDianne Hackborn        ad.show();
18915ed2754a308546a54ab1061b4e365d6fe9b898dDianne Hackborn        */
1900c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn    }
1910c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn
1920c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn    @Override
1938a59b7f95f84ecc1f961a57d013ac68743c35d74Dianne Hackborn    public boolean onCreateOptionsMenu(Menu menu) {
1948a59b7f95f84ecc1f961a57d013ac68743c35d74Dianne Hackborn        menu.add("Animate!").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
19589ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn            @Override
19689ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn            public boolean onMenuItemClick(MenuItem item) {
1978a59b7f95f84ecc1f961a57d013ac68743c35d74Dianne Hackborn                AlertDialog.Builder builder = new AlertDialog.Builder(ActivityTestMain.this,
1988a59b7f95f84ecc1f961a57d013ac68743c35d74Dianne Hackborn                        R.style.SlowDialog);
1998a59b7f95f84ecc1f961a57d013ac68743c35d74Dianne Hackborn                builder.setTitle("This is a title");
2008a59b7f95f84ecc1f961a57d013ac68743c35d74Dianne Hackborn                builder.show();
2018a59b7f95f84ecc1f961a57d013ac68743c35d74Dianne Hackborn                return true;
2028a59b7f95f84ecc1f961a57d013ac68743c35d74Dianne Hackborn            }
2038a59b7f95f84ecc1f961a57d013ac68743c35d74Dianne Hackborn        });
204b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn        menu.add("Bind!").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
205b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn            @Override public boolean onMenuItemClick(MenuItem item) {
206b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn                Intent intent = new Intent(ActivityTestMain.this, SingleUserService.class);
207b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn                ServiceConnection conn = new ServiceConnection() {
208b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn                    @Override
209b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn                    public void onServiceConnected(ComponentName name, IBinder service) {
210b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn                        Log.i(TAG, "Service connected " + name + " " + service);
211b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn                    }
212b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn                    @Override
213b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn                    public void onServiceDisconnected(ComponentName name) {
214b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn                        Log.i(TAG, "Service disconnected " + name);
215b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn                    }
216b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn                };
2173992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn                if (bindService(intent, conn, Context.BIND_AUTO_CREATE)) {
2183992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn                    mConnections.add(conn);
2193992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn                } else {
2203992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn                    Toast.makeText(ActivityTestMain.this, "Failed to bind",
2213992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn                            Toast.LENGTH_LONG).show();
2223992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn                }
223b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn                return true;
224b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn            }
225b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn        });
226b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn        menu.add("Start!").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
227b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn            @Override public boolean onMenuItemClick(MenuItem item) {
228b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn                Intent intent = new Intent(ActivityTestMain.this, SingleUserService.class);
229b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn                startService(intent);
230b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn                return true;
231b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn            }
232b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn        });
233875e464e362c1e5527c5830c107c7ef84ecfbf0dDianne Hackborn        menu.add("Rebind Isolated!").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
234875e464e362c1e5527c5830c107c7ef84ecfbf0dDianne Hackborn            @Override public boolean onMenuItemClick(MenuItem item) {
235875e464e362c1e5527c5830c107c7ef84ecfbf0dDianne Hackborn                Intent intent = new Intent(ActivityTestMain.this, IsolatedService.class);
236875e464e362c1e5527c5830c107c7ef84ecfbf0dDianne Hackborn                ServiceConnection conn = new ServiceConnection() {
237875e464e362c1e5527c5830c107c7ef84ecfbf0dDianne Hackborn                    @Override
238875e464e362c1e5527c5830c107c7ef84ecfbf0dDianne Hackborn                    public void onServiceConnected(ComponentName name, IBinder service) {
239875e464e362c1e5527c5830c107c7ef84ecfbf0dDianne Hackborn                        Log.i(TAG, "Isolated service connected " + name + " " + service);
240875e464e362c1e5527c5830c107c7ef84ecfbf0dDianne Hackborn                    }
241875e464e362c1e5527c5830c107c7ef84ecfbf0dDianne Hackborn                    @Override
242875e464e362c1e5527c5830c107c7ef84ecfbf0dDianne Hackborn                    public void onServiceDisconnected(ComponentName name) {
243875e464e362c1e5527c5830c107c7ef84ecfbf0dDianne Hackborn                        Log.i(TAG, "Isolated service disconnected " + name);
244875e464e362c1e5527c5830c107c7ef84ecfbf0dDianne Hackborn                    }
245875e464e362c1e5527c5830c107c7ef84ecfbf0dDianne Hackborn                };
246875e464e362c1e5527c5830c107c7ef84ecfbf0dDianne Hackborn                if (mIsolatedConnection != null) {
247875e464e362c1e5527c5830c107c7ef84ecfbf0dDianne Hackborn                    Log.i(TAG, "Unbinding existing service: " + mIsolatedConnection);
248875e464e362c1e5527c5830c107c7ef84ecfbf0dDianne Hackborn                    unbindService(mIsolatedConnection);
249875e464e362c1e5527c5830c107c7ef84ecfbf0dDianne Hackborn                    mIsolatedConnection = null;
250875e464e362c1e5527c5830c107c7ef84ecfbf0dDianne Hackborn                }
251875e464e362c1e5527c5830c107c7ef84ecfbf0dDianne Hackborn                Log.i(TAG, "Binding new service: " + conn);
252875e464e362c1e5527c5830c107c7ef84ecfbf0dDianne Hackborn                if (bindService(intent, conn, Context.BIND_AUTO_CREATE)) {
253875e464e362c1e5527c5830c107c7ef84ecfbf0dDianne Hackborn                    mIsolatedConnection = conn;
254875e464e362c1e5527c5830c107c7ef84ecfbf0dDianne Hackborn                } else {
255875e464e362c1e5527c5830c107c7ef84ecfbf0dDianne Hackborn                    Toast.makeText(ActivityTestMain.this, "Failed to bind",
256875e464e362c1e5527c5830c107c7ef84ecfbf0dDianne Hackborn                            Toast.LENGTH_LONG).show();
257875e464e362c1e5527c5830c107c7ef84ecfbf0dDianne Hackborn                }
258875e464e362c1e5527c5830c107c7ef84ecfbf0dDianne Hackborn                return true;
259875e464e362c1e5527c5830c107c7ef84ecfbf0dDianne Hackborn            }
260875e464e362c1e5527c5830c107c7ef84ecfbf0dDianne Hackborn        });
261b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn        menu.add("Send!").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
262b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn            @Override public boolean onMenuItemClick(MenuItem item) {
2637d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn                Intent intent = new Intent(ActivityTestMain.this, SingleUserReceiver.class);
264f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn                sendOrderedBroadcast(intent, null, new BroadcastResultReceiver(),
2657d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn                        null, Activity.RESULT_OK, null, null);
2667d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn                return true;
2677d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn            }
2687d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn        });
2697d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn        menu.add("Call!").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
2707d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn            @Override public boolean onMenuItemClick(MenuItem item) {
2717d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn                ContentProviderClient cpl = getContentResolver().acquireContentProviderClient(
2727d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn                        SingleUserProvider.AUTHORITY);
2737d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn                Bundle res = null;
2747d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn                try {
2757d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn                    res = cpl.call("getuser", null, null);
2767d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn                } catch (RemoteException e) {
2777d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn                }
2787d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn                int user = res != null ? res.getInt("user", -1) : -1;
2797d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn                Toast.makeText(ActivityTestMain.this,
2807d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn                        "Provider executed as user "
2817d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn                        + (user >= 0 ? Integer.toString(user) : "unknown"),
2827d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn                        Toast.LENGTH_LONG).show();
2837d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn                cpl.release();
2847d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn                return true;
2857d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn            }
2867d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn        });
2873992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn        menu.add("Send to user 0!").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
2883992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn            @Override public boolean onMenuItemClick(MenuItem item) {
2893992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn                Intent intent = new Intent(ActivityTestMain.this, UserTarget.class);
2903992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn                sendOrderedBroadcastAsUser(intent, new UserHandle(0), null,
2913992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn                        new BroadcastResultReceiver(),
2923992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn                        null, Activity.RESULT_OK, null, null);
2933992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn                return true;
2943992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn            }
2953992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn        });
2963992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn        menu.add("Send to user " + mSecondUser + "!").setOnMenuItemClickListener(
2973992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn                new MenuItem.OnMenuItemClickListener() {
2987d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn            @Override public boolean onMenuItemClick(MenuItem item) {
299b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn                Intent intent = new Intent(ActivityTestMain.this, UserTarget.class);
3003992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn                sendOrderedBroadcastAsUser(intent, new UserHandle(mSecondUser), null,
301aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn                        new BroadcastResultReceiver(),
3027d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn                        null, Activity.RESULT_OK, null, null);
303b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn                return true;
304b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn            }
305b4163a6e12ee7100c758c6d3d062ade1f2843fceDianne Hackborn        });
3063992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn        menu.add("Bind to user 0!").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
3073992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn            @Override public boolean onMenuItemClick(MenuItem item) {
3083992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn                Intent intent = new Intent(ActivityTestMain.this, ServiceUserTarget.class);
3093992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn                ServiceConnection conn = new ServiceConnection() {
3103992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn                    @Override
3113992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn                    public void onServiceConnected(ComponentName name, IBinder service) {
3123992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn                        Log.i(TAG, "Service connected " + name + " " + service);
3133992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn                    }
3143992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn                    @Override
3153992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn                    public void onServiceDisconnected(ComponentName name) {
3163992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn                        Log.i(TAG, "Service disconnected " + name);
3173992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn                    }
3183992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn                };
319e4de5a0d3b6e0c897c1cea0912b58e11db962365Xiaohui Chen                if (bindServiceAsUser(intent, conn, Context.BIND_AUTO_CREATE, UserHandle.SYSTEM)) {
3203992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn                    mConnections.add(conn);
3213992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn                } else {
3223992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn                    Toast.makeText(ActivityTestMain.this, "Failed to bind",
3233992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn                            Toast.LENGTH_LONG).show();
3243992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn                }
3253992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn                return true;
3263992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn            }
3273992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn        });
3283992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn        menu.add("Bind to user " + mSecondUser + "!").setOnMenuItemClickListener(
3293992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn                new MenuItem.OnMenuItemClickListener() {
3303992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn            @Override public boolean onMenuItemClick(MenuItem item) {
3313992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn                Intent intent = new Intent(ActivityTestMain.this, ServiceUserTarget.class);
3323992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn                ServiceConnection conn = new ServiceConnection() {
3333992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn                    @Override
3343992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn                    public void onServiceConnected(ComponentName name, IBinder service) {
3353992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn                        Log.i(TAG, "Service connected " + name + " " + service);
3363992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn                    }
3373992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn                    @Override
3383992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn                    public void onServiceDisconnected(ComponentName name) {
3393992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn                        Log.i(TAG, "Service disconnected " + name);
3403992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn                    }
3413992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn                };
34245c0924fbbb2bdd38b5d154e2bc440abda4381c4Amith Yamasani                if (bindServiceAsUser(intent, conn, Context.BIND_AUTO_CREATE,
34345c0924fbbb2bdd38b5d154e2bc440abda4381c4Amith Yamasani                        new UserHandle(mSecondUser))) {
3443992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn                    mConnections.add(conn);
3453992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn                } else {
3463992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn                    Toast.makeText(ActivityTestMain.this, "Failed to bind",
3473992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn                            Toast.LENGTH_LONG).show();
3483992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn                }
3493992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn                return true;
3503992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn            }
3513992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn        });
352756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn        menu.add("Density!").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
353756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn            @Override public boolean onMenuItemClick(MenuItem item) {
354756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn                if (mOverrideConfig == null) {
355756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn                    mOverrideConfig = new Configuration();
356756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn                }
357756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn                if (mOverrideConfig.densityDpi == Configuration.DENSITY_DPI_UNDEFINED) {
358756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn                    mOverrideConfig.densityDpi = (getApplicationContext().getResources()
359756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn                            .getConfiguration().densityDpi*2)/3;
360756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn                } else {
361756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn                    mOverrideConfig.densityDpi = Configuration.DENSITY_DPI_UNDEFINED;
362756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn                }
363756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn                recreate();
364756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn                return true;
365756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn            }
366756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn        });
367f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn        menu.add("HashArray").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
368f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn            @Override public boolean onMenuItemClick(MenuItem item) {
369f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn                ArrayMapTests.run();
370f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn                return true;
371f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn            }
372f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn        });
373aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn        menu.add("Add App Recent").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
374aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn            @Override public boolean onMenuItemClick(MenuItem item) {
375aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn                addAppRecents(1);
376aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn                return true;
377aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn            }
378aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn        });
379aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn        menu.add("Add App 10x Recent").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
380aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn            @Override public boolean onMenuItemClick(MenuItem item) {
381aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn                addAppRecents(10);
382aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn                return true;
383aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn            }
384aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn        });
385aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn        menu.add("Exclude!").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
386aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn            @Override public boolean onMenuItemClick(MenuItem item) {
387aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn                setExclude(true);
388aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn                return true;
389aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn            }
390aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn        });
391aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn        menu.add("Include!").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
392aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn            @Override public boolean onMenuItemClick(MenuItem item) {
393aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn                setExclude(false);
394aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn                return true;
395aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn            }
396aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn        });
39789ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn        menu.add("Open Doc").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
39889ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn            @Override public boolean onMenuItemClick(MenuItem item) {
39989ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn                ActivityManager.AppTask task = findDocTask();
40089ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn                if (task == null) {
40189ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn                    Intent intent = new Intent(ActivityTestMain.this, DocActivity.class);
40289ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn                    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT
40389ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn                            | Intent.FLAG_ACTIVITY_MULTIPLE_TASK
40489ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn                            | Intent.FLAG_ACTIVITY_RETAIN_IN_RECENTS);
40589ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn                    startActivity(intent);
40689ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn                } else {
40789ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn                    task.moveToFront();
40889ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn                }
40989ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn                return true;
41089ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn            }
41189ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn        });
41289ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn        menu.add("Stack Doc").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
41389ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn            @Override public boolean onMenuItemClick(MenuItem item) {
41489ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn                ActivityManager.AppTask task = findDocTask();
41589ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn                if (task != null) {
41689ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn                    ActivityManager.RecentTaskInfo recent = task.getTaskInfo();
41789ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn                    Intent intent = new Intent(ActivityTestMain.this, DocActivity.class);
41889ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn                    if (recent.id >= 0) {
41989ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn                        // Stack on top.
42089ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn                        intent.putExtra(DocActivity.LABEL, "Stacked");
42189ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn                    } else {
42289ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn                        // Start root activity.
42389ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn                        intent.putExtra(DocActivity.LABEL, "New Root");
42489ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn                    }
425d7c9289f935992f4ae2fc032747f9e04bb86a7d0Dianne Hackborn                    task.startActivity(ActivityTestMain.this, intent, null);
42689ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn                }
42789ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn                return true;
42889ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn            }
42989ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn        });
43089ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn        menu.add("Spam!").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
43189ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn            @Override public boolean onMenuItemClick(MenuItem item) {
43289ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn                scheduleSpam(false);
43389ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn                return true;
43489ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn            }
43589ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn        });
436b5a380d409a1431a38db978864b9d85b689e3cceDianne Hackborn        menu.add("Track time").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
437b5a380d409a1431a38db978864b9d85b689e3cceDianne Hackborn            @Override public boolean onMenuItemClick(MenuItem item) {
438b5a380d409a1431a38db978864b9d85b689e3cceDianne Hackborn                Intent intent = new Intent(Intent.ACTION_SEND);
439b5a380d409a1431a38db978864b9d85b689e3cceDianne Hackborn                intent.setType("text/plain");
440b5a380d409a1431a38db978864b9d85b689e3cceDianne Hackborn                intent.putExtra(Intent.EXTRA_TEXT, "We are sharing this with you!");
441b5a380d409a1431a38db978864b9d85b689e3cceDianne Hackborn                ActivityOptions options = ActivityOptions.makeBasic();
442b5a380d409a1431a38db978864b9d85b689e3cceDianne Hackborn                Intent receiveIntent = new Intent(ActivityTestMain.this, TrackTimeReceiver.class);
443b5a380d409a1431a38db978864b9d85b689e3cceDianne Hackborn                receiveIntent.putExtra("something", "yeah, this is us!");
444b5a380d409a1431a38db978864b9d85b689e3cceDianne Hackborn                options.requestUsageTimeReport(PendingIntent.getBroadcast(ActivityTestMain.this,
445b5a380d409a1431a38db978864b9d85b689e3cceDianne Hackborn                        0, receiveIntent, PendingIntent.FLAG_CANCEL_CURRENT));
446b5a380d409a1431a38db978864b9d85b689e3cceDianne Hackborn                startActivity(Intent.createChooser(intent, "Who do you love?"), options.toBundle());
447b5a380d409a1431a38db978864b9d85b689e3cceDianne Hackborn                return true;
448b5a380d409a1431a38db978864b9d85b689e3cceDianne Hackborn            }
449b5a380d409a1431a38db978864b9d85b689e3cceDianne Hackborn        });
450e5c42621095a12e7d22ca5ab871dacd28c9bff41Dianne Hackborn        menu.add("Transaction fail").setOnMenuItemClickListener(
451e5c42621095a12e7d22ca5ab871dacd28c9bff41Dianne Hackborn                new MenuItem.OnMenuItemClickListener() {
452e5c42621095a12e7d22ca5ab871dacd28c9bff41Dianne Hackborn            @Override public boolean onMenuItemClick(MenuItem item) {
453e5c42621095a12e7d22ca5ab871dacd28c9bff41Dianne Hackborn                Intent intent = new Intent(Intent.ACTION_MAIN);
4541958e5e7870579337f1d1d3e6c6fae096ba3abb9Dianne Hackborn                intent.putExtra("gulp", new int[1024 * 1024]);
455e5c42621095a12e7d22ca5ab871dacd28c9bff41Dianne Hackborn                startActivity(intent);
456e5c42621095a12e7d22ca5ab871dacd28c9bff41Dianne Hackborn                return true;
457e5c42621095a12e7d22ca5ab871dacd28c9bff41Dianne Hackborn            }
458e5c42621095a12e7d22ca5ab871dacd28c9bff41Dianne Hackborn        });
4593d1933c45fe9ba2389ebd166d96abeceab1971d1Dianne Hackborn        menu.add("Spam idle alarm").setOnMenuItemClickListener(
4603d1933c45fe9ba2389ebd166d96abeceab1971d1Dianne Hackborn                new MenuItem.OnMenuItemClickListener() {
4613d1933c45fe9ba2389ebd166d96abeceab1971d1Dianne Hackborn            @Override public boolean onMenuItemClick(MenuItem item) {
4623d1933c45fe9ba2389ebd166d96abeceab1971d1Dianne Hackborn                scheduleSpamAlarm(0);
4633d1933c45fe9ba2389ebd166d96abeceab1971d1Dianne Hackborn                return true;
4643d1933c45fe9ba2389ebd166d96abeceab1971d1Dianne Hackborn            }
4653d1933c45fe9ba2389ebd166d96abeceab1971d1Dianne Hackborn        });
4661958e5e7870579337f1d1d3e6c6fae096ba3abb9Dianne Hackborn        menu.add("Ignore battery optimizations").setOnMenuItemClickListener(
4671958e5e7870579337f1d1d3e6c6fae096ba3abb9Dianne Hackborn                new MenuItem.OnMenuItemClickListener() {
4681958e5e7870579337f1d1d3e6c6fae096ba3abb9Dianne Hackborn            @Override public boolean onMenuItemClick(MenuItem item) {
469c7b57b1e65b487defad4967cf42cf076b499cbeeDianne Hackborn                Intent intent;
4701958e5e7870579337f1d1d3e6c6fae096ba3abb9Dianne Hackborn                if (!mPower.isIgnoringBatteryOptimizations(getPackageName())) {
471c7b57b1e65b487defad4967cf42cf076b499cbeeDianne Hackborn                    intent = new Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
4721958e5e7870579337f1d1d3e6c6fae096ba3abb9Dianne Hackborn                    intent.setData(Uri.fromParts("package", getPackageName(), null));
473c7b57b1e65b487defad4967cf42cf076b499cbeeDianne Hackborn                } else {
474c7b57b1e65b487defad4967cf42cf076b499cbeeDianne Hackborn                    intent = new Intent(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS);
4751958e5e7870579337f1d1d3e6c6fae096ba3abb9Dianne Hackborn                }
4761958e5e7870579337f1d1d3e6c6fae096ba3abb9Dianne Hackborn                startActivity(intent);
4771958e5e7870579337f1d1d3e6c6fae096ba3abb9Dianne Hackborn                return true;
4781958e5e7870579337f1d1d3e6c6fae096ba3abb9Dianne Hackborn            }
4791958e5e7870579337f1d1d3e6c6fae096ba3abb9Dianne Hackborn        });
4808a59b7f95f84ecc1f961a57d013ac68743c35d74Dianne Hackborn        return true;
4818a59b7f95f84ecc1f961a57d013ac68743c35d74Dianne Hackborn    }
4828a59b7f95f84ecc1f961a57d013ac68743c35d74Dianne Hackborn
4838a59b7f95f84ecc1f961a57d013ac68743c35d74Dianne Hackborn    @Override
4840c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn    protected void onStart() {
4850c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn        super.onStart();
4860c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn        buildUi();
4870c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn    }
4880c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn
489756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn    @Override
490a4e102ee580282dc7abeb22f4a025813e53b9431Dianne Hackborn    protected void onPause() {
491a4e102ee580282dc7abeb22f4a025813e53b9431Dianne Hackborn        super.onPause();
492a4e102ee580282dc7abeb22f4a025813e53b9431Dianne Hackborn        Log.i(TAG, "I'm such a slooow poor loser");
493a4e102ee580282dc7abeb22f4a025813e53b9431Dianne Hackborn        try {
494a4e102ee580282dc7abeb22f4a025813e53b9431Dianne Hackborn            Thread.sleep(500);
495a4e102ee580282dc7abeb22f4a025813e53b9431Dianne Hackborn        } catch (InterruptedException e) {
496a4e102ee580282dc7abeb22f4a025813e53b9431Dianne Hackborn        }
497a4e102ee580282dc7abeb22f4a025813e53b9431Dianne Hackborn        Log.i(TAG, "See?");
498a4e102ee580282dc7abeb22f4a025813e53b9431Dianne Hackborn    }
499a4e102ee580282dc7abeb22f4a025813e53b9431Dianne Hackborn
500a4e102ee580282dc7abeb22f4a025813e53b9431Dianne Hackborn    @Override
501756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn    protected void onSaveInstanceState(Bundle outState) {
502756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn        super.onSaveInstanceState(outState);
503756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn        if (mOverrideConfig != null) {
504756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn            outState.putParcelable(KEY_CONFIGURATION, mOverrideConfig);
505756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn        }
506756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn    }
507756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn
5083992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn    @Override
5093992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn    protected void onStop() {
5103992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn        super.onStop();
5113d1933c45fe9ba2389ebd166d96abeceab1971d1Dianne Hackborn        mHandler.removeMessages(MSG_SPAM_ALARM);
5123992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn        for (ServiceConnection conn : mConnections) {
5133992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn            unbindService(conn);
5143992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn        }
5153992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn        mConnections.clear();
516875e464e362c1e5527c5830c107c7ef84ecfbf0dDianne Hackborn        if (mIsolatedConnection != null) {
517875e464e362c1e5527c5830c107c7ef84ecfbf0dDianne Hackborn            unbindService(mIsolatedConnection);
518875e464e362c1e5527c5830c107c7ef84ecfbf0dDianne Hackborn            mIsolatedConnection = null;
519875e464e362c1e5527c5830c107c7ef84ecfbf0dDianne Hackborn        }
5203992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn    }
5213992645bf333c56669ef2fa19c26b2947884a4f3Dianne Hackborn
52289ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn    @Override
52389ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn    protected void onDestroy() {
52489ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn        super.onDestroy();
52589ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn        mHandler.removeMessages(MSG_SPAM);
52689ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn    }
52789ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn
528aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn    void addAppRecents(int count) {
529aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn        ActivityManager am = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
530aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn        Intent intent = new Intent(Intent.ACTION_MAIN);
531aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn        intent.addCategory(Intent.CATEGORY_LAUNCHER);
532aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
533aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn        intent.setComponent(new ComponentName(this, ActivityTestMain.class));
534aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn        for (int i=0; i<count; i++) {
535aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn            ActivityManager.TaskDescription desc = new ActivityManager.TaskDescription();
536aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn            desc.setLabel("Added #" + i);
537aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn            Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.icon);
538aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn            if ((i&1) == 0) {
539aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn                desc.setIcon(bitmap);
540aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn            }
541aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn            int taskId = am.addAppTask(this, intent, desc, bitmap);
542aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn            Log.i(TAG, "Added new task id #" + taskId);
543aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn        }
544aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn    }
545aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn
546aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn    void setExclude(boolean exclude) {
547aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn        ActivityManager am = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
548aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn        List<ActivityManager.AppTask> tasks = am.getAppTasks();
549aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn        int taskId = getTaskId();
550aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn        for (int i=0; i<tasks.size(); i++) {
551aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn            ActivityManager.AppTask task = tasks.get(i);
552aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn            if (task.getTaskInfo().id == taskId) {
553aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn                task.setExcludeFromRecents(exclude);
554aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn            }
555aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn        }
556aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn    }
55789ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn
55889ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn    ActivityManager.AppTask findDocTask() {
55989ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn        ActivityManager am = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
56089ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn        List<ActivityManager.AppTask> tasks = am.getAppTasks();
56189ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn        if (tasks != null) {
56289ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn            for (int i=0; i<tasks.size(); i++) {
56389ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn                ActivityManager.AppTask task = tasks.get(i);
56489ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn                ActivityManager.RecentTaskInfo recent = task.getTaskInfo();
56589ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn                if (recent.baseIntent != null
56689ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn                        && recent.baseIntent.getComponent().getClassName().equals(
56789ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn                                DocActivity.class.getCanonicalName())) {
56889ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn                    return task;
56989ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn                }
57089ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn            }
57189ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn        }
57289ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn        return null;
57389ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn    }
57489ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn
57589ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn    void scheduleSpam(boolean fg) {
57689ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn        mHandler.removeMessages(MSG_SPAM);
57789ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn        Message msg = mHandler.obtainMessage(MSG_SPAM, fg ? 1 : 0, 0);
57889ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn        mHandler.sendMessageDelayed(msg, 500);
57989ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn    }
58089ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn
5813d1933c45fe9ba2389ebd166d96abeceab1971d1Dianne Hackborn    void scheduleSpamAlarm(long delay) {
5823d1933c45fe9ba2389ebd166d96abeceab1971d1Dianne Hackborn        mHandler.removeMessages(MSG_SPAM_ALARM);
5833d1933c45fe9ba2389ebd166d96abeceab1971d1Dianne Hackborn        Message msg = mHandler.obtainMessage(MSG_SPAM_ALARM);
5843d1933c45fe9ba2389ebd166d96abeceab1971d1Dianne Hackborn        mHandler.sendMessageDelayed(msg, delay);
5853d1933c45fe9ba2389ebd166d96abeceab1971d1Dianne Hackborn    }
5863d1933c45fe9ba2389ebd166d96abeceab1971d1Dianne Hackborn
58789ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn    private View scrollWrap(View view) {
5880c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn        ScrollView scroller = new ScrollView(this);
5890c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn        scroller.addView(view, new ScrollView.LayoutParams(ScrollView.LayoutParams.MATCH_PARENT,
5900c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn                ScrollView.LayoutParams.MATCH_PARENT));
5910c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn        return scroller;
5920c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn    }
593f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn
5940c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn    private void buildUi() {
595f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn        LinearLayout top = new LinearLayout(this);
596f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn        top.setOrientation(LinearLayout.VERTICAL);
597f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn
5980c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn        List<ActivityManager.RecentTaskInfo> recents = mAm.getRecentTasks(10,
599f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn                ActivityManager.RECENT_WITH_EXCLUDED);
600f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn        if (recents != null) {
601f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn            for (int i=0; i<recents.size(); i++) {
602f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn                ActivityManager.RecentTaskInfo r = recents.get(i);
603c0ffce5ddd6446f1d46a49cdfaeda4a2ce408e1dCraig Mautner                ActivityManager.TaskThumbnail tt = mAm.getTaskThumbnail(r.persistentId);
604f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn                TextView tv = new TextView(this);
605f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn                tv.setText(r.baseIntent.getComponent().flattenToShortString());
606f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn                top.addView(tv, new LinearLayout.LayoutParams(
607f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn                        LinearLayout.LayoutParams.WRAP_CONTENT,
608f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn                        LinearLayout.LayoutParams.WRAP_CONTENT));
609f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn                LinearLayout item = new LinearLayout(this);
610f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn                item.setOrientation(LinearLayout.HORIZONTAL);
611c0ffce5ddd6446f1d46a49cdfaeda4a2ce408e1dCraig Mautner                addThumbnail(item, tt != null ? tt.mainThumbnail : null, r, tt);
612f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn                top.addView(item, new LinearLayout.LayoutParams(
613f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn                        LinearLayout.LayoutParams.WRAP_CONTENT,
614f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn                        LinearLayout.LayoutParams.WRAP_CONTENT));
615f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn            }
616f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn        }
617f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn
618f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn        setContentView(scrollWrap(top));
619f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn    }
620f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn}
621