blob: fd555be73e846f2a603d8c6322480eaa2d37bec2 [file] [log] [blame]
Alexandre Lision064e1e02013-10-01 16:18:42 -04001package org.sflphone.fragments;
alision5cfc35d2013-07-11 15:11:39 -04002
3import java.util.HashMap;
4
Alexandre Lision064e1e02013-10-01 16:18:42 -04005import org.sflphone.R;
Alexandre Lision064e1e02013-10-01 16:18:42 -04006import org.sflphone.account.AccountDetailAdvanced;
7import org.sflphone.account.AccountDetailBasic;
8import org.sflphone.account.AccountDetailSrtp;
9import org.sflphone.account.AccountDetailTls;
Alexandre Lision4ab53972013-11-04 16:59:18 -050010import org.sflphone.client.SettingsActivity;
Alexandre Lisiond16bad92013-10-09 17:16:20 -040011import org.sflphone.service.ISipService;
Alexandre Lision064e1e02013-10-01 16:18:42 -040012
alision5cfc35d2013-07-11 15:11:39 -040013import android.app.Activity;
alision5cfc35d2013-07-11 15:11:39 -040014import android.app.Fragment;
alision5cfc35d2013-07-11 15:11:39 -040015import android.content.Intent;
16import android.os.Bundle;
Alexandre Lisiond16bad92013-10-09 17:16:20 -040017import android.os.RemoteException;
alision5cfc35d2013-07-11 15:11:39 -040018import android.text.TextUtils;
Alexandre Lision7f0bba52013-10-16 14:43:11 -040019import android.view.KeyEvent;
alision5cfc35d2013-07-11 15:11:39 -040020import android.view.LayoutInflater;
21import android.view.View;
22import android.view.ViewGroup;
23import android.widget.EditText;
Alexandre Lision7f0bba52013-10-16 14:43:11 -040024import android.widget.TextView;
Alexandre Lision451f2a82013-11-12 12:55:55 -050025import android.widget.Toast;
Alexandre Lision7f0bba52013-10-16 14:43:11 -040026import android.widget.TextView.OnEditorActionListener;
alision5cfc35d2013-07-11 15:11:39 -040027
alision5cfc35d2013-07-11 15:11:39 -040028public class AccountCreationFragment extends Fragment {
29
30 // Values for email and password at the time of the login attempt.
31 private String mAlias;
32 private String mHostname;
33 private String mUsername;
34 private String mPassword;
35
36 // UI references.
37 private EditText mAliasView;
38 private EditText mHostnameView;
39 private EditText mUsernameView;
40 private EditText mPasswordView;
Alexandre Lision7f0bba52013-10-16 14:43:11 -040041
Alexandre Lisiond16bad92013-10-09 17:16:20 -040042 private Callbacks mCallbacks = sDummyCallbacks;
43 private static Callbacks sDummyCallbacks = new Callbacks() {
44
45 @Override
46 public ISipService getService() {
47 return null;
48 }
49 };
50
51 public interface Callbacks {
52
53 public ISipService getService();
54
55 }
alision5cfc35d2013-07-11 15:11:39 -040056
57 @Override
58 public void onCreate(Bundle savedInstanceState) {
59 super.onCreate(savedInstanceState);
alision5cfc35d2013-07-11 15:11:39 -040060 }
61
62 @Override
63 public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) {
64 View inflatedView = inflater.inflate(R.layout.frag_account_creation, parent, false);
65
66 mAliasView = (EditText) inflatedView.findViewById(R.id.alias);
67 mHostnameView = (EditText) inflatedView.findViewById(R.id.hostname);
68 mUsernameView = (EditText) inflatedView.findViewById(R.id.username);
69 mPasswordView = (EditText) inflatedView.findViewById(R.id.password);
Alexandre Lision7f0bba52013-10-16 14:43:11 -040070
71 mPasswordView.setOnEditorActionListener(new OnEditorActionListener() {
72
73 @Override
74 public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
75 // if(actionId == EditorInfo.IME_ACTION_GO || event.getAction() == KeyEvent.KEYCODE_ENTER){
76 mAlias = mAliasView.getText().toString();
77 mHostname = mHostnameView.getText().toString();
78 mUsername = mUsernameView.getText().toString();
79 mPassword = mPasswordView.getText().toString();
80 attemptCreation();
81 // }
82
83 return true;
84 }
85 });
alision5cfc35d2013-07-11 15:11:39 -040086 inflatedView.findViewById(R.id.create_button).setOnClickListener(new View.OnClickListener() {
87 @Override
88 public void onClick(View view) {
Alexandre Lisionf126dad2013-07-18 12:21:20 -040089 mAlias = mAliasView.getText().toString();
90 mHostname = mHostnameView.getText().toString();
91 mUsername = mUsernameView.getText().toString();
92 mPassword = mPasswordView.getText().toString();
alision5cfc35d2013-07-11 15:11:39 -040093 attemptCreation();
94 }
95 });
Alexandre Lision7f0bba52013-10-16 14:43:11 -040096
Alexandre Lision52214992013-10-28 17:41:23 -040097// inflatedView.findViewById(R.id.dev_account).setVisibility(View.GONE); // Hide this button in release apk
Alexandre Lisionf126dad2013-07-18 12:21:20 -040098 inflatedView.findViewById(R.id.dev_account).setOnClickListener(new View.OnClickListener() {
99 @Override
100 public void onClick(View view) {
101 createDevAccount();
102 }
103
104 private void createDevAccount() {
105 mUsername = mUsernameView.getText().toString();
106 if (TextUtils.isEmpty(mUsername)) {
107 mUsernameView.setError(getString(R.string.error_field_required));
108 mUsernameView.requestFocus();
109 return;
110 } else {
111 mAlias = mUsername;
112 mHostname = "192.95.9.63";
Alexandre Lision7f0bba52013-10-16 14:43:11 -0400113 mPassword = "sfl_u" + mUsername;
Alexandre Lisionf126dad2013-07-18 12:21:20 -0400114 attemptCreation();
115 }
Alexandre Lision7f0bba52013-10-16 14:43:11 -0400116
Alexandre Lisionf126dad2013-07-18 12:21:20 -0400117 }
118 });
alision5cfc35d2013-07-11 15:11:39 -0400119
120 return inflatedView;
121 }
122
123 @Override
124 public void onResume() {
125 super.onResume();
126 }
127
128 @Override
129 public void onStart() {
130 super.onStart();
131
132 }
Alexandre Lision7f0bba52013-10-16 14:43:11 -0400133
Alexandre Lisiond16bad92013-10-09 17:16:20 -0400134 @Override
135 public void onAttach(Activity activity) {
136 super.onAttach(activity);
137 if (!(activity instanceof Callbacks)) {
138 throw new IllegalStateException("Activity must implement fragment's callbacks.");
139 }
140
141 mCallbacks = (Callbacks) activity;
142 }
alision5cfc35d2013-07-11 15:11:39 -0400143
144 /**
145 * Attempts to sign in or register the account specified by the login form. If there are form errors (invalid email, missing fields, etc.), the
146 * errors are presented and no actual login attempt is made.
147 */
148 public void attemptCreation() {
149
150 // Reset errors.
151 mAliasView.setError(null);
152 mPasswordView.setError(null);
153
154 // Store values at the time of the login attempt.
Alexandre Lisionf126dad2013-07-18 12:21:20 -0400155
alision5cfc35d2013-07-11 15:11:39 -0400156 boolean cancel = false;
157 View focusView = null;
158
159 // Check for a valid password.
160 if (TextUtils.isEmpty(mPassword)) {
161 mPasswordView.setError(getString(R.string.error_field_required));
162 focusView = mPasswordView;
163 cancel = true;
164 }
165
166 if (TextUtils.isEmpty(mUsername)) {
167 mUsernameView.setError(getString(R.string.error_field_required));
168 focusView = mUsernameView;
169 cancel = true;
170 }
171
172 if (TextUtils.isEmpty(mHostname)) {
173 mHostnameView.setError(getString(R.string.error_field_required));
174 focusView = mHostnameView;
175 cancel = true;
176 }
177
178 // Check for a valid email address.
179 if (TextUtils.isEmpty(mAlias)) {
180 mAliasView.setError(getString(R.string.error_field_required));
181 focusView = mAliasView;
182 cancel = true;
183 }
184
185 if (cancel) {
186 // There was an error; don't attempt login and focus the first
187 // form field with an error.
188 focusView.requestFocus();
189 } else {
190 // Show a progress spinner, and kick off a background task to
191 // perform the user login attempt.
192 initCreation();
193
194 }
195 }
196
197 private void initCreation() {
Alexandre Lision451f2a82013-11-12 12:55:55 -0500198
199 try {
200 HashMap<String, String> accountDetails = (HashMap<String, String>) mCallbacks.getService().getAccountTemplate();
201 accountDetails.put(AccountDetailBasic.CONFIG_ACCOUNT_ALIAS, mAlias);
202 accountDetails.put(AccountDetailBasic.CONFIG_ACCOUNT_HOSTNAME, mHostname);
203 accountDetails.put(AccountDetailBasic.CONFIG_ACCOUNT_USERNAME, mUsername);
204 accountDetails.put(AccountDetailBasic.CONFIG_ACCOUNT_PASSWORD, mPassword);
205
206 createNewAccount(accountDetails);
alision5cfc35d2013-07-11 15:11:39 -0400207
Alexandre Lision451f2a82013-11-12 12:55:55 -0500208 } catch (RemoteException e) {
209 Toast.makeText(getActivity(), "Error creating account", Toast.LENGTH_SHORT).show();
210 e.printStackTrace();
211 }
Alexandre Lision7f0bba52013-10-16 14:43:11 -0400212
Alexandre Lision4ab53972013-11-04 16:59:18 -0500213 Intent resultIntent = new Intent(getActivity(), SettingsActivity.class);
alision5cfc35d2013-07-11 15:11:39 -0400214 getActivity().setResult(Activity.RESULT_OK, resultIntent);
Alexandre Lisiond16bad92013-10-09 17:16:20 -0400215 resultIntent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
216 startActivity(resultIntent);
alision5cfc35d2013-07-11 15:11:39 -0400217 getActivity().finish();
218
219 }
Alexandre Lision7f0bba52013-10-16 14:43:11 -0400220
Alexandre Lisiond16bad92013-10-09 17:16:20 -0400221 private void createNewAccount(HashMap<String, String> accountDetails) {
222 try {
Alexandre Lision7f0bba52013-10-16 14:43:11 -0400223
Alexandre Lisiond16bad92013-10-09 17:16:20 -0400224 mCallbacks.getService().addAccount(accountDetails);
225 } catch (RemoteException e) {
226 e.printStackTrace();
227 }
228 }
alision5cfc35d2013-07-11 15:11:39 -0400229
alision5cfc35d2013-07-11 15:11:39 -0400230}