ActivityTestMain.java revision 79af1dd54c16cde063152922b42c96d72ae9eca8
1/*
2 * Copyright (C) 2011 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.google.android.test.activity;
18
19import java.util.List;
20
21import android.app.Activity;
22import android.app.ActivityManager;
23import android.app.AlertDialog;
24import android.content.ActivityNotFoundException;
25import android.content.BroadcastReceiver;
26import android.content.ComponentName;
27import android.content.ContentProviderClient;
28import android.content.Intent;
29import android.content.ServiceConnection;
30import android.os.Bundle;
31import android.os.IBinder;
32import android.os.RemoteException;
33import android.os.UserHandle;
34import android.graphics.Bitmap;
35import android.widget.ImageView;
36import android.widget.LinearLayout;
37import android.widget.TextView;
38import android.widget.ScrollView;
39import android.widget.Toast;
40import android.view.Menu;
41import android.view.MenuItem;
42import android.view.View;
43import android.content.Context;
44import android.content.res.Configuration;
45import android.util.Log;
46
47public class ActivityTestMain extends Activity {
48    static final String TAG = "ActivityTest";
49
50    static final String KEY_CONFIGURATION = "configuration";
51
52    ActivityManager mAm;
53    Configuration mOverrideConfig;
54
55    class BroadcastResultReceiver extends BroadcastReceiver {
56        @Override
57        public void onReceive(Context context, Intent intent) {
58            Bundle res = getResultExtras(true);
59            int user = res.getInt("user", -1);
60            Toast.makeText(ActivityTestMain.this,
61                    "Receiver executed as user "
62                    + (user >= 0 ? Integer.toString(user) : "unknown"),
63                    Toast.LENGTH_LONG).show();
64        }
65    }
66
67    private void addThumbnail(LinearLayout container, Bitmap bm,
68            final ActivityManager.RecentTaskInfo task,
69            final ActivityManager.TaskThumbnails thumbs, final int subIndex) {
70        ImageView iv = new ImageView(this);
71        if (bm != null) {
72            iv.setImageBitmap(bm);
73        }
74        iv.setBackgroundResource(android.R.drawable.gallery_thumb);
75        int w = getResources().getDimensionPixelSize(android.R.dimen.thumbnail_width);
76        int h = getResources().getDimensionPixelSize(android.R.dimen.thumbnail_height);
77        container.addView(iv, new LinearLayout.LayoutParams(w, h));
78
79        iv.setOnClickListener(new View.OnClickListener() {
80            @Override
81            public void onClick(View v) {
82                if (task.id >= 0 && thumbs != null) {
83                    if (subIndex < (thumbs.numSubThumbbails-1)) {
84                        mAm.removeSubTask(task.id, subIndex+1);
85                    }
86                    mAm.moveTaskToFront(task.id, ActivityManager.MOVE_TASK_WITH_HOME);
87                } else {
88                    try {
89                        startActivity(task.baseIntent);
90                    } catch (ActivityNotFoundException e) {
91                        Log.w("foo", "Unable to start task: " + e);
92                    }
93                }
94                buildUi();
95            }
96        });
97        iv.setOnLongClickListener(new View.OnLongClickListener() {
98            @Override
99            public boolean onLongClick(View v) {
100                if (task.id >= 0 && thumbs != null) {
101                    if (subIndex < 0) {
102                        mAm.removeTask(task.id, ActivityManager.REMOVE_TASK_KILL_PROCESS);
103                    } else {
104                        mAm.removeSubTask(task.id, subIndex);
105                    }
106                    buildUi();
107                    return true;
108                }
109                return false;
110            }
111        });
112    }
113
114    @Override
115    protected void onCreate(Bundle savedInstanceState) {
116        super.onCreate(savedInstanceState);
117
118        mAm = (ActivityManager)getSystemService(ACTIVITY_SERVICE);
119        if (savedInstanceState != null) {
120            mOverrideConfig = savedInstanceState.getParcelable(KEY_CONFIGURATION);
121            if (mOverrideConfig != null) {
122                applyOverrideConfiguration(mOverrideConfig);
123            }
124        }
125    }
126
127    @Override
128    public boolean onCreateOptionsMenu(Menu menu) {
129        menu.add("Animate!").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
130            @Override public boolean onMenuItemClick(MenuItem item) {
131                AlertDialog.Builder builder = new AlertDialog.Builder(ActivityTestMain.this,
132                        R.style.SlowDialog);
133                builder.setTitle("This is a title");
134                builder.show();
135                return true;
136            }
137        });
138        menu.add("Bind!").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
139            @Override public boolean onMenuItemClick(MenuItem item) {
140                Intent intent = new Intent(ActivityTestMain.this, SingleUserService.class);
141                ServiceConnection conn = new ServiceConnection() {
142                    @Override
143                    public void onServiceConnected(ComponentName name, IBinder service) {
144                        Log.i(TAG, "Service connected " + name + " " + service);
145                    }
146                    @Override
147                    public void onServiceDisconnected(ComponentName name) {
148                        Log.i(TAG, "Service disconnected " + name);
149                    }
150                };
151                bindService(intent, conn, Context.BIND_AUTO_CREATE);
152                return true;
153            }
154        });
155        menu.add("Start!").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
156            @Override public boolean onMenuItemClick(MenuItem item) {
157                Intent intent = new Intent(ActivityTestMain.this, SingleUserService.class);
158                startService(intent);
159                return true;
160            }
161        });
162        menu.add("Send!").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
163            @Override public boolean onMenuItemClick(MenuItem item) {
164                Intent intent = new Intent(ActivityTestMain.this, SingleUserReceiver.class);
165                sendOrderedBroadcast(intent, null, new BroadcastResultReceiver(),
166                        null, Activity.RESULT_OK, null, null);
167                return true;
168            }
169        });
170        menu.add("Call!").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
171            @Override public boolean onMenuItemClick(MenuItem item) {
172                ContentProviderClient cpl = getContentResolver().acquireContentProviderClient(
173                        SingleUserProvider.AUTHORITY);
174                Bundle res = null;
175                try {
176                    res = cpl.call("getuser", null, null);
177                } catch (RemoteException e) {
178                }
179                int user = res != null ? res.getInt("user", -1) : -1;
180                Toast.makeText(ActivityTestMain.this,
181                        "Provider executed as user "
182                        + (user >= 0 ? Integer.toString(user) : "unknown"),
183                        Toast.LENGTH_LONG).show();
184                cpl.release();
185                return true;
186            }
187        });
188        menu.add("Send to user 1!").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
189            @Override public boolean onMenuItemClick(MenuItem item) {
190                Intent intent = new Intent(ActivityTestMain.this, UserTarget.class);
191                sendOrderedBroadcastAsUser(intent, new UserHandle(1), new BroadcastResultReceiver(),
192                        null, Activity.RESULT_OK, null, null);
193                return true;
194            }
195        });
196        menu.add("Density!").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
197            @Override public boolean onMenuItemClick(MenuItem item) {
198                if (mOverrideConfig == null) {
199                    mOverrideConfig = new Configuration();
200                }
201                if (mOverrideConfig.densityDpi == Configuration.DENSITY_DPI_UNDEFINED) {
202                    mOverrideConfig.densityDpi = (getApplicationContext().getResources()
203                            .getConfiguration().densityDpi*2)/3;
204                } else {
205                    mOverrideConfig.densityDpi = Configuration.DENSITY_DPI_UNDEFINED;
206                }
207                recreate();
208                return true;
209            }
210        });
211        return true;
212    }
213
214    @Override
215    protected void onStart() {
216        super.onStart();
217        buildUi();
218    }
219
220    @Override
221    protected void onSaveInstanceState(Bundle outState) {
222        super.onSaveInstanceState(outState);
223        if (mOverrideConfig != null) {
224            outState.putParcelable(KEY_CONFIGURATION, mOverrideConfig);
225        }
226    }
227
228    private View scrollWrap(View view) {
229        ScrollView scroller = new ScrollView(this);
230        scroller.addView(view, new ScrollView.LayoutParams(ScrollView.LayoutParams.MATCH_PARENT,
231                ScrollView.LayoutParams.MATCH_PARENT));
232        return scroller;
233    }
234
235    private void buildUi() {
236        LinearLayout top = new LinearLayout(this);
237        top.setOrientation(LinearLayout.VERTICAL);
238
239        List<ActivityManager.RecentTaskInfo> recents = mAm.getRecentTasks(10,
240                ActivityManager.RECENT_WITH_EXCLUDED);
241        if (recents != null) {
242            for (int i=0; i<recents.size(); i++) {
243                ActivityManager.RecentTaskInfo r = recents.get(i);
244                ActivityManager.TaskThumbnails tt = mAm.getTaskThumbnails(r.persistentId);
245                TextView tv = new TextView(this);
246                tv.setText(r.baseIntent.getComponent().flattenToShortString());
247                top.addView(tv, new LinearLayout.LayoutParams(
248                        LinearLayout.LayoutParams.WRAP_CONTENT,
249                        LinearLayout.LayoutParams.WRAP_CONTENT));
250                LinearLayout item = new LinearLayout(this);
251                item.setOrientation(LinearLayout.HORIZONTAL);
252                addThumbnail(item, tt != null ? tt.mainThumbnail : null, r, tt, -1);
253                for (int j=0; j<tt.numSubThumbbails; j++) {
254                    addThumbnail(item, tt.getSubThumbnail(j), r, tt, j);
255                }
256                top.addView(item, new LinearLayout.LayoutParams(
257                        LinearLayout.LayoutParams.WRAP_CONTENT,
258                        LinearLayout.LayoutParams.WRAP_CONTENT));
259            }
260        }
261
262        setContentView(scrollWrap(top));
263    }
264}
265