1 2 package com.example.android.wifidirect.discovery; 3 4 import android.app.ListFragment; 5 import android.content.Context; 6 import android.net.wifi.p2p.WifiP2pDevice; 7 import android.os.Bundle; 8 import android.view.LayoutInflater; 9 import android.view.View; 10 import android.view.ViewGroup; 11 import android.widget.ArrayAdapter; 12 import android.widget.ListView; 13 import android.widget.TextView; 14 15 import java.util.ArrayList; 16 import java.util.List; 17 18 /** 19 * A simple ListFragment that shows the available services as published by the 20 * peers 21 */ 22 public class WiFiDirectServicesList extends ListFragment { 23 24 WiFiDevicesAdapter listAdapter = null; 25 26 interface DeviceClickListener { connectP2p(WiFiP2pService wifiP2pService)27 public void connectP2p(WiFiP2pService wifiP2pService); 28 } 29 30 @Override onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)31 public View onCreateView(LayoutInflater inflater, ViewGroup container, 32 Bundle savedInstanceState) { 33 return inflater.inflate(R.layout.devices_list, container, false); 34 } 35 36 @Override onActivityCreated(Bundle savedInstanceState)37 public void onActivityCreated(Bundle savedInstanceState) { 38 super.onActivityCreated(savedInstanceState); 39 listAdapter = new WiFiDevicesAdapter(this.getActivity(), 40 android.R.layout.simple_list_item_2, android.R.id.text1, 41 new ArrayList<WiFiP2pService>()); 42 setListAdapter(listAdapter); 43 } 44 45 @Override onListItemClick(ListView l, View v, int position, long id)46 public void onListItemClick(ListView l, View v, int position, long id) { 47 // TODO Auto-generated method stub 48 ((DeviceClickListener) getActivity()).connectP2p((WiFiP2pService) l 49 .getItemAtPosition(position)); 50 ((TextView) v.findViewById(android.R.id.text2)).setText("Connecting"); 51 52 } 53 54 public class WiFiDevicesAdapter extends ArrayAdapter<WiFiP2pService> { 55 56 private List<WiFiP2pService> items; 57 WiFiDevicesAdapter(Context context, int resource, int textViewResourceId, List<WiFiP2pService> items)58 public WiFiDevicesAdapter(Context context, int resource, 59 int textViewResourceId, List<WiFiP2pService> items) { 60 super(context, resource, textViewResourceId, items); 61 this.items = items; 62 } 63 64 @Override getView(int position, View convertView, ViewGroup parent)65 public View getView(int position, View convertView, ViewGroup parent) { 66 View v = convertView; 67 if (v == null) { 68 LayoutInflater vi = (LayoutInflater) getActivity() 69 .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 70 v = vi.inflate(android.R.layout.simple_list_item_2, null); 71 } 72 WiFiP2pService service = items.get(position); 73 if (service != null) { 74 TextView nameText = (TextView) v 75 .findViewById(android.R.id.text1); 76 77 if (nameText != null) { 78 nameText.setText(service.device.deviceName + " - " + service.instanceName); 79 } 80 TextView statusText = (TextView) v 81 .findViewById(android.R.id.text2); 82 statusText.setText(getDeviceStatus(service.device.status)); 83 } 84 return v; 85 } 86 87 } 88 getDeviceStatus(int statusCode)89 public static String getDeviceStatus(int statusCode) { 90 switch (statusCode) { 91 case WifiP2pDevice.CONNECTED: 92 return "Connected"; 93 case WifiP2pDevice.INVITED: 94 return "Invited"; 95 case WifiP2pDevice.FAILED: 96 return "Failed"; 97 case WifiP2pDevice.AVAILABLE: 98 return "Available"; 99 case WifiP2pDevice.UNAVAILABLE: 100 return "Unavailable"; 101 default: 102 return "Unknown"; 103 104 } 105 } 106 107 } 108