blob: 904bb1a2860fb84cac9cb9ab1e31df77c6c60219 [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;
alision1005ba12013-06-19 13:52:44 -040013import android.content.DialogInterface.OnShowListener;
alisionb1763882013-06-18 17:30:51 -040014import android.content.Intent;
15import android.content.Loader;
16import android.location.Address;
17import android.location.Geocoder;
18import android.net.Uri;
19import android.os.Bundle;
20import android.provider.ContactsContract.Contacts;
21import android.view.LayoutInflater;
22import android.view.View;
23import android.view.ViewGroup;
24import android.widget.AdapterView;
25import android.widget.AdapterView.OnItemClickListener;
26import android.widget.ArrayAdapter;
27import android.widget.AutoCompleteTextView;
28import android.widget.BaseAdapter;
alision1005ba12013-06-19 13:52:44 -040029import android.widget.Button;
alisionb1763882013-06-18 17:30:51 -040030import android.widget.Filter;
31import android.widget.Filterable;
32import android.widget.ListView;
33import android.widget.TextView;
alision1005ba12013-06-19 13:52:44 -040034import android.widget.Toast;
alisionb1763882013-06-18 17:30:51 -040035
36import com.savoirfairelinux.sflphone.R;
37import com.savoirfairelinux.sflphone.loaders.ContactsLoader;
38import com.savoirfairelinux.sflphone.model.CallContact;
alisiondf1dac92013-06-27 17:35:53 -040039import com.savoirfairelinux.sflphone.model.Conference;
alisionb1763882013-06-18 17:30:51 -040040import com.savoirfairelinux.sflphone.model.SipCall;
41
alision1005ba12013-06-19 13:52:44 -040042public class TransferDFragment extends DialogFragment implements LoaderManager.LoaderCallbacks<Bundle> {
alisionb1763882013-06-18 17:30:51 -040043
44 private AutoCompleteTextView mEditText;
45 private AutoCompleteAdapter autoCompleteAdapter;
46 SimpleCallListAdapter mAdapter;
alision1005ba12013-06-19 13:52:44 -040047
alisionb1763882013-06-18 17:30:51 -040048 /**
49 * Create a new instance of CallActionsDFragment
50 */
alision1005ba12013-06-19 13:52:44 -040051 static TransferDFragment newInstance(int num) {
52 TransferDFragment f = new TransferDFragment();
alisionb1763882013-06-18 17:30:51 -040053 return f;
54 }
55
56 @Override
57 public void onCreate(Bundle savedInstanceState) {
58 super.onCreate(savedInstanceState);
59
60 // Pick a style based on the num.
61 int style = DialogFragment.STYLE_NORMAL, theme = 0;
62 setStyle(style, theme);
63 }
alisionb1763882013-06-18 17:30:51 -040064
65 @Override
alision1005ba12013-06-19 13:52:44 -040066 public Dialog onCreateDialog(Bundle savedInstanceState) {
67 View rootView = LayoutInflater.from(getActivity()).inflate(R.layout.dialog_transfer, null);
68
alisiondf1dac92013-06-27 17:35:53 -040069 ArrayList<Conference> calls = getArguments().getParcelableArrayList("calls");
Alexandre Lision2b237922013-09-09 16:23:02 -040070 final SipCall call_selected = getArguments().getParcelable("call_selected");
alision1005ba12013-06-19 13:52:44 -040071
alisionb1763882013-06-18 17:30:51 -040072 mAdapter = new SimpleCallListAdapter(getActivity(), calls);
73 ListView list = (ListView) rootView.findViewById(R.id.concurrent_calls);
74 list.setAdapter(mAdapter);
75 list.setOnItemClickListener(new OnItemClickListener() {
76
77 @Override
78 public void onItemClick(AdapterView<?> arg0, View arg1, int pos, long arg3) {
alision1005ba12013-06-19 13:52:44 -040079
alisionb1763882013-06-18 17:30:51 -040080 Intent in = new Intent();
alision1005ba12013-06-19 13:52:44 -040081 in.putExtra("target", mAdapter.getItem(pos));
82 in.putExtra("transfer", call_selected);
alisionb1763882013-06-18 17:30:51 -040083 getTargetFragment().onActivityResult(getTargetRequestCode(), 0, in);
84 dismiss();
85 }
86 });
87 list.setEmptyView(rootView.findViewById(R.id.empty_view));
alision1005ba12013-06-19 13:52:44 -040088
alisionb1763882013-06-18 17:30:51 -040089 mEditText = (AutoCompleteTextView) rootView.findViewById(R.id.external_number);
90 mEditText.setAdapter(autoCompleteAdapter);
alisionb1763882013-06-18 17:30:51 -040091
alision1005ba12013-06-19 13:52:44 -040092 final AlertDialog a = new AlertDialog.Builder(getActivity()).setView(rootView)
Alexandre Lision2b237922013-09-09 16:23:02 -040093 .setTitle("Transfer " + call_selected.getContact().getmDisplayName())
alision1005ba12013-06-19 13:52:44 -040094 .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
95 public void onClick(DialogInterface dialog, int whichButton) {
96
97 }
98 }).setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() {
99 public void onClick(DialogInterface dialog, int whichButton) {
alisionb1763882013-06-18 17:30:51 -0400100
alision1005ba12013-06-19 13:52:44 -0400101 dismiss();
102 }
103 }).create();
104
105 a.setOnShowListener(new OnShowListener() {
106
107 @Override
108 public void onShow(DialogInterface dialog) {
109 Button b = a.getButton(AlertDialog.BUTTON_POSITIVE);
110 b.setOnClickListener(new View.OnClickListener() {
111
112 @Override
113 public void onClick(View view) {
114 if(mEditText.getText().length() == 0){
115 Toast.makeText(getActivity(), "Enter a number to transfer this call", Toast.LENGTH_SHORT).show();
116 } else {
117 Intent in = new Intent();
118 in.putExtra("to_number", mEditText.getText().toString());
119 in.putExtra("transfer", call_selected);
120 getTargetFragment().onActivityResult(getTargetRequestCode(), 1, in);
121 dismiss();
122 }
123 }
124 });
125
126 }
127 });
128 return a;
alisionb1763882013-06-18 17:30:51 -0400129 }
alision1005ba12013-06-19 13:52:44 -0400130
alisionb1763882013-06-18 17:30:51 -0400131 @Override
132 public Loader<Bundle> onCreateLoader(int id, Bundle args) {
133 Uri baseUri;
134
135 if (args != null) {
136 baseUri = Uri.withAppendedPath(Contacts.CONTENT_FILTER_URI, Uri.encode(args.getString("filter")));
137 } else {
138 baseUri = Contacts.CONTENT_URI;
139 }
140 ContactsLoader l = new ContactsLoader(getActivity(), baseUri);
141 l.forceLoad();
142 return l;
143 }
144
145 @Override
146 public void onLoadFinished(Loader<Bundle> loader, Bundle data) {
147
alisionb1763882013-06-18 17:30:51 -0400148 ArrayList<CallContact> tmp = data.getParcelableArrayList("Contacts");
149
alisionb1763882013-06-18 17:30:51 -0400150 }
151
152 @Override
153 public void onLoaderReset(Loader<Bundle> loader) {
154 // Thi is called when the last Cursor provided to onLoadFinished
155 // mListAdapter.swapCursor(null);
156 }
alisionb1763882013-06-18 17:30:51 -0400157
158 private class AutoCompleteAdapter extends ArrayAdapter<Address> implements Filterable {
alision1005ba12013-06-19 13:52:44 -0400159
alisionb1763882013-06-18 17:30:51 -0400160 private LayoutInflater mInflater;
161 private Geocoder mGeocoder;
162 private StringBuilder mSb = new StringBuilder();
alision1005ba12013-06-19 13:52:44 -0400163
alisionb1763882013-06-18 17:30:51 -0400164 public AutoCompleteAdapter(final Context context) {
165 super(context, -1);
166 mInflater = LayoutInflater.from(context);
167 mGeocoder = new Geocoder(context);
168 }
alision1005ba12013-06-19 13:52:44 -0400169
alisionb1763882013-06-18 17:30:51 -0400170 @Override
171 public View getView(final int position, final View convertView, final ViewGroup parent) {
172 final TextView tv;
173 if (convertView != null) {
174 tv = (TextView) convertView;
175 } else {
176 tv = (TextView) mInflater.inflate(android.R.layout.simple_dropdown_item_1line, parent, false);
177 }
alision1005ba12013-06-19 13:52:44 -0400178
alisionb1763882013-06-18 17:30:51 -0400179 return tv;
180 }
alisionb1763882013-06-18 17:30:51 -0400181
alisionb1763882013-06-18 17:30:51 -0400182 @Override
183 public Filter getFilter() {
184 Filter myFilter = new Filter() {
185 @Override
186 protected FilterResults performFiltering(final CharSequence constraint) {
187 List<Address> addressList = null;
188 if (constraint != null) {
189 try {
190 addressList = mGeocoder.getFromLocationName((String) constraint, 5);
191 } catch (IOException e) {
192 }
193 }
194 if (addressList == null) {
195 addressList = new ArrayList<Address>();
196 }
alision1005ba12013-06-19 13:52:44 -0400197
alisionb1763882013-06-18 17:30:51 -0400198 final FilterResults filterResults = new FilterResults();
199 filterResults.values = addressList;
200 filterResults.count = addressList.size();
alision1005ba12013-06-19 13:52:44 -0400201
alisionb1763882013-06-18 17:30:51 -0400202 return filterResults;
203 }
alision1005ba12013-06-19 13:52:44 -0400204
alisionb1763882013-06-18 17:30:51 -0400205 @SuppressWarnings("unchecked")
206 @Override
207 protected void publishResults(final CharSequence contraint, final FilterResults results) {
208 clear();
209 for (Address address : (List<Address>) results.values) {
210 add(address);
211 }
212 if (results.count > 0) {
213 notifyDataSetChanged();
214 } else {
215 notifyDataSetInvalidated();
216 }
217 }
alision1005ba12013-06-19 13:52:44 -0400218
alisionb1763882013-06-18 17:30:51 -0400219 @Override
220 public CharSequence convertResultToString(final Object resultValue) {
221 return resultValue == null ? "" : ((Address) resultValue).getAddressLine(0);
222 }
223 };
224 return myFilter;
225 }
226 }
alision1005ba12013-06-19 13:52:44 -0400227
228 private class SimpleCallListAdapter extends BaseAdapter {
229
alisionb1763882013-06-18 17:30:51 -0400230 private LayoutInflater mInflater;
alisiondf1dac92013-06-27 17:35:53 -0400231 ArrayList<Conference> calls;
alision1005ba12013-06-19 13:52:44 -0400232
alisiondf1dac92013-06-27 17:35:53 -0400233 public SimpleCallListAdapter(final Context context, ArrayList<Conference> calls2) {
alisionb1763882013-06-18 17:30:51 -0400234 super();
235 mInflater = LayoutInflater.from(context);
236 calls = calls2;
237 }
alision1005ba12013-06-19 13:52:44 -0400238
alisionb1763882013-06-18 17:30:51 -0400239 @Override
240 public View getView(final int position, final View convertView, final ViewGroup parent) {
241 final TextView tv;
242 if (convertView != null) {
243 tv = (TextView) convertView;
244 } else {
245 tv = (TextView) mInflater.inflate(android.R.layout.simple_dropdown_item_1line, parent, false);
246 }
alision1005ba12013-06-19 13:52:44 -0400247
alisiondf1dac92013-06-27 17:35:53 -0400248 tv.setText(calls.get(position).getParticipants().get(0).getContact().getmDisplayName());
alisionb1763882013-06-18 17:30:51 -0400249 return tv;
250 }
251
252 @Override
253 public int getCount() {
254 return calls.size();
255 }
256
257 @Override
alisiondf1dac92013-06-27 17:35:53 -0400258 public Conference getItem(int pos) {
alisionb1763882013-06-18 17:30:51 -0400259 return calls.get(pos);
260 }
261
262 @Override
263 public long getItemId(int position) {
264 return 0;
265 }
266 }
267}