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