diff options
author | Dianne Hackborn <hackbod@google.com> | 2012-08-02 18:31:26 -0700 |
---|---|---|
committer | Dianne Hackborn <hackbod@google.com> | 2012-08-02 19:07:57 -0700 |
commit | b4163a6e12ee7100c758c6d3d062ade1f2843fce (patch) | |
tree | 2948e83dec184906f2c44ee332431f219b78359d /tests/ActivityTests | |
parent | b1758cf8cd007bfffb3d8adceca25f3b0c82bd77 (diff) | |
download | frameworks_base-b4163a6e12ee7100c758c6d3d062ade1f2843fce.zip frameworks_base-b4163a6e12ee7100c758c6d3d062ade1f2843fce.tar.gz frameworks_base-b4163a6e12ee7100c758c6d3d062ade1f2843fce.tar.bz2 |
Add APIs for interacting across users.
- Expose the existing Context.sendBroadcast() as
Context.sendBroadcastAsUser().
- Add new android:singleUser attribute for services.
- Add new INTERACT_ACROSS_USERS_FULL permission for full
system-level access to cross-user interface (allows
sendBroadcastAsUser() to send to any receiver).
- Add new INTERACT_ACROSS_USERS_FULL permission for
more restricted cross-user interaction: this is required
for android:singleUser, and allows you to use
sendBroadcastAsUser() but only to send to your own
receivers.
Change-Id: I0de88f6718e9505f4de72e3f45d29c0f503b76e9
Diffstat (limited to 'tests/ActivityTests')
4 files changed, 103 insertions, 12 deletions
diff --git a/tests/ActivityTests/AndroidManifest.xml b/tests/ActivityTests/AndroidManifest.xml index de3b6d1..6f00095 100644 --- a/tests/ActivityTests/AndroidManifest.xml +++ b/tests/ActivityTests/AndroidManifest.xml @@ -20,6 +20,7 @@ <uses-permission android:name="android.permission.REORDER_TASKS" /> <uses-permission android:name="android.permission.REMOVE_TASKS" /> <uses-permission android:name="android.permission.READ_FRAME_BUFFER" /> + <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS" /> <application android:label="ActivityTest"> <activity android:name="ActivityTestMain"> <intent-filter> @@ -27,5 +28,10 @@ <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> + <service android:name="SingleUserService" + android:singleUser="true" android:exported="true"> + </service> + <receiver android:name="UserTarget"> + </receiver> </application> </manifest> diff --git a/tests/ActivityTests/src/com/google/android/test/activity/ActivityTestMain.java b/tests/ActivityTests/src/com/google/android/test/activity/ActivityTestMain.java index ae42e29..bcef2d9 100644 --- a/tests/ActivityTests/src/com/google/android/test/activity/ActivityTestMain.java +++ b/tests/ActivityTests/src/com/google/android/test/activity/ActivityTestMain.java @@ -16,37 +16,31 @@ package com.google.android.test.activity; -import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.app.ActivityManager; -import android.app.ActivityThread; import android.app.AlertDialog; -import android.app.Application; import android.content.ActivityNotFoundException; +import android.content.ComponentName; +import android.content.Intent; +import android.content.ServiceConnection; import android.os.Bundle; -import android.graphics.BitmapFactory; +import android.os.IBinder; import android.graphics.Bitmap; -import android.graphics.Canvas; -import android.graphics.drawable.BitmapDrawable; -import android.graphics.drawable.Drawable; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.ScrollView; -import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.content.Context; -import android.content.pm.ApplicationInfo; -import android.content.pm.PackageManager; -import android.content.res.CompatibilityInfo; -import android.util.DisplayMetrics; import android.util.Log; public class ActivityTestMain extends Activity { + static final String TAG = "ActivityTest"; + ActivityManager mAm; private void addThumbnail(LinearLayout container, Bitmap bm, @@ -114,6 +108,37 @@ public class ActivityTestMain extends Activity { return true; } }); + menu.add("Bind!").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { + @Override public boolean onMenuItemClick(MenuItem item) { + Intent intent = new Intent(ActivityTestMain.this, SingleUserService.class); + ServiceConnection conn = new ServiceConnection() { + @Override + public void onServiceConnected(ComponentName name, IBinder service) { + Log.i(TAG, "Service connected " + name + " " + service); + } + @Override + public void onServiceDisconnected(ComponentName name) { + Log.i(TAG, "Service disconnected " + name); + } + }; + bindService(intent, conn, Context.BIND_AUTO_CREATE); + return true; + } + }); + menu.add("Start!").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { + @Override public boolean onMenuItemClick(MenuItem item) { + Intent intent = new Intent(ActivityTestMain.this, SingleUserService.class); + startService(intent); + return true; + } + }); + menu.add("Send!").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { + @Override public boolean onMenuItemClick(MenuItem item) { + Intent intent = new Intent(ActivityTestMain.this, UserTarget.class); + sendBroadcastToUser(intent, 1); + return true; + } + }); return true; } diff --git a/tests/ActivityTests/src/com/google/android/test/activity/SingleUserService.java b/tests/ActivityTests/src/com/google/android/test/activity/SingleUserService.java new file mode 100644 index 0000000..c40582a --- /dev/null +++ b/tests/ActivityTests/src/com/google/android/test/activity/SingleUserService.java @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.test.activity; + +import android.app.Service; +import android.content.Intent; +import android.os.Binder; +import android.os.IBinder; + +public class SingleUserService extends Service { + Binder mBinder = new Binder(); + + @Override + public IBinder onBind(Intent intent) { + return mBinder; + } +} diff --git a/tests/ActivityTests/src/com/google/android/test/activity/UserTarget.java b/tests/ActivityTests/src/com/google/android/test/activity/UserTarget.java new file mode 100644 index 0000000..9890483 --- /dev/null +++ b/tests/ActivityTests/src/com/google/android/test/activity/UserTarget.java @@ -0,0 +1,29 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.test.activity; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.util.Log; + +public class UserTarget extends BroadcastReceiver { + @Override + public void onReceive(Context context, Intent intent) { + Log.i("ActivityTest", "Received: " + intent); + } +} |