1 /*
2  * Copyright (C) 2008 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 android.app.stubs;
18 
19 import android.content.BroadcastReceiver;
20 import android.content.Context;
21 import android.content.Intent;
22 import android.os.SystemClock;
23 
24 public class MockReceiver extends BroadcastReceiver {
25 
26     // PendingIntent may return same instance or new instance, so static variable is needed.
27     public static int sResultCode = 0;
28     public static final String MOCKACTION = "android.app.stubs.PendingIntentTest.TEST_RECEIVER";
29     public static String sAction;
30 
31     private static boolean sReceived = false;
32     private static Object sBlocker = new Object();
33 
34     /**
35      * set the result as true when received alarm
36      */
37     @Override
onReceive(Context context, Intent intent)38     public void onReceive(Context context, Intent intent) {
39         synchronized (sBlocker) {
40             sAction = intent.getAction();
41             if (sAction.equals(MOCKACTION)) {
42                 sResultCode = getResultCode();
43             }
44             sReceived = true;
45             sBlocker.notifyAll();
46         }
47     }
48 
prepareReceive(String initAction, int initResultCode)49     public static void prepareReceive(String initAction, int initResultCode) {
50         synchronized (sBlocker) {
51             sAction = initAction;
52             sResultCode = initResultCode;
53             sReceived = false;
54         }
55     }
56 
waitForReceive(long timeout)57     public static boolean waitForReceive(long timeout) {
58         long now = SystemClock.elapsedRealtime();
59         final long endTime = now + timeout;
60         synchronized (sBlocker) {
61             while (!sReceived && now < endTime) {
62                 try {
63                     sBlocker.wait(endTime - now);
64                 } catch (InterruptedException e) {
65                 }
66                 now = SystemClock.elapsedRealtime();
67             }
68             return sReceived;
69         }
70     }
71 }
72