1 /* 2 * Copyright (C) 2017 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 package com.android.wallpaper.module; 17 18 import android.content.BroadcastReceiver; 19 import android.content.Context; 20 import android.content.Intent; 21 import android.content.IntentFilter; 22 import android.net.ConnectivityManager; 23 import android.net.NetworkInfo; 24 25 import java.util.ArrayList; 26 import java.util.List; 27 28 /** 29 * Implementation of {@link NetworkStatusNotifier} which uses 30 * {@link android.net.ConnectivityManager} to provide network status. 31 */ 32 public class DefaultNetworkStatusNotifier implements NetworkStatusNotifier { 33 34 private Context mAppContext; 35 private ConnectivityManager mConnectivityManager; 36 private BroadcastReceiver mReceiver; 37 private List<Listener> mListeners; 38 DefaultNetworkStatusNotifier(Context context)39 public DefaultNetworkStatusNotifier(Context context) { 40 mAppContext = context.getApplicationContext(); 41 42 mConnectivityManager = 43 (ConnectivityManager) mAppContext.getSystemService(Context.CONNECTIVITY_SERVICE); 44 mListeners = new ArrayList<>(); 45 } 46 47 @Override 48 @NetworkStatus getNetworkStatus()49 public int getNetworkStatus() { 50 NetworkInfo activeNetwork = mConnectivityManager.getActiveNetworkInfo(); 51 52 if (activeNetwork != null && activeNetwork.isConnected()) { 53 return NETWORK_CONNECTED; 54 } 55 return NETWORK_NOT_CONNECTED; 56 } 57 58 @Override registerListener(Listener listener)59 public void registerListener(Listener listener) { 60 if (mReceiver == null) { 61 mReceiver = new BroadcastReceiver() { 62 @Override 63 public void onReceive(Context context, Intent intent) { 64 @NetworkStatus int networkStatus = getNetworkStatus(); 65 for (int i = 0; i < mListeners.size(); i++) { 66 mListeners.get(i).onNetworkChanged(networkStatus); 67 } 68 } 69 }; 70 IntentFilter intentFilter = new IntentFilter(); 71 intentFilter.addAction(android.net.ConnectivityManager.CONNECTIVITY_ACTION); 72 73 if (!mListeners.contains(listener)) { 74 mListeners.add(listener); 75 } 76 // Upon an initial register, the broadcast is immediately sent. 77 mAppContext.registerReceiver(mReceiver, intentFilter); 78 return; 79 } 80 81 if (!mListeners.contains(listener)) { 82 mListeners.add(listener); 83 } 84 } 85 86 @Override unregisterListener(Listener listener)87 public void unregisterListener(Listener listener) { 88 mListeners.remove(listener); 89 90 if (!mListeners.isEmpty() || mReceiver == null) { 91 return; 92 } 93 94 mAppContext.unregisterReceiver(mReceiver); 95 mReceiver = null; 96 } 97 } 98