1f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project/*
2f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project * Copyright (C) 2008 The Android Open Source Project
3f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project *
4f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
5f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project * you may not use this file except in compliance with the License.
6f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project * You may obtain a copy of the License at
7f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project *
8f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
9f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project *
10f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software
11f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
12f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project * See the License for the specific language governing permissions and
14f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project * limitations under the License.
15f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project */
16f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
17f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Projectpackage android.app.cts;
18f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
19f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Projectimport android.app.PendingIntent;
20f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Projectimport android.app.PendingIntent.CanceledException;
219bdd69b9a2abca592439124afdbe13cdf8c66903Stuart Scottimport android.app.stubs.MockReceiver;
229bdd69b9a2abca592439124afdbe13cdf8c66903Stuart Scottimport android.app.stubs.MockService;
239bdd69b9a2abca592439124afdbe13cdf8c66903Stuart Scottimport android.app.stubs.PendingIntentStubActivity;
24f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Projectimport android.content.Context;
25f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Projectimport android.content.Intent;
26f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Projectimport android.os.Bundle;
27f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Projectimport android.os.Handler;
288151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubachimport android.os.Looper;
29f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Projectimport android.os.Message;
30f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Projectimport android.os.Parcel;
313c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackbornimport android.os.SystemClock;
32f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Projectimport android.test.AndroidTestCase;
333c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackbornimport android.util.Log;
34f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
35f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Projectpublic class PendingIntentTest extends AndroidTestCase {
36f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
373c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn    private static final int WAIT_TIME = 10000;
388151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach    private PendingIntent mPendingIntent;
398151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach    private Intent mIntent;
408151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach    private Context mContext;
418151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach    private boolean mFinishResult;
428151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach    private boolean mHandleResult;
438151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach    private String mResultAction;
448151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach    private PendingIntent.OnFinished mFinish;
458151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach    private boolean mLooperStart;
468151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach    private Looper mLooper;
478151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach    private Handler mHandler;
48f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
49f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project    @Override
50f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project    protected void setUp() throws Exception {
51f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        super.setUp();
52f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        mContext = getContext();
538151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        mFinish = new PendingIntent.OnFinished() {
548151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach            public void onSendFinished(PendingIntent pi, Intent intent, int resultCode,
558151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach                    String resultData, Bundle resultExtras) {
563c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn                synchronized (mFinish) {
573c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn                    mFinishResult = true;
583c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn                    if (intent != null) {
593c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn                        mResultAction = intent.getAction();
603c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn                    }
613c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn                    mFinish.notifyAll();
628151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach                }
638151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach            }
648151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        };
658151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach
668151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        new Thread() {
678151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach            @Override
688151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach            public void run() {
698151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach                Looper.prepare();
708151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach                mLooper = Looper.myLooper();
718151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach                mLooperStart = true;
728151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach                Looper.loop();
738151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach            }
748151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        }.start();
758151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        while (!mLooperStart) {
768151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach            Thread.sleep(50);
778151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        }
788151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        mHandler = new Handler(mLooper) {
798151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach            @Override
808151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach            public void dispatchMessage(Message msg) {
813c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn                synchronized (mFinish) {
823c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn                    mHandleResult = true;
833c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn                }
848151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach                super.dispatchMessage(msg);
858151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach            }
868151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach
878151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach            @Override
888151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach            public boolean sendMessageAtTime(Message msg, long uptimeMillis) {
893c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn                synchronized (mFinish) {
903c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn                    mHandleResult = true;
913c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn                }
928151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach                return super.sendMessageAtTime(msg, uptimeMillis);
938151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach            }
948151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach
958151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach            @Override
968151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach            public void handleMessage(Message msg) {
973c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn                synchronized (mFinish) {
983c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn                    mHandleResult = true;
993c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn                }
1008151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach                super.handleMessage(msg);
1018151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach            }
1028151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        };
103f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project    }
104f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
1058151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach    @Override
1068151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach    protected void tearDown() throws Exception {
1078151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        super.tearDown();
1088151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        mLooper.quit();
109f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project    }
110f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
1113c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn    private void prepareFinish() {
1123c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        synchronized (mFinish) {
1133c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn            mFinishResult = false;
1143c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn            mHandleResult = false;
1153c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        }
1163c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn    }
1173c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn
1183c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn    public boolean waitForFinish(long timeout) {
1193c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        long now = SystemClock.elapsedRealtime();
1203c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        final long endTime = now + timeout;
1213c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        synchronized (mFinish) {
1223c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn            while (!mFinishResult && now < endTime) {
1233c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn                try {
1243c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn                    mFinish.wait(endTime - now);
1253c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn                } catch (InterruptedException e) {
1263c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn                }
1273c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn                now = SystemClock.elapsedRealtime();
1283c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn            }
1293c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn            return mFinishResult;
1303c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        }
1313c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn    }
1323c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn
1338151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach    public void testGetActivity() throws InterruptedException, CanceledException {
1343c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        PendingIntentStubActivity.prepare();
135f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        mPendingIntent = null;
136f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        mIntent = new Intent();
137f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
13815f32be88e1f5185b3c40661f2150f740b047d01Chenjie Luo        mIntent.setClass(mContext, PendingIntentStubActivity.class);
139f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        mIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
140f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        mPendingIntent = PendingIntent.getActivity(mContext, 1, mIntent,
141f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project                PendingIntent.FLAG_CANCEL_CURRENT);
142f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        assertEquals(mContext.getPackageName(), mPendingIntent.getTargetPackage());
143f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
1448151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        mPendingIntent.send();
145f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
1463c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        PendingIntentStubActivity.waitForCreate(WAIT_TIME);
147f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        assertNotNull(mPendingIntent);
14815f32be88e1f5185b3c40661f2150f740b047d01Chenjie Luo        assertEquals(PendingIntentStubActivity.status, PendingIntentStubActivity.ON_CREATE);
149f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
150f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        // test getActivity return null
151f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        mPendingIntent.cancel();
152f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        mPendingIntent = PendingIntent.getActivity(mContext, 1, mIntent,
153f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project                PendingIntent.FLAG_NO_CREATE);
154f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        assertNull(mPendingIntent);
155f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
156f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        mPendingIntent = PendingIntent.getActivity(mContext, 1, mIntent,
157f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project                PendingIntent.FLAG_ONE_SHOT);
158f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
159f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        pendingIntentSendError(mPendingIntent);
160f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project    }
161f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
162f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project    private void pendingIntentSendError(PendingIntent pendingIntent) {
163f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        try {
164f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project            // From the doc send function will throw CanceledException if the PendingIntent
165f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project            // is no longer allowing more intents to be sent through it. So here call it twice then
166f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project            // a CanceledException should be caught.
167f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project            mPendingIntent.send();
168f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project            mPendingIntent.send();
169f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project            fail("CanceledException expected, but not thrown");
170f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        } catch (PendingIntent.CanceledException e) {
1718151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach            // expected
172f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        }
173f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project    }
174f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
1758151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach    public void testGetBroadcast() throws InterruptedException, CanceledException {
1763c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        MockReceiver.prepareReceive(null, 0);
177f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        mIntent = new Intent(MockReceiver.MOCKACTION);
178f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        mIntent.setClass(mContext, MockReceiver.class);
179f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        mPendingIntent = PendingIntent.getBroadcast(mContext, 1, mIntent,
180f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project                PendingIntent.FLAG_CANCEL_CURRENT);
181f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
1828151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        mPendingIntent.send();
183f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
1843c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        MockReceiver.waitForReceive(WAIT_TIME);
185f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        assertEquals(MockReceiver.MOCKACTION, MockReceiver.sAction);
186f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
187f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        // test getBroadcast return null
188f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        mPendingIntent.cancel();
189f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        mPendingIntent = PendingIntent.getBroadcast(mContext, 1, mIntent,
190f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project                PendingIntent.FLAG_NO_CREATE);
191f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        assertNull(mPendingIntent);
192f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
193f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        mPendingIntent = PendingIntent.getBroadcast(mContext, 1, mIntent,
194f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project                PendingIntent.FLAG_ONE_SHOT);
195f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
196f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        pendingIntentSendError(mPendingIntent);
197f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project    }
198f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
1998151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach    public void testGetService() throws InterruptedException, CanceledException {
2003c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        MockService.prepareStart();
201f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        mIntent = new Intent();
202f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        mIntent.setClass(mContext, MockService.class);
203f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        mPendingIntent = PendingIntent.getService(mContext, 1, mIntent,
204f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project                PendingIntent.FLAG_CANCEL_CURRENT);
205f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
2068151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        mPendingIntent.send();
207f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
2083c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        MockService.waitForStart(WAIT_TIME);
209f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        assertTrue(MockService.result);
210f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
211f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        // test getService return null
212f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        mPendingIntent.cancel();
213f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        mPendingIntent = PendingIntent.getService(mContext, 1, mIntent,
214f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project                PendingIntent.FLAG_NO_CREATE);
215f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        assertNull(mPendingIntent);
216f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
2178151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        mPendingIntent = PendingIntent.getService(mContext, 1, mIntent,
2188151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach                PendingIntent.FLAG_ONE_SHOT);
219f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
220f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        pendingIntentSendError(mPendingIntent);
221f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project    }
222f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
2233c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn    public void testStartServiceOnFinishedHandler() throws InterruptedException, CanceledException {
2243c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        MockService.prepareStart();
2253c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        prepareFinish();
2263c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        mIntent = new Intent();
2273c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        mIntent.setClass(mContext, MockService.class);
2283c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        mPendingIntent = PendingIntent.getService(mContext, 1, mIntent,
2293c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn                PendingIntent.FLAG_CANCEL_CURRENT);
2303c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn
2313c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        mPendingIntent.send(mContext, 1, null, mFinish, null);
2323c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn
2333c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        MockService.waitForStart(WAIT_TIME);
2343c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        waitForFinish(WAIT_TIME);
2353c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        assertTrue(MockService.result);
2363c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn
2373c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        assertTrue(mFinishResult);
2383c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        assertFalse(mHandleResult);
2393c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        mPendingIntent.cancel();
2403c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn
2413c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        MockService.prepareStart();
2423c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        prepareFinish();
2433c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        mIntent = new Intent();
2443c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        mIntent.setClass(mContext, MockService.class);
2453c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        mPendingIntent = PendingIntent.getService(mContext, 1, mIntent,
2463c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn                PendingIntent.FLAG_CANCEL_CURRENT);
2473c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn
2483c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        mPendingIntent.send(mContext, 1, null, mFinish, mHandler);
2493c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn
2503c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        MockService.waitForStart(WAIT_TIME);
2513c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        waitForFinish(WAIT_TIME);
2523c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        assertTrue(MockService.result);
2533c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn
2543c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        assertTrue(mFinishResult);
2553c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        assertTrue(mHandleResult);
2563c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        mPendingIntent.cancel();
2573c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn
2583c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn    }
2593c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn
2608151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach    public void testCancel() throws CanceledException {
261f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        mIntent = new Intent();
262f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        mIntent.setClass(mContext, MockService.class);
263f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        mPendingIntent = PendingIntent.getBroadcast(mContext, 1, mIntent,
264f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project                PendingIntent.FLAG_CANCEL_CURRENT);
265f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
2668151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        mPendingIntent.send();
267f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
268f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        mPendingIntent.cancel();
269f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        pendingIntentSendShouldFail(mPendingIntent);
270f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project    }
271f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
272f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project    private void pendingIntentSendShouldFail(PendingIntent pendingIntent) {
273f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        try {
274f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project            pendingIntent.send();
275f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project            fail("CanceledException expected, but not thrown");
276f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        } catch (CanceledException e) {
277f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project            // expected
278f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        }
279f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project    }
280f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
2818151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach    public void testSend() throws InterruptedException, CanceledException {
2823c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        MockReceiver.prepareReceive(null, -1);
283f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        mIntent = new Intent();
284f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        mIntent.setAction(MockReceiver.MOCKACTION);
285f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        mIntent.setClass(mContext, MockReceiver.class);
286f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        mPendingIntent = PendingIntent.getBroadcast(mContext, 1, mIntent,
287f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project                PendingIntent.FLAG_CANCEL_CURRENT);
288f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
2898151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        mPendingIntent.send();
290f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
2913c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        MockReceiver.waitForReceive(WAIT_TIME);
292f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
293f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        // send function to send default code 0
294f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        assertEquals(0, MockReceiver.sResultCode);
295f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        assertEquals(MockReceiver.MOCKACTION, MockReceiver.sAction);
296f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        mPendingIntent.cancel();
297f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
298f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        pendingIntentSendShouldFail(mPendingIntent);
299f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project    }
300f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
3018151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach    public void testSendWithParamInt() throws InterruptedException, CanceledException {
302f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        mIntent = new Intent(MockReceiver.MOCKACTION);
303f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        mIntent.setClass(mContext, MockReceiver.class);
304f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        mPendingIntent = PendingIntent.getBroadcast(mContext, 1, mIntent,
305f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project                PendingIntent.FLAG_CANCEL_CURRENT);
3063c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        MockReceiver.prepareReceive(null, 0);
3078151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        // send result code 1.
3088151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        mPendingIntent.send(1);
3093c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        MockReceiver.waitForReceive(WAIT_TIME);
3108151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        assertEquals(MockReceiver.MOCKACTION, MockReceiver.sAction);
311f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
3128151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        // assert the result code
3138151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        assertEquals(1, MockReceiver.sResultCode);
3148151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        assertEquals(mResultAction, null);
315f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
3163c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        MockReceiver.prepareReceive(null, 0);
3178151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        // send result code 2
3188151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        mPendingIntent.send(2);
3193c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        MockReceiver.waitForReceive(WAIT_TIME);
3208151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach
3218151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        assertEquals(MockReceiver.MOCKACTION, MockReceiver.sAction);
3228151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach
3238151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        // assert the result code
3248151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        assertEquals(2, MockReceiver.sResultCode);
3258151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        assertEquals(MockReceiver.sAction, MockReceiver.MOCKACTION);
3268151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        assertNull(mResultAction);
327f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        mPendingIntent.cancel();
328f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        pendingIntentSendShouldFail(mPendingIntent);
329f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project    }
330f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
3318151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach    public void testSendWithParamContextIntIntent() throws InterruptedException, CanceledException {
332f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        mIntent = new Intent(MockReceiver.MOCKACTION);
333f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        mIntent.setClass(mContext, MockReceiver.class);
334f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
3353c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        MockReceiver.prepareReceive(null, 0);
336f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
3378151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        mPendingIntent = PendingIntent.getBroadcast(mContext, 1, mIntent, 1);
338f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
3398151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        mPendingIntent.send(mContext, 1, null);
3403c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        MockReceiver.waitForReceive(WAIT_TIME);
341f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
3428151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        assertEquals(MockReceiver.MOCKACTION, MockReceiver.sAction);
3438151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        assertEquals(1, MockReceiver.sResultCode);
3448151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        mPendingIntent.cancel();
345f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
3468151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        mPendingIntent = PendingIntent.getBroadcast(mContext, 1, mIntent, 1);
3473c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        MockReceiver.prepareReceive(null, 0);
348f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
3498151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        mPendingIntent.send(mContext, 2, mIntent);
3503c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        MockReceiver.waitForReceive(WAIT_TIME);
3518151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        assertEquals(MockReceiver.MOCKACTION, MockReceiver.sAction);
3528151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        assertEquals(2, MockReceiver.sResultCode);
3538151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        mPendingIntent.cancel();
354f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project    }
355f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
3568151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach    public void testSendWithParamIntOnFinishedHandler() throws InterruptedException,
3578151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach            CanceledException {
358f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        mIntent = new Intent(MockReceiver.MOCKACTION);
359f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        mIntent.setClass(mContext, MockReceiver.class);
360f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
3618151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        mPendingIntent = PendingIntent.getBroadcast(mContext, 1, mIntent, 1);
3623c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        MockReceiver.prepareReceive(null, 0);
3633c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        prepareFinish();
3648151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach
3658151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        mPendingIntent.send(1, null, null);
3663c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        MockReceiver.waitForReceive(WAIT_TIME);
3678151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        assertFalse(mFinishResult);
3688151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        assertFalse(mHandleResult);
3698151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        assertEquals(MockReceiver.MOCKACTION, MockReceiver.sAction);
3708151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach
3718151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        // assert result code
3728151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        assertEquals(1, MockReceiver.sResultCode);
3738151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        mPendingIntent.cancel();
374f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
3758151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        mPendingIntent = PendingIntent.getBroadcast(mContext, 1, mIntent, 1);
3763c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        MockReceiver.prepareReceive(null, 0);
3773c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        prepareFinish();
3788151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach
3798151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        mPendingIntent.send(2, mFinish, null);
3803c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        waitForFinish(WAIT_TIME);
3818151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        assertTrue(mFinishResult);
3828151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        assertFalse(mHandleResult);
3838151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        assertEquals(MockReceiver.MOCKACTION, MockReceiver.sAction);
3848151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach
3858151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        // assert result code
3868151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        assertEquals(2, MockReceiver.sResultCode);
3878151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        mPendingIntent.cancel();
3888151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach
3893c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        MockReceiver.prepareReceive(null, 0);
3903c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        prepareFinish();
3918151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        mPendingIntent = PendingIntent.getBroadcast(mContext, 1, mIntent, 1);
3928151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        mPendingIntent.send(3, mFinish, mHandler);
3933c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        waitForFinish(WAIT_TIME);
3948151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        assertTrue(mHandleResult);
3958151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        assertTrue(mFinishResult);
3968151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        assertEquals(MockReceiver.MOCKACTION, MockReceiver.sAction);
3978151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach
3988151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        // assert result code
3998151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        assertEquals(3, MockReceiver.sResultCode);
4008151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        mPendingIntent.cancel();
401f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project    }
402f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
4038151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach    public void testSendWithParamContextIntIntentOnFinishedHandler() throws InterruptedException,
4048151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach            CanceledException {
405f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        mIntent = new Intent(MockReceiver.MOCKACTION);
406f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        mIntent.setAction(MockReceiver.MOCKACTION);
407f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
4088151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        mPendingIntent = PendingIntent.getBroadcast(mContext, 1, mIntent, 1);
4093c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        MockReceiver.prepareReceive(null, 0);
4103c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        prepareFinish();
4118151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        mPendingIntent.send(mContext, 1, mIntent, null, null);
4123c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        MockReceiver.waitForReceive(WAIT_TIME);
4138151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        assertFalse(mFinishResult);
4148151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        assertFalse(mHandleResult);
4158151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        assertNull(mResultAction);
4163c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        assertEquals(MockReceiver.MOCKACTION, MockReceiver.sAction);
4178151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        mPendingIntent.cancel();
4188151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach
4198151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        mPendingIntent = PendingIntent.getBroadcast(mContext, 1, mIntent, 1);
4203c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        MockReceiver.prepareReceive(null, 0);
4213c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        prepareFinish();
4228151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        mPendingIntent.send(mContext, 1, mIntent, mFinish, null);
4233c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        waitForFinish(WAIT_TIME);
4248151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        assertTrue(mFinishResult);
4258151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        assertEquals(mResultAction, MockReceiver.MOCKACTION);
4268151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        assertFalse(mHandleResult);
4273c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        assertEquals(MockReceiver.MOCKACTION, MockReceiver.sAction);
4288151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        mPendingIntent.cancel();
429f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
4308151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        mPendingIntent = PendingIntent.getBroadcast(mContext, 1, mIntent, 1);
4313c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        MockReceiver.prepareReceive(null, 0);
4323c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        prepareFinish();
4338151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        mPendingIntent.send(mContext, 1, mIntent, mFinish, mHandler);
4343c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        waitForFinish(WAIT_TIME);
4358151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        assertTrue(mHandleResult);
4368151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        assertEquals(mResultAction, MockReceiver.MOCKACTION);
4378151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        assertTrue(mFinishResult);
4383c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        assertEquals(MockReceiver.MOCKACTION, MockReceiver.sAction);
4393c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        mPendingIntent.cancel();
4403c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn    }
4413c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn
4423c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn
4433c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn    public void testSendNoReceiverOnFinishedHandler() throws InterruptedException,
4443c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn            CanceledException {
4453c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        // This action won't match anything, so no receiver will run but we should
4463c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        // still get a finish result.
4473c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        final String BAD_ACTION = MockReceiver.MOCKACTION + "_bad";
4483c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        mIntent = new Intent(BAD_ACTION);
4493c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        mIntent.setAction(BAD_ACTION);
4503c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn
4513c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        mPendingIntent = PendingIntent.getBroadcast(mContext, 1, mIntent, 1);
4523c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        MockReceiver.prepareReceive(null, 0);
4533c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        prepareFinish();
4543c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        mPendingIntent.send(mContext, 1, mIntent, mFinish, null);
4553c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        waitForFinish(WAIT_TIME);
4563c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        assertTrue(mFinishResult);
4573c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        assertEquals(mResultAction, BAD_ACTION);
4583c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        assertFalse(mHandleResult);
4593c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        assertNull(MockReceiver.sAction);
4603c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        mPendingIntent.cancel();
4613c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn
4623c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        mPendingIntent = PendingIntent.getBroadcast(mContext, 1, mIntent, 1);
4633c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        MockReceiver.prepareReceive(null, 0);
4643c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        prepareFinish();
4653c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        mPendingIntent.send(mContext, 1, mIntent, mFinish, mHandler);
4663c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        waitForFinish(WAIT_TIME);
4673c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        assertTrue(mHandleResult);
4683c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        assertEquals(mResultAction, BAD_ACTION);
4693c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        assertTrue(mFinishResult);
4703c1b3bfcfbd1b7171c6d0212734adbfbca54d9aeDianne Hackborn        assertNull(MockReceiver.sAction);
4718151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        mPendingIntent.cancel();
472f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project    }
473f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
474f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project    public void testGetTargetPackage() {
475f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        mIntent = new Intent();
476f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        mPendingIntent = PendingIntent.getActivity(mContext, 1, mIntent,
477f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project                PendingIntent.FLAG_CANCEL_CURRENT);
478f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        assertEquals(mContext.getPackageName(), mPendingIntent.getTargetPackage());
479f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project    }
480f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
481f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project    public void testEquals() {
482f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        mIntent = new Intent();
483f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        mPendingIntent = PendingIntent.getActivity(mContext, 1, mIntent,
484f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project                PendingIntent.FLAG_CANCEL_CURRENT);
485f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
486f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        PendingIntent target = PendingIntent.getActivity(mContext, 1, mIntent,
487f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project                PendingIntent.FLAG_CANCEL_CURRENT);
488f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
489f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        assertFalse(mPendingIntent.equals(target));
490f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        assertFalse(mPendingIntent.hashCode() == target.hashCode());
491f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        mPendingIntent = PendingIntent.getActivity(mContext, 1, mIntent, 1);
492f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
493f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        target = PendingIntent.getActivity(mContext, 1, mIntent, 1);
494f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        assertTrue(mPendingIntent.equals(target));
495f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
496f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        mIntent = new Intent(MockReceiver.MOCKACTION);
497f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        target = PendingIntent.getBroadcast(mContext, 1, mIntent, 1);
498f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        assertFalse(mPendingIntent.equals(target));
499f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        assertFalse(mPendingIntent.hashCode() == target.hashCode());
500f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
501f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        mPendingIntent = PendingIntent.getActivity(mContext, 1, mIntent, 1);
502f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        target = PendingIntent.getActivity(mContext, 1, mIntent, 1);
503f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
504f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        assertTrue(mPendingIntent.equals(target));
505f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        assertEquals(mPendingIntent.hashCode(), target.hashCode());
506f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project    }
507f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
508f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project    public void testDescribeContents() {
509f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        mIntent = new Intent();
510f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        mPendingIntent = PendingIntent.getActivity(mContext, 1, mIntent,
511f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project                PendingIntent.FLAG_CANCEL_CURRENT);
5128151e7cd7f60ed986a2132dd0aec271e5fd77b40Phil Dubach        final int expected = 0;
513f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        assertEquals(expected, mPendingIntent.describeContents());
514f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project    }
515f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
516f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project    public void testWriteToParcel() {
517f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        mIntent = new Intent();
518f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        mPendingIntent = PendingIntent.getActivity(mContext, 1, mIntent,
519f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project                PendingIntent.FLAG_CANCEL_CURRENT);
520f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        Parcel parcel = Parcel.obtain();
521f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
522f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        mPendingIntent.writeToParcel(parcel, 0);
523f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        parcel.setDataPosition(0);
524f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        PendingIntent pendingIntent = PendingIntent.CREATOR.createFromParcel(parcel);
525f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        assertTrue(mPendingIntent.equals(pendingIntent));
526f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project    }
527f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
528f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project    public void testReadAndWritePendingIntentOrNullToParcel() {
529f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        mIntent = new Intent();
530f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        mPendingIntent = PendingIntent.getActivity(mContext, 1, mIntent,
531f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project                PendingIntent.FLAG_CANCEL_CURRENT);
532f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        assertNotNull(mPendingIntent.toString());
533f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
534f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        Parcel parcel = Parcel.obtain();
535f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        PendingIntent.writePendingIntentOrNullToParcel(mPendingIntent, parcel);
536f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        parcel.setDataPosition(0);
537f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        PendingIntent target = PendingIntent.readPendingIntentOrNullFromParcel(parcel);
538f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        assertEquals(mPendingIntent, target);
539f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        assertEquals(mPendingIntent.getTargetPackage(), target.getTargetPackage());
540f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
541f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        mPendingIntent = null;
542f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        parcel = Parcel.obtain();
543f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        PendingIntent.writePendingIntentOrNullToParcel(mPendingIntent, parcel);
544f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        target = PendingIntent.readPendingIntentOrNullFromParcel(parcel);
545f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        assertNull(target);
546f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project    }
547f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
548f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project}
549