blob: 62d3daabe243d84fc09ff36e86001407788dc4f4 [file] [log] [blame]
alisionb1763882013-06-18 17:30:51 -04001package com.savoirfairelinux.sflphone.fragments;
2
3import java.io.IOException;
4import java.util.ArrayList;
5import java.util.List;
6
7import android.app.AlertDialog;
8import android.app.Dialog;
9import android.app.DialogFragment;
10import android.app.LoaderManager;
11import android.content.Context;
12import android.content.DialogInterface;
13import android.content.Intent;
14import android.content.Loader;
15import android.location.Address;
16import android.location.Geocoder;
17import android.net.Uri;
18import android.os.Bundle;
19import android.provider.ContactsContract.Contacts;
20import android.view.LayoutInflater;
21import android.view.View;
22import android.view.ViewGroup;
23import android.widget.AdapterView;
24import android.widget.AdapterView.OnItemClickListener;
25import android.widget.ArrayAdapter;
26import android.widget.AutoCompleteTextView;
27import android.widget.BaseAdapter;
28import android.widget.Filter;
29import android.widget.Filterable;
30import android.widget.ListView;
31import android.widget.TextView;
32
33import com.savoirfairelinux.sflphone.R;
34import com.savoirfairelinux.sflphone.loaders.ContactsLoader;
35import com.savoirfairelinux.sflphone.model.CallContact;
36import com.savoirfairelinux.sflphone.model.SipCall;
37
38public class CallActionsDFragment extends DialogFragment implements LoaderManager.LoaderCallbacks<Bundle>{
39
40 private AutoCompleteTextView mEditText;
41 private AutoCompleteAdapter autoCompleteAdapter;
42 SimpleCallListAdapter mAdapter;
43 /**
44 * Create a new instance of CallActionsDFragment
45 */
46 static CallActionsDFragment newInstance(int num) {
47 CallActionsDFragment f = new CallActionsDFragment();
48 return f;
49 }
50
51 @Override
52 public void onCreate(Bundle savedInstanceState) {
53 super.onCreate(savedInstanceState);
54
55 // Pick a style based on the num.
56 int style = DialogFragment.STYLE_NORMAL, theme = 0;
57 setStyle(style, theme);
58 }
59
60// @Override
61// public Dialog onCreateDialog(Bundle savedInstanceState) {
62// return new AlertDialog.Builder(getActivity())
63// .setPositiveButton(android.R.string.ok,
64// new DialogInterface.OnClickListener() {
65// public void onClick(DialogInterface dialog, int whichButton) {
66//
67// }
68// }
69// )
70// .setNegativeButton(android.R.string.no,
71// new DialogInterface.OnClickListener() {
72// public void onClick(DialogInterface dialog, int whichButton) {
73//
74// }
75// }
76// )
77// .create();
78// }
79
80 @Override
81 public View onCreateView(LayoutInflater inflater, ViewGroup container,
82 Bundle savedInstanceState) {
83 View rootView = inflater.inflate(R.layout.dialog_action_calls, container);
84
85 ArrayList<SipCall> calls = getArguments().getParcelableArrayList("calls");
86 mAdapter = new SimpleCallListAdapter(getActivity(), calls);
87 ListView list = (ListView) rootView.findViewById(R.id.concurrent_calls);
88 list.setAdapter(mAdapter);
89 list.setOnItemClickListener(new OnItemClickListener() {
90
91 @Override
92 public void onItemClick(AdapterView<?> arg0, View arg1, int pos, long arg3) {
93
94 Intent in = new Intent();
95 in.putExtra("selected_call", mAdapter.getItem(pos));
96 getTargetFragment().onActivityResult(getTargetRequestCode(), 0, in);
97 dismiss();
98 }
99 });
100 list.setEmptyView(rootView.findViewById(R.id.empty_view));
101
102 mEditText = (AutoCompleteTextView) rootView.findViewById(R.id.external_number);
103 mEditText.setAdapter(autoCompleteAdapter);
104 getDialog().setTitle("Transfer");
105
106
107
108 return rootView;
109 }
110
111 @Override
112 public Loader<Bundle> onCreateLoader(int id, Bundle args) {
113 Uri baseUri;
114
115 if (args != null) {
116 baseUri = Uri.withAppendedPath(Contacts.CONTENT_FILTER_URI, Uri.encode(args.getString("filter")));
117 } else {
118 baseUri = Contacts.CONTENT_URI;
119 }
120 ContactsLoader l = new ContactsLoader(getActivity(), baseUri);
121 l.forceLoad();
122 return l;
123 }
124
125 @Override
126 public void onLoadFinished(Loader<Bundle> loader, Bundle data) {
127
128
129 ArrayList<CallContact> tmp = data.getParcelableArrayList("Contacts");
130
131
132
133 }
134
135 @Override
136 public void onLoaderReset(Loader<Bundle> loader) {
137 // Thi is called when the last Cursor provided to onLoadFinished
138 // mListAdapter.swapCursor(null);
139 }
140
141
142 private class AutoCompleteAdapter extends ArrayAdapter<Address> implements Filterable {
143
144 private LayoutInflater mInflater;
145 private Geocoder mGeocoder;
146 private StringBuilder mSb = new StringBuilder();
147
148 public AutoCompleteAdapter(final Context context) {
149 super(context, -1);
150 mInflater = LayoutInflater.from(context);
151 mGeocoder = new Geocoder(context);
152 }
153
154 @Override
155 public View getView(final int position, final View convertView, final ViewGroup parent) {
156 final TextView tv;
157 if (convertView != null) {
158 tv = (TextView) convertView;
159 } else {
160 tv = (TextView) mInflater.inflate(android.R.layout.simple_dropdown_item_1line, parent, false);
161 }
162
163 return tv;
164 }
165
166
167
168 @Override
169 public Filter getFilter() {
170 Filter myFilter = new Filter() {
171 @Override
172 protected FilterResults performFiltering(final CharSequence constraint) {
173 List<Address> addressList = null;
174 if (constraint != null) {
175 try {
176 addressList = mGeocoder.getFromLocationName((String) constraint, 5);
177 } catch (IOException e) {
178 }
179 }
180 if (addressList == null) {
181 addressList = new ArrayList<Address>();
182 }
183
184 final FilterResults filterResults = new FilterResults();
185 filterResults.values = addressList;
186 filterResults.count = addressList.size();
187
188 return filterResults;
189 }
190
191 @SuppressWarnings("unchecked")
192 @Override
193 protected void publishResults(final CharSequence contraint, final FilterResults results) {
194 clear();
195 for (Address address : (List<Address>) results.values) {
196 add(address);
197 }
198 if (results.count > 0) {
199 notifyDataSetChanged();
200 } else {
201 notifyDataSetInvalidated();
202 }
203 }
204
205 @Override
206 public CharSequence convertResultToString(final Object resultValue) {
207 return resultValue == null ? "" : ((Address) resultValue).getAddressLine(0);
208 }
209 };
210 return myFilter;
211 }
212 }
213
214 private class SimpleCallListAdapter extends BaseAdapter {
215
216 private LayoutInflater mInflater;
217 ArrayList<SipCall> calls;
218
219
220 public SimpleCallListAdapter(final Context context, ArrayList<SipCall> calls2) {
221 super();
222 mInflater = LayoutInflater.from(context);
223 calls = calls2;
224 }
225
226 @Override
227 public View getView(final int position, final View convertView, final ViewGroup parent) {
228 final TextView tv;
229 if (convertView != null) {
230 tv = (TextView) convertView;
231 } else {
232 tv = (TextView) mInflater.inflate(android.R.layout.simple_dropdown_item_1line, parent, false);
233 }
234
235 tv.setText(calls.get(position).getContacts().get(0).getmDisplayName());
236 return tv;
237 }
238
239 @Override
240 public int getCount() {
241 return calls.size();
242 }
243
244 @Override
245 public SipCall getItem(int pos) {
246 return calls.get(pos);
247 }
248
249 @Override
250 public long getItemId(int position) {
251 return 0;
252 }
253 }
254}