1 
2 package com.example.android.wifidirect.discovery;
3 
4 import android.app.Fragment;
5 import android.content.Context;
6 import android.os.Bundle;
7 import android.os.Handler;
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  * This fragment handles chat related UI which includes a list view for messages
20  * and a message entry field with send button.
21  */
22 public class WiFiChatFragment extends Fragment {
23 
24     private View view;
25     private ChatManager chatManager;
26     private TextView chatLine;
27     private ListView listView;
28     ChatMessageAdapter adapter = null;
29     private List<String> items = new ArrayList<String>();
30 
31     @Override
onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)32     public View onCreateView(LayoutInflater inflater, ViewGroup container,
33             Bundle savedInstanceState) {
34         view = inflater.inflate(R.layout.fragment_chat, container, false);
35         chatLine = (TextView) view.findViewById(R.id.txtChatLine);
36         listView = (ListView) view.findViewById(android.R.id.list);
37         adapter = new ChatMessageAdapter(getActivity(), android.R.id.text1,
38                 items);
39         listView.setAdapter(adapter);
40         view.findViewById(R.id.button1).setOnClickListener(
41                 new View.OnClickListener() {
42 
43                     @Override
44                     public void onClick(View arg0) {
45                         if (chatManager != null) {
46                             chatManager.write(chatLine.getText().toString());
47                             pushMessage("Me: " + chatLine.getText().toString());
48                             chatLine.setText("");
49                             chatLine.clearFocus();
50                         }
51                     }
52                 });
53         return view;
54     }
55 
56     public interface MessageTarget {
getHandler()57         public Handler getHandler();
58     }
59 
setChatManager(ChatManager obj)60     public void setChatManager(ChatManager obj) {
61         chatManager = obj;
62     }
63 
pushMessage(String readMessage)64     public void pushMessage(String readMessage) {
65         adapter.add(readMessage);
66         adapter.notifyDataSetChanged();
67     }
68 
69     /**
70      * ArrayAdapter to manage chat messages.
71      */
72     public class ChatMessageAdapter extends ArrayAdapter<String> {
73 
74         List<String> messages = null;
75 
ChatMessageAdapter(Context context, int textViewResourceId, List<String> items)76         public ChatMessageAdapter(Context context, int textViewResourceId,
77                 List<String> items) {
78             super(context, textViewResourceId, items);
79         }
80 
81         @Override
getView(int position, View convertView, ViewGroup parent)82         public View getView(int position, View convertView, ViewGroup parent) {
83             View v = convertView;
84             if (v == null) {
85                 LayoutInflater vi = (LayoutInflater) getActivity()
86                         .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
87                 v = vi.inflate(android.R.layout.simple_list_item_1, null);
88             }
89             String message = items.get(position);
90             if (message != null && !message.isEmpty()) {
91                 TextView nameText = (TextView) v
92                         .findViewById(android.R.id.text1);
93 
94                 if (nameText != null) {
95                     nameText.setText(message);
96                     if (message.startsWith("Me: ")) {
97                         nameText.setTextAppearance(getActivity(),
98                                 R.style.normalText);
99                     } else {
100                         nameText.setTextAppearance(getActivity(),
101                                 R.style.boldText);
102                     }
103                 }
104             }
105             return v;
106         }
107     }
108 }
109