OSDN Git Service

Fix test build failure
[android-x86/frameworks-base.git] / tests / ActivityTests / src / com / google / android / test / activity / ActivityTestMain.java
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
17 package com.google.android.test.activity;
18
19 import java.util.ArrayList;
20 import java.util.List;
21
22 import android.app.Activity;
23 import android.app.ActivityManager;
24 import android.app.AlertDialog;
25 import android.content.ActivityNotFoundException;
26 import android.content.BroadcastReceiver;
27 import android.content.ComponentName;
28 import android.content.ContentProviderClient;
29 import android.content.Intent;
30 import android.content.ServiceConnection;
31 import android.os.Bundle;
32 import android.os.IBinder;
33 import android.os.RemoteException;
34 import android.os.UserHandle;
35 import android.os.UserManager;
36 import android.graphics.Bitmap;
37 import android.widget.ImageView;
38 import android.widget.LinearLayout;
39 import android.widget.TextView;
40 import android.widget.ScrollView;
41 import android.widget.Toast;
42 import android.view.Menu;
43 import android.view.MenuItem;
44 import android.view.View;
45 import android.content.Context;
46 import android.content.pm.UserInfo;
47 import android.content.res.Configuration;
48 import android.util.Log;
49
50 public class ActivityTestMain extends Activity {
51     static final String TAG = "ActivityTest";
52
53     static final String KEY_CONFIGURATION = "configuration";
54
55     ActivityManager mAm;
56     Configuration mOverrideConfig;
57     int mSecondUser;
58
59     ArrayList<ServiceConnection> mConnections = new ArrayList<ServiceConnection>();
60
61     class BroadcastResultReceiver extends BroadcastReceiver {
62         @Override
63         public void onReceive(Context context, Intent intent) {
64             Bundle res = getResultExtras(true);
65             int user = res.getInt("user", -1);
66             Toast.makeText(ActivityTestMain.this,
67                     "Receiver executed as user "
68                     + (user >= 0 ? Integer.toString(user) : "unknown"),
69                     Toast.LENGTH_LONG).show();
70         }
71     }
72
73     private void addThumbnail(LinearLayout container, Bitmap bm,
74             final ActivityManager.RecentTaskInfo task,
75             final ActivityManager.TaskThumbnails thumbs, final int subIndex) {
76         ImageView iv = new ImageView(this);
77         if (bm != null) {
78             iv.setImageBitmap(bm);
79         }
80         iv.setBackgroundResource(android.R.drawable.gallery_thumb);
81         int w = getResources().getDimensionPixelSize(android.R.dimen.thumbnail_width);
82         int h = getResources().getDimensionPixelSize(android.R.dimen.thumbnail_height);
83         container.addView(iv, new LinearLayout.LayoutParams(w, h));
84
85         iv.setOnClickListener(new View.OnClickListener() {
86             @Override
87             public void onClick(View v) {
88                 if (task.id >= 0 && thumbs != null) {
89                     if (subIndex < (thumbs.numSubThumbbails-1)) {
90                         mAm.removeSubTask(task.id, subIndex+1);
91                     }
92                     mAm.moveTaskToFront(task.id, ActivityManager.MOVE_TASK_WITH_HOME);
93                 } else {
94                     try {
95                         startActivity(task.baseIntent);
96                     } catch (ActivityNotFoundException e) {
97                         Log.w("foo", "Unable to start task: " + e);
98                     }
99                 }
100                 buildUi();
101             }
102         });
103         iv.setOnLongClickListener(new View.OnLongClickListener() {
104             @Override
105             public boolean onLongClick(View v) {
106                 if (task.id >= 0 && thumbs != null) {
107                     if (subIndex < 0) {
108                         mAm.removeTask(task.id, ActivityManager.REMOVE_TASK_KILL_PROCESS);
109                     } else {
110                         mAm.removeSubTask(task.id, subIndex);
111                     }
112                     buildUi();
113                     return true;
114                 }
115                 return false;
116             }
117         });
118     }
119
120     @Override
121     protected void onCreate(Bundle savedInstanceState) {
122         super.onCreate(savedInstanceState);
123
124         mAm = (ActivityManager)getSystemService(ACTIVITY_SERVICE);
125         if (savedInstanceState != null) {
126             mOverrideConfig = savedInstanceState.getParcelable(KEY_CONFIGURATION);
127             if (mOverrideConfig != null) {
128                 applyOverrideConfiguration(mOverrideConfig);
129             }
130         }
131
132         UserManager um = (UserManager)getSystemService(Context.USER_SERVICE);
133         List<UserInfo> users = um.getUsers();
134         mSecondUser = Integer.MAX_VALUE;
135         for (UserInfo ui : users) {
136             if (ui.id != 0 && mSecondUser > ui.id) {
137                 mSecondUser = ui.id;
138             }
139         }
140     }
141
142     @Override
143     public boolean onCreateOptionsMenu(Menu menu) {
144         menu.add("Animate!").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
145             @Override public boolean onMenuItemClick(MenuItem item) {
146                 AlertDialog.Builder builder = new AlertDialog.Builder(ActivityTestMain.this,
147                         R.style.SlowDialog);
148                 builder.setTitle("This is a title");
149                 builder.show();
150                 return true;
151             }
152         });
153         menu.add("Bind!").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
154             @Override public boolean onMenuItemClick(MenuItem item) {
155                 Intent intent = new Intent(ActivityTestMain.this, SingleUserService.class);
156                 ServiceConnection conn = new ServiceConnection() {
157                     @Override
158                     public void onServiceConnected(ComponentName name, IBinder service) {
159                         Log.i(TAG, "Service connected " + name + " " + service);
160                     }
161                     @Override
162                     public void onServiceDisconnected(ComponentName name) {
163                         Log.i(TAG, "Service disconnected " + name);
164                     }
165                 };
166                 if (bindService(intent, conn, Context.BIND_AUTO_CREATE)) {
167                     mConnections.add(conn);
168                 } else {
169                     Toast.makeText(ActivityTestMain.this, "Failed to bind",
170                             Toast.LENGTH_LONG).show();
171                 }
172                 return true;
173             }
174         });
175         menu.add("Start!").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
176             @Override public boolean onMenuItemClick(MenuItem item) {
177                 Intent intent = new Intent(ActivityTestMain.this, SingleUserService.class);
178                 startService(intent);
179                 return true;
180             }
181         });
182         menu.add("Send!").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
183             @Override public boolean onMenuItemClick(MenuItem item) {
184                 Intent intent = new Intent(ActivityTestMain.this, SingleUserReceiver.class);
185                 sendOrderedBroadcast(intent, null, new BroadcastResultReceiver(), 
186                         null, Activity.RESULT_OK, null, null);
187                 return true;
188             }
189         });
190         menu.add("Call!").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
191             @Override public boolean onMenuItemClick(MenuItem item) {
192                 ContentProviderClient cpl = getContentResolver().acquireContentProviderClient(
193                         SingleUserProvider.AUTHORITY);
194                 Bundle res = null;
195                 try {
196                     res = cpl.call("getuser", null, null);
197                 } catch (RemoteException e) {
198                 }
199                 int user = res != null ? res.getInt("user", -1) : -1;
200                 Toast.makeText(ActivityTestMain.this,
201                         "Provider executed as user "
202                         + (user >= 0 ? Integer.toString(user) : "unknown"),
203                         Toast.LENGTH_LONG).show();
204                 cpl.release();
205                 return true;
206             }
207         });
208         menu.add("Send to user 0!").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
209             @Override public boolean onMenuItemClick(MenuItem item) {
210                 Intent intent = new Intent(ActivityTestMain.this, UserTarget.class);
211                 sendOrderedBroadcastAsUser(intent, new UserHandle(0), null,
212                         new BroadcastResultReceiver(),
213                         null, Activity.RESULT_OK, null, null);
214                 return true;
215             }
216         });
217         menu.add("Send to user " + mSecondUser + "!").setOnMenuItemClickListener(
218                 new MenuItem.OnMenuItemClickListener() {
219             @Override public boolean onMenuItemClick(MenuItem item) {
220                 Intent intent = new Intent(ActivityTestMain.this, UserTarget.class);
221                 sendOrderedBroadcastAsUser(intent, new UserHandle(mSecondUser), null,
222                         new BroadcastResultReceiver(), 
223                         null, Activity.RESULT_OK, null, null);
224                 return true;
225             }
226         });
227         menu.add("Bind to user 0!").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
228             @Override public boolean onMenuItemClick(MenuItem item) {
229                 Intent intent = new Intent(ActivityTestMain.this, ServiceUserTarget.class);
230                 ServiceConnection conn = new ServiceConnection() {
231                     @Override
232                     public void onServiceConnected(ComponentName name, IBinder service) {
233                         Log.i(TAG, "Service connected " + name + " " + service);
234                     }
235                     @Override
236                     public void onServiceDisconnected(ComponentName name) {
237                         Log.i(TAG, "Service disconnected " + name);
238                     }
239                 };
240                 if (bindServiceAsUser(intent, conn, Context.BIND_AUTO_CREATE, UserHandle.OWNER)) {
241                     mConnections.add(conn);
242                 } else {
243                     Toast.makeText(ActivityTestMain.this, "Failed to bind",
244                             Toast.LENGTH_LONG).show();
245                 }
246                 return true;
247             }
248         });
249         menu.add("Bind to user " + mSecondUser + "!").setOnMenuItemClickListener(
250                 new MenuItem.OnMenuItemClickListener() {
251             @Override public boolean onMenuItemClick(MenuItem item) {
252                 Intent intent = new Intent(ActivityTestMain.this, ServiceUserTarget.class);
253                 ServiceConnection conn = new ServiceConnection() {
254                     @Override
255                     public void onServiceConnected(ComponentName name, IBinder service) {
256                         Log.i(TAG, "Service connected " + name + " " + service);
257                     }
258                     @Override
259                     public void onServiceDisconnected(ComponentName name) {
260                         Log.i(TAG, "Service disconnected " + name);
261                     }
262                 };
263                 if (bindServiceAsUser(intent, conn, Context.BIND_AUTO_CREATE,
264                         new UserHandle(mSecondUser))) {
265                     mConnections.add(conn);
266                 } else {
267                     Toast.makeText(ActivityTestMain.this, "Failed to bind",
268                             Toast.LENGTH_LONG).show();
269                 }
270                 return true;
271             }
272         });
273         menu.add("Density!").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
274             @Override public boolean onMenuItemClick(MenuItem item) {
275                 if (mOverrideConfig == null) {
276                     mOverrideConfig = new Configuration();
277                 }
278                 if (mOverrideConfig.densityDpi == Configuration.DENSITY_DPI_UNDEFINED) {
279                     mOverrideConfig.densityDpi = (getApplicationContext().getResources()
280                             .getConfiguration().densityDpi*2)/3;
281                 } else {
282                     mOverrideConfig.densityDpi = Configuration.DENSITY_DPI_UNDEFINED;
283                 }
284                 recreate();
285                 return true;
286             }
287         });
288         return true;
289     }
290
291     @Override
292     protected void onStart() {
293         super.onStart();
294         buildUi();
295     }
296
297     @Override
298     protected void onSaveInstanceState(Bundle outState) {
299         super.onSaveInstanceState(outState);
300         if (mOverrideConfig != null) {
301             outState.putParcelable(KEY_CONFIGURATION, mOverrideConfig);
302         }
303     }
304
305     @Override
306     protected void onStop() {
307         super.onStop();
308         for (ServiceConnection conn : mConnections) {
309             unbindService(conn);
310         }
311         mConnections.clear();
312     }
313
314     private View scrollWrap(View view) {
315         ScrollView scroller = new ScrollView(this);
316         scroller.addView(view, new ScrollView.LayoutParams(ScrollView.LayoutParams.MATCH_PARENT,
317                 ScrollView.LayoutParams.MATCH_PARENT));
318         return scroller;
319     }
320
321     private void buildUi() {
322         LinearLayout top = new LinearLayout(this);
323         top.setOrientation(LinearLayout.VERTICAL);
324
325         List<ActivityManager.RecentTaskInfo> recents = mAm.getRecentTasks(10,
326                 ActivityManager.RECENT_WITH_EXCLUDED);
327         if (recents != null) {
328             for (int i=0; i<recents.size(); i++) {
329                 ActivityManager.RecentTaskInfo r = recents.get(i);
330                 ActivityManager.TaskThumbnails tt = mAm.getTaskThumbnails(r.persistentId);
331                 TextView tv = new TextView(this);
332                 tv.setText(r.baseIntent.getComponent().flattenToShortString());
333                 top.addView(tv, new LinearLayout.LayoutParams(
334                         LinearLayout.LayoutParams.WRAP_CONTENT,
335                         LinearLayout.LayoutParams.WRAP_CONTENT));
336                 LinearLayout item = new LinearLayout(this);
337                 item.setOrientation(LinearLayout.HORIZONTAL);
338                 addThumbnail(item, tt != null ? tt.mainThumbnail : null, r, tt, -1);
339                 for (int j=0; j<tt.numSubThumbbails; j++) {
340                     addThumbnail(item, tt.getSubThumbnail(j), r, tt, j);
341                 }
342                 top.addView(item, new LinearLayout.LayoutParams(
343                         LinearLayout.LayoutParams.WRAP_CONTENT,
344                         LinearLayout.LayoutParams.WRAP_CONTENT));
345             }
346         }
347
348         setContentView(scrollWrap(top));
349     }
350 }