19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
171a44d5dcabc18cd5ef111f732ccff91683a1a093Neal Nguyenpackage android.app.activity;
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.BroadcastReceiver;
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.ComponentName;
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Context;
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Intent;
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.IntentFilter;
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.ReceiverCallNotAllowedException;
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.ServiceConnection;
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.RemoteException;
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.IBinder;
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcel;
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class LocalReceiver extends BroadcastReceiver {
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public LocalReceiver() {
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void onReceive(Context context, Intent intent) {
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        String resultString = LaunchpadActivity.RECEIVER_LOCAL;
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (BroadcastTest.BROADCAST_FAIL_REGISTER.equals(intent.getAction())) {
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            resultString = "Successfully registered, but expected it to fail";
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            try {
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                context.registerReceiver(this, new IntentFilter("foo.bar"));
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                context.unregisterReceiver(this);
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            } catch (ReceiverCallNotAllowedException e) {
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                //resultString = "This is the correct behavior but not yet implemented";
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                resultString = LaunchpadActivity.RECEIVER_LOCAL;
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } else if (BroadcastTest.BROADCAST_FAIL_BIND.equals(intent.getAction())) {
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            resultString = "Successfully bound to service, but expected it to fail";
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            try {
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                ServiceConnection sc = new ServiceConnection() {
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    public void onServiceConnected(ComponentName name, IBinder service) {
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    }
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    public void onServiceDisconnected(ComponentName name) {
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    }
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                };
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                context.bindService(new Intent(context, LocalService.class), sc, 0);
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                context.unbindService(sc);
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            } catch (ReceiverCallNotAllowedException e) {
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                //resultString = "This is the correct behavior but not yet implemented";
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                resultString = LaunchpadActivity.RECEIVER_LOCAL;
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } else if (LaunchpadActivity.BROADCAST_REPEAT.equals(intent.getAction())) {
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Intent newIntent = new Intent(intent);
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            newIntent.setAction(LaunchpadActivity.BROADCAST_LOCAL);
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            context.sendOrderedBroadcast(newIntent, null);
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            IBinder caller = intent.getIBinderExtra("caller");
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Parcel data = Parcel.obtain();
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            data.writeInterfaceToken(LaunchpadActivity.LAUNCH);
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            data.writeString(resultString);
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            caller.transact(LaunchpadActivity.GOT_RECEIVE_TRANSACTION, data, null, 0);
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            data.recycle();
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (RemoteException ex) {
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
78