| /* |
| * Copyright (C) 2011 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package com.example.android.wifidirect; |
| |
| import android.content.BroadcastReceiver; |
| import android.content.Context; |
| import android.content.Intent; |
| import android.net.NetworkInfo; |
| import android.net.wifi.p2p.WifiP2pDevice; |
| import android.net.wifi.p2p.WifiP2pManager; |
| import android.net.wifi.p2p.WifiP2pManager.Channel; |
| import android.net.wifi.p2p.WifiP2pManager.PeerListListener; |
| import android.util.Log; |
| |
| /** |
| * A BroadcastReceiver that notifies of important wifi p2p events. |
| */ |
| public class WiFiDirectBroadcastReceiver extends BroadcastReceiver { |
| |
| private WifiP2pManager manager; |
| private Channel channel; |
| private WiFiDirectActivity activity; |
| |
| /** |
| * @param manager WifiP2pManager system service |
| * @param channel Wifi p2p channel |
| * @param activity activity associated with the receiver |
| */ |
| public WiFiDirectBroadcastReceiver(WifiP2pManager manager, Channel channel, |
| WiFiDirectActivity activity) { |
| super(); |
| this.manager = manager; |
| this.channel = channel; |
| this.activity = activity; |
| } |
| |
| /* |
| * (non-Javadoc) |
| * @see android.content.BroadcastReceiver#onReceive(android.content.Context, |
| * android.content.Intent) |
| */ |
| @Override |
| public void onReceive(Context context, Intent intent) { |
| String action = intent.getAction(); |
| if (WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION.equals(action)) { |
| |
| // UI update to indicate wifi p2p status. |
| int state = intent.getIntExtra(WifiP2pManager.EXTRA_WIFI_STATE, -1); |
| if (state == WifiP2pManager.WIFI_P2P_STATE_ENABLED) { |
| // Wifi Direct mode is enabled |
| activity.setIsWifiP2pEnabled(true); |
| } else { |
| activity.setIsWifiP2pEnabled(false); |
| activity.resetData(); |
| |
| } |
| Log.d(WiFiDirectActivity.TAG, "P2P state changed - " + state); |
| } else if (WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION.equals(action)) { |
| |
| // request available peers from the wifi p2p manager. This is an |
| // asynchronous call and the calling activity is notified with a |
| // callback on PeerListListener.onPeersAvailable() |
| if (manager != null) { |
| manager.requestPeers(channel, (PeerListListener) activity.getFragmentManager() |
| .findFragmentById(R.id.frag_list)); |
| } |
| Log.d(WiFiDirectActivity.TAG, "P2P peers changed"); |
| } else if (WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION.equals(action)) { |
| |
| if (manager == null) { |
| return; |
| } |
| |
| NetworkInfo networkInfo = (NetworkInfo) intent |
| .getParcelableExtra(WifiP2pManager.EXTRA_NETWORK_INFO); |
| |
| if (networkInfo.isConnected()) { |
| |
| // we are connected with the other device, request connection |
| // info to find group owner IP |
| |
| DeviceDetailFragment fragment = (DeviceDetailFragment) activity |
| .getFragmentManager().findFragmentById(R.id.frag_detail); |
| manager.requestConnectionInfo(channel, fragment); |
| } else { |
| // It's a disconnect |
| activity.resetData(); |
| } |
| } else if (WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION.equals(action)) { |
| DeviceListFragment fragment = (DeviceListFragment) activity.getFragmentManager() |
| .findFragmentById(R.id.frag_list); |
| fragment.updateThisDevice((WifiP2pDevice) intent.getParcelableExtra( |
| WifiP2pManager.EXTRA_WIFI_P2P_DEVICE)); |
| |
| } |
| } |
| } |