blob: 1ab198a85e9508f3334cd649ebe2e13167b08ca8 [file] [log] [blame]
alisiond295ec22013-05-17 10:12:13 -04001package com.savoirfairelinux.sflphone.fragments;
2
alision9f7a6ec2013-05-24 16:26:26 -04003import java.util.ArrayList;
4import java.util.Random;
5
alisiond295ec22013-05-17 10:12:13 -04006import android.app.Activity;
alisiond295ec22013-05-17 10:12:13 -04007import android.app.Fragment;
alision9f7a6ec2013-05-24 16:26:26 -04008import android.content.Context;
9import android.os.Bundle;
10import android.os.RemoteException;
11import android.text.InputType;
alisiond295ec22013-05-17 10:12:13 -040012import android.util.Log;
13import android.view.LayoutInflater;
14import android.view.View;
alision9f7a6ec2013-05-24 16:26:26 -040015import android.view.View.OnClickListener;
alisiond295ec22013-05-17 10:12:13 -040016import android.view.ViewGroup;
alision9f7a6ec2013-05-24 16:26:26 -040017import android.view.inputmethod.EditorInfo;
18import android.view.inputmethod.InputMethodManager;
19import android.widget.Button;
20import android.widget.ImageButton;
alisiond295ec22013-05-17 10:12:13 -040021
22import com.savoirfairelinux.sflphone.R;
alision9f7a6ec2013-05-24 16:26:26 -040023import com.savoirfairelinux.sflphone.account.AccountSelectionSpinner;
24import com.savoirfairelinux.sflphone.client.receiver.CallListReceiver;
alisiond295ec22013-05-17 10:12:13 -040025import com.savoirfairelinux.sflphone.model.SipCall;
26import com.savoirfairelinux.sflphone.service.ISipService;
alision9f7a6ec2013-05-24 16:26:26 -040027import com.savoirfairelinux.sflphone.views.ClearableEditText;
alisiond295ec22013-05-17 10:12:13 -040028
alision9f7a6ec2013-05-24 16:26:26 -040029public class DialingFragment extends Fragment {
30
alisiond295ec22013-05-17 10:12:13 -040031 private static final String TAG = HistoryFragment.class.getSimpleName();
32 public static final String ARG_SECTION_NUMBER = "section_number";
33 private boolean isReady;
34 private ISipService service;
alisiond295ec22013-05-17 10:12:13 -040035
alision9f7a6ec2013-05-24 16:26:26 -040036 ClearableEditText textField;
37 private AccountSelectionSpinner mAccountSelectionSpinner;
38 private Callbacks mCallbacks = sDummyCallbacks;
39
40 /**
41 * A dummy implementation of the {@link Callbacks} interface that does nothing. Used only when this fragment is not attached to an activity.
42 */
43 private static Callbacks sDummyCallbacks = new Callbacks() {
44 @Override
45 public void onCallCreated(SipCall c) {
46 }
47
48 @Override
49 public ISipService getService() {
50 // TODO Auto-generated method stub
51 return null;
52 }
53 };
54
55 /**
56 * The Activity calling this fragment has to implement this interface
57 *
58 */
59 public interface Callbacks {
60 public void onCallCreated(SipCall c);
61
62 public ISipService getService();
63
64 }
alisiond295ec22013-05-17 10:12:13 -040065
66 @Override
67 public void onAttach(Activity activity) {
68 super.onAttach(activity);
alision9f7a6ec2013-05-24 16:26:26 -040069
70 if (!(activity instanceof Callbacks)) {
71 throw new IllegalStateException("Activity must implement fragment's callbacks.");
72 }
73
74 mCallbacks = (Callbacks) activity;
alisiond295ec22013-05-17 10:12:13 -040075 }
76
77 @Override
78 public void onDetach() {
79 super.onDetach();
80 }
81
82 @Override
83 public void onCreate(Bundle savedInstanceState) {
84 super.onCreate(savedInstanceState);
85 // mAdapter = new HistoryAdapter(getActivity(),new ArrayList<HashMap<String, String>>());
86 }
87
88 @Override
89 public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) {
90 View inflatedView = inflater.inflate(R.layout.frag_dialing, parent, false);
91
alision9f7a6ec2013-05-24 16:26:26 -040092 mAccountSelectionSpinner = (AccountSelectionSpinner) inflatedView.findViewById(R.id.account_selection_button);
93
94 textField = (ClearableEditText) inflatedView.findViewById(R.id.textField);
95 ((ImageButton) inflatedView.findViewById(R.id.buttonCall)).setOnClickListener(new OnClickListener() {
96 @Override
97 public void onClick(View v) {
98 processingNewCallAction();
99 }
100 });
101
102 ((Button) inflatedView.findViewById(R.id.alphabetic_keyboard)).setOnClickListener(new OnClickListener() {
103
104 @Override
105 public void onClick(View v) {
106 textField.setInputType(EditorInfo.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
107 InputMethodManager lManager = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
108 lManager.showSoftInput(textField.getEdit_text(), 0);
109 }
110 });
111
112 ((Button) inflatedView.findViewById(R.id.numeric_keyboard)).setOnClickListener(new OnClickListener() {
113
114 @Override
115 public void onClick(View v) {
116 textField.setInputType(EditorInfo.TYPE_CLASS_NUMBER);
117 InputMethodManager lManager = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
118 lManager.showSoftInput(textField.getEdit_text(), 0);
119 }
120 });
121
122 isReady = true;
123 if (mCallbacks.getService() != null) {
124
125 onServiceSipBinded(mCallbacks.getService());
126 }
alisiond295ec22013-05-17 10:12:13 -0400127 return inflatedView;
128 }
129
130 @Override
131 public void onStart() {
132 super.onStart();
133
134 }
135
alision9f7a6ec2013-05-24 16:26:26 -0400136 public void processingNewCallAction() {
137 // String accountID = mAccountList.currentAccountID;
138 String accountID = mAccountSelectionSpinner.getAccount();
139
140 String to = textField.getText().toString();
141
142 Random random = new Random();
143 String callID = Integer.toString(random.nextInt());
144 SipCall.CallInfo info = new SipCall.CallInfo();
145
146 info.mCallID = callID;
147 info.mAccountID = accountID;
148 info.mDisplayName = "Cool Guy!";
149 info.mPhone = to;
150 info.mEmail = "coolGuy@coolGuy.com";
151 info.mCallType = SipCall.CALL_TYPE_OUTGOING;
152
153 SipCall call = CallListReceiver.getCallInstance(info);
154 mCallbacks.onCallCreated(call);
155
156 try {
157 service.placeCall(info.mAccountID, info.mCallID, info.mPhone);
158 } catch (RemoteException e) {
159 Log.e(TAG, "Cannot call service method", e);
160 }
161
162 }
163
164 public String getSelectedAccount() {
165 return mAccountSelectionSpinner.getAccount();
166 }
167
168 /**
169 * Called by activity to pass a reference to sipservice to Fragment.
170 *
171 * @param isip
172 */
173 public void onServiceSipBinded(ISipService isip) {
174
175 if (isReady) {
176 service = isip;
177 ArrayList<String> accountList;
178 try {
179 accountList = (ArrayList<String>) mCallbacks.getService().getAccountList();
180 Log.w(TAG, "SIP service binded accounts " + accountList.size());
181 mAccountSelectionSpinner.populate(mCallbacks.getService(), accountList);
182 } catch (RemoteException e) {
183 Log.i(TAG, e.toString());
184 }
185 }
186
187 }
alisiond295ec22013-05-17 10:12:13 -0400188
189}