Home | History | Annotate | Download | only in util
      1 /*
      2  * Copyright (C) 2016 The Android Open Source Project
      3  * Copyright (C) 2016 Mopria Alliance, Inc.
      4  *
      5  * Licensed under the Apache License, Version 2.0 (the "License");
      6  * you may not use this file except in compliance with the License.
      7  * You may obtain a copy of the License at
      8  *
      9  *      http://www.apache.org/licenses/LICENSE-2.0
     10  *
     11  * Unless required by applicable law or agreed to in writing, software
     12  * distributed under the License is distributed on an "AS IS" BASIS,
     13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     14  * See the License for the specific language governing permissions and
     15  * limitations under the License.
     16  */
     17 
     18 package com.android.bips.util;
     19 
     20 import android.content.BroadcastReceiver;
     21 import android.content.Context;
     22 import android.content.Intent;
     23 import android.net.ConnectivityManager;
     24 import android.net.NetworkInfo;
     25 import android.util.Log;
     26 
     27 import com.android.bips.BuiltInPrintService;
     28 
     29 /** Reliably reports on changes to Wi-Fi connectivity state */
     30 public class WifiMonitor {
     31     private static final String TAG = WifiMonitor.class.getSimpleName();
     32     private static final boolean DEBUG = false;
     33 
     34     private BroadcastMonitor mBroadcasts;
     35     private Listener mListener;
     36 
     37     /** Current connectivity state or null if not known yet */
     38     private Boolean mConnected;
     39 
     40     /**
     41      * Begin listening for connectivity changes, supplying the connectivity state to the listener
     42      * until stopped.
     43      */
     44     public WifiMonitor(BuiltInPrintService service, Listener listener) {
     45         if (DEBUG) Log.d(TAG, "WifiMonitor()");
     46         ConnectivityManager connectivityManager =
     47                 (ConnectivityManager) service.getSystemService(Context.CONNECTIVITY_SERVICE);
     48         if (connectivityManager == null) {
     49             return;
     50         }
     51 
     52         mListener = listener;
     53         mBroadcasts = service.receiveBroadcasts(new BroadcastReceiver() {
     54             @Override
     55             public void onReceive(Context context, Intent intent) {
     56                 if (ConnectivityManager.CONNECTIVITY_ACTION.equals(intent.getAction())) {
     57                     NetworkInfo info = connectivityManager.getActiveNetworkInfo();
     58                     boolean isConnected = info != null && info.isConnected();
     59                     if (mListener != null && (mConnected == null || mConnected != isConnected)) {
     60                         mConnected = isConnected;
     61                         mListener.onConnectionStateChanged(mConnected);
     62                     }
     63                 }
     64             }
     65         }, ConnectivityManager.CONNECTIVITY_ACTION);
     66     }
     67 
     68     /** Cease monitoring Wi-Fi connectivity status */
     69     public void close() {
     70         if (DEBUG) Log.d(TAG, "close()");
     71         if (mBroadcasts != null) {
     72             mBroadcasts.close();
     73         }
     74         mListener = null;
     75     }
     76 
     77     /** Communicate changes to the Wi-Fi connection state */
     78     public interface Listener {
     79         /** Called when the Wi-Fi connection state changes */
     80         void onConnectionStateChanged(boolean isConnected);
     81     }
     82 }
     83