1 /*
2  * Copyright (C) 2016 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.net.cts;
18 
19 import android.content.BroadcastReceiver;
20 import android.content.Context;
21 import android.content.Intent;
22 import android.net.ConnectivityManager;
23 import android.util.Log;
24 
25 import java.util.concurrent.CountDownLatch;
26 import java.util.concurrent.TimeUnit;
27 
28 public class ConnectivityReceiver extends BroadcastReceiver {
29     static boolean sReceivedConnectivity;
30     static boolean sReceivedFinal;
31     static CountDownLatch sLatch;
32 
prepare()33     static void prepare() {
34         synchronized (ConnectivityReceiver.class) {
35             sReceivedConnectivity = sReceivedFinal = false;
36             sLatch = new CountDownLatch(1);
37         }
38     }
39 
waitForBroadcast()40     static boolean waitForBroadcast() {
41         try {
42             sLatch.await(30, TimeUnit.SECONDS);
43         } catch (InterruptedException e) {
44             throw new IllegalStateException(e);
45         }
46         synchronized (ConnectivityReceiver.class) {
47             sLatch = null;
48             if (!sReceivedFinal) {
49                 throw new IllegalStateException("Never received final broadcast");
50             }
51             return sReceivedConnectivity;
52         }
53     }
54 
55     static final String FINAL_ACTION = "android.net.cts.action.FINAL";
56 
57     @Override
onReceive(Context context, Intent intent)58     public void onReceive(Context context, Intent intent) {
59         Log.i("ConnectivityReceiver", "Received: " + intent.getAction());
60         if (ConnectivityManager.CONNECTIVITY_ACTION.equals(intent.getAction())) {
61             sReceivedConnectivity = true;
62         } else if (FINAL_ACTION.equals(intent.getAction())) {
63             sReceivedFinal = true;
64             if (sLatch != null) {
65                 sLatch.countDown();
66             }
67         }
68     }
69 }
70