Created
January 4, 2017 07:32
-
-
Save EXJUSTICE/ccfb7685f0a5f5dcf599336f79c49ba8 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.xu.consent; | |
import android.app.ListFragment; | |
import android.app.ProgressDialog; | |
import android.content.Context; | |
import android.content.DialogInterface; | |
import android.net.wifi.p2p.WifiP2pConfig; | |
import android.net.wifi.p2p.WifiP2pDevice; | |
import android.net.wifi.p2p.WifiP2pDeviceList; | |
import android.net.wifi.p2p.WifiP2pManager.PeerListListener; | |
import android.os.Bundle; | |
import android.util.Log; | |
import android.view.LayoutInflater; | |
import android.view.View; | |
import android.view.ViewGroup; | |
import android.widget.ArrayAdapter; | |
import android.widget.ListView; | |
import android.widget.TextView; | |
import java.util.ArrayList; | |
import java.util.List; | |
public class DeviceListFragment extends ListFragment implements PeerListListener { | |
private List<WifiP2pDevice> peers = new ArrayList <WifiP2pDevice>(); | |
ProgressDialog progressDialog = null; | |
View mContentView = null; | |
private WifiP2pDevice device; | |
@Override | |
public void onActivityCreated (Bundle savedInstanceState){ | |
super.onActivityCreated(savedInstanceState); | |
this.setListAdapter(new WiFiPeerListAdapter (getActivity(), R.layout.row_devices, peers)); | |
} | |
@Override | |
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ | |
mContentView = inflater.inflate(R.layout.device_list, null); | |
return mContentView; | |
} | |
//Return this device | |
public WifiP2pDevice getDevice(){ | |
return device; | |
} | |
private static String getDeviceStatus(int deviceStatus){ | |
Log.d(WIFIDirectActivity.TAG, "Peer status"+ deviceStatus); | |
switch (deviceStatus){ | |
case WifiP2pDevice.AVAILABLE: | |
return "Available"; | |
case WifiP2pDevice.INVITED: | |
return "Invited"; | |
case WifiP2pDevice.CONNECTED: | |
return "Connected"; | |
case WifiP2pDevice.FAILED: | |
return "Failed"; | |
case WifiP2pDevice.UNAVAILABLE: | |
return "Unavailable"; | |
default: | |
return "Unknown"; | |
} | |
} | |
//Upon list item click, make a connection with target peer | |
/*1. Call WifiDirectActivity's showDetails with target device | |
2. This launches DeviceDetailFragment with target details & calls fragment's showDevice with target device | |
3. Device passed to DeviceDetailFragment, DeviceAddress extracted, and auto call connect | |
4. Connect is WifiDirectActivity's, sending an intent ON CONNECTION CHANGED, received by BroadcastReceiver | |
5. BroadCastReceiver receives intent, calls requestConnectionInfo, passing all WifiConfigInfo to DeviceDetailFragment | |
6. Fragment receives information via OnConnectionListener's onConnectionAvailable callback. | |
6. Negotiate Group ownership, launch either FileTransferService or FileServerAsyncTask and begin doing shit | |
*/ | |
@Override | |
public void onListItemClick(ListView l, View v, int position, long id){ | |
WifiP2pDevice device = (WifiP2pDevice)getListAdapter().getItem(position); | |
((DeviceActionListener)getActivity()).showDetails(device); | |
} | |
//ArrayAdapter for ListFragment that maintains DeviceList | |
private class WiFiPeerListAdapter extends ArrayAdapter <WifiP2pDevice>{ | |
private List<WifiP2pDevice>items; | |
//Constructor passing Peer list to local list | |
public WiFiPeerListAdapter(Context context,int textViewResurceId, | |
List<WifiP2pDevice>objects){ | |
super(context,textViewResurceId, objects); | |
items = objects; | |
} | |
@Override | |
public View getView(int position, View convertView, ViewGroup parent){ | |
View v = convertView; | |
if(v ==null){ | |
LayoutInflater vi = (LayoutInflater)getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE); | |
v = vi.inflate(R.layout.row_devices, null); | |
} | |
WifiP2pDevice device= items.get(position); | |
if (device != null){ | |
TextView top = (TextView) v.findViewById(R.id.device_name); | |
TextView bottom = (TextView)v.findViewById(R.id.device_details); | |
if (top != null){ | |
top.setText(device.deviceName); | |
} | |
if (bottom != null){ | |
bottom.setText(getDeviceStatus(device.status)); | |
} | |
} | |
return v; | |
} | |
} | |
//Method for updating UI of devices | |
public void updateThisDevice (WifiP2pDevice device){ | |
this.device = device; | |
TextView view = (TextView)mContentView.findViewById(R.id.my_name); | |
view.setText(device.deviceName); | |
view = (TextView)mContentView.findViewById(R.id.my_status); | |
view.setText(getDeviceStatus(device.status)); | |
} | |
//Called by broadCastReceiver once Peers changed intent received | |
@Override | |
public void onPeersAvailable(WifiP2pDeviceList peerList){ | |
if (progressDialog != null && progressDialog.isShowing()){ | |
progressDialog.dismiss(); | |
} | |
peers.clear(); | |
peers.addAll(peerList.getDeviceList()); | |
((WiFiPeerListAdapter)getListAdapter()).notifyDataSetChanged();; | |
if (peers.size()==0){ | |
Log.d(WIFIDirectActivity.TAG,"No devices found"); | |
return; | |
} | |
} | |
public void clearPeers(){ | |
peers.clear(); | |
((WiFiPeerListAdapter)getListAdapter()).notifyDataSetChanged(); | |
} | |
public void onInitiateDiscovery(){ | |
//Creates a progressDialog, doesnt do anything else | |
if(progressDialog != null && progressDialog.isShowing()){ | |
progressDialog.dismiss(); | |
} | |
progressDialog = progressDialog.show(getActivity(), "Press back to cancel", | |
"finding peers", true, true, new DialogInterface.OnCancelListener() { | |
@Override | |
public void onCancel(DialogInterface dialogInterface) { | |
} | |
}); | |
} | |
//Define DeviceActionListener interface | |
//Allows activity to listen to FRAGMENT interaction events | |
public interface DeviceActionListener{ | |
void showDetails(WifiP2pDevice device); | |
void cancelDisconnect(); | |
void connect (WifiP2pConfig config); | |
void disconnect(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment