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