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